12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- (function () {
- var C = typeof window === 'undefined' ? require('./Crypto').Crypto : window.Crypto;
- // Shortcuts
- var util = C.util;
- var charenc = C.charenc;
- var UTF8 = charenc.UTF8;
- var Binary = charenc.Binary; // Constants
- var K = [
- 1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206,
- 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671,
- 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411,
- 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779,
- 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298
- ];
- // Public API
- var SHA256 = (C.SHA256 = function (message, options) {
- var digestbytes = util.wordsToBytes(SHA256._sha256(message));
- return options && options.asBytes ? digestbytes : options && options.asString ? Binary.bytesToString(digestbytes) : util.bytesToHex(digestbytes);
- });
- // The core
- SHA256._sha256 = function (message) {
- // Convert to byte array
- if (message.constructor == String) {
- message = UTF8.stringToBytes(message);
- }
- /* else, assume byte array already */
- var m = util.bytesToWords(message);
- var l = message.length * 8;
- var H = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225];
- var w = [];
- var a;
- var b;
- var c;
- var d;
- var e;
- var f;
- var g;
- var h;
- var i;
- var j;
- var t1;
- var t2; // Padding
- m[l >> 5] |= 128 << (24 - (l % 32));
- m[(((l + 64) >> 9) << 4) + 15] = l;
- for (var i = 0; i < m.length; i += 16) {
- a = H[0];
- b = H[1];
- c = H[2];
- d = H[3];
- e = H[4];
- f = H[5];
- g = H[6];
- h = H[7];
- for (var j = 0; j < 64; j++) {
- if (j < 16) {
- w[j] = m[j + i];
- } else {
- var gamma0x = w[j - 15];
- var gamma1x = w[j - 2];
- var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ ((gamma0x << 14) | (gamma0x >>> 18)) ^ (gamma0x >>> 3);
- var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ ((gamma1x << 13) | (gamma1x >>> 19)) ^ (gamma1x >>> 10);
- w[j] = gamma0 + (w[j - 7] >>> 0) + gamma1 + (w[j - 16] >>> 0);
- }
- var ch = (e & f) ^ (~e & g);
- var maj = (a & b) ^ (a & c) ^ (b & c);
- var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
- var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
- t1 = (h >>> 0) + sigma1 + ch + K[j] + (w[j] >>> 0);
- t2 = sigma0 + maj;
- h = g;
- g = f;
- f = e;
- e = (d + t1) >>> 0;
- d = c;
- c = b;
- b = a;
- a = (t1 + t2) >>> 0;
- }
- H[0] += a;
- H[1] += b;
- H[2] += c;
- H[3] += d;
- H[4] += e;
- H[5] += f;
- H[6] += g;
- H[7] += h;
- }
- return H;
- };
- // Package private blocksize
- SHA256._blocksize = 16;
- SHA256._digestsize = 32;
- })();
|