mirror of
https://github.com/emn178/js-sha3.git
synced 2026-08-12 19:41:36 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d1753fd8d | ||
|
|
7851f7ad68 | ||
|
|
db3ab779a8 | ||
|
|
372541684a | ||
|
|
1fa1812d86 | ||
|
|
e686ac6177 | ||
|
|
87364f594b |
@@ -1 +1,2 @@
|
|||||||
/tests/
|
/tests/
|
||||||
|
node_modules/
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
covreporter
|
covreporter
|
||||||
|
my_test
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
my_test
|
||||||
|
covreporter
|
||||||
|
build
|
||||||
|
tests
|
||||||
@@ -1,3 +1,24 @@
|
|||||||
|
# v0.3.1 / 2015-05-22
|
||||||
|
|
||||||
|
* Fixed bugs.
|
||||||
|
|
||||||
|
# v0.3.0 / 2015-05-21
|
||||||
|
|
||||||
|
* Support byte array and ArrayBuffer input.
|
||||||
|
|
||||||
|
# v0.2.0 / 2015-04-04
|
||||||
|
|
||||||
|
* Implement NIST's May 2014 SHA-3 version.
|
||||||
|
* Rename original methods to keccak.
|
||||||
|
|
||||||
|
# v0.1.2 / 2015-02-27
|
||||||
|
|
||||||
|
* Improve performance.
|
||||||
|
|
||||||
|
# v0.1.1 / 2015-02-26
|
||||||
|
|
||||||
|
* Improve performance.
|
||||||
|
|
||||||
# v0.1.0 / 2015-02-23
|
# v0.1.0 / 2015-02-23
|
||||||
|
|
||||||
* Initial release
|
* Initial release
|
||||||
|
|||||||
+3
-1
@@ -1,4 +1,6 @@
|
|||||||
Copyright 2015 emn178@gmail.com
|
Copyright (c) 2015 Chen Yi-Cyuan
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -4,6 +4,19 @@
|
|||||||
[](https://nodei.co/npm/js-sha3/)
|
[](https://nodei.co/npm/js-sha3/)
|
||||||
A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.
|
A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.
|
||||||
|
|
||||||
|
## Notice
|
||||||
|
Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods of v0.1.x are equal to keccak methods of v0.2.x and later.
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
[SHA3-512 Online](http://emn178.github.io/online-tools/sha3_512.html)
|
||||||
|
[SHA3-384 Online](http://emn178.github.io/online-tools/sha3_384.html)
|
||||||
|
[SHA3-256 Online](http://emn178.github.io/online-tools/sha3_256.html)
|
||||||
|
[SHA3-224 Online](http://emn178.github.io/online-tools/sha3_224.html)
|
||||||
|
[Keccak-512 Online](http://emn178.github.io/online-tools/keccak_512.html)
|
||||||
|
[Keccak-384 Online](http://emn178.github.io/online-tools/keccak_384.html)
|
||||||
|
[Keccak-256 Online](http://emn178.github.io/online-tools/keccak_256.html)
|
||||||
|
[Keccak-224 Online](http://emn178.github.io/online-tools/keccak_224.html)
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
[Compress](https://raw.github.com/emn178/js-sha3/master/build/sha3.min.js)
|
[Compress](https://raw.github.com/emn178/js-sha3/master/build/sha3.min.js)
|
||||||
[Uncompress](https://raw.github.com/emn178/js-sha3/master/src/sha3.js)
|
[Uncompress](https://raw.github.com/emn178/js-sha3/master/src/sha3.js)
|
||||||
@@ -24,6 +37,10 @@ sha3_512('Message to hash');
|
|||||||
sha3_384('Message to hash');
|
sha3_384('Message to hash');
|
||||||
sha3_256('Message to hash');
|
sha3_256('Message to hash');
|
||||||
sha3_224('Message to hash');
|
sha3_224('Message to hash');
|
||||||
|
keccak_512('Message to hash');
|
||||||
|
keccak_384('Message to hash');
|
||||||
|
keccak_256('Message to hash');
|
||||||
|
keccak_224('Message to hash');
|
||||||
```
|
```
|
||||||
If you use node.js, you should require the module first:
|
If you use node.js, you should require the module first:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
@@ -31,54 +48,132 @@ sha3_512 = require('js-sha3').sha3_512;
|
|||||||
sha3_384 = require('js-sha3').sha3_384;
|
sha3_384 = require('js-sha3').sha3_384;
|
||||||
sha3_256 = require('js-sha3').sha3_256;
|
sha3_256 = require('js-sha3').sha3_256;
|
||||||
sha3_224 = require('js-sha3').sha3_224;
|
sha3_224 = require('js-sha3').sha3_224;
|
||||||
|
keccak_512 = require('js-sha3').keccak_512;
|
||||||
|
keccak_384 = require('js-sha3').keccak_384;
|
||||||
|
keccak_256 = require('js-sha3').keccak_256;
|
||||||
|
keccak_224 = require('js-sha3').keccak_224;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
Code
|
Code
|
||||||
```JavaScript
|
```JavaScript
|
||||||
sha3_512('');
|
sha3_512('');
|
||||||
|
// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
|
||||||
|
|
||||||
sha3_512('The quick brown fox jumps over the lazy dog');
|
sha3_512('The quick brown fox jumps over the lazy dog');
|
||||||
|
// 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450
|
||||||
|
|
||||||
sha3_512('The quick brown fox jumps over the lazy dog.');
|
sha3_512('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// 18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8
|
||||||
|
|
||||||
sha3_384('');
|
sha3_384('');
|
||||||
|
// 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004
|
||||||
|
|
||||||
sha3_384('The quick brown fox jumps over the lazy dog');
|
sha3_384('The quick brown fox jumps over the lazy dog');
|
||||||
|
// 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41
|
||||||
|
|
||||||
sha3_384('The quick brown fox jumps over the lazy dog.');
|
sha3_384('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9
|
||||||
|
|
||||||
sha3_256('');
|
sha3_256('');
|
||||||
|
// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
|
||||||
|
|
||||||
sha3_256('The quick brown fox jumps over the lazy dog');
|
sha3_256('The quick brown fox jumps over the lazy dog');
|
||||||
|
// 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04
|
||||||
|
|
||||||
sha3_256('The quick brown fox jumps over the lazy dog.');
|
sha3_256('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d
|
||||||
|
|
||||||
sha3_224('');
|
sha3_224('');
|
||||||
|
// 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7
|
||||||
|
|
||||||
sha3_224('The quick brown fox jumps over the lazy dog');
|
sha3_224('The quick brown fox jumps over the lazy dog');
|
||||||
|
// d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795
|
||||||
|
|
||||||
sha3_224('The quick brown fox jumps over the lazy dog.');
|
sha3_224('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0
|
||||||
|
|
||||||
|
keccak_512('');
|
||||||
|
// 0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e
|
||||||
|
|
||||||
|
keccak_512('The quick brown fox jumps over the lazy dog');
|
||||||
|
// d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609
|
||||||
|
|
||||||
|
keccak_512('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760
|
||||||
|
|
||||||
|
keccak_384('');
|
||||||
|
// 2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff
|
||||||
|
|
||||||
|
keccak_384('The quick brown fox jumps over the lazy dog');
|
||||||
|
// 283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3
|
||||||
|
|
||||||
|
keccak_384('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// 9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b
|
||||||
|
|
||||||
|
keccak_256('');
|
||||||
|
// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
|
||||||
|
|
||||||
|
keccak_256('The quick brown fox jumps over the lazy dog');
|
||||||
|
// 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15
|
||||||
|
|
||||||
|
keccak_256('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// 578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d
|
||||||
|
|
||||||
|
keccak_224('');
|
||||||
|
// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd
|
||||||
|
|
||||||
|
keccak_224('The quick brown fox jumps over the lazy dog');
|
||||||
|
// 310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe
|
||||||
|
|
||||||
|
keccak_224('The quick brown fox jumps over the lazy dog.');
|
||||||
|
// c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab
|
||||||
```
|
```
|
||||||
Output
|
|
||||||
|
|
||||||
0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e
|
|
||||||
d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609
|
|
||||||
ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760
|
|
||||||
2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff
|
|
||||||
283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3
|
|
||||||
9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b
|
|
||||||
c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
|
|
||||||
4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15
|
|
||||||
578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d
|
|
||||||
f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd
|
|
||||||
310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe
|
|
||||||
c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab
|
|
||||||
|
|
||||||
It also supports UTF-8 encoding:
|
It also supports UTF-8 encoding:
|
||||||
|
|
||||||
Code
|
Code
|
||||||
```JavaScript
|
```JavaScript
|
||||||
sha3_512('中文');
|
sha3_512('中文');
|
||||||
sha3_384('中文');
|
// 059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7
|
||||||
sha3_256('中文');
|
|
||||||
sha3_224('中文');
|
|
||||||
```
|
|
||||||
Output
|
|
||||||
|
|
||||||
2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524
|
sha3_384('中文');
|
||||||
743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c
|
// 9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432
|
||||||
70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee
|
|
||||||
f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd
|
sha3_256('中文');
|
||||||
|
// ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0
|
||||||
|
|
||||||
|
sha3_224('中文');
|
||||||
|
// 106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee
|
||||||
|
|
||||||
|
keccak_512('中文');
|
||||||
|
// 2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524
|
||||||
|
|
||||||
|
keccak_384('中文');
|
||||||
|
// 743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c
|
||||||
|
|
||||||
|
keccak_256('中文');
|
||||||
|
// 70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee
|
||||||
|
|
||||||
|
keccak_224('中文');
|
||||||
|
// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd
|
||||||
|
```
|
||||||
|
|
||||||
|
It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input:
|
||||||
|
|
||||||
|
Code
|
||||||
|
```JavaScript
|
||||||
|
sha3_512([]);
|
||||||
|
// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
|
||||||
|
|
||||||
|
sha3_512(new Uint8Array([]));
|
||||||
|
// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26
|
||||||
|
|
||||||
|
// ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Benchmark
|
||||||
|
[UTF8](http://jsperf.com/sha3/5)
|
||||||
|
[ASCII](http://jsperf.com/sha3/4)
|
||||||
|
|
||||||
## Extensions
|
## Extensions
|
||||||
### jQuery
|
### jQuery
|
||||||
@@ -90,6 +185,10 @@ jQuery.sha3_512 = sha3_512;
|
|||||||
jQuery.sha3_384 = sha3_384;
|
jQuery.sha3_384 = sha3_384;
|
||||||
jQuery.sha3_256 = sha3_256;
|
jQuery.sha3_256 = sha3_256;
|
||||||
jQuery.sha3_224 = sha3_224;
|
jQuery.sha3_224 = sha3_224;
|
||||||
|
jQuery.keccak_512 = keccak_512;
|
||||||
|
jQuery.keccak_384 = keccak_384;
|
||||||
|
jQuery.keccak_256 = keccak_256;
|
||||||
|
jQuery.keccak_224 = keccak_224;
|
||||||
```
|
```
|
||||||
And then you could use like this:
|
And then you could use like this:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
@@ -97,6 +196,10 @@ $.sha3_512('message');
|
|||||||
$.sha3_384('message');
|
$.sha3_384('message');
|
||||||
$.sha3_256('message');
|
$.sha3_256('message');
|
||||||
$.sha3_224('message');
|
$.sha3_224('message');
|
||||||
|
$.keccak_512('message');
|
||||||
|
$.keccak_384('message');
|
||||||
|
$.keccak_256('message');
|
||||||
|
$.keccak_224('message');
|
||||||
```
|
```
|
||||||
### Prototype
|
### Prototype
|
||||||
If you prefer prototype style, you can add following code to add a prototype extension.
|
If you prefer prototype style, you can add following code to add a prototype extension.
|
||||||
@@ -115,6 +218,18 @@ String.prototype.sha3_256 = function() {
|
|||||||
String.prototype.sha3_224 = function() {
|
String.prototype.sha3_224 = function() {
|
||||||
return sha3_224(this);
|
return sha3_224(this);
|
||||||
};
|
};
|
||||||
|
String.prototype.keccak_512 = function() {
|
||||||
|
return keccak_512(this);
|
||||||
|
};
|
||||||
|
String.prototype.keccak_384 = function() {
|
||||||
|
return keccak_384(this);
|
||||||
|
};
|
||||||
|
String.prototype.keccak_256 = function() {
|
||||||
|
return keccak_256(this);
|
||||||
|
};
|
||||||
|
String.prototype.keccak_224 = function() {
|
||||||
|
return keccak_224(this);
|
||||||
|
};
|
||||||
```
|
```
|
||||||
And then you could use like this:
|
And then you could use like this:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
@@ -122,6 +237,10 @@ And then you could use like this:
|
|||||||
'message'.sha3_384();
|
'message'.sha3_384();
|
||||||
'message'.sha3_256();
|
'message'.sha3_256();
|
||||||
'message'.sha3_224();
|
'message'.sha3_224();
|
||||||
|
'message'.keccak_512();
|
||||||
|
'message'.keccak_384();
|
||||||
|
'message'.keccak_256();
|
||||||
|
'message'.keccak_224();
|
||||||
```
|
```
|
||||||
## License
|
## License
|
||||||
The project is released under the [MIT license](http://www.opensource.org/licenses/MIT).
|
The project is released under the [MIT license](http://www.opensource.org/licenses/MIT).
|
||||||
|
|||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha3",
|
"name": "js-sha3",
|
||||||
"version": "0.1.0",
|
"version": "0.3.1",
|
||||||
"main": ["build/sha3.min.js"],
|
"main": ["src/sha3.js"],
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"samples",
|
"samples",
|
||||||
"tests"
|
"tests"
|
||||||
|
|||||||
Vendored
+22
-5
@@ -1,5 +1,22 @@
|
|||||||
(function(m,E){var w="undefined"!=typeof module;w&&(m=global);var p="0123456789abcdef".split(""),F=[1,256,65536,16777216],r=[0,8,16,24],G=[0,1,62,28,27,36,44,6,55,20,3,10,43,25,39,41,45,15,21,8,18,2,61,56,14],A=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,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],c=[],b=[],l=[],q=[],B=function(b){return n(b,224)},C=function(b){return n(b,256)},D=function(b){return n(b,384)},n=function(m,n){n===E&&(n=512);var x,d,u=!1,t=0,w=0,y=m.length,e,g,f,k,a,h,v=(1600-2*n)/32,z=4*v;for(a=0;50>a;++a)b[a]=0;x=0;do{c[0]=x;for(a=1;a<v+1;++a)c[a]=0;for(a=w;t<y&&a<z;++t)d=m.charCodeAt(t),128>d?c[a>>2]|=d<<r[a++&3]:(2048>d?c[a>>2]|=(192|d>>6)<<r[a++&3]:(55296>d||57344<=d?c[a>>2]|=(224|d>>12)<<r[a++&3]:(d=65536+((d&1023)<<10|
|
* js-sha3 v0.3.1
|
||||||
m.charCodeAt(++t)&1023),c[a>>2]|=(240|d>>18)<<r[a++&3],c[a>>2]|=(128|d>>12&63)<<r[a++&3]),c[a>>2]|=(128|d>>6&63)<<r[a++&3]),c[a>>2]|=(128|d&63)<<r[a++&3]);w=a-z;t==y&&(c[a>>2]|=F[a&3],++t);x=c[v];t>y&&a<z&&(c[v-1]|=2147483648,u=!0);for(a=0;a<v;++a)b[a]^=c[a];for(d=0;24>d;d++){for(e=0;5>e;e++)f=2*e,q[f]=b[f]^b[f+10]^b[f+20]^b[f+30]^b[f+40],q[f+1]=b[f+1]^b[f+11]^b[f+21]^b[f+31]^b[f+41];for(e=0;5>e;e++)for(f=2*e,a=(e+4)%5*2,h=(e+1)%5*2,k=q[a]^(q[h]<<1|q[h+1]>>>31),h=q[a+1]^(q[h+1]<<1|q[h]>>>31),g=0;5>
|
* https://github.com/emn178/js-sha3
|
||||||
g;g++)a=f+10*g,b[a]^=k,b[a+1]^=h;for(e=0;5>e;e++)for(f=2*e,g=0;5>g;g++)a=f+10*g,h=2*g+(f+3*g)%5*10,k=G[e+5*g],0===k?(l[h]=b[a],l[h+1]=b[a+1]):32>k?(l[h]=b[a]<<k|b[a+1]>>>32-k,l[h+1]=b[a+1]<<k|b[a]>>>32-k):(l[h]=b[a+1]<<k-32|b[a]>>>64-k,l[h+1]=b[a]<<k-32|b[a+1]>>>64-k);for(e=0;5>e;e++)for(f=2*e,g=0;5>g;g++)a=f+10*g,h=2*((e+1)%5+5*g),k=2*((e+2)%5+5*g),b[a]=l[a]^~l[h]&l[k],b[a+1]=l[a+1]^~l[h+1]&l[k+1];b[0]^=A[2*d];b[1]^=A[2*d+1]}}while(!u);u="";a=0;for(d=n/32;a<d;++a)u+=p[b[a]>>4&15]+p[b[a]&15]+p[b[a]>>
|
*
|
||||||
12&15]+p[b[a]>>8&15]+p[b[a]>>20&15]+p[b[a]>>16&15]+p[b[a]>>28&15]+p[b[a]>>24&15];return u};!m.JS_SHA3_TEST&&w?module.exports={sha3_512:n,sha3_384:D,sha3_256:C,sha3_224:B}:m&&(m.sha3_512=n,m.sha3_384=D,m.sha3_256=C,m.sha3_224=B)})(this);
|
* Copyright 2015, emn178@gmail.com
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*/
|
||||||
|
(function(w,Ba){var E="undefined"!=typeof module;E&&(w=global,w.JS_SHA3_TEST&&(w.navigator={userAgent:"Chrome"}));var Ca=(w.JS_SHA3_TEST||!E)&&-1!=navigator.userAgent.indexOf("Chrome"),b="0123456789abcdef".split(""),H=[1,256,65536,16777216],D=[6,1536,393216,100663296],C=[0,8,16,24],ua=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,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],e=[],a=[],G=function(a){return h(a,224,H)},va=function(a){return h(a,256,H)},wa=function(a){return h(a,384,H)},xa=function(a){return h(a,224,D)},ya=function(a){return h(a,256,D)},za=function(a){return h(a,384,D)},Aa=function(a){return h(a,512,D)},h=function(g,h,D){var E="string"!=typeof g;E&&g.constructor==w.ArrayBuffer&&(g=new Uint8Array(g));h===Ba&&(h=512,D=H);var sa,
|
||||||
|
f,G=!1,B=0,ta=0,I=g.length,c,d,k,l,m,n,p,q,r,t,u,v,x,y,z,A,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,aa,ba,ca,da,ea,fa,ga,ha,ia,ja,ka,la,ma,na,oa,pa,qa,F=(1600-2*h)/32,ra=4*F;for(c=0;50>c;++c)a[c]=0;sa=0;do{e[0]=sa;for(c=1;c<F+1;++c)e[c]=0;if(E)for(c=ta;B<I&&c<ra;++B)e[c>>2]|=g[B]<<C[c++&3];else for(c=ta;B<I&&c<ra;++B)f=g.charCodeAt(B),128>f?e[c>>2]|=f<<C[c++&3]:(2048>f?e[c>>2]|=(192|f>>6)<<C[c++&3]:(55296>f||57344<=f?e[c>>2]|=(224|f>>12)<<C[c++&3]:(f=65536+((f&1023)<<10|g.charCodeAt(++B)&1023),e[c>>2]|=
|
||||||
|
(240|f>>18)<<C[c++&3],e[c>>2]|=(128|f>>12&63)<<C[c++&3]),e[c>>2]|=(128|f>>6&63)<<C[c++&3]),e[c>>2]|=(128|f&63)<<C[c++&3]);ta=c-ra;B==I&&(e[c>>2]|=D[c&3],++B);sa=e[F];B>I&&c<ra&&(e[F-1]|=2147483648,G=!0);for(c=0;c<F;++c)a[c]^=e[c];for(f=0;48>f;f+=2)k=a[0]^a[10]^a[20]^a[30]^a[40],l=a[1]^a[11]^a[21]^a[31]^a[41],m=a[2]^a[12]^a[22]^a[32]^a[42],n=a[3]^a[13]^a[23]^a[33]^a[43],p=a[4]^a[14]^a[24]^a[34]^a[44],q=a[5]^a[15]^a[25]^a[35]^a[45],r=a[6]^a[16]^a[26]^a[36]^a[46],t=a[7]^a[17]^a[27]^a[37]^a[47],u=a[8]^
|
||||||
|
a[18]^a[28]^a[38]^a[48],v=a[9]^a[19]^a[29]^a[39]^a[49],d=u^(m<<1|n>>>31),c=v^(n<<1|m>>>31),a[0]^=d,a[1]^=c,a[10]^=d,a[11]^=c,a[20]^=d,a[21]^=c,a[30]^=d,a[31]^=c,a[40]^=d,a[41]^=c,d=k^(p<<1|q>>>31),c=l^(q<<1|p>>>31),a[2]^=d,a[3]^=c,a[12]^=d,a[13]^=c,a[22]^=d,a[23]^=c,a[32]^=d,a[33]^=c,a[42]^=d,a[43]^=c,d=m^(r<<1|t>>>31),c=n^(t<<1|r>>>31),a[4]^=d,a[5]^=c,a[14]^=d,a[15]^=c,a[24]^=d,a[25]^=c,a[34]^=d,a[35]^=c,a[44]^=d,a[45]^=c,d=p^(u<<1|v>>>31),c=q^(v<<1|u>>>31),a[6]^=d,a[7]^=c,a[16]^=d,a[17]^=c,a[26]^=
|
||||||
|
d,a[27]^=c,a[36]^=d,a[37]^=c,a[46]^=d,a[47]^=c,d=r^(k<<1|l>>>31),c=t^(l<<1|k>>>31),a[8]^=d,a[9]^=c,a[18]^=d,a[19]^=c,a[28]^=d,a[29]^=c,a[38]^=d,a[39]^=c,a[48]^=d,a[49]^=c,d=a[0],c=a[1],Z=a[11]<<4|a[10]>>>28,aa=a[10]<<4|a[11]>>>28,z=a[20]<<3|a[21]>>>29,A=a[21]<<3|a[20]>>>29,na=a[31]<<9|a[30]>>>23,oa=a[30]<<9|a[31]>>>23,V=a[40]<<18|a[41]>>>14,W=a[41]<<18|a[40]>>>14,N=a[2]<<1|a[3]>>>31,O=a[3]<<1|a[2]>>>31,k=a[13]<<12|a[12]>>>20,l=a[12]<<12|a[13]>>>20,ba=a[22]<<10|a[23]>>>22,ca=a[23]<<10|a[22]>>>22,J=
|
||||||
|
a[33]<<13|a[32]>>>19,K=a[32]<<13|a[33]>>>19,pa=a[42]<<2|a[43]>>>30,qa=a[43]<<2|a[42]>>>30,ha=a[5]<<30|a[4]>>>2,ia=a[4]<<30|a[5]>>>2,P=a[14]<<6|a[15]>>>26,Q=a[15]<<6|a[14]>>>26,m=a[25]<<11|a[24]>>>21,n=a[24]<<11|a[25]>>>21,da=a[34]<<15|a[35]>>>17,ea=a[35]<<15|a[34]>>>17,L=a[45]<<29|a[44]>>>3,M=a[44]<<29|a[45]>>>3,u=a[6]<<28|a[7]>>>4,v=a[7]<<28|a[6]>>>4,ja=a[17]<<23|a[16]>>>9,ka=a[16]<<23|a[17]>>>9,R=a[26]<<25|a[27]>>>7,S=a[27]<<25|a[26]>>>7,p=a[36]<<21|a[37]>>>11,q=a[37]<<21|a[36]>>>11,fa=a[47]<<24|
|
||||||
|
a[46]>>>8,ga=a[46]<<24|a[47]>>>8,X=a[8]<<27|a[9]>>>5,Y=a[9]<<27|a[8]>>>5,x=a[18]<<20|a[19]>>>12,y=a[19]<<20|a[18]>>>12,la=a[29]<<7|a[28]>>>25,ma=a[28]<<7|a[29]>>>25,T=a[38]<<8|a[39]>>>24,U=a[39]<<8|a[38]>>>24,r=a[48]<<14|a[49]>>>18,t=a[49]<<14|a[48]>>>18,a[0]=d^~k&m,a[1]=c^~l&n,a[10]=u^~x&z,a[11]=v^~y&A,a[20]=N^~P&R,a[21]=O^~Q&S,a[30]=X^~Z&ba,a[31]=Y^~aa&ca,a[40]=ha^~ja&la,a[41]=ia^~ka&ma,a[2]=k^~m&p,a[3]=l^~n&q,a[12]=x^~z&J,a[13]=y^~A&K,a[22]=P^~R&T,a[23]=Q^~S&U,a[32]=Z^~ba&da,a[33]=aa^~ca&ea,a[42]=
|
||||||
|
ja^~la&na,a[43]=ka^~ma&oa,a[4]=m^~p&r,a[5]=n^~q&t,a[14]=z^~J&L,a[15]=A^~K&M,a[24]=R^~T&V,a[25]=S^~U&W,a[34]=ba^~da&fa,a[35]=ca^~ea&ga,a[44]=la^~na&pa,a[45]=ma^~oa&qa,a[6]=p^~r&d,a[7]=q^~t&c,a[16]=J^~L&u,a[17]=K^~M&v,a[26]=T^~V&N,a[27]=U^~W&O,a[36]=da^~fa&X,a[37]=ea^~ga&Y,a[46]=na^~pa&ha,a[47]=oa^~qa&ia,a[8]=r^~d&k,a[9]=t^~c&l,a[18]=L^~u&x,a[19]=M^~v&y,a[28]=V^~N&P,a[29]=W^~O&Q,a[38]=fa^~X&Z,a[39]=ga^~Y&aa,a[48]=pa^~ha&ja,a[49]=qa^~ia&ka,a[0]^=ua[f],a[1]^=ua[f+1]}while(!G);g="";if(Ca)d=a[0],c=a[1],
|
||||||
|
k=a[2],l=a[3],m=a[4],n=a[5],p=a[6],q=a[7],r=a[8],t=a[9],u=a[10],v=a[11],x=a[12],y=a[13],z=a[14],A=a[15],g+=b[d>>4&15]+b[d&15]+b[d>>12&15]+b[d>>8&15]+b[d>>20&15]+b[d>>16&15]+b[d>>28&15]+b[d>>24&15]+b[c>>4&15]+b[c&15]+b[c>>12&15]+b[c>>8&15]+b[c>>20&15]+b[c>>16&15]+b[c>>28&15]+b[c>>24&15]+b[k>>4&15]+b[k&15]+b[k>>12&15]+b[k>>8&15]+b[k>>20&15]+b[k>>16&15]+b[k>>28&15]+b[k>>24&15]+b[l>>4&15]+b[l&15]+b[l>>12&15]+b[l>>8&15]+b[l>>20&15]+b[l>>16&15]+b[l>>28&15]+b[l>>24&15]+b[m>>4&15]+b[m&15]+b[m>>12&15]+b[m>>
|
||||||
|
8&15]+b[m>>20&15]+b[m>>16&15]+b[m>>28&15]+b[m>>24&15]+b[n>>4&15]+b[n&15]+b[n>>12&15]+b[n>>8&15]+b[n>>20&15]+b[n>>16&15]+b[n>>28&15]+b[n>>24&15]+b[p>>4&15]+b[p&15]+b[p>>12&15]+b[p>>8&15]+b[p>>20&15]+b[p>>16&15]+b[p>>28&15]+b[p>>24&15],256<=h&&(g+=b[q>>4&15]+b[q&15]+b[q>>12&15]+b[q>>8&15]+b[q>>20&15]+b[q>>16&15]+b[q>>28&15]+b[q>>24&15]),384<=h&&(g+=b[r>>4&15]+b[r&15]+b[r>>12&15]+b[r>>8&15]+b[r>>20&15]+b[r>>16&15]+b[r>>28&15]+b[r>>24&15]+b[t>>4&15]+b[t&15]+b[t>>12&15]+b[t>>8&15]+b[t>>20&15]+b[t>>16&
|
||||||
|
15]+b[t>>28&15]+b[t>>24&15]+b[u>>4&15]+b[u&15]+b[u>>12&15]+b[u>>8&15]+b[u>>20&15]+b[u>>16&15]+b[u>>28&15]+b[u>>24&15]+b[v>>4&15]+b[v&15]+b[v>>12&15]+b[v>>8&15]+b[v>>20&15]+b[v>>16&15]+b[v>>28&15]+b[v>>24&15]),512==h&&(g+=b[x>>4&15]+b[x&15]+b[x>>12&15]+b[x>>8&15]+b[x>>20&15]+b[x>>16&15]+b[x>>28&15]+b[x>>24&15]+b[y>>4&15]+b[y&15]+b[y>>12&15]+b[y>>8&15]+b[y>>20&15]+b[y>>16&15]+b[y>>28&15]+b[y>>24&15]+b[z>>4&15]+b[z&15]+b[z>>12&15]+b[z>>8&15]+b[z>>20&15]+b[z>>16&15]+b[z>>28&15]+b[z>>24&15]+b[A>>4&15]+
|
||||||
|
b[A&15]+b[A>>12&15]+b[A>>8&15]+b[A>>20&15]+b[A>>16&15]+b[A>>28&15]+b[A>>24&15]);else for(c=0,f=h/32;c<f;++c)d=a[c],g+=b[d>>4&15]+b[d&15]+b[d>>12&15]+b[d>>8&15]+b[d>>20&15]+b[d>>16&15]+b[d>>28&15]+b[d>>24&15];return g};!w.JS_SHA3_TEST&&E?module.exports={sha3_512:Aa,sha3_384:za,sha3_256:ya,sha3_224:xa,keccak_512:h,keccak_384:wa,keccak_256:va,keccak_224:G}:w&&(w.sha3_512=Aa,w.sha3_384=za,w.sha3_256=ya,w.sha3_224=xa,w.keccak_512=h,w.keccak_384=wa,w.keccak_256=va,w.keccak_224=G)})(this);
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha3",
|
"name": "js-sha3",
|
||||||
"version": "0.1.0",
|
"version": "0.3.1",
|
||||||
"description": "A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.",
|
"description": "A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.",
|
||||||
"main": "src/sha3.js",
|
"main": "src/sha3.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
+343
-83
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* js-sha3 v0.1.0
|
* js-sha3 v0.3.1
|
||||||
* https://github.com/emn178/js-sha3
|
* https://github.com/emn178/js-sha3
|
||||||
*
|
*
|
||||||
* Copyright 2015, emn178@gmail.com
|
* Copyright 2015, emn178@gmail.com
|
||||||
@@ -13,38 +13,67 @@
|
|||||||
var NODE_JS = typeof(module) != 'undefined';
|
var NODE_JS = typeof(module) != 'undefined';
|
||||||
if(NODE_JS) {
|
if(NODE_JS) {
|
||||||
root = global;
|
root = global;
|
||||||
|
if(root.JS_SHA3_TEST) {
|
||||||
|
root.navigator = { userAgent: 'Chrome'};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1;
|
||||||
var HEX_CHARS = '0123456789abcdef'.split('');
|
var HEX_CHARS = '0123456789abcdef'.split('');
|
||||||
var EXTRA = [1, 256, 65536, 16777216];
|
var KECCAK_PADDING = [1, 256, 65536, 16777216];
|
||||||
|
var PADDING = [6, 1536, 393216, 100663296];
|
||||||
var SHIFT = [0, 8, 16, 24];
|
var SHIFT = [0, 8, 16, 24];
|
||||||
var R = [0, 1, 62, 28, 27, 36, 44, 6, 55, 20, 3, 10, 43, 25, 39, 41, 45, 15, 21, 8, 18, 2, 61, 56, 14];
|
|
||||||
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
|
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
|
||||||
0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
|
0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
|
||||||
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
|
2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
|
||||||
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
|
2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
|
||||||
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
|
2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
|
||||||
|
|
||||||
var blocks = [], s = [], b = [], c = [];
|
var blocks = [], s = [];
|
||||||
|
|
||||||
|
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) {
|
var sha3_224 = function(message) {
|
||||||
return sha3(message, 224);
|
return keccak(message, 224, PADDING);
|
||||||
};
|
};
|
||||||
|
|
||||||
var sha3_256 = function(message) {
|
var sha3_256 = function(message) {
|
||||||
return sha3(message, 256);
|
return keccak(message, 256, PADDING);
|
||||||
};
|
};
|
||||||
|
|
||||||
var sha3_384 = function(message) {
|
var sha3_384 = function(message) {
|
||||||
return sha3(message, 384);
|
return keccak(message, 384, PADDING);
|
||||||
};
|
};
|
||||||
|
|
||||||
var sha3 = function(message, bits) {
|
var sha3_512 = function(message) {
|
||||||
|
return keccak(message, 512, PADDING);
|
||||||
|
};
|
||||||
|
|
||||||
|
var keccak = function(message, bits, padding) {
|
||||||
|
var notString = typeof(message) != 'string';
|
||||||
|
if(notString && message.constructor == root.ArrayBuffer) {
|
||||||
|
message = new Uint8Array(message);
|
||||||
|
}
|
||||||
|
|
||||||
if(bits === undefined) {
|
if(bits === undefined) {
|
||||||
bits = 512;
|
bits = 512;
|
||||||
|
padding = KECCAK_PADDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
var block, code, end = false, index = 0, start = 0, length = message.length,
|
var block, code, end = false, index = 0, start = 0, length = message.length,
|
||||||
n, x, y, x2, r, i, j, k, h, l;
|
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 blockCount = (1600 - bits * 2) / 32;
|
||||||
var byteCount = blockCount * 4;
|
var byteCount = blockCount * 4;
|
||||||
|
|
||||||
@@ -58,28 +87,34 @@
|
|||||||
for(i = 1;i < blockCount + 1;++i) {
|
for(i = 1;i < blockCount + 1;++i) {
|
||||||
blocks[i] = 0;
|
blocks[i] = 0;
|
||||||
}
|
}
|
||||||
for (i = start;index < length && i < byteCount; ++index) {
|
if(notString) {
|
||||||
code = message.charCodeAt(index);
|
for (i = start;index < length && i < byteCount; ++index) {
|
||||||
if (code < 0x80) {
|
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
}
|
||||||
} else if (code < 0x800) {
|
} else {
|
||||||
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
for (i = start;index < length && i < byteCount; ++index) {
|
||||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
code = message.charCodeAt(index);
|
||||||
} else if (code < 0xd800 || code >= 0xe000) {
|
if (code < 0x80) {
|
||||||
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
} else if (code < 0x800) {
|
||||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
||||||
} else {
|
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||||
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
} else if (code < 0xd800 || code >= 0xe000) {
|
||||||
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
} else {
|
||||||
|
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||||||
|
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
||||||
|
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
||||||
|
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||||||
|
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start = i - byteCount;
|
start = i - byteCount;
|
||||||
if(index == length) {
|
if(index == length) {
|
||||||
blocks[i >> 2] |= EXTRA[i & 3];
|
blocks[i >> 2] |= padding[i & 3];
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
block = blocks[blockCount];
|
block = blocks[blockCount];
|
||||||
@@ -92,81 +127,306 @@
|
|||||||
s[i] ^= blocks[i];
|
s[i] ^= blocks[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for(n = 0; n < 24; n++) {
|
for(n = 0; n < 48; n += 2) {
|
||||||
for (x = 0; x < 5; x++) {
|
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
|
||||||
x2 = x * 2;
|
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
|
||||||
c[x2] = s[x2] ^ s[x2 + 10] ^ s[x2 + 20] ^ s[x2 + 30] ^ s[x2 + 40];
|
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
|
||||||
c[x2 + 1] = s[x2 + 1] ^ s[x2 + 11] ^ s[x2 + 21] ^ s[x2 + 31] ^ s[x2 + 41];
|
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];
|
||||||
|
|
||||||
for (x = 0; x < 5; x++) {
|
h = c8 ^ ((c2 << 1) | (c3 >>> 31));
|
||||||
x2 = x * 2;
|
l = c9 ^ ((c3 << 1) | (c2 >>> 31));
|
||||||
i = ((x + 4) % 5) * 2;
|
s[0] ^= h;
|
||||||
j = ((x + 1) % 5) * 2;
|
s[1] ^= l;
|
||||||
h = c[i] ^ ((c[j] << 1) | (c[j + 1] >>> 31));
|
s[10] ^= h;
|
||||||
l = c[i + 1] ^ ((c[j + 1] << 1) | (c[j] >>> 31));
|
s[11] ^= l;
|
||||||
for (y = 0; y < 5; y++) {
|
s[20] ^= h;
|
||||||
i = x2 + y * 10;
|
s[21] ^= l;
|
||||||
s[i] ^= h;
|
s[30] ^= h;
|
||||||
s[i + 1] ^= l;
|
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;
|
||||||
|
|
||||||
for (x = 0; x < 5; x++) {
|
b0 = s[0];
|
||||||
x2 = x * 2;
|
b1 = s[1];
|
||||||
for (y = 0; y < 5; y++) {
|
b32 = (s[11] << 4) | (s[10] >>> 28);
|
||||||
i = x2 + y * 10;
|
b33 = (s[10] << 4) | (s[11] >>> 28);
|
||||||
j = y * 2 + ((x2 + 3 * y) % 5) * 10;
|
b14 = (s[20] << 3) | (s[21] >>> 29);
|
||||||
r = R[x + y * 5];
|
b15 = (s[21] << 3) | (s[20] >>> 29);
|
||||||
if(r === 0) {
|
b46 = (s[31] << 9) | (s[30] >>> 23);
|
||||||
b[j] = s[i];
|
b47 = (s[30] << 9) | (s[31] >>> 23);
|
||||||
b[j + 1] = s[i + 1];
|
b28 = (s[40] << 18) | (s[41] >>> 14);
|
||||||
} else if (r < 32) {
|
b29 = (s[41] << 18) | (s[40] >>> 14);
|
||||||
b[j] = (s[i] << r) | (s[i + 1] >>> (32 - r));
|
b20 = (s[2] << 1) | (s[3] >>> 31);
|
||||||
b[j + 1] = (s[i + 1] << r) | (s[i] >>> (32 - r));
|
b21 = (s[3] << 1) | (s[2] >>> 31);
|
||||||
} else {
|
b2 = (s[13] << 12) | (s[12] >>> 20);
|
||||||
b[j] = (s[i + 1] << (r - 32)) | (s[i] >>> (64 - r));
|
b3 = (s[12] << 12) | (s[13] >>> 20);
|
||||||
b[j + 1] = (s[i] << (r - 32)) | (s[i + 1] >>> (64 - r));
|
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);
|
||||||
|
|
||||||
for (x = 0; x < 5; x++) {
|
s[0] = b0 ^ (~b2 & b4);
|
||||||
x2 = x * 2;
|
s[1] = b1 ^ (~b3 & b5);
|
||||||
for (y = 0; y < 5; y++) {
|
s[10] = b10 ^ (~b12 & b14);
|
||||||
i = x2 + y * 10;
|
s[11] = b11 ^ (~b13 & b15);
|
||||||
j = (((x + 1) % 5) + 5 * y) * 2;
|
s[20] = b20 ^ (~b22 & b24);
|
||||||
k = (((x + 2) % 5) + 5 * y) * 2;
|
s[21] = b21 ^ (~b23 & b25);
|
||||||
s[i] = b[i] ^ (~b[j] & b[k]);
|
s[30] = b30 ^ (~b32 & b34);
|
||||||
s[i + 1] = b[i + 1] ^ (~b[j + 1] & b[k + 1]);
|
s[31] = b31 ^ (~b33 & b35);
|
||||||
}
|
s[40] = b40 ^ (~b42 & b44);
|
||||||
}
|
s[41] = b41 ^ (~b43 & b45);
|
||||||
s[0] ^= RC[n * 2];
|
s[2] = b2 ^ (~b4 & b6);
|
||||||
s[1] ^= RC[n * 2 + 1];
|
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];
|
||||||
}
|
}
|
||||||
} while(!end);
|
} while(!end);
|
||||||
|
|
||||||
var hex = '';
|
var hex = '';
|
||||||
for(i = 0, n = bits / 32;i < n;++i) {
|
if(CHROME) {
|
||||||
hex += HEX_CHARS[(s[i] >> 4) & 0x0F] + HEX_CHARS[s[i] & 0x0F] +
|
b0 = s[0];
|
||||||
HEX_CHARS[(s[i] >> 12) & 0x0F] + HEX_CHARS[(s[i] >> 8) & 0x0F] +
|
b1 = s[1];
|
||||||
HEX_CHARS[(s[i] >> 20) & 0x0F] + HEX_CHARS[(s[i] >> 16) & 0x0F] +
|
b2 = s[2];
|
||||||
HEX_CHARS[(s[i] >> 28) & 0x0F] + HEX_CHARS[(s[i] >> 24) & 0x0F];
|
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];
|
||||||
|
}
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for(i = 0, n = bits / 32;i < n;++i) {
|
||||||
|
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];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return hex;
|
return hex;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(!root.JS_SHA3_TEST && NODE_JS) {
|
if(!root.JS_SHA3_TEST && NODE_JS) {
|
||||||
module.exports = {
|
module.exports = {
|
||||||
sha3_512: sha3,
|
sha3_512: sha3_512,
|
||||||
sha3_384: sha3_384,
|
sha3_384: sha3_384,
|
||||||
sha3_256: sha3_256,
|
sha3_256: sha3_256,
|
||||||
sha3_224: sha3_224
|
sha3_224: sha3_224,
|
||||||
|
keccak_512: keccak,
|
||||||
|
keccak_384: keccak_384,
|
||||||
|
keccak_256: keccak_256,
|
||||||
|
keccak_224: keccak_224
|
||||||
};
|
};
|
||||||
} else if(root) {
|
} else if(root) {
|
||||||
root.sha3_512 = sha3;
|
root.sha3_512 = sha3_512;
|
||||||
root.sha3_384 = sha3_384;
|
root.sha3_384 = sha3_384;
|
||||||
root.sha3_256 = sha3_256;
|
root.sha3_256 = sha3_256;
|
||||||
root.sha3_224 = sha3_224;
|
root.sha3_224 = sha3_224;
|
||||||
|
root.keccak_512 = keccak;
|
||||||
|
root.keccak_384 = keccak_384;
|
||||||
|
root.keccak_256 = keccak_256;
|
||||||
|
root.keccak_224 = keccak_224;
|
||||||
}
|
}
|
||||||
}(this));
|
}(this));
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
mocha.setup('bdd');
|
mocha.setup('bdd');
|
||||||
</script>
|
</script>
|
||||||
<script src="test.js"></script>
|
<script src="test.js"></script>
|
||||||
|
<script src="test-keccak.js"></script>
|
||||||
<script>
|
<script>
|
||||||
mocha.checkLeaks();
|
mocha.checkLeaks();
|
||||||
mocha.run();
|
mocha.run();
|
||||||
|
|||||||
+12
-1
@@ -1,17 +1,28 @@
|
|||||||
|
expect = require('expect.js');
|
||||||
|
keccak_512 = require('../src/sha3.js').keccak_512;
|
||||||
|
keccak_384 = require('../src/sha3.js').keccak_384;
|
||||||
|
keccak_256 = require('../src/sha3.js').keccak_256;
|
||||||
|
keccak_224 = require('../src/sha3.js').keccak_224;
|
||||||
sha3_512 = require('../src/sha3.js').sha3_512;
|
sha3_512 = require('../src/sha3.js').sha3_512;
|
||||||
sha3_384 = require('../src/sha3.js').sha3_384;
|
sha3_384 = require('../src/sha3.js').sha3_384;
|
||||||
sha3_256 = require('../src/sha3.js').sha3_256;
|
sha3_256 = require('../src/sha3.js').sha3_256;
|
||||||
sha3_224 = require('../src/sha3.js').sha3_224;
|
sha3_224 = require('../src/sha3.js').sha3_224;
|
||||||
expect = require('expect.js');
|
require('./test-keccak.js');
|
||||||
require('./test.js');
|
require('./test.js');
|
||||||
|
|
||||||
delete require.cache[require.resolve('../src/sha3.js')]
|
delete require.cache[require.resolve('../src/sha3.js')]
|
||||||
delete require.cache[require.resolve('./test.js')]
|
delete require.cache[require.resolve('./test.js')]
|
||||||
|
delete require.cache[require.resolve('./test-keccak.js')]
|
||||||
sha3_512 = null;
|
sha3_512 = null;
|
||||||
sha3_384 = null;
|
sha3_384 = null;
|
||||||
sha3_256 = null;
|
sha3_256 = null;
|
||||||
sha3_224 = null;
|
sha3_224 = null;
|
||||||
|
keccak_512 = null;
|
||||||
|
keccak_384 = null;
|
||||||
|
keccak_256 = null;
|
||||||
|
keccak_224 = null;
|
||||||
|
|
||||||
JS_SHA3_TEST = true;
|
JS_SHA3_TEST = true;
|
||||||
require('../src/sha3.js');
|
require('../src/sha3.js');
|
||||||
|
require('./test-keccak.js');
|
||||||
require('./test.js');
|
require('./test.js');
|
||||||
|
|||||||
@@ -0,0 +1,168 @@
|
|||||||
|
(function(keccak_512, keccak_384, keccak_256, keccak_224) {
|
||||||
|
describe('keccak_512', function() {
|
||||||
|
context('when ascii', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512('')).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
|
||||||
|
expect(keccak_512('The quick brown fox jumps over the lazy dog')).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609');
|
||||||
|
expect(keccak_512('The quick brown fox jumps over the lazy dog.')).to.be('ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('10dcbf6389980ce3594547939bbc685363d28adbd6a05bc4abd7fc62e7693a1f6e33569fed5a380bfecb56ae811d25939b95823f39bb0f16a08740629d066d43');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when UTF8', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512('中文')).to.be('2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524');
|
||||||
|
expect(keccak_512('aécio')).to.be('c452ec93e83d4795fcab62a76eed0d88f2231a995ce108ac8f130246f87c4a11cb18a2c1a688a5695906a6f863e71bbe8997c6610319ab97f12d2e5bf0afe458');
|
||||||
|
expect(keccak_512('𠜎')).to.be('8a2d72022ce19d989dbe6a0017faccbf5dc2e22c162d1c5eb168864d32dd1a71e1b4782652c148cf6ca47b77a72c96fff682e72bdfef0566d4b7cca3c9ccc59d');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('6a67c28aa1946ca1be8382b861aac4aaf20052f495db9b6902d13adfa603eaba5d169f8896b86d461b2949283eb98e503c3f0640188ea7d6731526fc06568d37');
|
||||||
|
expect(keccak_512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('d04ff5b0e85e9968be2a4d4e133c15c7ccee7497198bb651599a97d11d00bca6048d329ab75aa454566cd532648fa1cb4551985d9d645de9fa43a311a9ee8e4d');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when special length', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512('012345678901234567890123456789012345678901234567890123456789012345678901')).to.be('90b1d032c3bf06dcc78a46fe52054bab1250600224bfc6dfbfb40a7877c55e89bb982799a2edf198568a4166f6736678b45e76b12fac813cfdf0a76714e5eae8');
|
||||||
|
expect(keccak_512('01234567890123456789012345678901234567890123456789012345678901234567890')).to.be('3173e7abc754a0b2909410d78986428a9183e996864af02f421d273d9fa1b4e4a5b14e2998b20767712f53a01ff8f6ae2c3e71e51e2c0f24257b03e6da09eb77');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when Array', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512([])).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
|
||||||
|
expect(keccak_512([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when Uint8Array', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512(new Uint8Array([]))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
|
||||||
|
expect(keccak_512(new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]))).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when ArrayBuffer', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_512(new ArrayBuffer(0))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('keccak_384', function() {
|
||||||
|
context('when ascii', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_384('')).to.be('2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff');
|
||||||
|
expect(keccak_384('The quick brown fox jumps over the lazy dog')).to.be('283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3');
|
||||||
|
expect(keccak_384('The quick brown fox jumps over the lazy dog.')).to.be('9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_384('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('e7ec8976b4d96e43f50ae8ecdcf2d97a56236e6406e8dd00efd0d9abe885659db58a2f4b138a4ecfb1bd0052f6569516');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when UTF8', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_384('中文')).to.be('743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c');
|
||||||
|
expect(keccak_384('aécio')).to.be('08990555e131af8597687614309da4c5053ce866f348544da0a0c2c78c2cc79680ebb57cfbe238286e78ea133a037897');
|
||||||
|
expect(keccak_384('𠜎')).to.be('2a80f59abf3111f38a35a3daa25123b495f90e9736bd300e35911d19abdd8806498c581333f198ccbbf2252b57c2925d');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('a3b043a2f69e4326a05d478fa4c8aa2bd7612453d775af37665a0b96ef2207cdc74c50cdba1629796a5136fe77300b05');
|
||||||
|
expect(keccak_384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('66414c090cc3fe9c396d313cbaa100aefd335e851838b29382568b7f57357ada7c54b8fa8c17f859945bba88b2c2e332');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('keccak_256', function() {
|
||||||
|
context('when ascii', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_256('')).to.be('c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470');
|
||||||
|
expect(keccak_256('The quick brown fox jumps over the lazy dog')).to.be('4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15');
|
||||||
|
expect(keccak_256('The quick brown fox jumps over the lazy dog.')).to.be('578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_256('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('af20018353ffb50d507f1555580f5272eca7fdab4f8295db4b1a9ad832c93f6d');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when UTF8', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_256('中文')).to.be('70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee');
|
||||||
|
expect(keccak_256('aécio')).to.be('d7d569202f04daf90432810d6163112b2695d7820da979327ebd894efb0276dc');
|
||||||
|
expect(keccak_256('𠜎')).to.be('16a7cc7a58444cbf7e939611910ddc82e7cba65a99d3e8e08cfcda53180a2180');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('d1021d2d4c5c7e88098c40f422af68493b4b64c913cbd68220bf5e6127c37a88');
|
||||||
|
expect(keccak_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('ffabf9bba2127c4928d360c9905cb4911f0ec21b9c3b89f3b242bccc68389e36');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('keccak_224', function() {
|
||||||
|
context('when ascii', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_224('')).to.be('f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd');
|
||||||
|
expect(keccak_224('The quick brown fox jumps over the lazy dog')).to.be('310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe');
|
||||||
|
expect(keccak_224('The quick brown fox jumps over the lazy dog.')).to.be('c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_224('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('8dd58b706e3a08ec4f1f202af39295b38c355a39b23308ade7218a21');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when UTF8', function() {
|
||||||
|
context('and less than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_224('中文')).to.be('7bc2a0b6e7e0a055a61e4f731e2944b560f41ff98967dcbf4bbf77a5');
|
||||||
|
expect(keccak_224('aécio')).to.be('66f3db76bf8cb35726cb278bac412d187c3484ab2083dc50ef5ffb55');
|
||||||
|
expect(keccak_224('𠜎')).to.be('3bfa94845726f4cd5cf17d19b5eacac17b3694790e13a76d5c81c7c2');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('and more than 128 bytes', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(keccak_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('d59eef8f394ef7d96967bb0bde578785c033f7f0a21913d6ba41ed1b');
|
||||||
|
expect(keccak_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('27123a2a3860d1041d4769778c4b078732bf4300f7e1c56536ab2644');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})(keccak_512, keccak_384, keccak_256, keccak_224);
|
||||||
+103
-83
@@ -1,148 +1,168 @@
|
|||||||
(function(sha3_512, sha3_384, sha3_256, sha3_224) {
|
(function(sha3_512, sha3_384, sha3_256, sha3_224) {
|
||||||
describe('sha3_512', function() {
|
describe('sha3_512', function() {
|
||||||
describe('ascii', function() {
|
context('when ascii', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_512('')).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e');
|
expect(sha3_512('')).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26');
|
||||||
expect(sha3_512('The quick brown fox jumps over the lazy dog')).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609');
|
expect(sha3_512('The quick brown fox jumps over the lazy dog')).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450');
|
||||||
expect(sha3_512('The quick brown fox jumps over the lazy dog.')).to.be('ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760');
|
expect(sha3_512('The quick brown fox jumps over the lazy dog.')).to.be('18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_512('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('10dcbf6389980ce3594547939bbc685363d28adbd6a05bc4abd7fc62e7693a1f6e33569fed5a380bfecb56ae811d25939b95823f39bb0f16a08740629d066d43');
|
expect(sha3_512('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('4f8bcf3a60d3ee56a0bd405c3e6bb37dac44b6781c41bf76c91a5d8e621d472b7b13b8806d88914af3d97585df996363ebe17566d5dfeb6f4884a7949ba8263d');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('UTF8', function() {
|
context('when UTF8', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_512('中文')).to.be('2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524');
|
expect(sha3_512('中文')).to.be('059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7');
|
||||||
expect(sha3_512('aécio')).to.be('c452ec93e83d4795fcab62a76eed0d88f2231a995ce108ac8f130246f87c4a11cb18a2c1a688a5695906a6f863e71bbe8997c6610319ab97f12d2e5bf0afe458');
|
expect(sha3_512('aécio')).to.be('35dfaf82d2ce4be79393dc90e327b4dd15b1c150d8a30f59d8d1b42ca4fc3c87f50b77da36acccf9dc76494d07fc57cfcc9470e627c38f95bce4deab311b87e0');
|
||||||
expect(sha3_512('𠜎')).to.be('8a2d72022ce19d989dbe6a0017faccbf5dc2e22c162d1c5eb168864d32dd1a71e1b4782652c148cf6ca47b77a72c96fff682e72bdfef0566d4b7cca3c9ccc59d');
|
expect(sha3_512('𠜎')).to.be('33ef254289f36527c93cd203ef1973aec1eff7475c23fa842c3092b0d30965d13b0805c61d0aa92c51245c56bfe26978c35c00f26eb558a043982043ee8b178c');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('6a67c28aa1946ca1be8382b861aac4aaf20052f495db9b6902d13adfa603eaba5d169f8896b86d461b2949283eb98e503c3f0640188ea7d6731526fc06568d37');
|
expect(sha3_512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('accb127bb24b0ffbb7550dc637222d2f78538a8a186c98bc5efdad685b9b396639f34148bf0b94ed470f0e9c3665dc3b4c1cb321bacd32dd317a646295e073d9');
|
||||||
expect(sha3_512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('d04ff5b0e85e9968be2a4d4e133c15c7ccee7497198bb651599a97d11d00bca6048d329ab75aa454566cd532648fa1cb4551985d9d645de9fa43a311a9ee8e4d');
|
expect(sha3_512('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('5b70eaad083f1b86fd535b6812e02f5f2876a4bd8b43aede8d62ae71bb1743ebd919dc41be56d73ba45b67b2876ff215d0575788560e7b0c92b879f8a2fc3111');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
context('when special length', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(sha3_512('012345678901234567890123456789012345678901234567890123456789012345678901')).to.be('bce9da5b408846edd5bec9f26c2dee9bd835215c3f2b3876197067d87bc4d1af0cd97f94fda59761a0d804fe82383be2c6c4886fbb82e005fcf899449029f221');
|
||||||
|
expect(sha3_512('01234567890123456789012345678901234567890123456789012345678901234567890')).to.be('8bdcb85e6b52c29fafac0d3daf65492f2e3499e066da1a095a65eb1144849a26b2790a8b39c2a7fb747456f749391d953841a61cb13289f9806f04981c180a86');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when Array', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(sha3_512([])).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26');
|
||||||
|
expect(sha3_512([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when Uint8Array', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(sha3_512(new Uint8Array([]))).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26');
|
||||||
|
expect(sha3_512(new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]))).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
context('when ArrayBuffer', function() {
|
||||||
|
it('should be equal', function() {
|
||||||
|
expect(sha3_512(new ArrayBuffer(0))).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('sha3_384', function() {
|
describe('sha3_384', function() {
|
||||||
describe('ascii', function() {
|
context('when ascii', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_384('')).to.be('2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff');
|
expect(sha3_384('')).to.be('0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004');
|
||||||
expect(sha3_384('The quick brown fox jumps over the lazy dog')).to.be('283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3');
|
expect(sha3_384('The quick brown fox jumps over the lazy dog')).to.be('7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41');
|
||||||
expect(sha3_384('The quick brown fox jumps over the lazy dog.')).to.be('9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b');
|
expect(sha3_384('The quick brown fox jumps over the lazy dog.')).to.be('1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_384('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('e7ec8976b4d96e43f50ae8ecdcf2d97a56236e6406e8dd00efd0d9abe885659db58a2f4b138a4ecfb1bd0052f6569516');
|
expect(sha3_384('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('ca6b121a6060bc85de05e5a8d70577838fad2481b092c8263d6f7bcbe5148740f0c7f9c4dc27061339570496956aaef6');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('UTF8', function() {
|
context('when UTF8', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_384('中文')).to.be('743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c');
|
expect(sha3_384('中文')).to.be('9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432');
|
||||||
expect(sha3_384('aécio')).to.be('08990555e131af8597687614309da4c5053ce866f348544da0a0c2c78c2cc79680ebb57cfbe238286e78ea133a037897');
|
expect(sha3_384('aécio')).to.be('70b447f1bd5ce5a4753ccf7a3697eca0315954774374bc1042aff19582ccc32d5067f7da6c2bea9d6d344e11924cbe72');
|
||||||
expect(sha3_384('𠜎')).to.be('2a80f59abf3111f38a35a3daa25123b495f90e9736bd300e35911d19abdd8806498c581333f198ccbbf2252b57c2925d');
|
expect(sha3_384('𠜎')).to.be('7add8d544b0a7cf188b54b1697a046f77e49d5f292e7ffe56feeed90a500b0bf026b9b68892888a1bafb9f8cb89ed874');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('a3b043a2f69e4326a05d478fa4c8aa2bd7612453d775af37665a0b96ef2207cdc74c50cdba1629796a5136fe77300b05');
|
expect(sha3_384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('7d0f80fe5c79a04a2a37a30a440e0cc068eb78fe6c3182246ede29645c144b5d33c44607cb2c3111ba77ffc66107f1cd');
|
||||||
expect(sha3_384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('66414c090cc3fe9c396d313cbaa100aefd335e851838b29382568b7f57357ada7c54b8fa8c17f859945bba88b2c2e332');
|
expect(sha3_384('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('e344b95c6a961a27793eff00fa5103ef78b4180fe41c93fc60a31aff49b3b5e95a92c84fda9a6c80fa403b7df58db59f');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('sha3_256', function() {
|
describe('sha3_256', function() {
|
||||||
describe('ascii', function() {
|
context('when ascii', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_256('')).to.be('c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470');
|
expect(sha3_256('')).to.be('a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a');
|
||||||
expect(sha3_256('The quick brown fox jumps over the lazy dog')).to.be('4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15');
|
expect(sha3_256('The quick brown fox jumps over the lazy dog')).to.be('69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04');
|
||||||
expect(sha3_256('The quick brown fox jumps over the lazy dog.')).to.be('578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d');
|
expect(sha3_256('The quick brown fox jumps over the lazy dog.')).to.be('a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_256('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('af20018353ffb50d507f1555580f5272eca7fdab4f8295db4b1a9ad832c93f6d');
|
expect(sha3_256('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('fa198893674a0bf9fb35980504e8cefb250aabd2311a37e5d2205f07fb023d36');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('UTF8', function() {
|
context('when UTF8', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_256('中文')).to.be('70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee');
|
expect(sha3_256('中文')).to.be('ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0');
|
||||||
expect(sha3_256('aécio')).to.be('d7d569202f04daf90432810d6163112b2695d7820da979327ebd894efb0276dc');
|
expect(sha3_256('aécio')).to.be('65c756408eb6c35a1ffa2d7e09711bdc9f0b28716b1376223844a2b4c52b6718');
|
||||||
expect(sha3_256('𠜎')).to.be('16a7cc7a58444cbf7e939611910ddc82e7cba65a99d3e8e08cfcda53180a2180');
|
expect(sha3_256('𠜎')).to.be('babe9afc555b0311700dfb0b5b6296d49347b3d770480baedfcdc47a4aea6e82');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('d1021d2d4c5c7e88098c40f422af68493b4b64c913cbd68220bf5e6127c37a88');
|
expect(sha3_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('4b2f36e4320b86e6ead0ad001e47e6d9e7fcf0044cd5a5fd65490a633c0372a4');
|
||||||
expect(sha3_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('ffabf9bba2127c4928d360c9905cb4911f0ec21b9c3b89f3b242bccc68389e36');
|
expect(sha3_256('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('558a7f843b1ac5e7a8bbef90357876bcce0612992d0dfa2907e95521612f507f');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('sha3_224', function() {
|
describe('sha3_224', function() {
|
||||||
describe('ascii', function() {
|
context('when ascii', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_224('')).to.be('f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd');
|
expect(sha3_224('')).to.be('6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7');
|
||||||
expect(sha3_224('The quick brown fox jumps over the lazy dog')).to.be('310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe');
|
expect(sha3_224('The quick brown fox jumps over the lazy dog')).to.be('d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795');
|
||||||
expect(sha3_224('The quick brown fox jumps over the lazy dog.')).to.be('c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab');
|
expect(sha3_224('The quick brown fox jumps over the lazy dog.')).to.be('2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_224('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('8dd58b706e3a08ec4f1f202af39295b38c355a39b23308ade7218a21');
|
expect(sha3_224('The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.')).to.be('06885009a28e43e15bf1af718561ad211515a27b542eabc36764a0ca');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('UTF8', function() {
|
context('when UTF8', function() {
|
||||||
describe('less than 128 bytes', function() {
|
context('and less than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_224('中文')).to.be('7bc2a0b6e7e0a055a61e4f731e2944b560f41ff98967dcbf4bbf77a5');
|
expect(sha3_224('中文')).to.be('106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee');
|
||||||
expect(sha3_224('aécio')).to.be('66f3db76bf8cb35726cb278bac412d187c3484ab2083dc50ef5ffb55');
|
expect(sha3_224('aécio')).to.be('b16bad54608dc01864a5d7510d4c19b09f3a0f39cfc4ba1e53aa952a');
|
||||||
expect(sha3_224('𠜎')).to.be('3bfa94845726f4cd5cf17d19b5eacac17b3694790e13a76d5c81c7c2');
|
expect(sha3_224('𠜎')).to.be('f59253c41cb87e5cd953311656716cb5b64dbafc9e8155f0dd68123c');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('more than 128 bytes', function() {
|
context('and more than 128 bytes', function() {
|
||||||
it('should be successful', function() {
|
it('should be equal', function() {
|
||||||
expect(sha3_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('d59eef8f394ef7d96967bb0bde578785c033f7f0a21913d6ba41ed1b');
|
expect(sha3_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一')).to.be('135c13deb71fdf6fb77b52b720c43ddd6ce7467f9147a74248557114');
|
||||||
expect(sha3_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('27123a2a3860d1041d4769778c4b078732bf4300f7e1c56536ab2644');
|
expect(sha3_224('訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。')).to.be('bd05581e02445c53e05aad2014f6a3819d77a9dff918b8c6bf60bd06');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('special length', function() {
|
|
||||||
it('should be successful', function() {
|
|
||||||
expect(sha3_512('012345678901234567890123456789012345678901234567890123456789012345678901')).to.be('90b1d032c3bf06dcc78a46fe52054bab1250600224bfc6dfbfb40a7877c55e89bb982799a2edf198568a4166f6736678b45e76b12fac813cfdf0a76714e5eae8');
|
|
||||||
expect(sha3_512('01234567890123456789012345678901234567890123456789012345678901234567890')).to.be('3173e7abc754a0b2909410d78986428a9183e996864af02f421d273d9fa1b4e4a5b14e2998b20767712f53a01ff8f6ae2c3e71e51e2c0f24257b03e6da09eb77');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})(sha3_512, sha3_384, sha3_256, sha3_224);
|
})(sha3_512, sha3_384, sha3_256, sha3_224);
|
||||||
|
|||||||
Reference in New Issue
Block a user