|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* js-sha3 v0.3.1
|
|
|
|
|
* js-sha3 v0.4.0
|
|
|
|
|
* https://github.com/emn178/js-sha3
|
|
|
|
|
*
|
|
|
|
|
* Copyright 2015, emn178@gmail.com
|
|
|
|
@ -27,48 +27,41 @@
|
|
|
|
|
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
|
|
|
|
|
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
|
|
|
|
|
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
|
|
|
|
|
var BITS = [224, 256, 384, 512];
|
|
|
|
|
var ALGORITHMS = [
|
|
|
|
|
{name: 'keccak', padding: KECCAK_PADDING},
|
|
|
|
|
{name: 'sha3', padding: PADDING}
|
|
|
|
|
];
|
|
|
|
|
var OUTPUT_TYPES = ['hex', 'buffer'];
|
|
|
|
|
|
|
|
|
|
var blocks = [], s = [];
|
|
|
|
|
var blocks = [], s = [], methods = {};
|
|
|
|
|
|
|
|
|
|
var keccak_224 = function(message) {
|
|
|
|
|
return keccak(message, 224, KECCAK_PADDING);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var keccak_256 = function(message) {
|
|
|
|
|
return keccak(message, 256, KECCAK_PADDING);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var keccak_384 = function(message) {
|
|
|
|
|
return keccak(message, 384, KECCAK_PADDING);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var sha3_224 = function(message) {
|
|
|
|
|
return keccak(message, 224, PADDING);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var sha3_256 = function(message) {
|
|
|
|
|
return keccak(message, 256, PADDING);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var sha3_384 = function(message) {
|
|
|
|
|
return keccak(message, 384, PADDING);
|
|
|
|
|
var createMethod = function(bits, padding, outputType) {
|
|
|
|
|
return function(message) {
|
|
|
|
|
return keccak(message, bits, padding, outputType);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var sha3_512 = function(message) {
|
|
|
|
|
return keccak(message, 512, PADDING);
|
|
|
|
|
};
|
|
|
|
|
for(var i = 0;i < ALGORITHMS.length;++i) {
|
|
|
|
|
var algorithm = ALGORITHMS[i];
|
|
|
|
|
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 keccak = function(message, bits, padding) {
|
|
|
|
|
var keccak = function(message, bits, padding, outputType) {
|
|
|
|
|
var notString = typeof(message) != 'string';
|
|
|
|
|
if(notString && message.constructor == root.ArrayBuffer) {
|
|
|
|
|
message = new Uint8Array(message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
@ -307,6 +300,15 @@
|
|
|
|
|
}
|
|
|
|
|
} while(!end);
|
|
|
|
|
|
|
|
|
|
if(outputType == 'buffer') {
|
|
|
|
|
var length = bits / 32;
|
|
|
|
|
var buffer = new ArrayBuffer(bits / 8);
|
|
|
|
|
var array = new Uint32Array(buffer);
|
|
|
|
|
for(var i = 0;i < length;++i) {
|
|
|
|
|
array[i] = s[i];
|
|
|
|
|
}
|
|
|
|
|
return buffer;
|
|
|
|
|
} else {
|
|
|
|
|
var hex = '';
|
|
|
|
|
if(CHROME) {
|
|
|
|
|
b0 = s[0];
|
|
|
|
@ -406,27 +408,14 @@
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return hex;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
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));
|
|
|
|
|