Comparing version 0.3.1 to 0.4.1
{ | ||
"name": "js-sha3", | ||
"version": "0.3.1", | ||
"version": "0.4.1", | ||
"main": ["src/sha3.js"], | ||
@@ -5,0 +5,0 @@ "ignore": [ |
@@ -0,1 +1,11 @@ | ||
# v0.4.1 / 2015-09-18 | ||
* Support to output Integer Array. | ||
* Fixed shake output incorrect when it's greater than 1088. | ||
# v0.4.0 / 2015-09-17 | ||
* Support to output ArrayBuffer. | ||
* Add shake alogirthms. | ||
# v0.3.1 / 2015-05-22 | ||
@@ -2,0 +12,0 @@ |
@@ -0,0 +0,0 @@ Copyright (c) 2015 Chen Yi-Cyuan |
{ | ||
"name": "js-sha3", | ||
"version": "0.3.1", | ||
"description": "A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.", | ||
"version": "0.4.1", | ||
"description": "A simple SHA-3 / Keccak / Shake hash function for JavaScript supports UTF-8 encoding.", | ||
"main": "src/sha3.js", | ||
"devDependencies": { | ||
"expect.js": "~0.3.1", | ||
"jscoverage": "~0.5.9" | ||
"jscoverage": "~0.5.9", | ||
"mocha": "~2.3.2" | ||
}, | ||
@@ -10,0 +11,0 @@ "scripts": { |
# js-sha3 | ||
[![Build Status](https://travis-ci.org/emn178/js-sha3.svg?branch=master)](https://travis-ci.org/emn178/js-sha3) | ||
[![Coverage Status](https://coveralls.io/repos/emn178/js-sha3/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha3?branch=master) | ||
[![NPM](https://nodei.co/npm/js-sha3.png?stars&downloads)](https://nodei.co/npm/js-sha3/) | ||
A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding. | ||
A simple SHA-3 / Keccak / Shake hash function for JavaScript supports UTF-8 encoding. | ||
@@ -44,2 +43,10 @@ ## Notice | ||
keccak_224('Message to hash'); | ||
shake_128('Message to hash', 256); | ||
shake_256('Message to hash', 512); | ||
// Support ArrayBuffer output | ||
var buffer = keccak_224.buffer('Message to hash'); | ||
// Support Array output | ||
var buffer = keccak_224.array('Message to hash'); | ||
``` | ||
@@ -56,2 +63,4 @@ If you use node.js, you should require the module first: | ||
keccak_224 = require('js-sha3').keccak_224; | ||
shake_128 = require('js-sha3').shake_128; | ||
shake_256 = require('js-sha3').shake_256; | ||
``` | ||
@@ -133,2 +142,8 @@ | ||
// c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab | ||
shake_128('', 256); | ||
// 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 | ||
shake_256('', 512); | ||
// 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be | ||
``` | ||
@@ -135,0 +150,0 @@ It also supports UTF-8 encoding: |
629
src/sha3.js
/* | ||
* js-sha3 v0.3.1 | ||
* js-sha3 v0.4.1 | ||
* https://github.com/emn178/js-sha3 | ||
@@ -20,4 +20,4 @@ * | ||
} | ||
var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1; | ||
var HEX_CHARS = '0123456789abcdef'.split(''); | ||
var SHAKE_PADDING = [31, 7936, 2031616, 520093696]; | ||
var KECCAK_PADDING = [1, 256, 65536, 16777216]; | ||
@@ -31,34 +31,43 @@ var PADDING = [6, 1536, 393216, 100663296]; | ||
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; | ||
var BITS = [224, 256, 384, 512]; | ||
var SHAKE_BITS = [128, 256]; | ||
var OUTPUT_TYPES = ['hex', 'buffer', 'array']; | ||
var blocks = [], s = []; | ||
var keccak_224 = function(message) { | ||
return keccak(message, 224, KECCAK_PADDING); | ||
var createMethod = function(bits, padding, outputType) { | ||
return function(message) { | ||
return keccak(message, bits, padding, bits, outputType); | ||
} | ||
}; | ||
var keccak_256 = function(message) { | ||
return keccak(message, 256, KECCAK_PADDING); | ||
var createShakeMethod = function(bits, padding, outputType) { | ||
return function(message, outputBits) { | ||
return keccak(message, bits, padding, outputBits, outputType); | ||
} | ||
}; | ||
var keccak_384 = function(message) { | ||
return keccak(message, 384, KECCAK_PADDING); | ||
}; | ||
var algorithms = [ | ||
{name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod}, | ||
{name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod}, | ||
{name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod} | ||
]; | ||
var sha3_224 = function(message) { | ||
return keccak(message, 224, PADDING); | ||
}; | ||
var blocks = [], s = [], methods = {}; | ||
var sha3_256 = function(message) { | ||
return keccak(message, 256, PADDING); | ||
}; | ||
for(var i = 0;i < algorithms.length;++i) { | ||
var algorithm = algorithms[i]; | ||
var bits = algorithm.bits; | ||
var createMethod = algorithm.createMethod; | ||
for(var j = 0;j < bits.length;++j) { | ||
(function(algorithm, bits) { | ||
var method = createMethod(bits, algorithm.padding, 'hex'); | ||
methods[algorithm.name +'_' + bits] = method; | ||
for(var k = 0;k < OUTPUT_TYPES.length;++k) { | ||
var type = OUTPUT_TYPES[k]; | ||
method[type] = createMethod(bits, algorithm.padding, type); | ||
} | ||
})(algorithm, bits[j]); | ||
} | ||
} | ||
var sha3_384 = function(message) { | ||
return keccak(message, 384, PADDING); | ||
}; | ||
var sha3_512 = function(message) { | ||
return keccak(message, 512, PADDING); | ||
}; | ||
var keccak = function(message, bits, padding) { | ||
var keccak = function(message, bits, padding, outputBits, outputType) { | ||
var notString = typeof(message) != 'string'; | ||
@@ -69,14 +78,6 @@ if(notString && message.constructor == root.ArrayBuffer) { | ||
if(bits === undefined) { | ||
bits = 512; | ||
padding = KECCAK_PADDING; | ||
} | ||
var block, code, end = false, index = 0, start = 0, length = message.length, | ||
n, i, h, l, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, | ||
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, | ||
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, | ||
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; | ||
var blockCount = (1600 - bits * 2) / 32; | ||
var byteCount = blockCount * 4; | ||
i, j, h; | ||
var blockCount = (1600 - (bits << 1)) >> 5; | ||
var byteCount = blockCount << 2; | ||
@@ -133,304 +134,282 @@ for(i = 0;i < 50;++i) { | ||
for(n = 0; n < 48; n += 2) { | ||
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; | ||
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; | ||
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; | ||
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; | ||
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; | ||
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; | ||
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; | ||
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; | ||
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; | ||
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; | ||
h = c8 ^ ((c2 << 1) | (c3 >>> 31)); | ||
l = c9 ^ ((c3 << 1) | (c2 >>> 31)); | ||
s[0] ^= h; | ||
s[1] ^= l; | ||
s[10] ^= h; | ||
s[11] ^= l; | ||
s[20] ^= h; | ||
s[21] ^= l; | ||
s[30] ^= h; | ||
s[31] ^= l; | ||
s[40] ^= h; | ||
s[41] ^= l; | ||
h = c0 ^ ((c4 << 1) | (c5 >>> 31)); | ||
l = c1 ^ ((c5 << 1) | (c4 >>> 31)); | ||
s[2] ^= h; | ||
s[3] ^= l; | ||
s[12] ^= h; | ||
s[13] ^= l; | ||
s[22] ^= h; | ||
s[23] ^= l; | ||
s[32] ^= h; | ||
s[33] ^= l; | ||
s[42] ^= h; | ||
s[43] ^= l; | ||
h = c2 ^ ((c6 << 1) | (c7 >>> 31)); | ||
l = c3 ^ ((c7 << 1) | (c6 >>> 31)); | ||
s[4] ^= h; | ||
s[5] ^= l; | ||
s[14] ^= h; | ||
s[15] ^= l; | ||
s[24] ^= h; | ||
s[25] ^= l; | ||
s[34] ^= h; | ||
s[35] ^= l; | ||
s[44] ^= h; | ||
s[45] ^= l; | ||
h = c4 ^ ((c8 << 1) | (c9 >>> 31)); | ||
l = c5 ^ ((c9 << 1) | (c8 >>> 31)); | ||
s[6] ^= h; | ||
s[7] ^= l; | ||
s[16] ^= h; | ||
s[17] ^= l; | ||
s[26] ^= h; | ||
s[27] ^= l; | ||
s[36] ^= h; | ||
s[37] ^= l; | ||
s[46] ^= h; | ||
s[47] ^= l; | ||
h = c6 ^ ((c0 << 1) | (c1 >>> 31)); | ||
l = c7 ^ ((c1 << 1) | (c0 >>> 31)); | ||
s[8] ^= h; | ||
s[9] ^= l; | ||
s[18] ^= h; | ||
s[19] ^= l; | ||
s[28] ^= h; | ||
s[29] ^= l; | ||
s[38] ^= h; | ||
s[39] ^= l; | ||
s[48] ^= h; | ||
s[49] ^= l; | ||
b0 = s[0]; | ||
b1 = s[1]; | ||
b32 = (s[11] << 4) | (s[10] >>> 28); | ||
b33 = (s[10] << 4) | (s[11] >>> 28); | ||
b14 = (s[20] << 3) | (s[21] >>> 29); | ||
b15 = (s[21] << 3) | (s[20] >>> 29); | ||
b46 = (s[31] << 9) | (s[30] >>> 23); | ||
b47 = (s[30] << 9) | (s[31] >>> 23); | ||
b28 = (s[40] << 18) | (s[41] >>> 14); | ||
b29 = (s[41] << 18) | (s[40] >>> 14); | ||
b20 = (s[2] << 1) | (s[3] >>> 31); | ||
b21 = (s[3] << 1) | (s[2] >>> 31); | ||
b2 = (s[13] << 12) | (s[12] >>> 20); | ||
b3 = (s[12] << 12) | (s[13] >>> 20); | ||
b34 = (s[22] << 10) | (s[23] >>> 22); | ||
b35 = (s[23] << 10) | (s[22] >>> 22); | ||
b16 = (s[33] << 13) | (s[32] >>> 19); | ||
b17 = (s[32] << 13) | (s[33] >>> 19); | ||
b48 = (s[42] << 2) | (s[43] >>> 30); | ||
b49 = (s[43] << 2) | (s[42] >>> 30); | ||
b40 = (s[5] << 30) | (s[4] >>> 2); | ||
b41 = (s[4] << 30) | (s[5] >>> 2); | ||
b22 = (s[14] << 6) | (s[15] >>> 26); | ||
b23 = (s[15] << 6) | (s[14] >>> 26); | ||
b4 = (s[25] << 11) | (s[24] >>> 21); | ||
b5 = (s[24] << 11) | (s[25] >>> 21); | ||
b36 = (s[34] << 15) | (s[35] >>> 17); | ||
b37 = (s[35] << 15) | (s[34] >>> 17); | ||
b18 = (s[45] << 29) | (s[44] >>> 3); | ||
b19 = (s[44] << 29) | (s[45] >>> 3); | ||
b10 = (s[6] << 28) | (s[7] >>> 4); | ||
b11 = (s[7] << 28) | (s[6] >>> 4); | ||
b42 = (s[17] << 23) | (s[16] >>> 9); | ||
b43 = (s[16] << 23) | (s[17] >>> 9); | ||
b24 = (s[26] << 25) | (s[27] >>> 7); | ||
b25 = (s[27] << 25) | (s[26] >>> 7); | ||
b6 = (s[36] << 21) | (s[37] >>> 11); | ||
b7 = (s[37] << 21) | (s[36] >>> 11); | ||
b38 = (s[47] << 24) | (s[46] >>> 8); | ||
b39 = (s[46] << 24) | (s[47] >>> 8); | ||
b30 = (s[8] << 27) | (s[9] >>> 5); | ||
b31 = (s[9] << 27) | (s[8] >>> 5); | ||
b12 = (s[18] << 20) | (s[19] >>> 12); | ||
b13 = (s[19] << 20) | (s[18] >>> 12); | ||
b44 = (s[29] << 7) | (s[28] >>> 25); | ||
b45 = (s[28] << 7) | (s[29] >>> 25); | ||
b26 = (s[38] << 8) | (s[39] >>> 24); | ||
b27 = (s[39] << 8) | (s[38] >>> 24); | ||
b8 = (s[48] << 14) | (s[49] >>> 18); | ||
b9 = (s[49] << 14) | (s[48] >>> 18); | ||
s[0] = b0 ^ (~b2 & b4); | ||
s[1] = b1 ^ (~b3 & b5); | ||
s[10] = b10 ^ (~b12 & b14); | ||
s[11] = b11 ^ (~b13 & b15); | ||
s[20] = b20 ^ (~b22 & b24); | ||
s[21] = b21 ^ (~b23 & b25); | ||
s[30] = b30 ^ (~b32 & b34); | ||
s[31] = b31 ^ (~b33 & b35); | ||
s[40] = b40 ^ (~b42 & b44); | ||
s[41] = b41 ^ (~b43 & b45); | ||
s[2] = b2 ^ (~b4 & b6); | ||
s[3] = b3 ^ (~b5 & b7); | ||
s[12] = b12 ^ (~b14 & b16); | ||
s[13] = b13 ^ (~b15 & b17); | ||
s[22] = b22 ^ (~b24 & b26); | ||
s[23] = b23 ^ (~b25 & b27); | ||
s[32] = b32 ^ (~b34 & b36); | ||
s[33] = b33 ^ (~b35 & b37); | ||
s[42] = b42 ^ (~b44 & b46); | ||
s[43] = b43 ^ (~b45 & b47); | ||
s[4] = b4 ^ (~b6 & b8); | ||
s[5] = b5 ^ (~b7 & b9); | ||
s[14] = b14 ^ (~b16 & b18); | ||
s[15] = b15 ^ (~b17 & b19); | ||
s[24] = b24 ^ (~b26 & b28); | ||
s[25] = b25 ^ (~b27 & b29); | ||
s[34] = b34 ^ (~b36 & b38); | ||
s[35] = b35 ^ (~b37 & b39); | ||
s[44] = b44 ^ (~b46 & b48); | ||
s[45] = b45 ^ (~b47 & b49); | ||
s[6] = b6 ^ (~b8 & b0); | ||
s[7] = b7 ^ (~b9 & b1); | ||
s[16] = b16 ^ (~b18 & b10); | ||
s[17] = b17 ^ (~b19 & b11); | ||
s[26] = b26 ^ (~b28 & b20); | ||
s[27] = b27 ^ (~b29 & b21); | ||
s[36] = b36 ^ (~b38 & b30); | ||
s[37] = b37 ^ (~b39 & b31); | ||
s[46] = b46 ^ (~b48 & b40); | ||
s[47] = b47 ^ (~b49 & b41); | ||
s[8] = b8 ^ (~b0 & b2); | ||
s[9] = b9 ^ (~b1 & b3); | ||
s[18] = b18 ^ (~b10 & b12); | ||
s[19] = b19 ^ (~b11 & b13); | ||
s[28] = b28 ^ (~b20 & b22); | ||
s[29] = b29 ^ (~b21 & b23); | ||
s[38] = b38 ^ (~b30 & b32); | ||
s[39] = b39 ^ (~b31 & b33); | ||
s[48] = b48 ^ (~b40 & b42); | ||
s[49] = b49 ^ (~b41 & b43); | ||
s[0] ^= RC[n]; | ||
s[1] ^= RC[n + 1]; | ||
} | ||
f(); | ||
} while(!end); | ||
var hex = ''; | ||
if(CHROME) { | ||
b0 = s[0]; | ||
b1 = s[1]; | ||
b2 = s[2]; | ||
b3 = s[3]; | ||
b4 = s[4]; | ||
b5 = s[5]; | ||
b6 = s[6]; | ||
b7 = s[7]; | ||
b8 = s[8]; | ||
b9 = s[9]; | ||
b10 = s[10]; | ||
b11 = s[11]; | ||
b12 = s[12]; | ||
b13 = s[13]; | ||
b14 = s[14]; | ||
b15 = s[15]; | ||
hex += HEX_CHARS[(b0 >> 4) & 0x0F] + HEX_CHARS[b0 & 0x0F] + | ||
HEX_CHARS[(b0 >> 12) & 0x0F] + HEX_CHARS[(b0 >> 8) & 0x0F] + | ||
HEX_CHARS[(b0 >> 20) & 0x0F] + HEX_CHARS[(b0 >> 16) & 0x0F] + | ||
HEX_CHARS[(b0 >> 28) & 0x0F] + HEX_CHARS[(b0 >> 24) & 0x0F] + | ||
HEX_CHARS[(b1 >> 4) & 0x0F] + HEX_CHARS[b1 & 0x0F] + | ||
HEX_CHARS[(b1 >> 12) & 0x0F] + HEX_CHARS[(b1 >> 8) & 0x0F] + | ||
HEX_CHARS[(b1 >> 20) & 0x0F] + HEX_CHARS[(b1 >> 16) & 0x0F] + | ||
HEX_CHARS[(b1 >> 28) & 0x0F] + HEX_CHARS[(b1 >> 24) & 0x0F] + | ||
HEX_CHARS[(b2 >> 4) & 0x0F] + HEX_CHARS[b2 & 0x0F] + | ||
HEX_CHARS[(b2 >> 12) & 0x0F] + HEX_CHARS[(b2 >> 8) & 0x0F] + | ||
HEX_CHARS[(b2 >> 20) & 0x0F] + HEX_CHARS[(b2 >> 16) & 0x0F] + | ||
HEX_CHARS[(b2 >> 28) & 0x0F] + HEX_CHARS[(b2 >> 24) & 0x0F] + | ||
HEX_CHARS[(b3 >> 4) & 0x0F] + HEX_CHARS[b3 & 0x0F] + | ||
HEX_CHARS[(b3 >> 12) & 0x0F] + HEX_CHARS[(b3 >> 8) & 0x0F] + | ||
HEX_CHARS[(b3 >> 20) & 0x0F] + HEX_CHARS[(b3 >> 16) & 0x0F] + | ||
HEX_CHARS[(b3 >> 28) & 0x0F] + HEX_CHARS[(b3 >> 24) & 0x0F] + | ||
HEX_CHARS[(b4 >> 4) & 0x0F] + HEX_CHARS[b4 & 0x0F] + | ||
HEX_CHARS[(b4 >> 12) & 0x0F] + HEX_CHARS[(b4 >> 8) & 0x0F] + | ||
HEX_CHARS[(b4 >> 20) & 0x0F] + HEX_CHARS[(b4 >> 16) & 0x0F] + | ||
HEX_CHARS[(b4 >> 28) & 0x0F] + HEX_CHARS[(b4 >> 24) & 0x0F] + | ||
HEX_CHARS[(b5 >> 4) & 0x0F] + HEX_CHARS[b5 & 0x0F] + | ||
HEX_CHARS[(b5 >> 12) & 0x0F] + HEX_CHARS[(b5 >> 8) & 0x0F] + | ||
HEX_CHARS[(b5 >> 20) & 0x0F] + HEX_CHARS[(b5 >> 16) & 0x0F] + | ||
HEX_CHARS[(b5 >> 28) & 0x0F] + HEX_CHARS[(b5 >> 24) & 0x0F] + | ||
HEX_CHARS[(b6 >> 4) & 0x0F] + HEX_CHARS[b6 & 0x0F] + | ||
HEX_CHARS[(b6 >> 12) & 0x0F] + HEX_CHARS[(b6 >> 8) & 0x0F] + | ||
HEX_CHARS[(b6 >> 20) & 0x0F] + HEX_CHARS[(b6 >> 16) & 0x0F] + | ||
HEX_CHARS[(b6 >> 28) & 0x0F] + HEX_CHARS[(b6 >> 24) & 0x0F]; | ||
if(bits >= 256) { | ||
hex += HEX_CHARS[(b7 >> 4) & 0x0F] + HEX_CHARS[b7 & 0x0F] + | ||
HEX_CHARS[(b7 >> 12) & 0x0F] + HEX_CHARS[(b7 >> 8) & 0x0F] + | ||
HEX_CHARS[(b7 >> 20) & 0x0F] + HEX_CHARS[(b7 >> 16) & 0x0F] + | ||
HEX_CHARS[(b7 >> 28) & 0x0F] + HEX_CHARS[(b7 >> 24) & 0x0F]; | ||
var outputBlocks = outputBits >> 5; | ||
var extraBytes = (outputBits & 31) >> 3; | ||
j = 0, i = 0; | ||
if(outputType == 'buffer') { | ||
var bytes = outputBits >> 3; | ||
var buffer; | ||
if(extraBytes) { | ||
buffer = new ArrayBuffer((outputBlocks + 1) << 2); | ||
} else { | ||
buffer = new ArrayBuffer(bytes); | ||
} | ||
if(bits >= 384) { | ||
hex += HEX_CHARS[(b8 >> 4) & 0x0F] + HEX_CHARS[b8 & 0x0F] + | ||
HEX_CHARS[(b8 >> 12) & 0x0F] + HEX_CHARS[(b8 >> 8) & 0x0F] + | ||
HEX_CHARS[(b8 >> 20) & 0x0F] + HEX_CHARS[(b8 >> 16) & 0x0F] + | ||
HEX_CHARS[(b8 >> 28) & 0x0F] + HEX_CHARS[(b8 >> 24) & 0x0F] + | ||
HEX_CHARS[(b9 >> 4) & 0x0F] + HEX_CHARS[b9 & 0x0F] + | ||
HEX_CHARS[(b9 >> 12) & 0x0F] + HEX_CHARS[(b9 >> 8) & 0x0F] + | ||
HEX_CHARS[(b9 >> 20) & 0x0F] + HEX_CHARS[(b9 >> 16) & 0x0F] + | ||
HEX_CHARS[(b9 >> 28) & 0x0F] + HEX_CHARS[(b9 >> 24) & 0x0F] + | ||
HEX_CHARS[(b10 >> 4) & 0x0F] + HEX_CHARS[b10 & 0x0F] + | ||
HEX_CHARS[(b10 >> 12) & 0x0F] + HEX_CHARS[(b10 >> 8) & 0x0F] + | ||
HEX_CHARS[(b10 >> 20) & 0x0F] + HEX_CHARS[(b10 >> 16) & 0x0F] + | ||
HEX_CHARS[(b10 >> 28) & 0x0F] + HEX_CHARS[(b10 >> 24) & 0x0F] + | ||
HEX_CHARS[(b11 >> 4) & 0x0F] + HEX_CHARS[b11 & 0x0F] + | ||
HEX_CHARS[(b11 >> 12) & 0x0F] + HEX_CHARS[(b11 >> 8) & 0x0F] + | ||
HEX_CHARS[(b11 >> 20) & 0x0F] + HEX_CHARS[(b11 >> 16) & 0x0F] + | ||
HEX_CHARS[(b11 >> 28) & 0x0F] + HEX_CHARS[(b11 >> 24) & 0x0F]; | ||
var array = new Uint32Array(buffer); | ||
while(j < outputBlocks) { | ||
for(i = 0;i < blockCount && j < outputBlocks;++i, ++j) { | ||
array[j] = s[i]; | ||
} | ||
if(j % blockCount == 0) { | ||
f(); | ||
} | ||
} | ||
if(bits == 512) { | ||
hex += HEX_CHARS[(b12 >> 4) & 0x0F] + HEX_CHARS[b12 & 0x0F] + | ||
HEX_CHARS[(b12 >> 12) & 0x0F] + HEX_CHARS[(b12 >> 8) & 0x0F] + | ||
HEX_CHARS[(b12 >> 20) & 0x0F] + HEX_CHARS[(b12 >> 16) & 0x0F] + | ||
HEX_CHARS[(b12 >> 28) & 0x0F] + HEX_CHARS[(b12 >> 24) & 0x0F] + | ||
HEX_CHARS[(b13 >> 4) & 0x0F] + HEX_CHARS[b13 & 0x0F] + | ||
HEX_CHARS[(b13 >> 12) & 0x0F] + HEX_CHARS[(b13 >> 8) & 0x0F] + | ||
HEX_CHARS[(b13 >> 20) & 0x0F] + HEX_CHARS[(b13 >> 16) & 0x0F] + | ||
HEX_CHARS[(b13 >> 28) & 0x0F] + HEX_CHARS[(b13 >> 24) & 0x0F] + | ||
HEX_CHARS[(b14 >> 4) & 0x0F] + HEX_CHARS[b14 & 0x0F] + | ||
HEX_CHARS[(b14 >> 12) & 0x0F] + HEX_CHARS[(b14 >> 8) & 0x0F] + | ||
HEX_CHARS[(b14 >> 20) & 0x0F] + HEX_CHARS[(b14 >> 16) & 0x0F] + | ||
HEX_CHARS[(b14 >> 28) & 0x0F] + HEX_CHARS[(b14 >> 24) & 0x0F] + | ||
HEX_CHARS[(b15 >> 4) & 0x0F] + HEX_CHARS[b15 & 0x0F] + | ||
HEX_CHARS[(b15 >> 12) & 0x0F] + HEX_CHARS[(b15 >> 8) & 0x0F] + | ||
HEX_CHARS[(b15 >> 20) & 0x0F] + HEX_CHARS[(b15 >> 16) & 0x0F] + | ||
HEX_CHARS[(b15 >> 28) & 0x0F] + HEX_CHARS[(b15 >> 24) & 0x0F]; | ||
if(extraBytes) { | ||
array[i] = s[i]; | ||
buffer = buffer.slice(0, bytes); | ||
} | ||
return buffer; | ||
} else if(outputType == 'array') { | ||
var array = [], offset; | ||
while(j < outputBlocks) { | ||
for(i = 0;i < blockCount && j < outputBlocks;++i, ++j) { | ||
offset = j << 2; | ||
h = s[i]; | ||
array[offset] = h & 0xFF; | ||
array[offset + 1] = (h >> 8) & 0xFF; | ||
array[offset + 2] = (h >> 16) & 0xFF; | ||
array[offset + 3] = (h >> 24) & 0xFF; | ||
} | ||
if(j % blockCount == 0) { | ||
f(); | ||
} | ||
} | ||
if(extraBytes) { | ||
offset = j << 2; | ||
h = s[i]; | ||
if(extraBytes > 0) { | ||
array[offset] = h & 0xFF; | ||
} | ||
if(extraBytes > 1) { | ||
array[offset + 1] = (h >> 8) & 0xFF; | ||
} | ||
if(extraBytes > 2) { | ||
array[offset + 2] = (h >> 16) & 0xFF; | ||
} | ||
} | ||
return array; | ||
} else { | ||
for(i = 0, n = bits / 32;i < n;++i) { | ||
var hex = ''; | ||
while(j < outputBlocks) { | ||
for(i = 0;i < blockCount && j < outputBlocks;++i, ++j) { | ||
h = s[i]; | ||
hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + | ||
HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + | ||
HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + | ||
HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; | ||
} | ||
if(j % blockCount == 0) { | ||
f(); | ||
} | ||
} | ||
if(extraBytes) { | ||
h = s[i]; | ||
hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + | ||
HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + | ||
HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + | ||
HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; | ||
if(extraBytes > 0) { | ||
hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F]; | ||
} | ||
if(extraBytes > 1) { | ||
hex += HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F]; | ||
} | ||
if(extraBytes > 2) { | ||
hex += HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F]; | ||
} | ||
} | ||
return hex; | ||
} | ||
return hex; | ||
}; | ||
var f = function() { | ||
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, | ||
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, | ||
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, | ||
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; | ||
for(n = 0; n < 48; n += 2) { | ||
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; | ||
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; | ||
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; | ||
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; | ||
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; | ||
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; | ||
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; | ||
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; | ||
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; | ||
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; | ||
h = c8 ^ ((c2 << 1) | (c3 >>> 31)); | ||
l = c9 ^ ((c3 << 1) | (c2 >>> 31)); | ||
s[0] ^= h; | ||
s[1] ^= l; | ||
s[10] ^= h; | ||
s[11] ^= l; | ||
s[20] ^= h; | ||
s[21] ^= l; | ||
s[30] ^= h; | ||
s[31] ^= l; | ||
s[40] ^= h; | ||
s[41] ^= l; | ||
h = c0 ^ ((c4 << 1) | (c5 >>> 31)); | ||
l = c1 ^ ((c5 << 1) | (c4 >>> 31)); | ||
s[2] ^= h; | ||
s[3] ^= l; | ||
s[12] ^= h; | ||
s[13] ^= l; | ||
s[22] ^= h; | ||
s[23] ^= l; | ||
s[32] ^= h; | ||
s[33] ^= l; | ||
s[42] ^= h; | ||
s[43] ^= l; | ||
h = c2 ^ ((c6 << 1) | (c7 >>> 31)); | ||
l = c3 ^ ((c7 << 1) | (c6 >>> 31)); | ||
s[4] ^= h; | ||
s[5] ^= l; | ||
s[14] ^= h; | ||
s[15] ^= l; | ||
s[24] ^= h; | ||
s[25] ^= l; | ||
s[34] ^= h; | ||
s[35] ^= l; | ||
s[44] ^= h; | ||
s[45] ^= l; | ||
h = c4 ^ ((c8 << 1) | (c9 >>> 31)); | ||
l = c5 ^ ((c9 << 1) | (c8 >>> 31)); | ||
s[6] ^= h; | ||
s[7] ^= l; | ||
s[16] ^= h; | ||
s[17] ^= l; | ||
s[26] ^= h; | ||
s[27] ^= l; | ||
s[36] ^= h; | ||
s[37] ^= l; | ||
s[46] ^= h; | ||
s[47] ^= l; | ||
h = c6 ^ ((c0 << 1) | (c1 >>> 31)); | ||
l = c7 ^ ((c1 << 1) | (c0 >>> 31)); | ||
s[8] ^= h; | ||
s[9] ^= l; | ||
s[18] ^= h; | ||
s[19] ^= l; | ||
s[28] ^= h; | ||
s[29] ^= l; | ||
s[38] ^= h; | ||
s[39] ^= l; | ||
s[48] ^= h; | ||
s[49] ^= l; | ||
b0 = s[0]; | ||
b1 = s[1]; | ||
b32 = (s[11] << 4) | (s[10] >>> 28); | ||
b33 = (s[10] << 4) | (s[11] >>> 28); | ||
b14 = (s[20] << 3) | (s[21] >>> 29); | ||
b15 = (s[21] << 3) | (s[20] >>> 29); | ||
b46 = (s[31] << 9) | (s[30] >>> 23); | ||
b47 = (s[30] << 9) | (s[31] >>> 23); | ||
b28 = (s[40] << 18) | (s[41] >>> 14); | ||
b29 = (s[41] << 18) | (s[40] >>> 14); | ||
b20 = (s[2] << 1) | (s[3] >>> 31); | ||
b21 = (s[3] << 1) | (s[2] >>> 31); | ||
b2 = (s[13] << 12) | (s[12] >>> 20); | ||
b3 = (s[12] << 12) | (s[13] >>> 20); | ||
b34 = (s[22] << 10) | (s[23] >>> 22); | ||
b35 = (s[23] << 10) | (s[22] >>> 22); | ||
b16 = (s[33] << 13) | (s[32] >>> 19); | ||
b17 = (s[32] << 13) | (s[33] >>> 19); | ||
b48 = (s[42] << 2) | (s[43] >>> 30); | ||
b49 = (s[43] << 2) | (s[42] >>> 30); | ||
b40 = (s[5] << 30) | (s[4] >>> 2); | ||
b41 = (s[4] << 30) | (s[5] >>> 2); | ||
b22 = (s[14] << 6) | (s[15] >>> 26); | ||
b23 = (s[15] << 6) | (s[14] >>> 26); | ||
b4 = (s[25] << 11) | (s[24] >>> 21); | ||
b5 = (s[24] << 11) | (s[25] >>> 21); | ||
b36 = (s[34] << 15) | (s[35] >>> 17); | ||
b37 = (s[35] << 15) | (s[34] >>> 17); | ||
b18 = (s[45] << 29) | (s[44] >>> 3); | ||
b19 = (s[44] << 29) | (s[45] >>> 3); | ||
b10 = (s[6] << 28) | (s[7] >>> 4); | ||
b11 = (s[7] << 28) | (s[6] >>> 4); | ||
b42 = (s[17] << 23) | (s[16] >>> 9); | ||
b43 = (s[16] << 23) | (s[17] >>> 9); | ||
b24 = (s[26] << 25) | (s[27] >>> 7); | ||
b25 = (s[27] << 25) | (s[26] >>> 7); | ||
b6 = (s[36] << 21) | (s[37] >>> 11); | ||
b7 = (s[37] << 21) | (s[36] >>> 11); | ||
b38 = (s[47] << 24) | (s[46] >>> 8); | ||
b39 = (s[46] << 24) | (s[47] >>> 8); | ||
b30 = (s[8] << 27) | (s[9] >>> 5); | ||
b31 = (s[9] << 27) | (s[8] >>> 5); | ||
b12 = (s[18] << 20) | (s[19] >>> 12); | ||
b13 = (s[19] << 20) | (s[18] >>> 12); | ||
b44 = (s[29] << 7) | (s[28] >>> 25); | ||
b45 = (s[28] << 7) | (s[29] >>> 25); | ||
b26 = (s[38] << 8) | (s[39] >>> 24); | ||
b27 = (s[39] << 8) | (s[38] >>> 24); | ||
b8 = (s[48] << 14) | (s[49] >>> 18); | ||
b9 = (s[49] << 14) | (s[48] >>> 18); | ||
s[0] = b0 ^ (~b2 & b4); | ||
s[1] = b1 ^ (~b3 & b5); | ||
s[10] = b10 ^ (~b12 & b14); | ||
s[11] = b11 ^ (~b13 & b15); | ||
s[20] = b20 ^ (~b22 & b24); | ||
s[21] = b21 ^ (~b23 & b25); | ||
s[30] = b30 ^ (~b32 & b34); | ||
s[31] = b31 ^ (~b33 & b35); | ||
s[40] = b40 ^ (~b42 & b44); | ||
s[41] = b41 ^ (~b43 & b45); | ||
s[2] = b2 ^ (~b4 & b6); | ||
s[3] = b3 ^ (~b5 & b7); | ||
s[12] = b12 ^ (~b14 & b16); | ||
s[13] = b13 ^ (~b15 & b17); | ||
s[22] = b22 ^ (~b24 & b26); | ||
s[23] = b23 ^ (~b25 & b27); | ||
s[32] = b32 ^ (~b34 & b36); | ||
s[33] = b33 ^ (~b35 & b37); | ||
s[42] = b42 ^ (~b44 & b46); | ||
s[43] = b43 ^ (~b45 & b47); | ||
s[4] = b4 ^ (~b6 & b8); | ||
s[5] = b5 ^ (~b7 & b9); | ||
s[14] = b14 ^ (~b16 & b18); | ||
s[15] = b15 ^ (~b17 & b19); | ||
s[24] = b24 ^ (~b26 & b28); | ||
s[25] = b25 ^ (~b27 & b29); | ||
s[34] = b34 ^ (~b36 & b38); | ||
s[35] = b35 ^ (~b37 & b39); | ||
s[44] = b44 ^ (~b46 & b48); | ||
s[45] = b45 ^ (~b47 & b49); | ||
s[6] = b6 ^ (~b8 & b0); | ||
s[7] = b7 ^ (~b9 & b1); | ||
s[16] = b16 ^ (~b18 & b10); | ||
s[17] = b17 ^ (~b19 & b11); | ||
s[26] = b26 ^ (~b28 & b20); | ||
s[27] = b27 ^ (~b29 & b21); | ||
s[36] = b36 ^ (~b38 & b30); | ||
s[37] = b37 ^ (~b39 & b31); | ||
s[46] = b46 ^ (~b48 & b40); | ||
s[47] = b47 ^ (~b49 & b41); | ||
s[8] = b8 ^ (~b0 & b2); | ||
s[9] = b9 ^ (~b1 & b3); | ||
s[18] = b18 ^ (~b10 & b12); | ||
s[19] = b19 ^ (~b11 & b13); | ||
s[28] = b28 ^ (~b20 & b22); | ||
s[29] = b29 ^ (~b21 & b23); | ||
s[38] = b38 ^ (~b30 & b32); | ||
s[39] = b39 ^ (~b31 & b33); | ||
s[48] = b48 ^ (~b40 & b42); | ||
s[49] = b49 ^ (~b41 & b43); | ||
s[0] ^= RC[n]; | ||
s[1] ^= RC[n + 1]; | ||
} | ||
} | ||
if(!root.JS_SHA3_TEST && NODE_JS) { | ||
module.exports = { | ||
sha3_512: sha3_512, | ||
sha3_384: sha3_384, | ||
sha3_256: sha3_256, | ||
sha3_224: sha3_224, | ||
keccak_512: keccak, | ||
keccak_384: keccak_384, | ||
keccak_256: keccak_256, | ||
keccak_224: keccak_224 | ||
}; | ||
module.exports = methods; | ||
} else if(root) { | ||
root.sha3_512 = sha3_512; | ||
root.sha3_384 = sha3_384; | ||
root.sha3_256 = sha3_256; | ||
root.sha3_224 = sha3_224; | ||
root.keccak_512 = keccak; | ||
root.keccak_384 = keccak_384; | ||
root.keccak_256 = keccak_256; | ||
root.keccak_224 = keccak_224; | ||
for(var key in methods) { | ||
root[key] = methods[key]; | ||
} | ||
} | ||
}(this)); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
266
26078
3
400