Comparing version 1.0.0 to 1.1.0
15
hash.js
@@ -43,4 +43,4 @@ var u = require('./util') | ||
var t = Math.min(length, f + bl) | ||
u.write(this._block.buffer, data, enc, s%bl, f, t, true) | ||
s += (t - f) | ||
u.write(this._block.buffer, data, enc, s%bl, f, t) | ||
var ch = (t - f); s += ch; f += ch | ||
@@ -71,5 +71,5 @@ if(!(s%bl)) { | ||
//add end marker, so that appending 0's creats a different hash. | ||
//console.log('--- final ---', bits, fl, this._len % bl, fl + 4, fl*8, bits >= fl*8) | ||
//console.log(hexpp(x)) | ||
x[this._len % bl] = 0x80 | ||
// console.log('--- final ---', bits, fl, this._len % bl, fl + 4, fl*8, bits >= fl*8) | ||
// console.log(hexpp(x)) | ||
@@ -85,3 +85,3 @@ if(bits >= fl*8) { | ||
var hash = this._update(this._block.buffer) | ||
return u.toString(hash, enc) | ||
return u.toString(new Uint8Array(hash.buffer || hash), enc) | ||
} | ||
@@ -93,6 +93,1 @@ | ||
Hash.prototype._final = function () { | ||
throw new Error('_final must be implemented by subclass') | ||
} | ||
147
index.js
@@ -1,142 +0,9 @@ | ||
/* | ||
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined | ||
* in FIPS PUB 180-1 | ||
* Version 2.1a Copyright Paul Johnston 2000 - 2002. | ||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | ||
* Distributed under the BSD License | ||
* See http://pajhome.org.uk/crypt/md5 for details. | ||
*/ | ||
var hexpp = require('./hexpp').defaults({bigendian: false}) | ||
var u = require('./util') | ||
var reverseByteOrder = u.reverseByteOrder | ||
var zeroFill = u.zeroFill | ||
module.exports = Sha1 | ||
var inherits = require('util').inherits | ||
var Hash = require('./hash') | ||
inherits(Sha1, Hash) | ||
var q = false | ||
var A = 0 | ||
var B = 4 | ||
var C = 8 | ||
var D = 12 | ||
var E = 16 | ||
var BE = false | ||
var LE = true | ||
function Sha1 () { | ||
if(!(this instanceof Sha1)) return new Sha1() | ||
this._w = new Uint32Array(80) | ||
Hash.call(this, 16*4, 14*4) | ||
this._h = new Uint8Array(20) | ||
var H = this._dvH = new DataView(this._h.buffer) | ||
H.setUint32(A, 0x01234567, LE) | ||
H.setUint32(B, 0x89abcdef, LE) | ||
H.setUint32(C, 0xfedcba98, LE) | ||
H.setUint32(D, 0x76543210, LE) | ||
H.setUint32(E, 0xf0e1d2c3, LE) | ||
this._len = 0 | ||
var exports = module.exports = function (alg) { | ||
var Alg = exports[alg] | ||
if(!Alg) throw new Error(alg + ' is not supported (we accept pull requests)') | ||
return new Alg() | ||
} | ||
// assume that array is a Uint32Array with length=16, | ||
// and that if it is the last block, it already has the length and the 1 bit appended. | ||
Sha1.prototype._update = function (array) { | ||
var X = this._dv | ||
var H = this._dvH | ||
var h = this._h | ||
var a = _a = H.getUint32(A, BE) | ||
var b = _b = H.getUint32(B, BE) | ||
var c = _c = H.getUint32(C, BE) | ||
var d = _d = H.getUint32(D, BE) | ||
var e = _e = H.getUint32(E, BE) | ||
var w = this._w | ||
var x = this._block | ||
// console.log('--- Update ---') | ||
// console.log(hexpp(x)) | ||
for(var j = 0; j < 80; j++) { | ||
w[j] = j < 16 | ||
? X.getUint32(j*4, BE) | ||
: rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1) | ||
var t = | ||
safe_add( | ||
safe_add( | ||
rol(a, 5), | ||
sha1_ft(j, b, c, d) | ||
), | ||
safe_add( | ||
safe_add(e, w[j]), | ||
sha1_kt(j) | ||
) | ||
); | ||
e = d | ||
d = c | ||
c = rol(b, 30) | ||
b = a | ||
a = t | ||
} | ||
H.setUint32(A, safe_add(a, _a), BE) | ||
H.setUint32(B, safe_add(b, _b), BE) | ||
H.setUint32(C, safe_add(c, _c), BE) | ||
H.setUint32(D, safe_add(d, _d), BE) | ||
H.setUint32(E, safe_add(e, _e), BE) | ||
return h | ||
} | ||
/* | ||
* Perform the appropriate triplet combination function for the current | ||
* iteration | ||
*/ | ||
function sha1_ft(t, b, c, d) { | ||
if(t < 20) return (b & c) | ((~b) & d); | ||
if(t < 40) return b ^ c ^ d; | ||
if(t < 60) return (b & c) | (b & d) | (c & d); | ||
return b ^ c ^ d; | ||
} | ||
/* | ||
* Determine the appropriate additive constant for the current iteration | ||
*/ | ||
function sha1_kt(t) { | ||
return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : | ||
(t < 60) ? -1894007588 : -899497514; | ||
} | ||
/* | ||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally | ||
* to work around bugs in some JS interpreters. | ||
* //dominictarr: this is 10 years old, so maybe this can be dropped?) | ||
*/ | ||
function safe_add(x, y) { | ||
var lsw = (x & 0xFFFF) + (y & 0xFFFF); | ||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16); | ||
return (msw << 16) | (lsw & 0xFFFF); | ||
} | ||
/* | ||
* Bitwise rotate a 32-bit number to the left. | ||
*/ | ||
function rol(num, cnt) { | ||
return (num << cnt) | (num >>> (32 - cnt)); | ||
} | ||
exports.sha = | ||
exports.sha1 = require('./sha1') | ||
exports.sha256 = require('./sha256') |
{ | ||
"name": "sha.js", | ||
"description": "streaming sha1 hash in pure javascript", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"homepage": "https://github.com/dominictarr/sha.js", | ||
@@ -17,3 +17,3 @@ "repository": { | ||
"scripts": { | ||
"test": "set -e; for t in test/*.js; do node $t; done" | ||
"test": "set -e; for t in test/*.js; do node $t; done;" | ||
}, | ||
@@ -20,0 +20,0 @@ "author": "Dominic Tarr <dominic.tarr@gmail.com> (dominictarr.com)", |
@@ -28,4 +28,11 @@ # sha.js | ||
# TODO | ||
* sha256 (and similar) | ||
* md5 | ||
(and any other similar hashes that are close to this model) | ||
## License | ||
MIT |
@@ -1,2 +0,2 @@ | ||
var Sha1 = require('../') | ||
var Sha1 = require('../sha1') | ||
var tape = require('tape') | ||
@@ -3,0 +3,0 @@ var toString = require('../util').toString |
@@ -8,2 +8,7 @@ | ||
var hex = '0A1B2C3D4E5F6G7H', hexbuf | ||
function equal(t, a,b) { | ||
t.equal(a.length, b.length) | ||
for(var i = 0; i < a.length; i++) | ||
t.equal(a[i], b[i]) | ||
} | ||
@@ -71,6 +76,6 @@ var count16 = { | ||
var expected = data.buffers.slice() | ||
t.plan(expected.length + 1) | ||
//t.plan(expected.length + 1) | ||
h._update = function (block) { | ||
var e = expected.shift() | ||
t.deepEqual(block, e.buffer) | ||
equal(t, block, e.buffer) | ||
if(n < 0) | ||
@@ -86,3 +91,3 @@ throw new Error('expecting only 2 calls to _update') | ||
t.equal(h.digest(), hash) | ||
equal(t, h.digest(), hash) | ||
t.end() | ||
@@ -89,0 +94,0 @@ |
var crypto = require('crypto') | ||
var tape = require('tape') | ||
var Sha1 = require('../') | ||
var Sha1 = require('../sha1') | ||
var Uint32toHex = Sha1.Uint32toHex | ||
@@ -101,2 +101,1 @@ var u = require('../util') | ||
29
util.js
exports.write = write | ||
exports.reverseByteOrder = reverseByteOrder | ||
exports.toHex = toHex | ||
exports.zeroFill = zeroFill | ||
exports.Uint32toHex = Uint32toHex | ||
exports.toString = toString | ||
@@ -58,12 +57,2 @@ var bopsToString = require('bops/typedarray/to') | ||
function reverseByteOrder(n) { | ||
return ( | ||
((n << 24) & 0xff000000) | ||
| ((n << 8) & 0x00ff0000) | ||
| ((n >> 8) & 0x0000ff00) | ||
| ((n >> 24) & 0x000000ff) | ||
) | ||
} | ||
//always fill to the end! | ||
@@ -75,19 +64,7 @@ function zeroFill(buf, from) { | ||
function Uint32toHex (n) { | ||
var s = (n & 0x0f).toString(16) | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
s = ((n >>= 4) & 0x0f).toString(16) + s | ||
return s | ||
} | ||
function toString(buf, enc) { | ||
if(null == enc) return buf | ||
if('hex' == enc) | ||
return toHex(buf) | ||
return bopsToString(buf, enc) | ||
} |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
795513
217
3436
38
1
1