mirror of
https://github.com/emn178/js-sha256.git
synced 2026-08-12 20:32:16 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bb8ae3a623 | ||
|
|
16b101f040 | ||
|
|
189bb9b037 | ||
|
|
e35c679c2b | ||
|
|
bf155ab82f | ||
|
|
68ffecdc6e | ||
|
|
3204c3743e | ||
|
|
4e5354859f | ||
|
|
cf975dfa0c |
@@ -1,2 +0,0 @@
|
|||||||
/node_modules/
|
|
||||||
/tests/
|
|
||||||
+2
-1
@@ -1,2 +1,3 @@
|
|||||||
/node_modules/
|
/node_modules/
|
||||||
/covreporter/
|
/coverage/
|
||||||
|
/.nyc_output/
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/node_modules/
|
||||||
|
/coverage/
|
||||||
|
/.nyc_output/
|
||||||
|
/tests/
|
||||||
|
.covignore
|
||||||
|
.travis.yml
|
||||||
|
.npmignore
|
||||||
|
bower.json
|
||||||
+1
-2
@@ -4,8 +4,7 @@ node_js:
|
|||||||
- "8.6.0"
|
- "8.6.0"
|
||||||
before_install:
|
before_install:
|
||||||
- npm install coveralls
|
- npm install coveralls
|
||||||
- npm install mocha-lcov-reporter
|
after_success: npm run coveralls
|
||||||
script: npm run-script coveralls
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
|
|||||||
@@ -1,5 +1,37 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## v0.10.0 / 2023-08-30
|
||||||
|
### Fixed
|
||||||
|
- Chrome bug by workaround. #40
|
||||||
|
- deprecated `new Buffer`, replace with `Buffer.from`. #34
|
||||||
|
- dependencies and security issues. #32, #36
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- TypeScript interface, secretKey can be bytes like message. #23, #25
|
||||||
|
- remove `eval` and use `require` directly. #18, #26
|
||||||
|
|
||||||
|
## v0.9.0 / 2017-12-18
|
||||||
|
### Fixed
|
||||||
|
- incorrect result when first bit is 1 of bytes.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- throw error by Error oject. #13
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- TypeScript interfaces. #12
|
||||||
|
|
||||||
|
## v0.8.0 / 2017-11-19
|
||||||
|
### Added
|
||||||
|
- support for web worker.
|
||||||
|
- typescript types. #10
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- prevent webpack to require dependencies.
|
||||||
|
|
||||||
|
## v0.7.1 / 2017-10-31
|
||||||
|
### Improved
|
||||||
|
- performance of hBytes increment.
|
||||||
|
|
||||||
## v0.7.0 / 2017-10-31
|
## v0.7.0 / 2017-10-31
|
||||||
### Fixed
|
### Fixed
|
||||||
- incorrect result when file size >= 512M.
|
- incorrect result when file size >= 512M.
|
||||||
|
|||||||
@@ -48,15 +48,27 @@ var hash2 = sha256.hmac.update('key', 'Message to hash');
|
|||||||
hash2.update('Message2 to hash');
|
hash2.update('Message2 to hash');
|
||||||
hash2.array();
|
hash2.array();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Node.js
|
||||||
If you use node.js, you should require the module first:
|
If you use node.js, you should require the module first:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
var sha256 = require('js-sha256');
|
var sha256 = require('js-sha256');
|
||||||
```
|
```
|
||||||
or
|
or
|
||||||
```JavaScript
|
```JavaScript
|
||||||
var sha256 = require('js-sha256').sha256;
|
var sha256 = require('js-sha256').sha256;
|
||||||
var sha224 = require('js-sha256').sha224;
|
var sha224 = require('js-sha256').sha224;
|
||||||
```
|
```
|
||||||
|
or
|
||||||
|
```JavaScript
|
||||||
|
const { sha256, sha224 } = require('js-sha256');
|
||||||
|
```
|
||||||
|
### TypeScript
|
||||||
|
or TypeScript
|
||||||
|
```TypeScript
|
||||||
|
import { sha256, sha224 } from 'js-sha256';
|
||||||
|
```
|
||||||
|
### RequireJS
|
||||||
It supports AMD:
|
It supports AMD:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
require(['your/path/sha256.js'], function(sha256) {
|
require(['your/path/sha256.js'], function(sha256) {
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha256",
|
"name": "js-sha256",
|
||||||
"version": "0.7.0",
|
"version": "0.9.0",
|
||||||
"main": ["src/sha256.js"],
|
"main": ["src/sha256.js"],
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"samples",
|
"samples",
|
||||||
|
|||||||
Vendored
+3
-3
File diff suppressed because one or more lines are too long
Vendored
+149
@@ -0,0 +1,149 @@
|
|||||||
|
type Message = string | number[] | ArrayBuffer | Uint8Array;
|
||||||
|
|
||||||
|
interface Hasher {
|
||||||
|
/**
|
||||||
|
* Update hash
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
update(message: Message): Hasher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in hex string.
|
||||||
|
*/
|
||||||
|
hex(): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in hex string.
|
||||||
|
*/
|
||||||
|
toString(): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in ArrayBuffer.
|
||||||
|
*/
|
||||||
|
arrayBuffer(): ArrayBuffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in integer array.
|
||||||
|
*/
|
||||||
|
digest(): number[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in integer array.
|
||||||
|
*/
|
||||||
|
array(): number[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Hmac {
|
||||||
|
/**
|
||||||
|
* Computes a Hash-based message authentication code (HMAC) using a secret key
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
(secretKey: Message, message: Message): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a hash object using a secret key.
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
*/
|
||||||
|
create(secretKey: Message): Hasher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a hash object and hash message using a secret key
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
update(secretKey: Message, message: Message): Hasher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in hex string.
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
hex(secretKey: Message, message: Message): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in ArrayBuffer.
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
arrayBuffer(secretKey: Message, message: Message): ArrayBuffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in integer array.
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
digest(secretKey: Message, message: Message): number[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in integer array.
|
||||||
|
*
|
||||||
|
* @param secretKey The Secret Key
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
array(secretKey: Message, message: Message): number[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Hash {
|
||||||
|
/**
|
||||||
|
* Hash and return hex string.
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
(message: Message): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a hash object.
|
||||||
|
*/
|
||||||
|
create(): Hasher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a hash object and hash message.
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
update(message: Message): Hasher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in hex string.
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
hex(message: Message): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in ArrayBuffer.
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
arrayBuffer(message: Message): ArrayBuffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in integer array.
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
digest(message: Message): number[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return hash in integer array.
|
||||||
|
*
|
||||||
|
* @param message The message you want to hash.
|
||||||
|
*/
|
||||||
|
array(message: Message): number[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HMAC interface
|
||||||
|
*/
|
||||||
|
hmac: Hmac;
|
||||||
|
}
|
||||||
|
|
||||||
|
export var sha256: Hash;
|
||||||
|
export var sha224: Hash;
|
||||||
Generated
+1801
-193
File diff suppressed because it is too large
Load Diff
+14
-8
@@ -1,19 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha256",
|
"name": "js-sha256",
|
||||||
"version": "0.7.0",
|
"version": "0.10.0",
|
||||||
"description": "A simple SHA-256 / SHA-224 hash function for JavaScript supports UTF-8 encoding.",
|
"description": "A simple SHA-256 / SHA-224 hash function for JavaScript supports UTF-8 encoding.",
|
||||||
"main": "src/sha256.js",
|
"main": "src/sha256.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"expect.js": "~0.3.1",
|
"expect.js": "~0.3.1",
|
||||||
"jscoverage": "~0.5.9",
|
"mocha": "~10.2.0",
|
||||||
"mocha": "~2.3.4",
|
"nyc": "^15.1.0",
|
||||||
"uglifyjs": "~2.4.10"
|
"tiny-worker": "^2.3.0",
|
||||||
|
"uglify-js": "^3.1.9"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha tests/node-test.js -r jscoverage",
|
"test": "nyc mocha tests/node-test.js",
|
||||||
"report": "mocha tests/node-test.js -r jscoverage --covout=html",
|
"report": "nyc --reporter=html --reporter=text mocha tests/node-test.js",
|
||||||
"coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls",
|
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
||||||
"build": "uglifyjs src/sha256.js --compress --mangle --comments --output build/sha256.min.js"
|
"build": "uglifyjs src/sha256.js -c -m eval --comments -o build/sha256.min.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -34,5 +35,10 @@
|
|||||||
"homepage": "https://github.com/emn178/js-sha256",
|
"homepage": "https://github.com/emn178/js-sha256",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/emn178/js-sha256/issues"
|
"url": "https://github.com/emn178/js-sha256/issues"
|
||||||
|
},
|
||||||
|
"nyc": {
|
||||||
|
"exclude": [
|
||||||
|
"tests"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+77
-54
@@ -1,9 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
* [js-sha256]{@link https://github.com/emn178/js-sha256}
|
* [js-sha256]{@link https://github.com/emn178/js-sha256}
|
||||||
*
|
*
|
||||||
* @version 0.7.0
|
* @version 0.10.0
|
||||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||||
* @copyright Chen, Yi-Cyuan 2014-2017
|
* @copyright Chen, Yi-Cyuan 2014-2023
|
||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
/*jslint bitwise: true */
|
/*jslint bitwise: true */
|
||||||
@@ -11,14 +11,21 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var ERROR = 'input is invalid type';
|
var ERROR = 'input is invalid type';
|
||||||
var root = typeof window === 'object' ? window : {};
|
var WINDOW = typeof window === 'object';
|
||||||
|
var root = WINDOW ? window : {};
|
||||||
|
if (root.JS_SHA256_NO_WINDOW) {
|
||||||
|
WINDOW = false;
|
||||||
|
}
|
||||||
|
var WEB_WORKER = !WINDOW && typeof self === 'object';
|
||||||
var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
|
var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
|
||||||
if (NODE_JS) {
|
if (NODE_JS) {
|
||||||
root = global;
|
root = global;
|
||||||
|
} else if (WEB_WORKER) {
|
||||||
|
root = self;
|
||||||
}
|
}
|
||||||
var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;
|
var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;
|
||||||
var AMD = typeof define === 'function' && define.amd;
|
var AMD = typeof define === 'function' && define.amd;
|
||||||
var ARRAY_BUFFER = typeof ArrayBuffer !== 'undefined';
|
var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
|
||||||
var HEX_CHARS = '0123456789abcdef'.split('');
|
var HEX_CHARS = '0123456789abcdef'.split('');
|
||||||
var EXTRA = [-2147483648, 8388608, 32768, 128];
|
var EXTRA = [-2147483648, 8388608, 32768, 128];
|
||||||
var SHIFT = [24, 16, 8, 0];
|
var SHIFT = [24, 16, 8, 0];
|
||||||
@@ -42,6 +49,12 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
|
||||||
|
ArrayBuffer.isView = function (obj) {
|
||||||
|
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
var createOutputMethod = function (outputType, is224) {
|
var createOutputMethod = function (outputType, is224) {
|
||||||
return function (message) {
|
return function (message) {
|
||||||
return new Sha256(is224, true).update(message)[outputType]();
|
return new Sha256(is224, true).update(message)[outputType]();
|
||||||
@@ -67,22 +80,30 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
var nodeWrap = function (method, is224) {
|
var nodeWrap = function (method, is224) {
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto')
|
||||||
var Buffer = require('buffer').Buffer;
|
var Buffer = require('buffer').Buffer;
|
||||||
var algorithm = is224 ? 'sha224' : 'sha256';
|
var algorithm = is224 ? 'sha224' : 'sha256';
|
||||||
|
var bufferFrom;
|
||||||
|
if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {
|
||||||
|
bufferFrom = Buffer.from;
|
||||||
|
} else {
|
||||||
|
bufferFrom = function (message) {
|
||||||
|
return new Buffer(message);
|
||||||
|
};
|
||||||
|
}
|
||||||
var nodeMethod = function (message) {
|
var nodeMethod = function (message) {
|
||||||
if (typeof message === 'string') {
|
if (typeof message === 'string') {
|
||||||
return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');
|
return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');
|
||||||
} else {
|
} else {
|
||||||
if (message === null || message === undefined) {
|
if (message === null || message === undefined) {
|
||||||
throw ERROR;
|
throw new Error(ERROR);
|
||||||
} else if (message.constructor === ArrayBuffer) {
|
} else if (message.constructor === ArrayBuffer) {
|
||||||
message = new Uint8Array(message);
|
message = new Uint8Array(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
|
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
|
||||||
message.constructor === Buffer) {
|
message.constructor === Buffer) {
|
||||||
return crypto.createHash(algorithm).update(new Buffer(message)).digest('hex');
|
return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');
|
||||||
} else {
|
} else {
|
||||||
return method(message);
|
return method(message);
|
||||||
}
|
}
|
||||||
@@ -114,9 +135,9 @@
|
|||||||
function Sha256(is224, sharedMemory) {
|
function Sha256(is224, sharedMemory) {
|
||||||
if (sharedMemory) {
|
if (sharedMemory) {
|
||||||
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
||||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||||
this.blocks = blocks;
|
this.blocks = blocks;
|
||||||
} else {
|
} else {
|
||||||
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
@@ -152,32 +173,33 @@
|
|||||||
if (this.finalized) {
|
if (this.finalized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var notString = typeof message !== 'string';
|
var notString, type = typeof message;
|
||||||
if (notString) {
|
if (type !== 'string') {
|
||||||
if (message === null || message === undefined) {
|
if (type === 'object') {
|
||||||
throw ERROR;
|
if (message === null) {
|
||||||
} else if (message.constructor === root.ArrayBuffer) {
|
throw new Error(ERROR);
|
||||||
message = new Uint8Array(message);
|
} else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
|
||||||
|
message = new Uint8Array(message);
|
||||||
|
} else if (!Array.isArray(message)) {
|
||||||
|
if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
|
||||||
|
throw new Error(ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new Error(ERROR);
|
||||||
}
|
}
|
||||||
|
notString = true;
|
||||||
}
|
}
|
||||||
var length = message.length;
|
var code, index = 0, i, length = message.length, blocks = this.blocks;
|
||||||
if (notString) {
|
|
||||||
if (typeof length !== 'number' ||
|
|
||||||
!Array.isArray(message) &&
|
|
||||||
!(ARRAY_BUFFER && ArrayBuffer.isView(message))) {
|
|
||||||
throw ERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var code, index = 0, i, blocks = this.blocks;
|
|
||||||
|
|
||||||
while (index < length) {
|
while (index < length) {
|
||||||
if (this.hashed) {
|
if (this.hashed) {
|
||||||
this.hashed = false;
|
this.hashed = false;
|
||||||
blocks[0] = this.block;
|
blocks[0] = this.block;
|
||||||
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
||||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notString) {
|
if (notString) {
|
||||||
@@ -208,10 +230,6 @@
|
|||||||
|
|
||||||
this.lastByteIndex = i;
|
this.lastByteIndex = i;
|
||||||
this.bytes += i - this.start;
|
this.bytes += i - this.start;
|
||||||
while (this.bytes > 4294967295) {
|
|
||||||
++this.hBytes;
|
|
||||||
this.bytes -= 4294967296;
|
|
||||||
}
|
|
||||||
if (i >= 64) {
|
if (i >= 64) {
|
||||||
this.block = blocks[16];
|
this.block = blocks[16];
|
||||||
this.start = i - 64;
|
this.start = i - 64;
|
||||||
@@ -221,6 +239,10 @@
|
|||||||
this.start = i;
|
this.start = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.bytes > 4294967295) {
|
||||||
|
this.hBytes += this.bytes / 4294967296 << 0;
|
||||||
|
this.bytes = this.bytes % 4294967296;
|
||||||
|
}
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -239,11 +261,11 @@
|
|||||||
}
|
}
|
||||||
blocks[0] = this.block;
|
blocks[0] = this.block;
|
||||||
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
||||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||||
}
|
}
|
||||||
blocks[14] = this.hBytes << 3 | this.bytes >> 29;
|
blocks[14] = this.hBytes << 3 | this.bytes >>> 29;
|
||||||
blocks[15] = this.bytes << 3;
|
blocks[15] = this.bytes << 3;
|
||||||
this.hash();
|
this.hash();
|
||||||
};
|
};
|
||||||
@@ -314,6 +336,7 @@
|
|||||||
t2 = s0 + maj;
|
t2 = s0 + maj;
|
||||||
e = a + t1 << 0;
|
e = a + t1 << 0;
|
||||||
a = t1 + t2 << 0;
|
a = t1 + t2 << 0;
|
||||||
|
this.chromeBugWorkAround = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.h0 = this.h0 + a << 0;
|
this.h0 = this.h0 + a << 0;
|
||||||
@@ -413,24 +436,10 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
function HmacSha256(key, is224, sharedMemory) {
|
function HmacSha256(key, is224, sharedMemory) {
|
||||||
var notString = typeof key !== 'string';
|
var i, type = typeof key;
|
||||||
if (notString) {
|
if (type === 'string') {
|
||||||
if (key === null || key === undefined) {
|
|
||||||
throw ERROR;
|
|
||||||
} else if (key.constructor === root.ArrayBuffer) {
|
|
||||||
key = new Uint8Array(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var length = key.length;
|
|
||||||
if (notString) {
|
|
||||||
if (typeof length !== 'number' ||
|
|
||||||
!Array.isArray(key) &&
|
|
||||||
!(ARRAY_BUFFER && ArrayBuffer.isView(key))) {
|
|
||||||
throw ERROR;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var bytes = [], length = key.length, index = 0, code;
|
var bytes = [], length = key.length, index = 0, code;
|
||||||
for (var i = 0; i < length; ++i) {
|
for (i = 0; i < length; ++i) {
|
||||||
code = key.charCodeAt(i);
|
code = key.charCodeAt(i);
|
||||||
if (code < 0x80) {
|
if (code < 0x80) {
|
||||||
bytes[index++] = code;
|
bytes[index++] = code;
|
||||||
@@ -450,6 +459,20 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
key = bytes;
|
key = bytes;
|
||||||
|
} else {
|
||||||
|
if (type === 'object') {
|
||||||
|
if (key === null) {
|
||||||
|
throw new Error(ERROR);
|
||||||
|
} else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {
|
||||||
|
key = new Uint8Array(key);
|
||||||
|
} else if (!Array.isArray(key)) {
|
||||||
|
if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {
|
||||||
|
throw new Error(ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new Error(ERROR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key.length > 64) {
|
if (key.length > 64) {
|
||||||
@@ -457,7 +480,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
var oKeyPad = [], iKeyPad = [];
|
var oKeyPad = [], iKeyPad = [];
|
||||||
for (var i = 0; i < 64; ++i) {
|
for (i = 0; i < 64; ++i) {
|
||||||
var b = key[i] || 0;
|
var b = key[i] || 0;
|
||||||
oKeyPad[i] = 0x5c ^ b;
|
oKeyPad[i] = 0x5c ^ b;
|
||||||
iKeyPad[i] = 0x36 ^ b;
|
iKeyPad[i] = 0x36 ^ b;
|
||||||
|
|||||||
+27
-12
@@ -41,12 +41,6 @@
|
|||||||
'865cc329d317f6d9fdbd183a3c5cc5fd4c370d11f98abbbb404bceb1e6392c7e': ['中文', '中文'],
|
'865cc329d317f6d9fdbd183a3c5cc5fd4c370d11f98abbbb404bceb1e6392c7e': ['中文', '中文'],
|
||||||
'efeef87be5731506b69bb64a9898a456dd12c94834c36a4d8ba99e3db79ad7ed': ['aécio', 'aécio'],
|
'efeef87be5731506b69bb64a9898a456dd12c94834c36a4d8ba99e3db79ad7ed': ['aécio', 'aécio'],
|
||||||
'8a6e527049b9cfc7e1c84bcf356a1289c95da68a586c03de3327f3de0d3737fe': ['𠜎', '𠜎']
|
'8a6e527049b9cfc7e1c84bcf356a1289c95da68a586c03de3327f3de0d3737fe': ['𠜎', '𠜎']
|
||||||
},
|
|
||||||
'ArrayBuffer': {
|
|
||||||
'e48411262715c8370cd5e7bf8e82bef53bd53712d007f3429351843b77c7bb9b': [
|
|
||||||
new ArrayBuffer(0),
|
|
||||||
'Hi There'
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sha224_hmac: {
|
sha224_hmac: {
|
||||||
@@ -80,16 +74,37 @@
|
|||||||
'e2280928fe813aeb7fa59aa14dd5e589041bfdf91945d19d25b9f3db': ['中文', '中文'],
|
'e2280928fe813aeb7fa59aa14dd5e589041bfdf91945d19d25b9f3db': ['中文', '中文'],
|
||||||
'86c53dc054b16f6e006a254891bc9ff0da5df8e1a6faee3b0aaa732d': ['aécio', 'aécio'],
|
'86c53dc054b16f6e006a254891bc9ff0da5df8e1a6faee3b0aaa732d': ['aécio', 'aécio'],
|
||||||
'e9e5991bfb84506b105f800afac1599ff807bb8e20db8ffda48997b9': ['𠜎', '𠜎']
|
'e9e5991bfb84506b105f800afac1599ff807bb8e20db8ffda48997b9': ['𠜎', '𠜎']
|
||||||
},
|
|
||||||
'ArrayBuffer': {
|
|
||||||
'da8f94de91d62154b55ea4e8d6eb133f6d553bcd1f1ba205b9488945': [
|
|
||||||
new ArrayBuffer(0),
|
|
||||||
'Hi There'
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!(typeof JS_SHA256_NO_ARRAY_BUFFER === 'boolean' && JS_SHA256_NO_ARRAY_BUFFER)) {
|
||||||
|
testCases.sha256_hmac.Uint8Array = {
|
||||||
|
'e48411262715c8370cd5e7bf8e82bef53bd53712d007f3429351843b77c7bb9b': [
|
||||||
|
new Uint8Array(0),
|
||||||
|
'Hi There'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
testCases.sha256_hmac.ArrayBuffer = {
|
||||||
|
'e48411262715c8370cd5e7bf8e82bef53bd53712d007f3429351843b77c7bb9b': [
|
||||||
|
new ArrayBuffer(0),
|
||||||
|
'Hi There'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
testCases.sha224_hmac.Uint8Array = {
|
||||||
|
'da8f94de91d62154b55ea4e8d6eb133f6d553bcd1f1ba205b9488945': [
|
||||||
|
new ArrayBuffer(0),
|
||||||
|
'Hi There'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
testCases.sha224_hmac.ArrayBuffer = {
|
||||||
|
'da8f94de91d62154b55ea4e8d6eb133f6d553bcd1f1ba205b9488945': [
|
||||||
|
new ArrayBuffer(0),
|
||||||
|
'Hi There'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
var errorTestCases = [null, undefined, { length: 0 }, 0, 1, false, true, NaN, Infinity, function () {}];
|
var errorTestCases = [null, undefined, { length: 0 }, 0, 1, false, true, NaN, Infinity, function () {}];
|
||||||
|
|
||||||
function runTestCases(name, algorithm) {
|
function runTestCases(name, algorithm) {
|
||||||
|
|||||||
+92
-29
@@ -1,47 +1,75 @@
|
|||||||
// Node.js env
|
|
||||||
expect = require('expect.js');
|
expect = require('expect.js');
|
||||||
sha256 = require('../src/sha256.js').sha256;
|
Worker = require("tiny-worker");
|
||||||
sha224 = require('../src/sha256.js').sha224;
|
|
||||||
require('./test.js');
|
|
||||||
require('./hmac-test.js');
|
|
||||||
|
|
||||||
delete require.cache[require.resolve('../src/sha256.js')]
|
function unset() {
|
||||||
delete require.cache[require.resolve('./test.js')]
|
delete require.cache[require.resolve('../src/sha256.js')];
|
||||||
delete require.cache[require.resolve('./hmac-test.js')]
|
delete require.cache[require.resolve('./test.js')];
|
||||||
sha256 = null;
|
delete require.cache[require.resolve('./hmac-test.js')];
|
||||||
sha224 = null;
|
sha256 = null;
|
||||||
|
sha224 = null;
|
||||||
|
BUFFER = undefined;
|
||||||
|
JS_SHA256_NO_WINDOW = undefined;
|
||||||
|
JS_SHA256_NO_NODE_JS = undefined;
|
||||||
|
JS_SHA256_NO_COMMON_JS = undefined;
|
||||||
|
JS_SHA256_NO_ARRAY_BUFFER = undefined;
|
||||||
|
JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW = undefined;
|
||||||
|
window = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
function requireToGlobal() {
|
||||||
|
sha256 = require('../src/sha256.js').sha256;
|
||||||
|
sha224 = require('../src/sha256.js').sha224;
|
||||||
|
}
|
||||||
|
|
||||||
|
function runCommonJsTest() {
|
||||||
|
requireToGlobal();
|
||||||
|
require('./test.js');
|
||||||
|
require('./hmac-test.js');
|
||||||
|
unset();
|
||||||
|
}
|
||||||
|
|
||||||
|
function runWindowTest() {
|
||||||
|
window = global;
|
||||||
|
require('../src/sha256.js');
|
||||||
|
require('./test.js');
|
||||||
|
require('./hmac-test.js');
|
||||||
|
unset();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Node.js env
|
||||||
|
BUFFER = true;
|
||||||
|
runCommonJsTest();
|
||||||
|
|
||||||
|
// Node.js env, no Buffer.from
|
||||||
|
JS_SHA256_NO_BUFFER_FROM = true
|
||||||
|
runCommonJsTest();
|
||||||
|
|
||||||
// Webpack browser env
|
// Webpack browser env
|
||||||
JS_SHA256_NO_NODE_JS = true;
|
JS_SHA256_NO_NODE_JS = true;
|
||||||
window = global;
|
window = global;
|
||||||
sha256 = require('../src/sha256.js').sha256;
|
runCommonJsTest();
|
||||||
sha224 = require('../src/sha256.js').sha224;
|
|
||||||
require('./test.js');
|
|
||||||
require('./hmac-test.js');
|
|
||||||
|
|
||||||
delete require.cache[require.resolve('../src/sha256.js')]
|
|
||||||
delete require.cache[require.resolve('./test.js')]
|
|
||||||
delete require.cache[require.resolve('./hmac-test.js')]
|
|
||||||
sha256 = null;
|
|
||||||
sha224 = null;
|
|
||||||
|
|
||||||
// browser env
|
// browser env
|
||||||
JS_SHA256_NO_NODE_JS = true;
|
JS_SHA256_NO_NODE_JS = true;
|
||||||
JS_SHA256_NO_COMMON_JS = true;
|
JS_SHA256_NO_COMMON_JS = true;
|
||||||
window = global;
|
runWindowTest();
|
||||||
require('../src/sha256.js');
|
|
||||||
require('./test.js');
|
|
||||||
require('./hmac-test.js');
|
|
||||||
|
|
||||||
delete require.cache[require.resolve('../src/sha256.js')]
|
// browser env and no array buffer
|
||||||
delete require.cache[require.resolve('./test.js')]
|
JS_SHA256_NO_NODE_JS = true;
|
||||||
delete require.cache[require.resolve('./hmac-test.js')]
|
JS_SHA256_NO_COMMON_JS = true;
|
||||||
sha256 = null;
|
JS_SHA256_NO_ARRAY_BUFFER = true;
|
||||||
sha224 = null;
|
runWindowTest();
|
||||||
|
|
||||||
|
// browser env and no isView
|
||||||
|
JS_SHA256_NO_NODE_JS = true;
|
||||||
|
JS_SHA256_NO_COMMON_JS = true;
|
||||||
|
JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW = true;
|
||||||
|
runWindowTest();
|
||||||
|
|
||||||
// browser AMD
|
// browser AMD
|
||||||
JS_SHA256_NO_NODE_JS = true;
|
JS_SHA256_NO_NODE_JS = true;
|
||||||
JS_SHA256_NO_COMMON_JS = true;
|
JS_SHA256_NO_COMMON_JS = true;
|
||||||
|
JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW = false;
|
||||||
window = global;
|
window = global;
|
||||||
define = function (func) {
|
define = function (func) {
|
||||||
sha256 = func();
|
sha256 = func();
|
||||||
@@ -52,3 +80,38 @@ define = function (func) {
|
|||||||
define.amd = true;
|
define.amd = true;
|
||||||
|
|
||||||
require('../src/sha256.js');
|
require('../src/sha256.js');
|
||||||
|
unset();
|
||||||
|
|
||||||
|
// webworker
|
||||||
|
WORKER = 'tests/worker.js';
|
||||||
|
SOURCE = 'src/sha256.js';
|
||||||
|
|
||||||
|
require('./worker-test.js');
|
||||||
|
|
||||||
|
delete require.cache[require.resolve('./worker-test.js')];
|
||||||
|
|
||||||
|
// cover webworker
|
||||||
|
JS_SHA256_NO_WINDOW = true;
|
||||||
|
JS_SHA256_NO_NODE_JS = true;
|
||||||
|
WORKER = './worker.js';
|
||||||
|
SOURCE = '../src/sha256.js';
|
||||||
|
window = global;
|
||||||
|
self = global;
|
||||||
|
|
||||||
|
Worker = function (file) {
|
||||||
|
require(file);
|
||||||
|
currentWorker = this;
|
||||||
|
|
||||||
|
this.postMessage = function (data) {
|
||||||
|
onmessage({data: data});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
postMessage = function (data) {
|
||||||
|
currentWorker.onmessage({data: data});
|
||||||
|
}
|
||||||
|
|
||||||
|
importScripts = function () {};
|
||||||
|
|
||||||
|
requireToGlobal();
|
||||||
|
require('./worker-test.js');
|
||||||
|
|||||||
+34
-32
@@ -40,18 +40,6 @@
|
|||||||
'182889f925ae4e5cc37118ded6ed87f7bdc7cab5ec5e78faef2e50048999473f': [211, 212],
|
'182889f925ae4e5cc37118ded6ed87f7bdc7cab5ec5e78faef2e50048999473f': [211, 212],
|
||||||
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': [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],
|
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': [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],
|
||||||
'74b51c6911f9a8b5e7c499effe7604e43b672166818873c27752c248de434841': [48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55]
|
'74b51c6911f9a8b5e7c499effe7604e43b672166818873c27752c248de434841': [48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55]
|
||||||
},
|
|
||||||
|
|
||||||
'Uint8Array': {
|
|
||||||
'182889f925ae4e5cc37118ded6ed87f7bdc7cab5ec5e78faef2e50048999473f': new Uint8Array([211, 212]),
|
|
||||||
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': 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])
|
|
||||||
},
|
|
||||||
'Int8Array': {
|
|
||||||
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': new Int8Array([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])
|
|
||||||
},
|
|
||||||
'ArrayBuffer': {
|
|
||||||
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855': new ArrayBuffer(0),
|
|
||||||
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d': new ArrayBuffer(1),
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sha224: {
|
sha224: {
|
||||||
@@ -83,34 +71,48 @@
|
|||||||
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f': [],
|
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f': [],
|
||||||
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': [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],
|
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': [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],
|
||||||
'16ee1b101fe0e0d8dd156d598931ec19d75b0f8dc0a0455733c168c8': [48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55]
|
'16ee1b101fe0e0d8dd156d598931ec19d75b0f8dc0a0455733c168c8': [48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55, 56, 48, 49, 50, 51, 52, 53, 54, 55]
|
||||||
},
|
|
||||||
'Uint8Array': {
|
|
||||||
'e17541396a3ecd1cd5a2b968b84e597e8eae3b0ea3127963bf48dd3b': new Uint8Array([211, 212]),
|
|
||||||
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': 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])
|
|
||||||
},
|
|
||||||
'Int8Array': {
|
|
||||||
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': new Int8Array([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])
|
|
||||||
},
|
|
||||||
'ArrayBuffer': {
|
|
||||||
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f': new ArrayBuffer(0),
|
|
||||||
'fff9292b4201617bdc4d3053fce02734166a683d7d858a7f5f59b073': new ArrayBuffer(1),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var errorTestCases = [null, undefined, { length: 0 }, 0, 1, false, true, NaN, Infinity, function () {}];
|
if (!(typeof JS_SHA256_NO_ARRAY_BUFFER === 'boolean' && JS_SHA256_NO_ARRAY_BUFFER)) {
|
||||||
|
testCases.sha256.Uint8Array = {
|
||||||
if (typeof process == 'object') {
|
'182889f925ae4e5cc37118ded6ed87f7bdc7cab5ec5e78faef2e50048999473f': new Uint8Array([211, 212]),
|
||||||
testCases.sha256['Buffer'] = {
|
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': 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])
|
||||||
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855': new Buffer(0),
|
|
||||||
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': new Buffer(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]))
|
|
||||||
};
|
};
|
||||||
testCases.sha224['Buffer'] = {
|
testCases.sha256.Int8Array = {
|
||||||
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f': new Buffer(0),
|
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': new Int8Array([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])
|
||||||
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': new Buffer(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]))
|
};
|
||||||
|
testCases.sha256.ArrayBuffer = {
|
||||||
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855': new ArrayBuffer(0),
|
||||||
|
'6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d': new ArrayBuffer(1)
|
||||||
|
};
|
||||||
|
testCases.sha224.Uint8Array = {
|
||||||
|
'e17541396a3ecd1cd5a2b968b84e597e8eae3b0ea3127963bf48dd3b': new Uint8Array([211, 212]),
|
||||||
|
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': 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])
|
||||||
|
};
|
||||||
|
testCases.sha224.Int8Array = {
|
||||||
|
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': new Int8Array([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])
|
||||||
|
};
|
||||||
|
testCases.sha224.ArrayBuffer = {
|
||||||
|
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f': new ArrayBuffer(0),
|
||||||
|
'fff9292b4201617bdc4d3053fce02734166a683d7d858a7f5f59b073': new ArrayBuffer(1),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeof BUFFER === 'boolean' && BUFFER) {
|
||||||
|
testCases.sha256.Buffer = {
|
||||||
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855': Buffer.from([]),
|
||||||
|
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': Buffer.from(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]))
|
||||||
|
};
|
||||||
|
testCases.sha224.Buffer = {
|
||||||
|
'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f': Buffer.from([]),
|
||||||
|
'730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525': Buffer.from(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]))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var errorTestCases = [null, undefined, { length: 0 }, 0, 1, false, true, NaN, Infinity, function () {}];
|
||||||
|
|
||||||
function runTestCases(name, algorithm) {
|
function runTestCases(name, algorithm) {
|
||||||
var methods = [
|
var methods = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
(function (Worker, WORKER, SOURCE) {
|
||||||
|
var cases = {
|
||||||
|
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855': '',
|
||||||
|
'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592': 'The quick brown fox jumps over the lazy dog',
|
||||||
|
'ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c': 'The quick brown fox jumps over the lazy dog.'
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('#sha256', function () {
|
||||||
|
Object.keys(cases).forEach(function (hash) {
|
||||||
|
it('should be equal', function (done) {
|
||||||
|
var worker = new Worker(WORKER);
|
||||||
|
worker.onmessage = function(event) {
|
||||||
|
expect(event.data).to.be(hash);
|
||||||
|
if (worker.terminate) {
|
||||||
|
worker.terminate();
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
worker.postMessage(SOURCE);
|
||||||
|
worker.postMessage(cases[hash]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})(Worker, WORKER, SOURCE);
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>SHA256</title>
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.min.css">
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/expect.js/0.2.0/expect.min.js"></script>
|
||||||
|
<script src="../src/sha256.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="mocha"></div>
|
||||||
|
<script>
|
||||||
|
WORKER = 'worker.js';
|
||||||
|
SOURCE = '../src/sha256.js';
|
||||||
|
mocha.setup('bdd');
|
||||||
|
</script>
|
||||||
|
<script src="worker-test.js"></script>
|
||||||
|
<script>
|
||||||
|
mocha.checkLeaks();
|
||||||
|
mocha.run();
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
var imported = false;
|
||||||
|
onmessage = function(e) {
|
||||||
|
if (imported) {
|
||||||
|
postMessage(sha256(e.data));
|
||||||
|
if (typeof exports !== 'undefined') {
|
||||||
|
imported = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
imported = true;
|
||||||
|
importScripts(e.data);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user