diff options
Diffstat (limited to 'node_modules/locutus/php/strings/sha1.js')
-rw-r--r-- | node_modules/locutus/php/strings/sha1.js | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/node_modules/locutus/php/strings/sha1.js b/node_modules/locutus/php/strings/sha1.js new file mode 100644 index 0000000..596b724 --- /dev/null +++ b/node_modules/locutus/php/strings/sha1.js @@ -0,0 +1,151 @@ +'use strict'; + +module.exports = function sha1(str) { + // discuss at: http://locutus.io/php/sha1/ + // original by: Webtoolkit.info (http://www.webtoolkit.info/) + // improved by: Michael White (http://getsprink.com) + // improved by: Kevin van Zonneveld (http://kvz.io) + // input by: Brett Zamir (http://brett-zamir.me) + // note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then + // note 1: hashed. If available, we'd recommend using Node's native crypto modules directly + // note 1: in a steaming fashion for faster and more efficient hashing + // example 1: sha1('Kevin van Zonneveld') + // returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897' + + var hash; + try { + var crypto = require('crypto'); + var sha1sum = crypto.createHash('sha1'); + sha1sum.update(str); + hash = sha1sum.digest('hex'); + } catch (e) { + hash = undefined; + } + + if (hash !== undefined) { + return hash; + } + + var _rotLeft = function _rotLeft(n, s) { + var t4 = n << s | n >>> 32 - s; + return t4; + }; + + var _cvtHex = function _cvtHex(val) { + var str = ''; + var i; + var v; + + for (i = 7; i >= 0; i--) { + v = val >>> i * 4 & 0x0f; + str += v.toString(16); + } + return str; + }; + + var blockstart; + var i, j; + var W = new Array(80); + var H0 = 0x67452301; + var H1 = 0xEFCDAB89; + var H2 = 0x98BADCFE; + var H3 = 0x10325476; + var H4 = 0xC3D2E1F0; + var A, B, C, D, E; + var temp; + + // utf8_encode + str = unescape(encodeURIComponent(str)); + var strLen = str.length; + + var wordArray = []; + for (i = 0; i < strLen - 3; i += 4) { + j = str.charCodeAt(i) << 24 | str.charCodeAt(i + 1) << 16 | str.charCodeAt(i + 2) << 8 | str.charCodeAt(i + 3); + wordArray.push(j); + } + + switch (strLen % 4) { + case 0: + i = 0x080000000; + break; + case 1: + i = str.charCodeAt(strLen - 1) << 24 | 0x0800000; + break; + case 2: + i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000; + break; + case 3: + i = str.charCodeAt(strLen - 3) << 24 | str.charCodeAt(strLen - 2) << 16 | str.charCodeAt(strLen - 1) << 8 | 0x80; + break; + } + + wordArray.push(i); + + while (wordArray.length % 16 !== 14) { + wordArray.push(0); + } + + wordArray.push(strLen >>> 29); + wordArray.push(strLen << 3 & 0x0ffffffff); + + for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) { + for (i = 0; i < 16; i++) { + W[i] = wordArray[blockstart + i]; + } + for (i = 16; i <= 79; i++) { + W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + } + + A = H0; + B = H1; + C = H2; + D = H3; + E = H4; + + for (i = 0; i <= 19; i++) { + temp = _rotLeft(A, 5) + (B & C | ~B & D) + E + W[i] + 0x5A827999 & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + + for (i = 20; i <= 39; i++) { + temp = _rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1 & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + + for (i = 40; i <= 59; i++) { + temp = _rotLeft(A, 5) + (B & C | B & D | C & D) + E + W[i] + 0x8F1BBCDC & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + + for (i = 60; i <= 79; i++) { + temp = _rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6 & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + + H0 = H0 + A & 0x0ffffffff; + H1 = H1 + B & 0x0ffffffff; + H2 = H2 + C & 0x0ffffffff; + H3 = H3 + D & 0x0ffffffff; + H4 = H4 + E & 0x0ffffffff; + } + + temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4); + return temp.toLowerCase(); +}; +//# sourceMappingURL=sha1.js.map
\ No newline at end of file |