mirror of
https://github.com/emn178/js-sha512.git
synced 2026-08-12 20:31:34 +08:00
### Fixed
- dependencies and security issues. - don't modify global Array and ArrayBuffer prototypes. - refactor: simplify formatMessage internal logic. - Generates incorrect hash in some cases. ### Changed - use unsigned right shift.
This commit is contained in:
@@ -1,5 +1,15 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## v0.9.0 / 2024-01-24
|
||||||
|
### Fixed
|
||||||
|
- dependencies and security issues.
|
||||||
|
- don't modify global Array and ArrayBuffer prototypes.
|
||||||
|
- refactor: simplify formatMessage internal logic.
|
||||||
|
- Generates incorrect hash in some cases.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- use unsigned right shift.
|
||||||
|
|
||||||
## v0.8.0 / 2018-08-05
|
## v0.8.0 / 2018-08-05
|
||||||
### Added
|
### Added
|
||||||
- TypeScript definitions.
|
- TypeScript definitions.
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
Copyright 2014-2018 Chen, Yi-Cyuan
|
Copyright 2014-2024 Chen, Yi-Cyuan
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -28,6 +28,36 @@ For node.js, you can use this command to install:
|
|||||||
npm install js-sha512
|
npm install js-sha512
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
### Node.js
|
||||||
|
If you use node.js, you should require the module first:
|
||||||
|
```JavaScript
|
||||||
|
const { sha512, sha384, sha512_256, sha512_224 } = require('js-sha512');
|
||||||
|
```
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
If you use TypeScript, you can import like this:
|
||||||
|
```TypeScript
|
||||||
|
import { sha512, sha384, sha512_256, sha512_224 } from 'js-sha512';
|
||||||
|
```
|
||||||
|
|
||||||
|
### RequireJS
|
||||||
|
It supports AMD:
|
||||||
|
```JavaScript
|
||||||
|
require(['your/path/sha512.js'], function(jsSha512) {
|
||||||
|
const { sha512, sha384, sha512_256, sha512_224 } = jsSha512;
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Classic Browser
|
||||||
|
If you use browser script directly, functions will be global:
|
||||||
|
```JavaScript
|
||||||
|
sha512('Message to hash');
|
||||||
|
sha384('Message to hash');
|
||||||
|
sha512_256('Message to hash');
|
||||||
|
sha512_224('Message to hash');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example
|
||||||
You could use like this:
|
You could use like this:
|
||||||
```JavaScript
|
```JavaScript
|
||||||
sha512('Message to hash');
|
sha512('Message to hash');
|
||||||
@@ -70,26 +100,7 @@ hash.hex();
|
|||||||
var hash2 = sha512.hmac.update('key', 'Message to hash');
|
var hash2 = sha512.hmac.update('key', 'Message to hash');
|
||||||
hash2.update('Message2 to hash');
|
hash2.update('Message2 to hash');
|
||||||
hash2.array();
|
hash2.array();
|
||||||
```
|
|
||||||
If you use node.js, you should require the module first:
|
|
||||||
```JavaScript
|
|
||||||
var sha512 = require('js-sha512');
|
|
||||||
```
|
|
||||||
or
|
|
||||||
```JavaScript
|
|
||||||
var sha512 = require('js-sha512').sha512;
|
|
||||||
var sha384 = require('js-sha512').sha384;
|
|
||||||
var sha512_256 = require('js-sha512').sha512_256;
|
|
||||||
var sha512_224 = require('js-sha512').sha512_224;
|
|
||||||
```
|
|
||||||
It supports AMD:
|
|
||||||
```JavaScript
|
|
||||||
require(['your/path/sha512.js'], function(sha512) {
|
|
||||||
// ...
|
|
||||||
});
|
|
||||||
```
|
|
||||||
## Example
|
|
||||||
```JavaScript
|
|
||||||
sha512(''); // cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
|
sha512(''); // cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
|
||||||
sha512('The quick brown fox jumps over the lazy dog'); // 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
|
sha512('The quick brown fox jumps over the lazy dog'); // 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
|
||||||
sha512('The quick brown fox jumps over the lazy dog.'); // 91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed
|
sha512('The quick brown fox jumps over the lazy dog.'); // 91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed
|
||||||
@@ -115,6 +126,10 @@ sha512.hex(''); // cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce
|
|||||||
sha512.array(''); // [207, 131, 225, 53, 126, 239, 184, 189, 241, 84, 40, 80, 214, 109, 128, 7, 214, 32, 228, 5, 11, 87, 21, 220, 131, 244, 169, 33, 211, 108, 233, 206, 71, 208, 209, 60, 93, 133, 242, 176, 255, 131, 24, 210, 135, 126, 236, 47, 99, 185, 49, 189, 71, 65, 122, 129, 165, 56, 50, 122, 249, 39, 218, 62]
|
sha512.array(''); // [207, 131, 225, 53, 126, 239, 184, 189, 241, 84, 40, 80, 214, 109, 128, 7, 214, 32, 228, 5, 11, 87, 21, 220, 131, 244, 169, 33, 211, 108, 233, 206, 71, 208, 209, 60, 93, 133, 242, 176, 255, 131, 24, 210, 135, 126, 236, 47, 99, 185, 49, 189, 71, 65, 122, 129, 165, 56, 50, 122, 249, 39, 218, 62]
|
||||||
sha512.digest(''); // [207, 131, 225, 53, 126, 239, 184, 189, 241, 84, 40, 80, 214, 109, 128, 7, 214, 32, 228, 5, 11, 87, 21, 220, 131, 244, 169, 33, 211, 108, 233, 206, 71, 208, 209, 60, 93, 133, 242, 176, 255, 131, 24, 210, 135, 126, 236, 47, 99, 185, 49, 189, 71, 65, 122, 129, 165, 56, 50, 122, 249, 39, 218, 62]
|
sha512.digest(''); // [207, 131, 225, 53, 126, 239, 184, 189, 241, 84, 40, 80, 214, 109, 128, 7, 214, 32, 228, 5, 11, 87, 21, 220, 131, 244, 169, 33, 211, 108, 233, 206, 71, 208, 209, 60, 93, 133, 242, 176, 255, 131, 24, 210, 135, 126, 236, 47, 99, 185, 49, 189, 71, 65, 122, 129, 165, 56, 50, 122, 249, 39, 218, 62]
|
||||||
sha512.arrayBuffer(''); // ArrayBuffer
|
sha512.arrayBuffer(''); // ArrayBuffer
|
||||||
|
|
||||||
|
// HMAC
|
||||||
|
sha512.hmac.hex('key', 'Message to hash');
|
||||||
|
sha512.hmac.array('key', 'Message to hash');
|
||||||
```
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha512",
|
"name": "js-sha512",
|
||||||
"version": "0.8.0",
|
"version": "0.9.0",
|
||||||
"main": ["src/sha512.js"],
|
"main": ["src/sha512.js"],
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"samples",
|
"samples",
|
||||||
|
|||||||
Vendored
+3
-3
File diff suppressed because one or more lines are too long
Generated
+1775
-1644
File diff suppressed because it is too large
Load Diff
+6
-6
@@ -1,18 +1,18 @@
|
|||||||
{
|
{
|
||||||
"name": "js-sha512",
|
"name": "js-sha512",
|
||||||
"version": "0.8.0",
|
"version": "0.9.0",
|
||||||
"description": "This is a simple SHA-512, SHA-384, SHA-512/224, SHA-512/256 hash functions for JavaScript supports UTF-8 encoding.",
|
"description": "This is a simple SHA-512, SHA-384, SHA-512/224, SHA-512/256 hash functions for JavaScript supports UTF-8 encoding.",
|
||||||
"main": "src/sha512.js",
|
"main": "src/sha512.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"expect.js": "~0.3.1",
|
"expect.js": "~0.3.1",
|
||||||
"mocha": "~5.2.0",
|
"mocha": "~10.2.0",
|
||||||
"nyc": "^11.3.0",
|
"nyc": "^15.1.0",
|
||||||
"requirejs": "^2.1.22",
|
"requirejs": "^2.1.22",
|
||||||
"uglify-js": "^3.1.9",
|
"tiny-worker": "^2.3.0",
|
||||||
"webworker-threads": "^0.7.11"
|
"uglify-js": "^3.1.9"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "nyc mocha tests/node-test.js --exit",
|
"test": "nyc mocha tests/node-test.js",
|
||||||
"report": "nyc --reporter=html --reporter=text mocha tests/node-test.js --exit",
|
"report": "nyc --reporter=html --reporter=text mocha tests/node-test.js --exit",
|
||||||
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
||||||
"build": "uglifyjs src/sha512.js -c -m eval --comments -o build/sha512.min.js"
|
"build": "uglifyjs src/sha512.js -c -m eval --comments -o build/sha512.min.js"
|
||||||
|
|||||||
+135
-145
@@ -1,9 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* [js-sha512]{@link https://github.com/emn178/js-sha512}
|
* [js-sha512]{@link https://github.com/emn178/js-sha512}
|
||||||
*
|
*
|
||||||
* @version 0.8.0
|
* @version 0.9.0
|
||||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||||
* @copyright Chen, Yi-Cyuan 2014-2018
|
* @copyright Chen, Yi-Cyuan 2014-2024
|
||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
/*jslint bitwise: true */
|
/*jslint bitwise: true */
|
||||||
@@ -77,18 +77,38 @@
|
|||||||
|
|
||||||
var blocks = [];
|
var blocks = [];
|
||||||
|
|
||||||
if (root.JS_SHA512_NO_NODE_JS || !Array.isArray) {
|
var isArray = Array.isArray;
|
||||||
Array.isArray = function (obj) {
|
if (root.JS_SHA512_NO_NODE_JS || !isArray) {
|
||||||
|
isArray = function (obj) {
|
||||||
return Object.prototype.toString.call(obj) === '[object Array]';
|
return Object.prototype.toString.call(obj) === '[object Array]';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ARRAY_BUFFER && (root.JS_SHA512_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
|
var isView = ArrayBuffer.isView;
|
||||||
ArrayBuffer.isView = function (obj) {
|
if (ARRAY_BUFFER && (root.JS_SHA512_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
|
||||||
|
isView = function (obj) {
|
||||||
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [message: string, isString: bool]
|
||||||
|
var formatMessage = function (message) {
|
||||||
|
var type = typeof message;
|
||||||
|
if (type === 'string') {
|
||||||
|
return [message, true];
|
||||||
|
}
|
||||||
|
if (type !== 'object' || message === null) {
|
||||||
|
throw new Error(INPUT_ERROR);
|
||||||
|
}
|
||||||
|
if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
|
||||||
|
return [new Uint8Array(message), false];
|
||||||
|
}
|
||||||
|
if (!isArray(message) && !isView(message)) {
|
||||||
|
throw new Error(INPUT_ERROR);
|
||||||
|
}
|
||||||
|
return [message, false];
|
||||||
|
}
|
||||||
|
|
||||||
var createOutputMethod = function (outputType, bits) {
|
var createOutputMethod = function (outputType, bits) {
|
||||||
return function (message) {
|
return function (message) {
|
||||||
return new Sha512(bits, true).update(message)[outputType]();
|
return new Sha512(bits, true).update(message)[outputType]();
|
||||||
@@ -225,30 +245,16 @@
|
|||||||
if (this.finalized) {
|
if (this.finalized) {
|
||||||
throw new Error(FINALIZE_ERROR);
|
throw new Error(FINALIZE_ERROR);
|
||||||
}
|
}
|
||||||
var notString, type = typeof message;
|
var result = formatMessage(message);
|
||||||
if (type !== 'string') {
|
message = result[0];
|
||||||
if (type === 'object') {
|
var isString = result[1];
|
||||||
if (message === null) {
|
|
||||||
throw new Error(INPUT_ERROR);
|
|
||||||
} 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(INPUT_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error(INPUT_ERROR);
|
|
||||||
}
|
|
||||||
notString = true;
|
|
||||||
}
|
|
||||||
var code, index = 0, i, length = message.length, blocks = this.blocks;
|
var code, index = 0, i, length = message.length, 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[1] = blocks[2] = blocks[3] = blocks[4] =
|
this.block = blocks[1] = blocks[2] = blocks[3] = blocks[4] =
|
||||||
blocks[5] = blocks[6] = blocks[7] = blocks[8] =
|
blocks[5] = blocks[6] = blocks[7] = blocks[8] =
|
||||||
blocks[9] = blocks[10] = blocks[11] = blocks[12] =
|
blocks[9] = blocks[10] = blocks[11] = blocks[12] =
|
||||||
blocks[13] = blocks[14] = blocks[15] = blocks[16] =
|
blocks[13] = blocks[14] = blocks[15] = blocks[16] =
|
||||||
@@ -258,30 +264,30 @@
|
|||||||
blocks[29] = blocks[30] = blocks[31] = blocks[32] = 0;
|
blocks[29] = blocks[30] = blocks[31] = blocks[32] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(notString) {
|
if(isString) {
|
||||||
for (i = this.start; index < length && i < 128; ++index) {
|
|
||||||
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (i = this.start; index < length && i < 128; ++index) {
|
for (i = this.start; index < length && i < 128; ++index) {
|
||||||
code = message.charCodeAt(index);
|
code = message.charCodeAt(index);
|
||||||
if (code < 0x80) {
|
if (code < 0x80) {
|
||||||
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
blocks[i >>> 2] |= code << SHIFT[i++ & 3];
|
||||||
} else if (code < 0x800) {
|
} else if (code < 0x800) {
|
||||||
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||||
} else if (code < 0xd800 || code >= 0xe000) {
|
} else if (code < 0xd800 || code >= 0xe000) {
|
||||||
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << 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 {
|
} else {
|
||||||
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||||||
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];
|
||||||
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << 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 {
|
||||||
|
for (i = this.start; index < length && i < 128; ++index) {
|
||||||
|
blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.lastByteIndex = i;
|
this.lastByteIndex = i;
|
||||||
@@ -309,7 +315,7 @@
|
|||||||
this.finalized = true;
|
this.finalized = true;
|
||||||
var blocks = this.blocks, i = this.lastByteIndex;
|
var blocks = this.blocks, i = this.lastByteIndex;
|
||||||
blocks[32] = this.block;
|
blocks[32] = this.block;
|
||||||
blocks[i >> 2] |= EXTRA[i & 3];
|
blocks[i >>> 2] |= EXTRA[i & 3];
|
||||||
this.block = blocks[32];
|
this.block = blocks[32];
|
||||||
if (i >= 112) {
|
if (i >= 112) {
|
||||||
if (!this.hashed) {
|
if (!this.hashed) {
|
||||||
@@ -647,75 +653,75 @@
|
|||||||
h6h = this.h6h, h6l = this.h6l, h7h = this.h7h, h7l = this.h7l,
|
h6h = this.h6h, h6l = this.h6l, h7h = this.h7h, h7l = this.h7l,
|
||||||
bits = this.bits;
|
bits = this.bits;
|
||||||
|
|
||||||
var hex = HEX_CHARS[(h0h >> 28) & 0x0F] + HEX_CHARS[(h0h >> 24) & 0x0F] +
|
var hex = HEX_CHARS[(h0h >>> 28) & 0x0F] + HEX_CHARS[(h0h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h0h >> 20) & 0x0F] + HEX_CHARS[(h0h >> 16) & 0x0F] +
|
HEX_CHARS[(h0h >>> 20) & 0x0F] + HEX_CHARS[(h0h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h0h >> 12) & 0x0F] + HEX_CHARS[(h0h >> 8) & 0x0F] +
|
HEX_CHARS[(h0h >>> 12) & 0x0F] + HEX_CHARS[(h0h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h0h >> 4) & 0x0F] + HEX_CHARS[h0h & 0x0F] +
|
HEX_CHARS[(h0h >>> 4) & 0x0F] + HEX_CHARS[h0h & 0x0F] +
|
||||||
HEX_CHARS[(h0l >> 28) & 0x0F] + HEX_CHARS[(h0l >> 24) & 0x0F] +
|
HEX_CHARS[(h0l >>> 28) & 0x0F] + HEX_CHARS[(h0l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h0l >> 20) & 0x0F] + HEX_CHARS[(h0l >> 16) & 0x0F] +
|
HEX_CHARS[(h0l >>> 20) & 0x0F] + HEX_CHARS[(h0l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h0l >> 12) & 0x0F] + HEX_CHARS[(h0l >> 8) & 0x0F] +
|
HEX_CHARS[(h0l >>> 12) & 0x0F] + HEX_CHARS[(h0l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h0l >> 4) & 0x0F] + HEX_CHARS[h0l & 0x0F] +
|
HEX_CHARS[(h0l >>> 4) & 0x0F] + HEX_CHARS[h0l & 0x0F] +
|
||||||
HEX_CHARS[(h1h >> 28) & 0x0F] + HEX_CHARS[(h1h >> 24) & 0x0F] +
|
HEX_CHARS[(h1h >>> 28) & 0x0F] + HEX_CHARS[(h1h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h1h >> 20) & 0x0F] + HEX_CHARS[(h1h >> 16) & 0x0F] +
|
HEX_CHARS[(h1h >>> 20) & 0x0F] + HEX_CHARS[(h1h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h1h >> 12) & 0x0F] + HEX_CHARS[(h1h >> 8) & 0x0F] +
|
HEX_CHARS[(h1h >>> 12) & 0x0F] + HEX_CHARS[(h1h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h1h >> 4) & 0x0F] + HEX_CHARS[h1h & 0x0F] +
|
HEX_CHARS[(h1h >>> 4) & 0x0F] + HEX_CHARS[h1h & 0x0F] +
|
||||||
HEX_CHARS[(h1l >> 28) & 0x0F] + HEX_CHARS[(h1l >> 24) & 0x0F] +
|
HEX_CHARS[(h1l >>> 28) & 0x0F] + HEX_CHARS[(h1l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h1l >> 20) & 0x0F] + HEX_CHARS[(h1l >> 16) & 0x0F] +
|
HEX_CHARS[(h1l >>> 20) & 0x0F] + HEX_CHARS[(h1l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h1l >> 12) & 0x0F] + HEX_CHARS[(h1l >> 8) & 0x0F] +
|
HEX_CHARS[(h1l >>> 12) & 0x0F] + HEX_CHARS[(h1l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h1l >> 4) & 0x0F] + HEX_CHARS[h1l & 0x0F] +
|
HEX_CHARS[(h1l >>> 4) & 0x0F] + HEX_CHARS[h1l & 0x0F] +
|
||||||
HEX_CHARS[(h2h >> 28) & 0x0F] + HEX_CHARS[(h2h >> 24) & 0x0F] +
|
HEX_CHARS[(h2h >>> 28) & 0x0F] + HEX_CHARS[(h2h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h2h >> 20) & 0x0F] + HEX_CHARS[(h2h >> 16) & 0x0F] +
|
HEX_CHARS[(h2h >>> 20) & 0x0F] + HEX_CHARS[(h2h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h2h >> 12) & 0x0F] + HEX_CHARS[(h2h >> 8) & 0x0F] +
|
HEX_CHARS[(h2h >>> 12) & 0x0F] + HEX_CHARS[(h2h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h2h >> 4) & 0x0F] + HEX_CHARS[h2h & 0x0F] +
|
HEX_CHARS[(h2h >>> 4) & 0x0F] + HEX_CHARS[h2h & 0x0F] +
|
||||||
HEX_CHARS[(h2l >> 28) & 0x0F] + HEX_CHARS[(h2l >> 24) & 0x0F] +
|
HEX_CHARS[(h2l >>> 28) & 0x0F] + HEX_CHARS[(h2l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h2l >> 20) & 0x0F] + HEX_CHARS[(h2l >> 16) & 0x0F] +
|
HEX_CHARS[(h2l >>> 20) & 0x0F] + HEX_CHARS[(h2l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h2l >> 12) & 0x0F] + HEX_CHARS[(h2l >> 8) & 0x0F] +
|
HEX_CHARS[(h2l >>> 12) & 0x0F] + HEX_CHARS[(h2l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h2l >> 4) & 0x0F] + HEX_CHARS[h2l & 0x0F] +
|
HEX_CHARS[(h2l >>> 4) & 0x0F] + HEX_CHARS[h2l & 0x0F] +
|
||||||
HEX_CHARS[(h3h >> 28) & 0x0F] + HEX_CHARS[(h3h >> 24) & 0x0F] +
|
HEX_CHARS[(h3h >>> 28) & 0x0F] + HEX_CHARS[(h3h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h3h >> 20) & 0x0F] + HEX_CHARS[(h3h >> 16) & 0x0F] +
|
HEX_CHARS[(h3h >>> 20) & 0x0F] + HEX_CHARS[(h3h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h3h >> 12) & 0x0F] + HEX_CHARS[(h3h >> 8) & 0x0F] +
|
HEX_CHARS[(h3h >>> 12) & 0x0F] + HEX_CHARS[(h3h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h3h >> 4) & 0x0F] + HEX_CHARS[h3h & 0x0F];
|
HEX_CHARS[(h3h >>> 4) & 0x0F] + HEX_CHARS[h3h & 0x0F];
|
||||||
if (bits >= 256) {
|
if (bits >= 256) {
|
||||||
hex += HEX_CHARS[(h3l >> 28) & 0x0F] + HEX_CHARS[(h3l >> 24) & 0x0F] +
|
hex += HEX_CHARS[(h3l >>> 28) & 0x0F] + HEX_CHARS[(h3l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h3l >> 20) & 0x0F] + HEX_CHARS[(h3l >> 16) & 0x0F] +
|
HEX_CHARS[(h3l >>> 20) & 0x0F] + HEX_CHARS[(h3l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h3l >> 12) & 0x0F] + HEX_CHARS[(h3l >> 8) & 0x0F] +
|
HEX_CHARS[(h3l >>> 12) & 0x0F] + HEX_CHARS[(h3l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h3l >> 4) & 0x0F] + HEX_CHARS[h3l & 0x0F];
|
HEX_CHARS[(h3l >>> 4) & 0x0F] + HEX_CHARS[h3l & 0x0F];
|
||||||
}
|
}
|
||||||
if (bits >= 384) {
|
if (bits >= 384) {
|
||||||
hex += HEX_CHARS[(h4h >> 28) & 0x0F] + HEX_CHARS[(h4h >> 24) & 0x0F] +
|
hex += HEX_CHARS[(h4h >>> 28) & 0x0F] + HEX_CHARS[(h4h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h4h >> 20) & 0x0F] + HEX_CHARS[(h4h >> 16) & 0x0F] +
|
HEX_CHARS[(h4h >>> 20) & 0x0F] + HEX_CHARS[(h4h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h4h >> 12) & 0x0F] + HEX_CHARS[(h4h >> 8) & 0x0F] +
|
HEX_CHARS[(h4h >>> 12) & 0x0F] + HEX_CHARS[(h4h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h4h >> 4) & 0x0F] + HEX_CHARS[h4h & 0x0F] +
|
HEX_CHARS[(h4h >>> 4) & 0x0F] + HEX_CHARS[h4h & 0x0F] +
|
||||||
HEX_CHARS[(h4l >> 28) & 0x0F] + HEX_CHARS[(h4l >> 24) & 0x0F] +
|
HEX_CHARS[(h4l >>> 28) & 0x0F] + HEX_CHARS[(h4l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h4l >> 20) & 0x0F] + HEX_CHARS[(h4l >> 16) & 0x0F] +
|
HEX_CHARS[(h4l >>> 20) & 0x0F] + HEX_CHARS[(h4l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h4l >> 12) & 0x0F] + HEX_CHARS[(h4l >> 8) & 0x0F] +
|
HEX_CHARS[(h4l >>> 12) & 0x0F] + HEX_CHARS[(h4l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h4l >> 4) & 0x0F] + HEX_CHARS[h4l & 0x0F] +
|
HEX_CHARS[(h4l >>> 4) & 0x0F] + HEX_CHARS[h4l & 0x0F] +
|
||||||
HEX_CHARS[(h5h >> 28) & 0x0F] + HEX_CHARS[(h5h >> 24) & 0x0F] +
|
HEX_CHARS[(h5h >>> 28) & 0x0F] + HEX_CHARS[(h5h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h5h >> 20) & 0x0F] + HEX_CHARS[(h5h >> 16) & 0x0F] +
|
HEX_CHARS[(h5h >>> 20) & 0x0F] + HEX_CHARS[(h5h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h5h >> 12) & 0x0F] + HEX_CHARS[(h5h >> 8) & 0x0F] +
|
HEX_CHARS[(h5h >>> 12) & 0x0F] + HEX_CHARS[(h5h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h5h >> 4) & 0x0F] + HEX_CHARS[h5h & 0x0F] +
|
HEX_CHARS[(h5h >>> 4) & 0x0F] + HEX_CHARS[h5h & 0x0F] +
|
||||||
HEX_CHARS[(h5l >> 28) & 0x0F] + HEX_CHARS[(h5l >> 24) & 0x0F] +
|
HEX_CHARS[(h5l >>> 28) & 0x0F] + HEX_CHARS[(h5l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h5l >> 20) & 0x0F] + HEX_CHARS[(h5l >> 16) & 0x0F] +
|
HEX_CHARS[(h5l >>> 20) & 0x0F] + HEX_CHARS[(h5l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h5l >> 12) & 0x0F] + HEX_CHARS[(h5l >> 8) & 0x0F] +
|
HEX_CHARS[(h5l >>> 12) & 0x0F] + HEX_CHARS[(h5l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h5l >> 4) & 0x0F] + HEX_CHARS[h5l & 0x0F];
|
HEX_CHARS[(h5l >>> 4) & 0x0F] + HEX_CHARS[h5l & 0x0F];
|
||||||
}
|
}
|
||||||
if (bits == 512) {
|
if (bits == 512) {
|
||||||
hex += HEX_CHARS[(h6h >> 28) & 0x0F] + HEX_CHARS[(h6h >> 24) & 0x0F] +
|
hex += HEX_CHARS[(h6h >>> 28) & 0x0F] + HEX_CHARS[(h6h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h6h >> 20) & 0x0F] + HEX_CHARS[(h6h >> 16) & 0x0F] +
|
HEX_CHARS[(h6h >>> 20) & 0x0F] + HEX_CHARS[(h6h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h6h >> 12) & 0x0F] + HEX_CHARS[(h6h >> 8) & 0x0F] +
|
HEX_CHARS[(h6h >>> 12) & 0x0F] + HEX_CHARS[(h6h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h6h >> 4) & 0x0F] + HEX_CHARS[h6h & 0x0F] +
|
HEX_CHARS[(h6h >>> 4) & 0x0F] + HEX_CHARS[h6h & 0x0F] +
|
||||||
HEX_CHARS[(h6l >> 28) & 0x0F] + HEX_CHARS[(h6l >> 24) & 0x0F] +
|
HEX_CHARS[(h6l >>> 28) & 0x0F] + HEX_CHARS[(h6l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h6l >> 20) & 0x0F] + HEX_CHARS[(h6l >> 16) & 0x0F] +
|
HEX_CHARS[(h6l >>> 20) & 0x0F] + HEX_CHARS[(h6l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h6l >> 12) & 0x0F] + HEX_CHARS[(h6l >> 8) & 0x0F] +
|
HEX_CHARS[(h6l >>> 12) & 0x0F] + HEX_CHARS[(h6l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h6l >> 4) & 0x0F] + HEX_CHARS[h6l & 0x0F] +
|
HEX_CHARS[(h6l >>> 4) & 0x0F] + HEX_CHARS[h6l & 0x0F] +
|
||||||
HEX_CHARS[(h7h >> 28) & 0x0F] + HEX_CHARS[(h7h >> 24) & 0x0F] +
|
HEX_CHARS[(h7h >>> 28) & 0x0F] + HEX_CHARS[(h7h >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h7h >> 20) & 0x0F] + HEX_CHARS[(h7h >> 16) & 0x0F] +
|
HEX_CHARS[(h7h >>> 20) & 0x0F] + HEX_CHARS[(h7h >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h7h >> 12) & 0x0F] + HEX_CHARS[(h7h >> 8) & 0x0F] +
|
HEX_CHARS[(h7h >>> 12) & 0x0F] + HEX_CHARS[(h7h >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h7h >> 4) & 0x0F] + HEX_CHARS[h7h & 0x0F] +
|
HEX_CHARS[(h7h >>> 4) & 0x0F] + HEX_CHARS[h7h & 0x0F] +
|
||||||
HEX_CHARS[(h7l >> 28) & 0x0F] + HEX_CHARS[(h7l >> 24) & 0x0F] +
|
HEX_CHARS[(h7l >>> 28) & 0x0F] + HEX_CHARS[(h7l >>> 24) & 0x0F] +
|
||||||
HEX_CHARS[(h7l >> 20) & 0x0F] + HEX_CHARS[(h7l >> 16) & 0x0F] +
|
HEX_CHARS[(h7l >>> 20) & 0x0F] + HEX_CHARS[(h7l >>> 16) & 0x0F] +
|
||||||
HEX_CHARS[(h7l >> 12) & 0x0F] + HEX_CHARS[(h7l >> 8) & 0x0F] +
|
HEX_CHARS[(h7l >>> 12) & 0x0F] + HEX_CHARS[(h7l >>> 8) & 0x0F] +
|
||||||
HEX_CHARS[(h7l >> 4) & 0x0F] + HEX_CHARS[h7l & 0x0F];
|
HEX_CHARS[(h7l >>> 4) & 0x0F] + HEX_CHARS[h7l & 0x0F];
|
||||||
}
|
}
|
||||||
return hex;
|
return hex;
|
||||||
};
|
};
|
||||||
@@ -732,32 +738,32 @@
|
|||||||
bits = this.bits;
|
bits = this.bits;
|
||||||
|
|
||||||
var arr = [
|
var arr = [
|
||||||
(h0h >> 24) & 0xFF, (h0h >> 16) & 0xFF, (h0h >> 8) & 0xFF, h0h & 0xFF,
|
(h0h >>> 24) & 0xFF, (h0h >>> 16) & 0xFF, (h0h >>> 8) & 0xFF, h0h & 0xFF,
|
||||||
(h0l >> 24) & 0xFF, (h0l >> 16) & 0xFF, (h0l >> 8) & 0xFF, h0l & 0xFF,
|
(h0l >>> 24) & 0xFF, (h0l >>> 16) & 0xFF, (h0l >>> 8) & 0xFF, h0l & 0xFF,
|
||||||
(h1h >> 24) & 0xFF, (h1h >> 16) & 0xFF, (h1h >> 8) & 0xFF, h1h & 0xFF,
|
(h1h >>> 24) & 0xFF, (h1h >>> 16) & 0xFF, (h1h >>> 8) & 0xFF, h1h & 0xFF,
|
||||||
(h1l >> 24) & 0xFF, (h1l >> 16) & 0xFF, (h1l >> 8) & 0xFF, h1l & 0xFF,
|
(h1l >>> 24) & 0xFF, (h1l >>> 16) & 0xFF, (h1l >>> 8) & 0xFF, h1l & 0xFF,
|
||||||
(h2h >> 24) & 0xFF, (h2h >> 16) & 0xFF, (h2h >> 8) & 0xFF, h2h & 0xFF,
|
(h2h >>> 24) & 0xFF, (h2h >>> 16) & 0xFF, (h2h >>> 8) & 0xFF, h2h & 0xFF,
|
||||||
(h2l >> 24) & 0xFF, (h2l >> 16) & 0xFF, (h2l >> 8) & 0xFF, h2l & 0xFF,
|
(h2l >>> 24) & 0xFF, (h2l >>> 16) & 0xFF, (h2l >>> 8) & 0xFF, h2l & 0xFF,
|
||||||
(h3h >> 24) & 0xFF, (h3h >> 16) & 0xFF, (h3h >> 8) & 0xFF, h3h & 0xFF
|
(h3h >>> 24) & 0xFF, (h3h >>> 16) & 0xFF, (h3h >>> 8) & 0xFF, h3h & 0xFF
|
||||||
];
|
];
|
||||||
|
|
||||||
if (bits >= 256) {
|
if (bits >= 256) {
|
||||||
arr.push((h3l >> 24) & 0xFF, (h3l >> 16) & 0xFF, (h3l >> 8) & 0xFF, h3l & 0xFF);
|
arr.push((h3l >>> 24) & 0xFF, (h3l >>> 16) & 0xFF, (h3l >>> 8) & 0xFF, h3l & 0xFF);
|
||||||
}
|
}
|
||||||
if (bits >= 384) {
|
if (bits >= 384) {
|
||||||
arr.push(
|
arr.push(
|
||||||
(h4h >> 24) & 0xFF, (h4h >> 16) & 0xFF, (h4h >> 8) & 0xFF, h4h & 0xFF,
|
(h4h >>> 24) & 0xFF, (h4h >>> 16) & 0xFF, (h4h >>> 8) & 0xFF, h4h & 0xFF,
|
||||||
(h4l >> 24) & 0xFF, (h4l >> 16) & 0xFF, (h4l >> 8) & 0xFF, h4l & 0xFF,
|
(h4l >>> 24) & 0xFF, (h4l >>> 16) & 0xFF, (h4l >>> 8) & 0xFF, h4l & 0xFF,
|
||||||
(h5h >> 24) & 0xFF, (h5h >> 16) & 0xFF, (h5h >> 8) & 0xFF, h5h & 0xFF,
|
(h5h >>> 24) & 0xFF, (h5h >>> 16) & 0xFF, (h5h >>> 8) & 0xFF, h5h & 0xFF,
|
||||||
(h5l >> 24) & 0xFF, (h5l >> 16) & 0xFF, (h5l >> 8) & 0xFF, h5l & 0xFF
|
(h5l >>> 24) & 0xFF, (h5l >>> 16) & 0xFF, (h5l >>> 8) & 0xFF, h5l & 0xFF
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (bits == 512) {
|
if (bits == 512) {
|
||||||
arr.push(
|
arr.push(
|
||||||
(h6h >> 24) & 0xFF, (h6h >> 16) & 0xFF, (h6h >> 8) & 0xFF, h6h & 0xFF,
|
(h6h >>> 24) & 0xFF, (h6h >>> 16) & 0xFF, (h6h >>> 8) & 0xFF, h6h & 0xFF,
|
||||||
(h6l >> 24) & 0xFF, (h6l >> 16) & 0xFF, (h6l >> 8) & 0xFF, h6l & 0xFF,
|
(h6l >>> 24) & 0xFF, (h6l >>> 16) & 0xFF, (h6l >>> 8) & 0xFF, h6l & 0xFF,
|
||||||
(h7h >> 24) & 0xFF, (h7h >> 16) & 0xFF, (h7h >> 8) & 0xFF, h7h & 0xFF,
|
(h7h >>> 24) & 0xFF, (h7h >>> 16) & 0xFF, (h7h >>> 8) & 0xFF, h7h & 0xFF,
|
||||||
(h7l >> 24) & 0xFF, (h7l >> 16) & 0xFF, (h7l >> 8) & 0xFF, h7l & 0xFF
|
(h7l >>> 24) & 0xFF, (h7l >>> 16) & 0xFF, (h7l >>> 8) & 0xFF, h7l & 0xFF
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return arr;
|
return arr;
|
||||||
@@ -817,42 +823,26 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
function HmacSha512(key, bits, sharedMemory) {
|
function HmacSha512(key, bits, sharedMemory) {
|
||||||
var notString, type = typeof key;
|
var i, result = formatMessage(key);
|
||||||
if (type !== 'string') {
|
key = result[0];
|
||||||
if (type === 'object') {
|
if (result[1]) {
|
||||||
if (key === null) {
|
|
||||||
throw new Error(INPUT_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(INPUT_ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new Error(INPUT_ERROR);
|
|
||||||
}
|
|
||||||
notString = true;
|
|
||||||
}
|
|
||||||
var length = key.length;
|
|
||||||
if (!notString) {
|
|
||||||
var bytes = [], length = key.length, index = 0, code;
|
var bytes = [], length = key.length, index = 0, code;
|
||||||
for (var i = 0; i < length; ++i) {
|
for (var 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;
|
||||||
} else if (code < 0x800) {
|
} else if (code < 0x800) {
|
||||||
bytes[index++] = (0xc0 | (code >> 6));
|
bytes[index++] = (0xc0 | (code >>> 6));
|
||||||
bytes[index++] = (0x80 | (code & 0x3f));
|
bytes[index++] = (0x80 | (code & 0x3f));
|
||||||
} else if (code < 0xd800 || code >= 0xe000) {
|
} else if (code < 0xd800 || code >= 0xe000) {
|
||||||
bytes[index++] = (0xe0 | (code >> 12));
|
bytes[index++] = (0xe0 | (code >>> 12));
|
||||||
bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
|
bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));
|
||||||
bytes[index++] = (0x80 | (code & 0x3f));
|
bytes[index++] = (0x80 | (code & 0x3f));
|
||||||
} else {
|
} else {
|
||||||
code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
|
code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
|
||||||
bytes[index++] = (0xf0 | (code >> 18));
|
bytes[index++] = (0xf0 | (code >>> 18));
|
||||||
bytes[index++] = (0x80 | ((code >> 12) & 0x3f));
|
bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));
|
||||||
bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
|
bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));
|
||||||
bytes[index++] = (0x80 | (code & 0x3f));
|
bytes[index++] = (0x80 | (code & 0x3f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
expect = require('expect.js');
|
expect = require('expect.js');
|
||||||
Worker = require('webworker-threads').Worker;
|
Worker = require("tiny-worker");
|
||||||
|
|
||||||
function unset() {
|
function unset() {
|
||||||
delete require.cache[require.resolve('../src/sha512.js')];
|
delete require.cache[require.resolve('../src/sha512.js')];
|
||||||
|
|||||||
+2
-1
@@ -22,7 +22,8 @@
|
|||||||
'UTF8': {
|
'UTF8': {
|
||||||
'8b88efc2ebbcbdad5ac2d65af05bec57bda25e71fd5fb25bbd892057a2755fbd05d8d8491cb2946febd5b0f124ffdfbaecf7e34946353c4f1b5ab29545895468': '中文',
|
'8b88efc2ebbcbdad5ac2d65af05bec57bda25e71fd5fb25bbd892057a2755fbd05d8d8491cb2946febd5b0f124ffdfbaecf7e34946353c4f1b5ab29545895468': '中文',
|
||||||
'e1c6925243db76985abacaf9fa85e22697f549e67f65a36c88e4046a2260990ff9eefc3402396ea8dcbe8c592d8d5671bea612156eda38d3708d394bbd17d493': 'aécio',
|
'e1c6925243db76985abacaf9fa85e22697f549e67f65a36c88e4046a2260990ff9eefc3402396ea8dcbe8c592d8d5671bea612156eda38d3708d394bbd17d493': 'aécio',
|
||||||
'f3e7ee9cdf7dbb52f7edd59ce3d49868c64f2b3aceceab060b8eaaebdf9de0dae5866d660e3319c5aad426a2176cb1703efc73eb24d1a90458ceda1b7f4e3940': '𠜎'
|
'f3e7ee9cdf7dbb52f7edd59ce3d49868c64f2b3aceceab060b8eaaebdf9de0dae5866d660e3319c5aad426a2176cb1703efc73eb24d1a90458ceda1b7f4e3940': '𠜎',
|
||||||
|
'2665b06c3aa040d34e3ebeb8eb462a23e9789be9aa44c5242213f33c9bf18d391325de84cd91e1cb8b586739a9037acbf606eb8139a64e0244cdc4779faf62f7': 'Tehtäväsi on muotoilla teksti, jossa käyttäjälle suositellaan hänen henkilökohtaisiin tietoihinsa perustuen avioehdon tekemistä. Suosittelemme nimenomaan tätä tuotetta käyttäjän henkilökohtaisista tiedoista johtuen. Tuottamasi tekstin tulee olla lyhyt, persoonallinen, ymmärrettävä ja todenmukainen. Suositus perustuu seuraaviin seikkoihin:\n\nSeikka 0: Avioehdon tekeminen on verohyötyjen vuoksi suositeltavaa, koska olet ilmaissut että haluat kuoleman tapauksessa turvata ensisijaisesti aviopuolisosi asemaa (ennemmin kuin lasten asemaa). Avioehdolla voit määrätä, että puolet kuolleen puolison omaisuudesta siirtyy verovapaasti leskelle.\n\nVoit halutessasi hyödyntää seuraavia tietoja tekstin muotoilussa persoonallisemmaksi: Käyttäjällä on kumppani nimeltä PARTNER_NAME. Käyttäjällä on suurperhe. Käyttäjällä on lapsiperhe.\n\nPuhuttele käyttäjää siihen sävyyn että tiedät jo mitä käyttäjä haluaa, koska hän on kertonut toiveistaan, ja niiden perusteella tehty suositus on ilmiselvä. Joten älä käytä epävarmoja ilmaisuja kuten "halutessasi", vaan kirjoita itsevarmoilla ilmaisuilla kuten "koska haluat". Älä tee oletuksia käyttäjän sukupuolesta, emme tiedä onko hän mies vai nainen. Älä käytä sanaa jälkikasvu, puhu ennemmin lapsesta tai lapsista riippuen onko lapsia yksi vai useampia. Älä puhuttele käyttäjää ensimmäisessä persoonassa, käytä ennemmin passiivimuotoa. Tekstin sävyn tulisi olla neutraalin asiallinen, ei melodramaattinen eikä leikkisä. Pysy totuudessa, älä keksi uusia seikkoja yllä listattujen lisäksi. Viittaa ihmisiin nimillä silloin kun se on mahdollista. Tekstin tulisi olla vain muutaman lauseen mittainen. Älä siis kirjoita pitkiä selityksiä äläkä kirjoita listoja. Tiivistä oleellinen tieto lyhyeksi ja persoonalliseksi tekstiksi. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||||
},
|
},
|
||||||
'UTF8 more than 64 bytes': {
|
'UTF8 more than 64 bytes': {
|
||||||
'6cb7f6d3381a187edadb43c7cdcfbbed4d2c213a7dce8ea08fe42b9882b64e643202b4974a6db94f94650ab9173d97c58bd59f6d19d27e01aab76d8d08855c65': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一',
|
'6cb7f6d3381a187edadb43c7cdcfbbed4d2c213a7dce8ea08fe42b9882b64e643202b4974a6db94f94650ab9173d97c58bd59f6d19d27e01aab76d8d08855c65': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一',
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
var worker = new Worker(WORKER);
|
var worker = new Worker(WORKER);
|
||||||
worker.onmessage = function(event) {
|
worker.onmessage = function(event) {
|
||||||
expect(event.data).to.be(hash);
|
expect(event.data).to.be(hash);
|
||||||
|
if (worker.terminate) {
|
||||||
|
worker.terminate();
|
||||||
|
}
|
||||||
done();
|
done();
|
||||||
};
|
};
|
||||||
worker.postMessage(SOURCE);
|
worker.postMessage(SOURCE);
|
||||||
|
|||||||
Reference in New Issue
Block a user