1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.sha1 = void 0;
- const _md_js_1 = require("./_md.js");
- const utils_js_1 = require("./utils.js");
- // SHA1 (RFC 3174) was cryptographically broken. It's still used. Don't use it for a new protocol.
- // Initial state
- const SHA1_IV = /* @__PURE__ */ new Uint32Array([
- 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,
- ]);
- // Temporary buffer, not used to store anything between runs
- // Named this way because it matches specification.
- const SHA1_W = /* @__PURE__ */ new Uint32Array(80);
- class SHA1 extends _md_js_1.HashMD {
- constructor() {
- super(64, 20, 8, false);
- this.A = SHA1_IV[0] | 0;
- this.B = SHA1_IV[1] | 0;
- this.C = SHA1_IV[2] | 0;
- this.D = SHA1_IV[3] | 0;
- this.E = SHA1_IV[4] | 0;
- }
- get() {
- const { A, B, C, D, E } = this;
- return [A, B, C, D, E];
- }
- set(A, B, C, D, E) {
- this.A = A | 0;
- this.B = B | 0;
- this.C = C | 0;
- this.D = D | 0;
- this.E = E | 0;
- }
- process(view, offset) {
- for (let i = 0; i < 16; i++, offset += 4)
- SHA1_W[i] = view.getUint32(offset, false);
- for (let i = 16; i < 80; i++)
- SHA1_W[i] = (0, utils_js_1.rotl)(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);
- // Compression function main loop, 80 rounds
- let { A, B, C, D, E } = this;
- for (let i = 0; i < 80; i++) {
- let F, K;
- if (i < 20) {
- F = (0, _md_js_1.Chi)(B, C, D);
- K = 0x5a827999;
- }
- else if (i < 40) {
- F = B ^ C ^ D;
- K = 0x6ed9eba1;
- }
- else if (i < 60) {
- F = (0, _md_js_1.Maj)(B, C, D);
- K = 0x8f1bbcdc;
- }
- else {
- F = B ^ C ^ D;
- K = 0xca62c1d6;
- }
- const T = ((0, utils_js_1.rotl)(A, 5) + F + E + K + SHA1_W[i]) | 0;
- E = D;
- D = C;
- C = (0, utils_js_1.rotl)(B, 30);
- B = A;
- A = T;
- }
- // Add the compressed chunk to the current hash value
- A = (A + this.A) | 0;
- B = (B + this.B) | 0;
- C = (C + this.C) | 0;
- D = (D + this.D) | 0;
- E = (E + this.E) | 0;
- this.set(A, B, C, D, E);
- }
- roundClean() {
- SHA1_W.fill(0);
- }
- destroy() {
- this.set(0, 0, 0, 0, 0);
- this.buffer.fill(0);
- }
- }
- exports.sha1 = (0, utils_js_1.wrapConstructor)(() => new SHA1());
- //# sourceMappingURL=sha1.js.map
|