Socket
Socket
Sign inDemoInstall

sha.js

Package Overview
Dependencies
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sha.js - npm Package Compare versions

Comparing version 1.0.0 to 1.1.0

sha1.js

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')
}

@@ -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')

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc