array buffer output

pull/6/head
Yi-Cyuan 10 years ago
parent 0d1753fd8d
commit 61300d2d34

@ -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));

@ -59,6 +59,12 @@
expect(keccak_512(new ArrayBuffer(0))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
});
});
context('when output ArrayBuffer', function() {
it('should be equal', function() {
expect(keccak_512.buffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
});
});
});
describe('keccak_384', function() {

@ -1,3 +1,12 @@
ArrayBuffer.prototype.toHexString = function (argument) {
var array = new Uint8Array(this);
var hex = '';
for(var i = 0;i < array.length;++i) {
var c = array[i].toString('16');
hex += c.length == 1 ? '0' + c : c;
}
return hex;
};
(function(sha3_512, sha3_384, sha3_256, sha3_224) {
describe('sha3_512', function() {
context('when ascii', function() {
@ -59,6 +68,12 @@
expect(sha3_512(new ArrayBuffer(0))).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26');
});
});
context('when output ArrayBuffer', function() {
it('should be equal', function() {
expect(sha3_512.buffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26');
});
});
});
describe('sha3_384', function() {

Loading…
Cancel
Save