UNPKG

app-package-builder

Version:

Idea is very simple — in the runtime we don't need to process or understand archive format. Wwe just need to know file data ranges. Where file data begins and where ends.

1,377 lines (1,326 loc) 32.8 kB
/* Written in 2012-2014 by Dmitry Chestnykh. Public domain */ "use strict"; const MAX_DIGEST_LENGTH = 32; const BLOCK_LENGTH = 64; const MAX_KEY_LENGTH = 32; const PERSONALIZATION_LENGTH = 8; const SALT_LENGTH = 8; const IV = new Uint32Array([ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ]); function isByteArray(a) { let kind = Object.prototype.toString.call(a); return kind === '[object Uint8Array]' || kind === '[object Array]'; } function checkConfig(config) { for (const key in config) { switch (key) { case 'key': case 'personalization': case 'salt': if (!isByteArray(config[key])) { throw new TypeError(key + ' must be a Uint8Array or an Array of bytes'); } break; default: throw new Error('unexpected key in config: ' + key) } } } function load32(a, i) { return (a[i + 0] & 0xff) | ((a[i + 1] & 0xff) << 8) | ((a[i + 2] & 0xff) << 16) | ((a[i + 3] & 0xff) << 24); } function BLAKE2s(digestLength, keyOrConfig) { if (typeof digestLength === 'undefined') digestLength = MAX_DIGEST_LENGTH; if (digestLength <= 0 || digestLength > MAX_DIGEST_LENGTH) throw new Error('bad digestLength'); this.digestLength = digestLength; let key, personalization, salt; let keyLength = 0; if (isByteArray(keyOrConfig)) { key = keyOrConfig; keyLength = key.length; } else if (typeof keyOrConfig === 'object') { checkConfig(keyOrConfig); key = keyOrConfig.key; keyLength = key ? key.length : 0; salt = keyOrConfig.salt; personalization = keyOrConfig.personalization; } else if (keyOrConfig) { throw new Error('unexpected key or config type'); } if (keyLength > MAX_KEY_LENGTH) throw new Error('key is too long'); if (salt && salt.length !== SALT_LENGTH) throw new Error('salt must be ' + SALT_LENGTH + ' bytes'); if (personalization && personalization.length !== PERSONALIZATION_LENGTH) throw new Error('personalization must be ' + PERSONALIZATION_LENGTH + ' bytes'); this.isFinished = false; // Hash state. this.h = new Uint32Array(IV); // XOR parts of parameter block into initial state. let param = Buffer.from([digestLength & 0xff, keyLength, 1, 1]) this.h[0] ^= load32(param, 0); if (salt) { this.h[4] ^= load32(salt, 0); this.h[5] ^= load32(salt, 4); } if (personalization) { this.h[6] ^= load32(personalization, 0); this.h[7] ^= load32(personalization, 4); } // Buffer for data. this.x = Buffer.alloc(BLOCK_LENGTH); this.nx = 0; // Byte counter. this.t0 = 0; this.t1 = 0; // Flags. this.f0 = 0; this.f1 = 0; // Fill buffer with key, if present. if (keyLength > 0) { for (let i = 0; i < keyLength; i++) this.x[i] = key[i]; for (let i = keyLength; i < BLOCK_LENGTH; i++) this.x[i] = 0; this.nx = BLOCK_LENGTH; } } BLAKE2s.prototype.processBlock = function(length) { this.t0 += length; if (this.t0 != this.t0 >>> 0) { this.t0 = 0; this.t1++; } let v0 = this.h[0], v1 = this.h[1], v2 = this.h[2], v3 = this.h[3], v4 = this.h[4], v5 = this.h[5], v6 = this.h[6], v7 = this.h[7], v8 = IV[0], v9 = IV[1], v10 = IV[2], v11 = IV[3], v12 = IV[4] ^ this.t0, v13 = IV[5] ^ this.t1, v14 = IV[6] ^ this.f0, v15 = IV[7] ^ this.f1; let x = this.x; let m0 = x[ 0] & 0xff | (x[ 1] & 0xff) << 8 | (x[ 2] & 0xff) << 16 | (x[ 3] & 0xff) << 24, m1 = x[ 4] & 0xff | (x[ 5] & 0xff) << 8 | (x[ 6] & 0xff) << 16 | (x[ 7] & 0xff) << 24, m2 = x[ 8] & 0xff | (x[ 9] & 0xff) << 8 | (x[10] & 0xff) << 16 | (x[11] & 0xff) << 24, m3 = x[12] & 0xff | (x[13] & 0xff) << 8 | (x[14] & 0xff) << 16 | (x[15] & 0xff) << 24, m4 = x[16] & 0xff | (x[17] & 0xff) << 8 | (x[18] & 0xff) << 16 | (x[19] & 0xff) << 24, m5 = x[20] & 0xff | (x[21] & 0xff) << 8 | (x[22] & 0xff) << 16 | (x[23] & 0xff) << 24, m6 = x[24] & 0xff | (x[25] & 0xff) << 8 | (x[26] & 0xff) << 16 | (x[27] & 0xff) << 24, m7 = x[28] & 0xff | (x[29] & 0xff) << 8 | (x[30] & 0xff) << 16 | (x[31] & 0xff) << 24, m8 = x[32] & 0xff | (x[33] & 0xff) << 8 | (x[34] & 0xff) << 16 | (x[35] & 0xff) << 24, m9 = x[36] & 0xff | (x[37] & 0xff) << 8 | (x[38] & 0xff) << 16 | (x[39] & 0xff) << 24, m10 = x[40] & 0xff | (x[41] & 0xff) << 8 | (x[42] & 0xff) << 16 | (x[43] & 0xff) << 24, m11 = x[44] & 0xff | (x[45] & 0xff) << 8 | (x[46] & 0xff) << 16 | (x[47] & 0xff) << 24, m12 = x[48] & 0xff | (x[49] & 0xff) << 8 | (x[50] & 0xff) << 16 | (x[51] & 0xff) << 24, m13 = x[52] & 0xff | (x[53] & 0xff) << 8 | (x[54] & 0xff) << 16 | (x[55] & 0xff) << 24, m14 = x[56] & 0xff | (x[57] & 0xff) << 8 | (x[58] & 0xff) << 16 | (x[59] & 0xff) << 24, m15 = x[60] & 0xff | (x[61] & 0xff) << 8 | (x[62] & 0xff) << 16 | (x[63] & 0xff) << 24; // Round 1. v0 = v0 + m0 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m2 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m4 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m6 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m5 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m7 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m3 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m1 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m8 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m10 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m12 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m14 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m13 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m15 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m11 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m9 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 2. v0 = v0 + m14 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m4 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m9 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m13 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m15 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m6 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m8 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m10 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m1 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m0 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m11 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m5 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m7 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m3 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m2 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m12 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 3. v0 = v0 + m11 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m12 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m5 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m15 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m2 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m13 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m0 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m8 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m10 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m3 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m7 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m9 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m1 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m4 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m6 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m14 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 4. v0 = v0 + m7 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m3 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m13 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m11 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m12 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m14 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m1 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m9 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m2 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m5 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m4 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m15 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m0 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m8 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m10 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m6 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 5. v0 = v0 + m9 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m5 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m2 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m10 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m4 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m15 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m7 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m0 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m14 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m11 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m6 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m3 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m8 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m13 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m12 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m1 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 6. v0 = v0 + m2 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m6 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m0 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m8 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m11 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m3 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m10 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m12 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m4 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m7 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m15 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m1 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m14 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m9 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m5 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m13 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 7. v0 = v0 + m12 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m1 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m14 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m4 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m13 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m10 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m15 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m5 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m0 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m6 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m9 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m8 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m2 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m11 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m3 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m7 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 8. v0 = v0 + m13 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m7 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m12 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m3 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m1 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m9 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m14 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m11 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m5 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m15 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m8 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m2 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m6 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m10 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m4 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m0 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 9. v0 = v0 + m6 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m14 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m11 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m0 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m3 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m8 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m9 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m15 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m12 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m13 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m1 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m10 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m4 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m5 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m7 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m2 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; // Round 10. v0 = v0 + m10 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 16) | v12 >>> 16; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 12) | v4 >>> 12; v1 = v1 + m8 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 16) | v13 >>> 16; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 12) | v5 >>> 12; v2 = v2 + m7 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 16) | v14 >>> 16; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 12) | v6 >>> 12; v3 = v3 + m1 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 16) | v15 >>> 16; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 12) | v7 >>> 12; v2 = v2 + m6 | 0; v2 = v2 + v6 | 0; v14 ^= v2; v14 = v14 << (32 - 8) | v14 >>> 8; v10 = v10 + v14 | 0; v6 ^= v10; v6 = v6 << (32 - 7) | v6 >>> 7; v3 = v3 + m5 | 0; v3 = v3 + v7 | 0; v15 ^= v3; v15 = v15 << (32 - 8) | v15 >>> 8; v11 = v11 + v15 | 0; v7 ^= v11; v7 = v7 << (32 - 7) | v7 >>> 7; v1 = v1 + m4 | 0; v1 = v1 + v5 | 0; v13 ^= v1; v13 = v13 << (32 - 8) | v13 >>> 8; v9 = v9 + v13 | 0; v5 ^= v9; v5 = v5 << (32 - 7) | v5 >>> 7; v0 = v0 + m2 | 0; v0 = v0 + v4 | 0; v12 ^= v0; v12 = v12 << (32 - 8) | v12 >>> 8; v8 = v8 + v12 | 0; v4 ^= v8; v4 = v4 << (32 - 7) | v4 >>> 7; v0 = v0 + m15 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 16) | v15 >>> 16; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 12) | v5 >>> 12; v1 = v1 + m9 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 16) | v12 >>> 16; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 12) | v6 >>> 12; v2 = v2 + m3 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 16) | v13 >>> 16; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 12) | v7 >>> 12; v3 = v3 + m13 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 16) | v14 >>> 16; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 12) | v4 >>> 12; v2 = v2 + m12 | 0; v2 = v2 + v7 | 0; v13 ^= v2; v13 = v13 << (32 - 8) | v13 >>> 8; v8 = v8 + v13 | 0; v7 ^= v8; v7 = v7 << (32 - 7) | v7 >>> 7; v3 = v3 + m0 | 0; v3 = v3 + v4 | 0; v14 ^= v3; v14 = v14 << (32 - 8) | v14 >>> 8; v9 = v9 + v14 | 0; v4 ^= v9; v4 = v4 << (32 - 7) | v4 >>> 7; v1 = v1 + m14 | 0; v1 = v1 + v6 | 0; v12 ^= v1; v12 = v12 << (32 - 8) | v12 >>> 8; v11 = v11 + v12 | 0; v6 ^= v11; v6 = v6 << (32 - 7) | v6 >>> 7; v0 = v0 + m11 | 0; v0 = v0 + v5 | 0; v15 ^= v0; v15 = v15 << (32 - 8) | v15 >>> 8; v10 = v10 + v15 | 0; v5 ^= v10; v5 = v5 << (32 - 7) | v5 >>> 7; this.h[0] ^= v0 ^ v8; this.h[1] ^= v1 ^ v9; this.h[2] ^= v2 ^ v10; this.h[3] ^= v3 ^ v11; this.h[4] ^= v4 ^ v12; this.h[5] ^= v5 ^ v13; this.h[6] ^= v6 ^ v14; this.h[7] ^= v7 ^ v15; }; BLAKE2s.prototype.update = function(p, offset = 0, length = p.length - offset) { if (typeof p === 'string') throw new TypeError('update() accepts Uint8Array or an Array of bytes'); if (this.isFinished) throw new Error('update() after calling digest()'); if (length === 0) return this; let i, left = 64 - this.nx; // Finish buffer. if (length > left) { for (i = 0; i < left; i++) { this.x[this.nx + i] = p[offset + i]; } this.processBlock(64); offset += left; length -= left; this.nx = 0; } // Process message blocks. while (length > 64) { for (i = 0; i < 64; i++) { this.x[i] = p[offset + i]; } this.processBlock(64); offset += 64; length -= 64; this.nx = 0; } // Copy leftovers to buffer. for (i = 0; i < length; i++) { this.x[this.nx + i] = p[offset + i]; } this.nx += length; return this; }; BLAKE2s.prototype.digest = function() { if (this.isFinished) throw new Error("consumed") for (let i = this.nx; i < 64; i++) this.x[i] = 0; // Set last block flag. this.f0 = 0xffffffff; //TODO in tree mode, set f1 to 0xffffffff. this.processBlock(this.nx); const d = Buffer.alloc(32); for (let i = 0; i < 8; i++) { const h = this.h[i]; d[i * 4 + 0] = (h >>> 0) & 0xff; d[i * 4 + 1] = (h >>> 8) & 0xff; d[i * 4 + 2] = (h >>> 16) & 0xff; d[i * 4 + 3] = (h >>> 24) & 0xff; } this.isFinished = true; return d.slice(0, this.digestLength); }; BLAKE2s.digestLength = MAX_DIGEST_LENGTH; BLAKE2s.blockLength = BLOCK_LENGTH; BLAKE2s.keyLength = MAX_KEY_LENGTH; BLAKE2s.saltLength = SALT_LENGTH; BLAKE2s.personalizationLength = PERSONALIZATION_LENGTH; module.exports = BLAKE2s