[Pkg-javascript-commits] [node-sha.js] 189/237: sha0: add implementation
Bastien Roucariès
rouca at moszumanska.debian.org
Fri May 5 09:03:58 UTC 2017
This is an automated email from the git hooks/post-receive script.
rouca pushed a commit to branch master
in repository node-sha.js.
commit ca6950d53c064aa5d767e7166ea29dd0cb61a1b6
Author: Kenji Doi <knjcode at gmail.com>
Date: Fri Apr 3 01:24:19 2015 +0900
sha0: add implementation
---
index.js | 1 +
sha.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
test/vectors.js | 1 +
3 files changed, 101 insertions(+)
diff --git a/index.js b/index.js
index b156f24..111d97b 100644
--- a/index.js
+++ b/index.js
@@ -5,6 +5,7 @@ var exports = module.exports = function (alg) {
}
+exports.sha = require('./sha')
exports.sha1 = require('./sha1')
exports.sha224 = require('./sha224')
exports.sha256 = require('./sha256')
diff --git a/sha.js b/sha.js
new file mode 100644
index 0000000..f7d7258
--- /dev/null
+++ b/sha.js
@@ -0,0 +1,99 @@
+/*
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
+ * in FIPS PUB 180-1
+ * This source code is derived from sha1.js of the same repository.
+ * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
+ * operation was added.
+ */
+
+var inherits = require('inherits')
+var Hash = require('./hash')
+
+var W = new Array(80)
+
+function Sha() {
+ this.init()
+ this._w = W
+
+ Hash.call(this, 64, 56)
+}
+
+inherits(Sha, Hash)
+
+Sha.prototype.init = function () {
+ this._a = 0x67452301
+ this._b = 0xefcdab89
+ this._c = 0x98badcfe
+ this._d = 0x10325476
+ this._e = 0xc3d2e1f0
+
+ return this
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+Sha.prototype._update = function (M) {
+ var W = this._w
+
+ var a = this._a
+ var b = this._b
+ var c = this._c
+ var d = this._d
+ var e = this._e
+
+ var j = 0, k
+
+ /*
+ * SHA-1 has a bitwise rotate left operation. But, SHA is not
+ * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
+ */
+ function calcW() { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
+ function loop(w, f) {
+ W[j] = w
+
+ var t = rol(a, 5) + f + e + w + k
+
+ e = d
+ d = c
+ c = rol(b, 30)
+ b = a
+ a = t
+ j++
+ }
+
+ k = 1518500249
+ while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
+ while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
+ k = 1859775393
+ while (j < 40) loop(calcW(), b ^ c ^ d)
+ k = -1894007588
+ while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
+ k = -899497514
+ while (j < 80) loop(calcW(), b ^ c ^ d)
+
+ this._a = (a + this._a) | 0
+ this._b = (b + this._b) | 0
+ this._c = (c + this._c) | 0
+ this._d = (d + this._d) | 0
+ this._e = (e + this._e) | 0
+}
+
+Sha.prototype._hash = function () {
+ var H = new Buffer(20)
+
+ H.writeInt32BE(this._a|0, 0)
+ H.writeInt32BE(this._b|0, 4)
+ H.writeInt32BE(this._c|0, 8)
+ H.writeInt32BE(this._d|0, 12)
+ H.writeInt32BE(this._e|0, 16)
+
+ return H
+}
+
+module.exports = Sha
+
diff --git a/test/vectors.js b/test/vectors.js
index b718eb6..e1a65ba 100644
--- a/test/vectors.js
+++ b/test/vectors.js
@@ -65,6 +65,7 @@ if(process.argv[2])
makeTest(process.argv[2], parseInt(process.argv[3]), true)
else
vectors.forEach(function (v, i) {
+ makeTest('sha', i)
makeTest('sha1', i)
makeTest('sha224', i)
makeTest('sha256', i)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-sha.js.git
More information about the Pkg-javascript-commits
mailing list