"Fossies" - the Fresh Open Source Software Archive

Member "Atom/resources/app/apm/node_modules/sha/index.js" (8 Mar 2017, 2808 Bytes) of archive /windows/misc/atom-windows.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Javascript source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 'use strict'
    2 
    3 var Transform = require('stream').Transform || require('readable-stream').Transform
    4 var crypto = require('crypto')
    5 var fs = require('graceful-fs')
    6 
    7 exports.check = check
    8 exports.checkSync = checkSync
    9 exports.get = get
   10 exports.getSync = getSync
   11 exports.stream = stream
   12 
   13 function check(file, expected, options, cb) {
   14   if (typeof options === 'function') {
   15     cb = options
   16     options = undefined
   17   }
   18   expected = expected.toLowerCase().trim()
   19   get(file, options, function (er, actual) {
   20     if (er) {
   21       if (er.message) er.message += ' while getting shasum for ' + file
   22       return cb(er)
   23     }
   24     if (actual === expected) return cb(null)
   25     cb(new Error(
   26         'shasum check failed for ' + file + '\n'
   27       + 'Expected: ' + expected + '\n'
   28       + 'Actual:   ' + actual))
   29   })
   30 }
   31 function checkSync(file, expected, options) {
   32   expected = expected.toLowerCase().trim()
   33   var actual
   34   try {
   35     actual = getSync(file, options)
   36   } catch (er) {
   37     if (er.message) er.message += ' while getting shasum for ' + file
   38     throw er
   39   }
   40   if (actual !== expected) {
   41     var ex = new Error(
   42         'shasum check failed for ' + file + '\n'
   43       + 'Expected: ' + expected + '\n'
   44       + 'Actual:   ' + actual)
   45     throw ex
   46   }
   47 }
   48 
   49 
   50 function get(file, options, cb) {
   51   if (typeof options === 'function') {
   52     cb = options
   53     options = undefined
   54   }
   55   options = options || {}
   56   var algorithm = options.algorithm || 'sha1'
   57   var hash = crypto.createHash(algorithm)
   58   var source = fs.createReadStream(file)
   59   var errState = null
   60   source
   61     .on('error', function (er) {
   62       if (errState) return
   63       return cb(errState = er)
   64     })
   65     .on('data', function (chunk) {
   66       if (errState) return
   67       hash.update(chunk)
   68     })
   69     .on('end', function () {
   70       if (errState) return
   71       var actual = hash.digest("hex").toLowerCase().trim()
   72       cb(null, actual)
   73     })
   74 }
   75 
   76 function getSync(file, options) {
   77   options = options || {}
   78   var algorithm = options.algorithm || 'sha1'
   79   var hash = crypto.createHash(algorithm)
   80   var source = fs.readFileSync(file)
   81   hash.update(source)
   82   return hash.digest("hex").toLowerCase().trim()
   83 }
   84 
   85 function stream(expected, options) {
   86   expected = expected.toLowerCase().trim()
   87   options = options || {}
   88   var algorithm = options.algorithm || 'sha1'
   89   var hash = crypto.createHash(algorithm)
   90 
   91   var stream = new Transform()
   92   stream._transform = function (chunk, encoding, callback) {
   93     hash.update(chunk)
   94     stream.push(chunk)
   95     callback()
   96   }
   97   stream._flush = function (cb) {
   98     var actual = hash.digest("hex").toLowerCase().trim()
   99     if (actual === expected) return cb(null)
  100     cb(new Error(
  101         'shasum check failed for:\n'
  102       + '  Expected: ' + expected + '\n'
  103       + '  Actual:   ' + actual))
  104     this.push(null)
  105   }
  106   return stream
  107 }