tiny-sha1
Version:
Tiny SHA-1 hasher for Node and browsers
1 lines • 8.14 kB
Source Map (JSON)
{"version":3,"file":null,"sources":["../src/utils.js","../src/index.js"],"sourcesContent":["export const systemLittleEndian =\n new Uint16Array(new Uint8Array([0x7F, 0xFF]).buffer)[0] === 0xFF7F;\n\nexport function swap4(num) {\n return ((num >> 24) & 0xff)\n | ((num >> 8) & 0xff00)\n | ((num << 8) & 0xff0000)\n | ((num << 24) & 0xff000000);\n}\n\nexport function align(address, alignment) {\n const tmp = alignment - 1;\n return (address + tmp) & ~tmp;\n}\n\n/** Convert a uint32 to an 8-character big-endian hex string. */\nexport function hexify(n) {\n let s = '';\n let i = 8;\n while (i--) {\n s += ((n >>> (i << 2)) & 0xf).toString(16);\n }\n return s;\n}\n\nexport function choice(x, y, z) {\n return (x & y) ^ (~x & z);\n}\n\nexport function parity(x, y, z) {\n return x ^ y ^ z;\n}\n\nexport function majority(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\n\nexport function rotateLeft(value, bits) {\n return (value << bits) | (value >>> (32 - bits));\n}\n","import {\n systemLittleEndian, swap4, align, hexify,\n choice, majority, parity, rotateLeft,\n} from './utils';\n\nconst w = new Uint32Array(80);\n\nexport default function sha1(bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new TypeError('Input data must be a Uint8Array.');\n }\n\n // Allocate a buffer to fit the message data,\n // the padding byte and the 64-bit message bit length\n const buffer = new ArrayBuffer(align(bytes.byteLength + 9, 64));\n const data = new Uint32Array(buffer);\n\n // Copy the message data and set the padding byte\n const dataU8 = new Uint8Array(buffer);\n dataU8.set(bytes);\n dataU8[bytes.byteLength] = 0x80;\n\n // Swap bytes if neeeded\n if (systemLittleEndian) {\n for (let i = 0, len = data.length; i < len; ++i) {\n data[i] = swap4(data[i]);\n }\n }\n\n const bitLength = 8 * bytes.byteLength;\n\n // Store the message bit length as a 64-bit value\n data[data.length - 2] = bitLength / Math.pow(2, 32);\n data[data.length - 1] = bitLength;\n\n // Set the initial hash state\n let h0 = 0x67452301;\n let h1 = 0xefcdab89;\n let h2 = 0x98badcfe;\n let h3 = 0x10325476;\n let h4 = 0xc3d2e1f0;\n\n /* eslint-disable one-var, one-var-declaration-per-line */\n let i, a, b, c, d, e, tmp;\n\n for (let offset = 0, len = data.length; offset < len; offset += 16) {\n for (i = 0; i < 16; ++i) {\n w[i] = data[offset + i];\n }\n\n for (i = 16; i < 80; ++i) {\n w[i] = rotateLeft(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1);\n }\n\n a = h0;\n b = h1;\n c = h2;\n d = h3;\n e = h4;\n\n for (i = 0; i < 20; ++i) {\n tmp = (rotateLeft(a, 5) + choice(b, c, d) + e + 0x5a827999 + w[i]) | 0;\n e = d;\n d = c;\n c = rotateLeft(b, 30);\n b = a;\n a = tmp;\n }\n\n for (i = 20; i < 40; ++i) {\n tmp = (rotateLeft(a, 5) + parity(b, c, d) + e + 0x6ed9eba1 + w[i]) | 0;\n e = d;\n d = c;\n c = rotateLeft(b, 30);\n b = a;\n a = tmp;\n }\n\n for (i = 40; i < 60; ++i) {\n tmp = (rotateLeft(a, 5) + majority(b, c, d) + e + 0x8f1bbcdc + w[i]) | 0;\n e = d;\n d = c;\n c = rotateLeft(b, 30);\n b = a;\n a = tmp;\n }\n\n for (i = 60; i < 80; ++i) {\n tmp = (rotateLeft(a, 5) + parity(b, c, d) + e + 0xca62c1d6 + w[i]) | 0;\n e = d;\n d = c;\n c = rotateLeft(b, 30);\n b = a;\n a = tmp;\n }\n\n h0 = (h0 + a) | 0;\n h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0;\n h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0;\n }\n\n return `${hexify(h0)}${hexify(h1)}${hexify(h2)}${hexify(h3)}${hexify(h4)}`;\n}\n"],"names":[],"mappings":"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"}