crypto-es
Version:
A cryptography algorithms library compatible with ES6 and TypeScript
1 lines • 4.42 kB
Source Map (JSON)
{"version":3,"file":"sha1.mjs","names":["W: number[]","SHA1: HashFn","HmacSHA1: HMACHashFn"],"sources":["../src/sha1.ts"],"sourcesContent":["import {\n WordArray,\n Hasher,\n Hasher32,\n HashFn,\n HMACHashFn,\n} from './core';\n\n// Reusable object\nconst W: number[] = [];\n\n/**\n * SHA-1 hash algorithm.\n */\nexport class SHA1Algo extends Hasher32 {\n _doReset(): void {\n this._hash = new WordArray([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n 0xc3d2e1f0,\n ]);\n }\n\n _doProcessBlock(M: number[], offset: number): void {\n // Shortcut\n const H = this._hash.words;\n\n // Working variables\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n // Computation\n for (let i = 0; i < 80; i += 1) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n const n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = (n << 1) | (n >>> 31);\n }\n\n let t = ((a << 5) | (a >>> 27)) + e + W[i];\n if (i < 20) {\n t += ((b & c) | (~b & d)) + 0x5a827999;\n } else if (i < 40) {\n t += (b ^ c ^ d) + 0x6ed9eba1;\n } else if (i < 60) {\n t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n } else /* if (i < 80) */ {\n t += (b ^ c ^ d) - 0x359d3e2a;\n }\n\n e = d;\n d = c;\n c = (b << 30) | (b >>> 2);\n b = a;\n a = t;\n }\n\n // Intermediate hash value\n H[0] = (H[0] + a) | 0;\n H[1] = (H[1] + b) | 0;\n H[2] = (H[2] + c) | 0;\n H[3] = (H[3] + d) | 0;\n H[4] = (H[4] + e) | 0;\n }\n\n _doFinalize(): WordArray {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n }\n\n clone(): this {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param message - The message to hash.\n * @returns The hash.\n *\n * @example\n * ```js\n * const hash = CryptoJS.SHA1('message');\n * const hash = CryptoJS.SHA1(wordArray);\n * ```\n */\nexport const SHA1: HashFn = Hasher._createHelper(SHA1Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param message - The message to hash.\n * @param key - The secret key.\n * @returns The HMAC.\n *\n * @example\n * ```js\n * const hmac = CryptoJS.HmacSHA1(message, key);\n * ```\n */\nexport const HmacSHA1: HMACHashFn = Hasher._createHmacHelper(SHA1Algo);"],"mappings":";;;AASA,MAAMA,IAAc,EAAE;;;;AAKtB,IAAa,WAAb,cAA8B,SAAS;CACrC,WAAiB;AACf,OAAK,QAAQ,IAAI,UAAU;GACzB;GACA;GACA;GACA;GACA;GACD;CACF;CAED,gBAAgB,GAAa,QAAsB;EAEjD,MAAM,IAAI,KAAK,MAAM;EAGrB,IAAI,IAAI,EAAE;EACV,IAAI,IAAI,EAAE;EACV,IAAI,IAAI,EAAE;EACV,IAAI,IAAI,EAAE;EACV,IAAI,IAAI,EAAE;AAGV,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC9B,OAAI,IAAI,GACN,GAAE,KAAK,EAAE,SAAS,KAAK;QAClB;IACL,MAAM,IAAI,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,MAAM,EAAE,IAAI;AAClD,MAAE,KAAM,KAAK,IAAM,MAAM;GAC1B;GAED,IAAI,KAAM,KAAK,IAAM,MAAM,MAAO,IAAI,EAAE;AACxC,OAAI,IAAI,GACN,OAAO,IAAI,IAAM,CAAC,IAAI,KAAM;YACnB,IAAI,GACb,OAAM,IAAI,IAAI,KAAK;YACV,IAAI,GACb,OAAO,IAAI,IAAM,IAAI,IAAM,IAAI,KAAM;OAErC,OAAM,IAAI,IAAI,KAAK;AAGrB,OAAI;AACJ,OAAI;AACJ,OAAK,KAAK,KAAO,MAAM;AACvB,OAAI;AACJ,OAAI;EACL;AAGD,IAAE,KAAM,EAAE,KAAK,IAAK;AACpB,IAAE,KAAM,EAAE,KAAK,IAAK;AACpB,IAAE,KAAM,EAAE,KAAK,IAAK;AACpB,IAAE,KAAM,EAAE,KAAK,IAAK;AACpB,IAAE,KAAM,EAAE,KAAK,IAAK;CACrB;CAED,cAAyB;EAEvB,MAAM,OAAO,KAAK;EAClB,MAAM,YAAY,KAAK;EAEvB,MAAM,aAAa,KAAK,cAAc;EACtC,MAAM,YAAY,KAAK,WAAW;AAGlC,YAAU,cAAc,MAAM,OAAS,KAAM,YAAY;AACzD,aAAa,YAAY,OAAQ,KAAM,KAAK,MAAM,KAAK,MAAM,aAAa;AAC1E,aAAa,YAAY,OAAQ,KAAM,KAAK,MAAM;AAClD,OAAK,WAAW,UAAU,SAAS;AAGnC,OAAK;AAGL,SAAO,KAAK;CACb;CAED,QAAc;EACZ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAC/B,QAAM,QAAQ,KAAK,MAAM;AAEzB,SAAO;CACR;AACF;;;;;;;;;;;;;AAcD,MAAaC,OAAe,OAAO,cAAc;;;;;;;;;;;;;AAcjD,MAAaC,WAAuB,OAAO,kBAAkB"}