@chainsafe/as-sha256
Advanced tools
Comparing version 0.2.2 to 0.2.3
@@ -1,3 +0,8 @@ | ||
## 0.2.1 (2021-05-06) | ||
## 0.2.3 (2021-08-10) | ||
- Add digestObjects method ([da5d82](https://github.com/ChainSafe/as-sha256/commit/da5d82)) | ||
- Optimised w+k for digest64 ([359555](https://github.com/ChainSafe/as-sha256/commit/359555)) | ||
## 0.2.2 (2021-05-06) | ||
### Bug Fixes | ||
@@ -4,0 +9,0 @@ |
@@ -0,1 +1,17 @@ | ||
/** | ||
* This is a hash representation with 8 numbers, each 4 bytes. | ||
* That makes it 32 bytes, the same to Uint8Array(32). | ||
*/ | ||
export interface HashObject { | ||
h0: number; | ||
h1: number; | ||
h2: number; | ||
h3: number; | ||
h4: number; | ||
h5: number; | ||
h6: number; | ||
h7: number; | ||
} | ||
export default class SHA256 { | ||
@@ -9,2 +25,6 @@ constructor(); | ||
static digest64(data: Uint8Array): Uint8Array; | ||
static digestTwoHashObjects(obj1: HashObject, obj2: HashObject): HashObject; | ||
} | ||
export function hashObjectToByteArray(obj: HashObject, byteArr: ArrayLike<number>, offset: number): void; | ||
export function byteArrayToHashObject(byteArr: ArrayLike<number>): HashObject; |
224
lib/index.js
@@ -6,2 +6,4 @@ "use strict"; | ||
}); | ||
exports.hashObjectToByteArray = hashObjectToByteArray; | ||
exports.byteArrayToHashObject = byteArrayToHashObject; | ||
exports.default = void 0; | ||
@@ -14,2 +16,8 @@ | ||
this.ctx = (0, _wasm.newInstance)(); | ||
this.wasmInputValue = this.ctx.input.value; | ||
this.wasmOutputValue = this.ctx.output.value; | ||
this.uint8InputArray = new Uint8Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); | ||
this.uint8OutputArray = new Uint8Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); | ||
this.uint32InputArray = new Uint32Array(this.ctx.memory.buffer, this.wasmInputValue, this.ctx.INPUT_LENGTH); // extracting numbers from Uint32Array causes more memory | ||
// this.uint32OutputArray = new Uint32Array(this.ctx.memory.buffer, this.wasmOutputValue, 32); | ||
} | ||
@@ -24,3 +32,2 @@ | ||
const INPUT_LENGTH = this.ctx.INPUT_LENGTH; | ||
const input = new Uint8Array(this.ctx.memory.buffer, this.ctx.input.value, INPUT_LENGTH); | ||
@@ -30,8 +37,8 @@ if (data.length > INPUT_LENGTH) { | ||
const sliced = data.slice(i, i + INPUT_LENGTH); | ||
input.set(sliced); | ||
this.ctx.update(this.ctx.input.value, sliced.length); | ||
this.uint8InputArray.set(sliced); | ||
this.ctx.update(this.wasmInputValue, sliced.length); | ||
} | ||
} else { | ||
input.set(data); | ||
this.ctx.update(this.ctx.input.value, data.length); | ||
this.uint8InputArray.set(data); | ||
this.ctx.update(this.wasmInputValue, data.length); | ||
} | ||
@@ -43,5 +50,5 @@ | ||
final() { | ||
this.ctx.final(this.ctx.output.value); | ||
this.ctx.final(this.wasmOutputValue); | ||
const output = new Uint8Array(32); | ||
output.set(new Uint8Array(this.ctx.memory.buffer, this.ctx.output.value, 32)); | ||
output.set(this.uint8OutputArray); | ||
return output; | ||
@@ -65,7 +72,6 @@ } | ||
if (data.length == 64) { | ||
const input = new Uint8Array(staticInstance.ctx.memory.buffer, staticInstance.ctx.input.value, staticInstance.ctx.INPUT_LENGTH); | ||
input.set(data); | ||
staticInstance.ctx.digest64(staticInstance.ctx.input.value, staticInstance.ctx.output.value); | ||
staticInstance.uint8InputArray.set(data); | ||
staticInstance.ctx.digest64(staticInstance.wasmInputValue, staticInstance.wasmOutputValue); | ||
const output = new Uint8Array(32); | ||
output.set(new Uint8Array(staticInstance.ctx.memory.buffer, staticInstance.ctx.output.value, 32)); | ||
output.set(staticInstance.uint8OutputArray); | ||
return output; | ||
@@ -76,6 +82,200 @@ } | ||
} | ||
/** | ||
* Digest 2 objects, each has 8 properties from h0 to h7. | ||
* The performance is a little bit better than digest64 due to the use of Uint32Array | ||
* and the memory is a little bit better than digest64 due to no temporary Uint8Array. | ||
* @returns | ||
*/ | ||
static digestTwoHashObjects(obj1, obj2) { | ||
// TODO: expect obj1 and obj2 as HashObject | ||
staticInstance.uint32InputArray[0] = obj1.h0; | ||
staticInstance.uint32InputArray[1] = obj1.h1; | ||
staticInstance.uint32InputArray[2] = obj1.h2; | ||
staticInstance.uint32InputArray[3] = obj1.h3; | ||
staticInstance.uint32InputArray[4] = obj1.h4; | ||
staticInstance.uint32InputArray[5] = obj1.h5; | ||
staticInstance.uint32InputArray[6] = obj1.h6; | ||
staticInstance.uint32InputArray[7] = obj1.h7; | ||
staticInstance.uint32InputArray[8] = obj2.h0; | ||
staticInstance.uint32InputArray[9] = obj2.h1; | ||
staticInstance.uint32InputArray[10] = obj2.h2; | ||
staticInstance.uint32InputArray[11] = obj2.h3; | ||
staticInstance.uint32InputArray[12] = obj2.h4; | ||
staticInstance.uint32InputArray[13] = obj2.h5; | ||
staticInstance.uint32InputArray[14] = obj2.h6; | ||
staticInstance.uint32InputArray[15] = obj2.h7; | ||
staticInstance.ctx.digest64(staticInstance.wasmInputValue, staticInstance.wasmOutputValue); // extracting numbers from Uint32Array causes more memory | ||
return byteArrayToHashObject(staticInstance.uint8OutputArray); | ||
} | ||
} | ||
exports.default = SHA256; | ||
const staticInstance = new SHA256(); | ||
const staticInstance = new SHA256(); | ||
/** | ||
* Pass 8 numbers in an object and set that to inputArray. | ||
* This function contains multiple same procedures but we intentionally | ||
* do it step by step to improve performance a bit. | ||
**/ | ||
function hashObjectToByteArray(obj, byteArr, offset) { | ||
let tmp = obj.h0; | ||
byteArr[0 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[1 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[2 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[3 + offset] = tmp & 0xff; | ||
tmp = obj.h1; | ||
byteArr[4 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[5 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[6 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[7 + offset] = tmp & 0xff; | ||
tmp = obj.h2; | ||
byteArr[8 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[9 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[10 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[11 + offset] = tmp & 0xff; | ||
tmp = obj.h3; | ||
byteArr[12 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[13 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[14 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[15 + offset] = tmp & 0xff; | ||
tmp = obj.h4; | ||
byteArr[16 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[17 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[18 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[19 + offset] = tmp & 0xff; | ||
tmp = obj.h5; | ||
byteArr[20 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[21 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[22 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[23 + offset] = tmp & 0xff; | ||
tmp = obj.h6; | ||
byteArr[24 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[25 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[26 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[27 + offset] = tmp & 0xff; | ||
tmp = obj.h7; | ||
byteArr[28 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[29 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[30 + offset] = tmp & 0xff; | ||
tmp = tmp >> 8; | ||
byteArr[31 + offset] = tmp & 0xff; | ||
} | ||
/** | ||
* Parse outputArray into an object of 8 numbers. | ||
* This is the order that makes Uint32Array the same to Uint8Array | ||
* This function contains multiple same procedures but we intentionally | ||
* do it step by step to improve performance a bit. | ||
**/ | ||
function byteArrayToHashObject(byteArr) { | ||
let tmp = 0; | ||
tmp |= byteArr[3] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[2] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[1] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[0] & 0xff; | ||
const h0 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[7] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[6] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[5] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[4] & 0xff; | ||
const h1 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[11] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[10] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[9] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[8] & 0xff; | ||
const h2 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[15] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[14] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[13] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[12] & 0xff; | ||
const h3 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[19] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[18] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[17] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[16] & 0xff; | ||
const h4 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[23] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[22] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[21] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[20] & 0xff; | ||
const h5 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[27] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[26] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[25] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[24] & 0xff; | ||
const h6 = tmp; | ||
tmp = 0; | ||
tmp |= byteArr[31] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[30] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[29] & 0xff; | ||
tmp = tmp << 8; | ||
tmp |= byteArr[28] & 0xff; | ||
const h7 = tmp; | ||
return { | ||
h0, | ||
h1, | ||
h2, | ||
h3, | ||
h4, | ||
h5, | ||
h6, | ||
h7 | ||
}; | ||
} |
@@ -15,3 +15,3 @@ "use strict"; | ||
/* babel-plugin-inline-binary-import '../build/optimized.wasm' */ | ||
const wasmCode = "\0asm\x01\0\0\0\x01\x1F\x06`\x02\x7F\x7F\0`\0\0`\x01\x7F\0`\x01\x7F\x01\x7F`\x03\x7F\x7F\x7F\0`\x04\x7F\x7F\x7F\x7F\0\x02\r\x01\x03env\x05abort\0\x05\x03\x0F\x0E\x02\x03\0\x03\x01\x01\x04\0\0\x03\x02\x02\0\x01\x05\x03\x01\0\x01\x06\xAC\x01\"\x7F\0A\x80\x04\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x07V\t\x06memory\x02\0\fINPUT_LENGTH\x03\0\x05input\x03\x1C\x06output\x03\x1E\x04init\0\x06\x06update\0\t\x05final\0\x0B\x06digest\0\f\bdigest64\0\r\b\x01\x0E\n\xD2\f\x0EF\x01\x02\x7F \0?\0\"\x02A\x10t\"\x01K\x04@ \x02 \0 \x01kA\xFF\xFF\x03jA\x80\x80|qA\x10v\"\x01 \x02 \x01J\x1B@\0A\0H\x04@ \x01@\0A\0H\x04@\0\x0B\x0B\x0B \0$\x17\x0BR\x01\x03\x7F \0A\xF0\xFF\xFF\xFF\x03K\x04@\0\x0B#\x17A\x10j\"\x02 \0A\x0FjApq\"\x01A\x10 \x01A\x10K\x1B\"\x03j\x10\x01 \x02A\x10k\"\x01 \x036\x02\0 \x01A\x016\x02\x04 \x01A\x006\x02\b \x01 \x006\x02\f \x02\x0B%\x01\x01\x7F\x03@ \x01\x04@ \0\"\x02A\x01j!\0 \x02A\0:\0\0 \x01A\x01k!\x01\f\x01\x0B\x0B\x0B)\x01\x01\x7F \0A\xF0\xFF\xFF\xFF\x03K\x04@A\x80\x05A\xB0\x05A6A*\x10\0\0\x0B \0\x10\x02\"\x01 \0\x10\x03 \x01\x0BG\0A\xB4\x02(\x02\0$\x01A\xE4\x04(\x02\0$\x02A\xE0\x05$\x16A\xE0\x05$\x17A\xC0\0\x10\x04$\x18#\x18$\x19A\x80\x02\x10\x04$\x1A#\x1A$\x1BA\x80\x04\x10\x04$\x1C#\x1C$\x1DA \x10\x04$\x1E#\x1E$\x1F\x0BJ\0A\xE7\xCC\xA7\xD0\x06$\x03A\x85\xDD\x9E\xDB{$\x04A\xF2\xE6\xBB\xE3\x03$\x05A\xBA\xEA\xBF\xAAz$\x06A\xFF\xA4\xB9\x88\x05$\x07A\x8C\xD1\x95\xD8y$\bA\xAB\xB3\x8F\xFC\x01$\tA\x99\x9A\x83\xDF\x05$\nA\0$ A\0$!\x0Bg\x01\x02\x7F\x02@ \x02!\x03 \0 \x01F\r\0 \0 \x01I\x04@\x03@ \x03\x04@ \0\"\x02A\x01j!\0 \x01\"\x04A\x01j!\x01 \x02 \x04-\0\0:\0\0 \x03A\x01k!\x03\f\x01\x0B\x0B\x05\x03@ \x03\x04@ \x03A\x01k\"\x03 \0j \x01 \x03j-\0\0:\0\0\f\x01\x0B\x0B\x0B\x0B\x0B\xEC\x03\x01\x01\x7F#\x03$\x0B#\x04$\f#\x05$\r#\x06$\x0E#\x07$\x0F#\b$\x10#\t$\x11#\n$\x12 \x01\x04@A\0$\x13\x03@#\x13A\x10I\x04@ \0#\x13A\x02tj \x01#\x13A\x02t\"\x02j-\0\0A\x18t \x01 \x02A\x01jj-\0\0A\x10tr \x01 \x02A\x02jj-\0\0A\btr \x01 \x02A\x03jj-\0\0r6\x02\0#\x13A\x01j$\x13\f\x01\x0B\x0BA\x10$\x13\x03@#\x13A\xC0\0I\x04@ \0#\x13A\x02tj \0#\x13A\x10kA\x02tj(\x02\0 \0#\x13A\x07kA\x02tj(\x02\0 \0#\x13A\x02kA\x02tj(\x02\0\"\x01A\x11x \x01A\x13xs \x01A\nvsj \0#\x13A\x0FkA\x02tj(\x02\0\"\x01A\x07x \x01A\x12xs \x01A\x03vsjj6\x02\0#\x13A\x01j$\x13\f\x01\x0B\x0B\x0BA\0$\x13\x03@#\x13A\xC0\0I\x04@ \0#\x13A\x02tj(\x02\0#\x01#\x13A\x02tj(\x02\0#\x12#\x0F\"\x01A\x06x \x01A\x0Bxs \x01A\x19xsj#\x0F\"\x01#\x10q#\x11 \x01A\x7Fsqsjjj$\x14#\x0B\"\x01A\x02x \x01A\rxs \x01A\x16xs#\x0B\"\x01#\f\"\x02q \x01#\r\"\x01qs \x01 \x02qsj$\x15#\x11$\x12#\x10$\x11#\x0F$\x10#\x0E#\x14j$\x0F#\r$\x0E#\f$\r#\x0B$\f#\x14#\x15j$\x0B#\x13A\x01j$\x13\f\x01\x0B\x0B#\x03#\x0Bj$\x03#\x04#\fj$\x04#\x05#\rj$\x05#\x06#\x0Ej$\x06#\x07#\x0Fj$\x07#\b#\x10j$\b#\t#\x11j$\t#\n#\x12j$\n\x0B\xB1\x01\x01\x02\x7F \x01#!j$!# \x04@A\xC0\0# k \x01L\x04@#\x19# j \0A\xC0\0# k\x10\x07# A\xC0\0# kj$ A\xC0\0# k!\x02 \x01A\xC0\0# kk!\x01#\x1B#\x19\x10\bA\0$ \x05#\x19# j \0 \x01\x10\x07 \x01# j$ \x0F\x0B\x0B\x03@ \x03 \x01A\xC0\0mH\x04@#\x1B \0 \x02j\x10\b \x03A\x01j!\x03 \x02A@k!\x02\f\x01\x0B\x0B \x01A?q\x04@#\x19# j \0 \x02j \x01A?q\"\0\x10\x07 \0# j$ \x0B\x0B\x19\0 \0A\x80\xFE\x83xqA\bw \0A\xFF\x81\xFC\x07qA\bxr\x0B\xAD\x02\x01\x02\x7F#!A?qA?H\x04@#\x19# jA\x80\x01:\0\0# A\x01j$ \x0B#!A?qA8N\x04@#\x19# j\"\x01A\xC0\0# kj!\x02\x03@ \x01 \x02I\x04@ \x01A\0:\0\0 \x01A\x01j!\x01\f\x01\x0B\x0B#\x1B#\x19\x10\bA\0$ \x0B#!A?qA?N\x04@#\x19# jA\x80\x01:\0\0# A\x01j$ \x0B#\x19# j\"\x01A8# kj!\x02\x03@ \x01 \x02I\x04@ \x01A\0:\0\0 \x01A\x01j!\x01\f\x01\x0B\x0B#\x19A8j#!A\x80\x80\x80\x80\x02m\x10\n6\x02\0#\x19A<j#!A\x03t\x10\n6\x02\0#\x1B#\x19\x10\b \0#\x03\x10\n6\x02\0 \0A\x04j#\x04\x10\n6\x02\0 \0A\bj#\x05\x10\n6\x02\0 \0A\fj#\x06\x10\n6\x02\0 \0A\x10j#\x07\x10\n6\x02\0 \0A\x14j#\b\x10\n6\x02\0 \0A\x18j#\t\x10\n6\x02\0 \0A\x1Cj#\n\x10\n6\x02\0\x0B\x0E\0\x10\x06#\x1D \0\x10\t#\x1F\x10\x0B\x0Bm\0\x10\x06#\x1B \0\x10\b#\x02A\0\x10\b \x01#\x03\x10\n6\x02\0 \x01A\x04j#\x04\x10\n6\x02\0 \x01A\bj#\x05\x10\n6\x02\0 \x01A\fj#\x06\x10\n6\x02\0 \x01A\x10j#\x07\x10\n6\x02\0 \x01A\x14j#\b\x10\n6\x02\0 \x01A\x18j#\t\x10\n6\x02\0 \x01A\x1Cj#\n\x10\n6\x02\0\x0B\x04\0\x10\x05\x0B\x0B\xAB\x05\x07\0A\x11\x0B\x8F\x02\x01\0\0\x01\0\0\0\0\0\0\0\0\x01\0\0\x98/\x8AB\x91D7q\xCF\xFB\xC0\xB5\xA5\xDB\xB5\xE9[\xC2V9\xF1\x11\xF1Y\xA4\x82?\x92\xD5^\x1C\xAB\x98\xAA\x07\xD8\x01[\x83\x12\xBE\x851$\xC3}\fUt]\xBEr\xFE\xB1\xDE\x80\xA7\x06\xDC\x9Bt\xF1\x9B\xC1\xC1i\x9B\xE4\x86G\xBE\xEF\xC6\x9D\xC1\x0F\xCC\xA1\f$o,\xE9-\xAA\x84tJ\xDC\xA9\xB0\\\xDA\x88\xF9vRQ>\x98m\xC61\xA8\xC8'\x03\xB0\xC7\x7FY\xBF\xF3\x0B\xE0\xC6G\x91\xA7\xD5Qc\xCA\x06g))\x14\x85\n\xB7'8!\x1B.\xFCm,M\x13\r8STs\ne\xBB\njv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\x1A\xA8p\x8BK\xC2\xA3Ql\xC7\x19\xE8\x92\xD1$\x06\x99\xD6\x855\x0E\xF4p\xA0j\x10\x16\xC1\xA4\x19\bl7\x1ELwH'\xB5\xBC\xB04\xB3\f\x1C9J\xAA\xD8NO\xCA\x9C[\xF3o.h\xEE\x82\x8Ftoc\xA5x\x14x\xC8\x84\b\x02\xC7\x8C\xFA\xFF\xBE\x90\xEBlP\xA4\xF7\xA3\xF9\xBE\xF2xq\xC6\0A\xA0\x02\x0B\x1D\x10\0\0\0\x01\0\0\0\x03\0\0\0\x10\0\0\0 \0\0\0 \0\0\0\0\x01\0\0@\0A\xC1\x02\x0B\x13\x01\0\0\x01\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\x80\0A\x8D\x03\x0B\xC3\x01\x02\0\0\0\0\0\x80\0\0@\x01\0P \0\x88P\0\0\0\b\0\"\x14\0U\"B\x97\b\x05 \0\0\xA0\0\0\x88Z\0\x94\\\0\x9D\xD4\x16\0\0\x1F\x80\xFA\xD0%2\xD3YYg\x11\xDA\xBF\xE6\xF6I\x15\f\xB3P\xB0\xB2\b'L|\x9D\x93\xA3\xE2\f\xEA\xE1\xE6\x885C+\xA5Io\xA1go\x012\xD7\x91.\xEBN\xE5U\xBF]5#\xEE\x8E\xC2^\xBC\xE2\x94C?\xA8\xF7x\xADE\xCD\xD0\xF36\xE8\x05\x9C\xD9\xC7\x1DQ\xB0\xC4z\xBCi[7\x11\xBD\xE5q\xBA\xE3\xF2\x9F ;\x17\xEE\xFE\x18\xE7\xD9Z\xE2FP7\x13\x9D\b\x15\x05\x04\x0F\rONH'&\xD2(\x0114\xB4h\xC6\xCCA\bB\xB8\x11\xD3bq\xA7\x9B\xE5\x84\xA4\xA7\x85\0A\xD0\x04\x0B\x1D\x10\0\0\0\x01\0\0\0\x03\0\0\0\x10\0\0\0P\x01\0\0P\x01\0\0\0\x01\0\0@\0A\xF0\x04\x0B+\x1C\0\0\0\x01\0\0\0\x01\0\0\0\x1C\0\0\0I\0n\0v\0a\0l\0i\0d\0 \0l\0e\0n\0g\0t\0h\0A\xA0\x05\x0B5&\0\0\0\x01\0\0\0\x01\0\0\0&\0\0\0~\0l\0i\0b\0/\0a\0r\0r\0a\0y\0b\0u\0f\0f\0e\0r\0.\0t\0s"; | ||
const wasmCode = "\0asm\x01\0\0\0\x01\x1F\x06`\x01\x7F\0`\x02\x7F\x7F\0`\0\0`\x01\x7F\x01\x7F`\x03\x7F\x7F\x7F\0`\x04\x7F\x7F\x7F\x7F\0\x02\r\x01\x03env\x05abort\0\x05\x03\x10\x0F\0\x03\x01\x03\x02\x02\x04\x01\x01\x03\0\0\0\x01\x02\x05\x03\x01\0\x01\x06\xAC\x01\"\x7F\0A\x80\x04\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x7F\x01A\0\x0B\x07V\t\x06memory\x02\0\fINPUT_LENGTH\x03\0\x05input\x03\x1C\x06output\x03\x1E\x04init\0\x06\x06update\0\t\x05final\0\x0B\x06digest\0\f\bdigest64\0\x0E\b\x01\x0F\n\xCA\x0E\x0FF\x01\x02\x7F \0?\0\"\x02A\x10t\"\x01K\x04@ \x02 \0 \x01kA\xFF\xFF\x03jA\x80\x80|qA\x10v\"\x01 \x02 \x01J\x1B@\0A\0H\x04@ \x01@\0A\0H\x04@\0\x0B\x0B\x0B \0$\x17\x0BR\x01\x03\x7F \0A\xF0\xFF\xFF\xFF\x03K\x04@\0\x0B#\x17A\x10j\"\x02 \0A\x0FjApq\"\x01A\x10 \x01A\x10K\x1B\"\x03j\x10\x01 \x02A\x10k\"\x01 \x036\x02\0 \x01A\x016\x02\x04 \x01A\x006\x02\b \x01 \x006\x02\f \x02\x0B%\x01\x01\x7F\x03@ \x01\x04@ \0\"\x02A\x01j!\0 \x02A\0:\0\0 \x01A\x01k!\x01\f\x01\x0B\x0B\x0B)\x01\x01\x7F \0A\xF0\xFF\xFF\xFF\x03K\x04@A\x80\x05A\xB0\x05A6A*\x10\0\0\x0B \0\x10\x02\"\x01 \0\x10\x03 \x01\x0BG\0A\xB4\x02(\x02\0$\x01A\xE4\x04(\x02\0$\x02A\xE0\x05$\x16A\xE0\x05$\x17A\xC0\0\x10\x04$\x18#\x18$\x19A\x80\x02\x10\x04$\x1A#\x1A$\x1BA\x80\x04\x10\x04$\x1C#\x1C$\x1DA \x10\x04$\x1E#\x1E$\x1F\x0BJ\0A\xE7\xCC\xA7\xD0\x06$\x03A\x85\xDD\x9E\xDB{$\x04A\xF2\xE6\xBB\xE3\x03$\x05A\xBA\xEA\xBF\xAAz$\x06A\xFF\xA4\xB9\x88\x05$\x07A\x8C\xD1\x95\xD8y$\bA\xAB\xB3\x8F\xFC\x01$\tA\x99\x9A\x83\xDF\x05$\nA\0$ A\0$!\x0Bg\x01\x02\x7F\x02@ \x02!\x03 \0 \x01F\r\0 \0 \x01I\x04@\x03@ \x03\x04@ \0\"\x02A\x01j!\0 \x01\"\x04A\x01j!\x01 \x02 \x04-\0\0:\0\0 \x03A\x01k!\x03\f\x01\x0B\x0B\x05\x03@ \x03\x04@ \x03A\x01k\"\x03 \0j \x01 \x03j-\0\0:\0\0\f\x01\x0B\x0B\x0B\x0B\x0B\xE7\x03\x01\x01\x7F#\x03$\x0B#\x04$\f#\x05$\r#\x06$\x0E#\x07$\x0F#\b$\x10#\t$\x11#\n$\x12A\0$\x13\x03@#\x13A\x10I\x04@ \0#\x13A\x02tj \x01#\x13A\x02t\"\x02j-\0\0A\x18t \x01 \x02A\x01jj-\0\0A\x10tr \x01 \x02A\x02jj-\0\0A\btr \x01 \x02A\x03jj-\0\0r6\x02\0#\x13A\x01j$\x13\f\x01\x0B\x0BA\x10$\x13\x03@#\x13A\xC0\0I\x04@ \0#\x13A\x02tj \0#\x13A\x10kA\x02tj(\x02\0 \0#\x13A\x07kA\x02tj(\x02\0 \0#\x13A\x02kA\x02tj(\x02\0\"\x01A\x11x \x01A\x13xs \x01A\nvsj \0#\x13A\x0FkA\x02tj(\x02\0\"\x01A\x07x \x01A\x12xs \x01A\x03vsjj6\x02\0#\x13A\x01j$\x13\f\x01\x0B\x0BA\0$\x13\x03@#\x13A\xC0\0I\x04@ \0#\x13A\x02tj(\x02\0#\x01#\x13A\x02tj(\x02\0#\x12#\x0F\"\x01A\x06x \x01A\x0Bxs \x01A\x19xsj#\x0F\"\x01#\x10q#\x11 \x01A\x7Fsqsjjj$\x14#\x0B\"\x01A\x02x \x01A\rxs \x01A\x16xs#\x0B\"\x01#\f\"\x02q \x01#\r\"\x01qs \x01 \x02qsj$\x15#\x11$\x12#\x10$\x11#\x0F$\x10#\x0E#\x14j$\x0F#\r$\x0E#\f$\r#\x0B$\f#\x14#\x15j$\x0B#\x13A\x01j$\x13\f\x01\x0B\x0B#\x03#\x0Bj$\x03#\x04#\fj$\x04#\x05#\rj$\x05#\x06#\x0Ej$\x06#\x07#\x0Fj$\x07#\b#\x10j$\b#\t#\x11j$\t#\n#\x12j$\n\x0B\xB1\x01\x01\x02\x7F \x01#!j$!# \x04@A\xC0\0# k \x01L\x04@#\x19# j \0A\xC0\0# k\x10\x07# A\xC0\0# kj$ A\xC0\0# k!\x02 \x01A\xC0\0# kk!\x01#\x1B#\x19\x10\bA\0$ \x05#\x19# j \0 \x01\x10\x07 \x01# j$ \x0F\x0B\x0B\x03@ \x03 \x01A\xC0\0mH\x04@#\x1B \0 \x02j\x10\b \x03A\x01j!\x03 \x02A@k!\x02\f\x01\x0B\x0B \x01A?q\x04@#\x19# j \0 \x02j \x01A?q\"\0\x10\x07 \0# j$ \x0B\x0B\x19\0 \0A\x80\xFE\x83xqA\bw \0A\xFF\x81\xFC\x07qA\bxr\x0B\xAD\x02\x01\x02\x7F#!A?qA?H\x04@#\x19# jA\x80\x01:\0\0# A\x01j$ \x0B#!A?qA8N\x04@#\x19# j\"\x01A\xC0\0# kj!\x02\x03@ \x01 \x02I\x04@ \x01A\0:\0\0 \x01A\x01j!\x01\f\x01\x0B\x0B#\x1B#\x19\x10\bA\0$ \x0B#!A?qA?N\x04@#\x19# jA\x80\x01:\0\0# A\x01j$ \x0B#\x19# j\"\x01A8# kj!\x02\x03@ \x01 \x02I\x04@ \x01A\0:\0\0 \x01A\x01j!\x01\f\x01\x0B\x0B#\x19A8j#!A\x80\x80\x80\x80\x02m\x10\n6\x02\0#\x19A<j#!A\x03t\x10\n6\x02\0#\x1B#\x19\x10\b \0#\x03\x10\n6\x02\0 \0A\x04j#\x04\x10\n6\x02\0 \0A\bj#\x05\x10\n6\x02\0 \0A\fj#\x06\x10\n6\x02\0 \0A\x10j#\x07\x10\n6\x02\0 \0A\x14j#\b\x10\n6\x02\0 \0A\x18j#\t\x10\n6\x02\0 \0A\x1Cj#\n\x10\n6\x02\0\x0B\x0E\0\x10\x06#\x1D \0\x10\t#\x1F\x10\x0B\x0B\xFD\x01\x01\x02\x7F#\x03$\x0B#\x04$\f#\x05$\r#\x06$\x0E#\x07$\x0F#\b$\x10#\t$\x11#\n$\x12A\0$\x13\x03@#\x13A\xC0\0I\x04@ \0#\x13A\x02tj(\x02\0#\x12#\x0F\"\x01A\x06x \x01A\x0Bxs \x01A\x19xsj#\x0F\"\x01#\x10q#\x11 \x01A\x7Fsqsjj$\x14#\x0B\"\x01A\x02x \x01A\rxs \x01A\x16xs#\x0B\"\x01#\f\"\x02q \x01#\r\"\x01qs \x01 \x02qsj$\x15#\x11$\x12#\x10$\x11#\x0F$\x10#\x0E#\x14j$\x0F#\r$\x0E#\f$\r#\x0B$\f#\x14#\x15j$\x0B#\x13A\x01j$\x13\f\x01\x0B\x0B#\x03#\x0Bj$\x03#\x04#\fj$\x04#\x05#\rj$\x05#\x06#\x0Ej$\x06#\x07#\x0Fj$\x07#\b#\x10j$\b#\t#\x11j$\t#\n#\x12j$\n\x0Bk\0\x10\x06#\x1B \0\x10\b#\x02\x10\r \x01#\x03\x10\n6\x02\0 \x01A\x04j#\x04\x10\n6\x02\0 \x01A\bj#\x05\x10\n6\x02\0 \x01A\fj#\x06\x10\n6\x02\0 \x01A\x10j#\x07\x10\n6\x02\0 \x01A\x14j#\b\x10\n6\x02\0 \x01A\x18j#\t\x10\n6\x02\0 \x01A\x1Cj#\n\x10\n6\x02\0\x0B\x04\0\x10\x05\x0B\x0B\xDE\x05\x06\0A\x11\x0B\x8F\x02\x01\0\0\x01\0\0\0\0\0\0\0\0\x01\0\0\x98/\x8AB\x91D7q\xCF\xFB\xC0\xB5\xA5\xDB\xB5\xE9[\xC2V9\xF1\x11\xF1Y\xA4\x82?\x92\xD5^\x1C\xAB\x98\xAA\x07\xD8\x01[\x83\x12\xBE\x851$\xC3}\fUt]\xBEr\xFE\xB1\xDE\x80\xA7\x06\xDC\x9Bt\xF1\x9B\xC1\xC1i\x9B\xE4\x86G\xBE\xEF\xC6\x9D\xC1\x0F\xCC\xA1\f$o,\xE9-\xAA\x84tJ\xDC\xA9\xB0\\\xDA\x88\xF9vRQ>\x98m\xC61\xA8\xC8'\x03\xB0\xC7\x7FY\xBF\xF3\x0B\xE0\xC6G\x91\xA7\xD5Qc\xCA\x06g))\x14\x85\n\xB7'8!\x1B.\xFCm,M\x13\r8STs\ne\xBB\njv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\x1A\xA8p\x8BK\xC2\xA3Ql\xC7\x19\xE8\x92\xD1$\x06\x99\xD6\x855\x0E\xF4p\xA0j\x10\x16\xC1\xA4\x19\bl7\x1ELwH'\xB5\xBC\xB04\xB3\f\x1C9J\xAA\xD8NO\xCA\x9C[\xF3o.h\xEE\x82\x8Ftoc\xA5x\x14x\xC8\x84\b\x02\xC7\x8C\xFA\xFF\xBE\x90\xEBlP\xA4\xF7\xA3\xF9\xBE\xF2xq\xC6\0A\xA0\x02\x0B\x1D\x10\0\0\0\x01\0\0\0\x03\0\0\0\x10\0\0\0 \0\0\0 \0\0\0\0\x01\0\0@\0A\xC1\x02\x0B\x8F\x02\x01\0\0\x01\0\0\0\0\0\0\0\0\x01\0\0\x98/\x8A\xC2\x91D7q\xCF\xFB\xC0\xB5\xA5\xDB\xB5\xE9[\xC2V9\xF1\x11\xF1Y\xA4\x82?\x92\xD5^\x1C\xAB\x98\xAA\x07\xD8\x01[\x83\x12\xBE\x851$\xC3}\fUt]\xBEr\xFE\xB1\xDE\x80\xA7\x06\xDC\x9Bt\xF3\x9B\xC1\xC1i\x9Bd\x86G\xFE\xF0\xC6\xED\xE1\x0FT\xF2\f$o4\xE9O\xBE\x84\xC9l\x1EA\xB9a\xFA\x88\xF9\x16RQ\xC6\xF2mZ\x8E\xA8e\xFC\x19\xB0\xC7\x9E\xD9\xB9\xC31\x12\x9A\xA0\xEA\x0E\xE7+#\xB1\xFD\xB0>5\xC7\xD5\xBAi0_m\x97\xCB\x8F\x11\x0FZ\xFD\xEE\x1E\xDC\x89\xB65\n\x04z\x0B\xDE\x9D\xCA\xF4X\x16[]\xE1\x86>\x7F\0\x80\x89\b72\xEA\x07\xA57\x95\xABo\x10a@\x17\xF1\xD6\x8C\rm;\xAA\xCD7\xBE\xBB\xC0\xDA;a\x83c\xA3H\xDB1\xE9\x02\x0B\xA7\\\xD1o\xCA\xFA\x1AR1\x8431\x95\x1A\xD4n\x90xCm\xF2\x91\x9C\xC3\xBD\xAB\xCC\x9E\xE6\xA0\xC9\xB5<\xB6/S\xC6A\xC7\xD2\xA3~#\x07hK\x95\xA4v\x1D\x19L\0A\xD0\x04\x0B\x1D\x10\0\0\0\x01\0\0\0\x03\0\0\0\x10\0\0\0P\x01\0\0P\x01\0\0\0\x01\0\0@\0A\xF0\x04\x0B+\x1C\0\0\0\x01\0\0\0\x01\0\0\0\x1C\0\0\0I\0n\0v\0a\0l\0i\0d\0 \0l\0e\0n\0g\0t\0h\0A\xA0\x05\x0B5&\0\0\0\x01\0\0\0\x01\0\0\0&\0\0\0~\0l\0i\0b\0/\0a\0r\0r\0a\0y\0b\0u\0f\0f\0e\0r\0.\0t\0s"; | ||
@@ -18,0 +18,0 @@ const _module = new WebAssembly.Module(_buffer.Buffer.from(wasmCode, 'binary')); |
{ | ||
"name": "@chainsafe/as-sha256", | ||
"version": "0.2.2", | ||
"version": "0.2.3", | ||
"description": "An AssemblyScript implementation of SHA256", | ||
@@ -32,3 +32,4 @@ "author": "ChainSafe Systems", | ||
"test:unit:node": "mocha -r .babel-register test/*.spec.js", | ||
"test:perf": "mocha -r .babel-register test/perf.test.js", | ||
"benchmark": "node ./node_modules/.bin/benchmark 'test/benchmark.test.js'", | ||
"benchmark:local": "yarn benchmark --local", | ||
"test:unit:browser": "karma start --single-run --browsers ChromeHeadless,FirefoxHeadless karma.config.js", | ||
@@ -63,3 +64,4 @@ "test:ci": "yarn test:as-ci", | ||
"karma-webpack": "^4.0.2", | ||
"mocha": "^6.2.2", | ||
"@dapplion/benchmark": "^0.1.6", | ||
"mocha": "^8.3.0", | ||
"webpack": "^4.39.3", | ||
@@ -66,0 +68,0 @@ "webpack-cli": "^3.3.7" |
@@ -24,2 +24,5 @@ # as-sha256 | ||
hash = SHA256.digest(Buffer.from("Hello world")); | ||
// or use a faster one-pass interface for hashing (only) 64 bytes | ||
hash = SHA256.digest64(Buffer.from("abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgh")); | ||
``` | ||
@@ -26,0 +29,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
111233
318
32
23
1