@bsv/sdk 1.0.12 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +105 -76
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +65 -65
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +79 -79
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/bip-39-wordlist-en.js +2 -2
- package/dist/cjs/src/compat/bip-39-wordlist-en.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +26 -13
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +3 -2
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js +1 -2
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +2 -2
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +141 -4
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +14 -9
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +3 -3
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +15 -4
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +105 -76
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +65 -65
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +79 -79
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/compat/bip-39-wordlist-en.js +2 -2
- package/dist/esm/src/compat/bip-39-wordlist-en.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +26 -13
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +3 -2
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js +1 -2
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +2 -2
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +141 -4
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +14 -9
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js +1 -1
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +3 -3
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +16 -4
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/compat/ECIES.d.ts +36 -36
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts +65 -65
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/compat/Mnemonic.d.ts +79 -79
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Signature.d.ts +62 -0
- package/dist/types/src/primitives/Signature.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +1 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/docs/compat.md +4 -4
- package/docs/primitives.md +288 -79
- package/package.json +1 -1
- package/src/compat/BSM.ts +12 -12
- package/src/compat/ECIES.ts +417 -418
- package/src/compat/HD.ts +228 -228
- package/src/compat/Mnemonic.ts +173 -173
- package/src/compat/__tests/BSM.test.ts +13 -2
- package/src/compat/bip-39-wordlist-en.ts +2052 -2052
- package/src/primitives/AESGCM.ts +30 -30
- package/src/primitives/BigNumber.ts +0 -1
- package/src/primitives/DRBG.ts +5 -5
- package/src/primitives/ECDSA.ts +1 -1
- package/src/primitives/Hash.ts +278 -293
- package/src/primitives/PrivateKey.ts +18 -19
- package/src/primitives/PublicKey.ts +9 -10
- package/src/primitives/Random.ts +4 -4
- package/src/primitives/Signature.ts +158 -14
- package/src/primitives/SymmetricKey.ts +3 -3
- package/src/primitives/TransactionSignature.ts +9 -9
- package/src/primitives/index.ts +1 -1
- package/src/primitives/utils.ts +60 -64
- package/src/script/Spend.ts +12 -12
- package/src/script/index.ts +1 -1
- package/src/script/templates/P2PKH.ts +1 -1
- package/src/transaction/MerklePath.ts +3 -3
- package/src/transaction/Transaction.ts +36 -26
- package/src/transaction/__tests/Transaction.test.ts +5 -5
package/src/primitives/Hash.ts
CHANGED
|
@@ -49,7 +49,7 @@ abstract class BaseHash {
|
|
|
49
49
|
padLength: number
|
|
50
50
|
hmacStrength: number
|
|
51
51
|
|
|
52
|
-
constructor(
|
|
52
|
+
constructor (
|
|
53
53
|
blockSize: number, outSize: number, hmacStrength: number, padLength: number
|
|
54
54
|
) {
|
|
55
55
|
this.pending = null
|
|
@@ -64,15 +64,15 @@ abstract class BaseHash {
|
|
|
64
64
|
this._delta32 = this.blockSize / 32
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
_update(msg: number[], start: number): void {
|
|
67
|
+
_update (msg: number[], start: number): void {
|
|
68
68
|
throw new Error('Not implemented')
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
_digest(): number[] {
|
|
71
|
+
_digest (): number[] {
|
|
72
72
|
throw new Error('Not implemented')
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
_digestHex(): string {
|
|
75
|
+
_digestHex (): string {
|
|
76
76
|
throw new Error('Not implemented')
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -89,7 +89,7 @@ abstract class BaseHash {
|
|
|
89
89
|
* @example
|
|
90
90
|
* sha256.update('Hello World', 'utf8');
|
|
91
91
|
*/
|
|
92
|
-
update(msg: number[] | string, enc?: 'hex' | 'utf8'): this {
|
|
92
|
+
update (msg: number[] | string, enc?: 'hex' | 'utf8'): this {
|
|
93
93
|
// Convert message to array, pad it, and join into 32bit blocks
|
|
94
94
|
msg = toArray(msg, enc)
|
|
95
95
|
if (this.pending == null) {
|
|
@@ -127,7 +127,7 @@ abstract class BaseHash {
|
|
|
127
127
|
* @example
|
|
128
128
|
* const hash = sha256.digest();
|
|
129
129
|
*/
|
|
130
|
-
digest(): number[] {
|
|
130
|
+
digest (): number[] {
|
|
131
131
|
this.update(this._pad())
|
|
132
132
|
assert(this.pending === null)
|
|
133
133
|
|
|
@@ -144,10 +144,10 @@ abstract class BaseHash {
|
|
|
144
144
|
* @example
|
|
145
145
|
* const hash = sha256.digestHex();
|
|
146
146
|
*/
|
|
147
|
-
digestHex(): string {
|
|
147
|
+
digestHex (): string {
|
|
148
148
|
this.update(this._pad())
|
|
149
149
|
assert(this.pending === null)
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
return this._digestHex()
|
|
152
152
|
};
|
|
153
153
|
|
|
@@ -159,7 +159,7 @@ abstract class BaseHash {
|
|
|
159
159
|
*
|
|
160
160
|
* @returns Returns an array denoting the padding.
|
|
161
161
|
*/
|
|
162
|
-
private _pad(): number[] { //
|
|
162
|
+
private _pad (): number[] { //
|
|
163
163
|
let len = this.pendingTotal
|
|
164
164
|
const bytes = this._delta8
|
|
165
165
|
const k = bytes - ((len + this.padLength) % bytes)
|
|
@@ -199,7 +199,7 @@ abstract class BaseHash {
|
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
function isSurrogatePair(msg: string, i: number): boolean {
|
|
202
|
+
function isSurrogatePair (msg: string, i: number): boolean {
|
|
203
203
|
if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {
|
|
204
204
|
return false
|
|
205
205
|
}
|
|
@@ -210,12 +210,12 @@ function isSurrogatePair(msg: string, i: number): boolean {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
/**
|
|
213
|
-
*
|
|
214
|
-
* @param msg
|
|
213
|
+
*
|
|
214
|
+
* @param msg
|
|
215
215
|
* @param enc Optional. Encoding to use if msg is string. Default is 'utf8'.
|
|
216
216
|
* @returns array of byte values from msg. If msg is an array, a copy is returned.
|
|
217
217
|
*/
|
|
218
|
-
export function toArray(msg: number[] | string, enc?: 'hex' | 'utf8'): number[] {
|
|
218
|
+
export function toArray (msg: number[] | string, enc?: 'hex' | 'utf8'): number[] {
|
|
219
219
|
if (Array.isArray(msg)) { return msg.slice() }
|
|
220
220
|
if (!(msg as unknown as boolean)) { return [] }
|
|
221
221
|
const res = []
|
|
@@ -261,7 +261,7 @@ export function toArray(msg: number[] | string, enc?: 'hex' | 'utf8'): number[]
|
|
|
261
261
|
return res
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
function htonl(w: number): number {
|
|
264
|
+
function htonl (w: number): number {
|
|
265
265
|
const res = (w >>> 24) |
|
|
266
266
|
((w >>> 8) & 0xff00) |
|
|
267
267
|
((w << 8) & 0xff0000) |
|
|
@@ -269,7 +269,7 @@ function htonl(w: number): number {
|
|
|
269
269
|
return res >>> 0
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
-
function toHex32(msg: number[], endian?: 'little' | 'big'): string {
|
|
272
|
+
function toHex32 (msg: number[], endian?: 'little' | 'big'): string {
|
|
273
273
|
let res = ''
|
|
274
274
|
for (let i = 0; i < msg.length; i++) {
|
|
275
275
|
let w = msg[i]
|
|
@@ -279,7 +279,7 @@ function toHex32(msg: number[], endian?: 'little' | 'big'): string {
|
|
|
279
279
|
return res
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
-
function zero8(word: string): string {
|
|
282
|
+
function zero8 (word: string): string {
|
|
283
283
|
if (word.length === 7) {
|
|
284
284
|
return '0' + word
|
|
285
285
|
} else if (word.length === 6) {
|
|
@@ -299,7 +299,7 @@ function zero8(word: string): string {
|
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
|
|
302
|
-
function join32(msg, start, end, endian): number[] {
|
|
302
|
+
function join32 (msg, start, end, endian): number[] {
|
|
303
303
|
const len = end - start
|
|
304
304
|
assert(len % 4 === 0)
|
|
305
305
|
const res = new Array(len / 4)
|
|
@@ -315,7 +315,7 @@ function join32(msg, start, end, endian): number[] {
|
|
|
315
315
|
return res
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
function split32(msg: number[], endian: 'big' | 'little'): number[] {
|
|
318
|
+
function split32 (msg: number[], endian: 'big' | 'little'): number[] {
|
|
319
319
|
const res = new Array(msg.length * 4)
|
|
320
320
|
for (let i = 0, k = 0; i < msg.length; i++, k += 4) {
|
|
321
321
|
const m = msg[i]
|
|
@@ -334,63 +334,63 @@ function split32(msg: number[], endian: 'big' | 'little'): number[] {
|
|
|
334
334
|
return res
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
-
function rotr32(w: number, b: number): number {
|
|
337
|
+
function rotr32 (w: number, b: number): number {
|
|
338
338
|
return (w >>> b) | (w << (32 - b))
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
-
function rotl32(w: number, b: number): number {
|
|
341
|
+
function rotl32 (w: number, b: number): number {
|
|
342
342
|
return (w << b) | (w >>> (32 - b))
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
-
function sum32(a: number, b: number): number {
|
|
345
|
+
function sum32 (a: number, b: number): number {
|
|
346
346
|
return (a + b) >>> 0
|
|
347
347
|
}
|
|
348
348
|
|
|
349
|
-
function SUM32_3(a: number, b: number, c: number): number {
|
|
349
|
+
function SUM32_3 (a: number, b: number, c: number): number {
|
|
350
350
|
return (a + b + c) >>> 0
|
|
351
351
|
}
|
|
352
352
|
|
|
353
|
-
function SUM32_4(a: number, b: number, c: number, d: number): number {
|
|
353
|
+
function SUM32_4 (a: number, b: number, c: number, d: number): number {
|
|
354
354
|
return (a + b + c + d) >>> 0
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
-
function SUM32_5(
|
|
357
|
+
function SUM32_5 (
|
|
358
358
|
a: number, b: number, c: number, d: number, e: number
|
|
359
359
|
): number {
|
|
360
360
|
return (a + b + c + d + e) >>> 0
|
|
361
361
|
}
|
|
362
362
|
|
|
363
|
-
function FT_1(s, x, y, z): number {
|
|
363
|
+
function FT_1 (s, x, y, z): number {
|
|
364
364
|
if (s === 0) { return ch32(x, y, z) }
|
|
365
365
|
if (s === 1 || s === 3) { return p32(x, y, z) }
|
|
366
366
|
if (s === 2) { return maj32(x, y, z) }
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
-
function ch32(x, y, z): number {
|
|
369
|
+
function ch32 (x, y, z): number {
|
|
370
370
|
return (x & y) ^ ((~x) & z)
|
|
371
371
|
}
|
|
372
372
|
|
|
373
|
-
function maj32(x, y, z): number {
|
|
373
|
+
function maj32 (x, y, z): number {
|
|
374
374
|
return (x & y) ^ (x & z) ^ (y & z)
|
|
375
375
|
}
|
|
376
376
|
|
|
377
|
-
function p32(x, y, z): number {
|
|
377
|
+
function p32 (x, y, z): number {
|
|
378
378
|
return x ^ y ^ z
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
-
function S0_256(x): number {
|
|
381
|
+
function S0_256 (x): number {
|
|
382
382
|
return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22)
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
-
function S1_256(x): number {
|
|
385
|
+
function S1_256 (x): number {
|
|
386
386
|
return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25)
|
|
387
387
|
}
|
|
388
388
|
|
|
389
|
-
function G0_256(x): number {
|
|
389
|
+
function G0_256 (x): number {
|
|
390
390
|
return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3)
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
function G1_256(x): number {
|
|
393
|
+
function G1_256 (x): number {
|
|
394
394
|
return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10)
|
|
395
395
|
}
|
|
396
396
|
|
|
@@ -426,97 +426,97 @@ const sh = [
|
|
|
426
426
|
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
|
|
427
427
|
]
|
|
428
428
|
|
|
429
|
-
function f(j, x, y, z): number {
|
|
429
|
+
function f (j, x, y, z): number {
|
|
430
430
|
if (j <= 15) { return x ^ y ^ z } else if (j <= 31) { return (x & y) | ((~x) & z) } else if (j <= 47) { return (x | (~y)) ^ z } else if (j <= 63) { return (x & z) | (y & (~z)) } else { return x ^ (y | (~z)) }
|
|
431
431
|
}
|
|
432
432
|
|
|
433
|
-
function K(j): number {
|
|
433
|
+
function K (j): number {
|
|
434
434
|
if (j <= 15) { return 0x00000000 } else if (j <= 31) { return 0x5a827999 } else if (j <= 47) { return 0x6ed9eba1 } else if (j <= 63) { return 0x8f1bbcdc } else { return 0xa953fd4e }
|
|
435
435
|
}
|
|
436
436
|
|
|
437
|
-
function Kh(j): number {
|
|
437
|
+
function Kh (j): number {
|
|
438
438
|
if (j <= 15) { return 0x50a28be6 } else if (j <= 31) { return 0x5c4dd124 } else if (j <= 47) { return 0x6d703ef3 } else if (j <= 63) { return 0x7a6d76e9 } else { return 0x00000000 }
|
|
439
439
|
}
|
|
440
440
|
|
|
441
|
-
function sum64(buf, pos, ah, al) {
|
|
442
|
-
const bh = buf[pos]
|
|
443
|
-
const bl = buf[pos + 1]
|
|
441
|
+
function sum64 (buf, pos, ah, al) {
|
|
442
|
+
const bh = buf[pos]
|
|
443
|
+
const bl = buf[pos + 1]
|
|
444
444
|
|
|
445
|
-
const lo = (al + bl) >>> 0
|
|
446
|
-
const hi = (lo < al ? 1 : 0) + ah + bh
|
|
447
|
-
buf[pos] = hi >>> 0
|
|
448
|
-
buf[pos + 1] = lo
|
|
445
|
+
const lo = (al + bl) >>> 0
|
|
446
|
+
const hi = (lo < al ? 1 : 0) + ah + bh
|
|
447
|
+
buf[pos] = hi >>> 0
|
|
448
|
+
buf[pos + 1] = lo
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
-
function sum64_hi(ah, al, bh, bl) {
|
|
452
|
-
const lo = (al + bl) >>> 0
|
|
453
|
-
const hi = (lo < al ? 1 : 0) + ah + bh
|
|
454
|
-
return hi >>> 0
|
|
451
|
+
function sum64_hi (ah, al, bh, bl) {
|
|
452
|
+
const lo = (al + bl) >>> 0
|
|
453
|
+
const hi = (lo < al ? 1 : 0) + ah + bh
|
|
454
|
+
return hi >>> 0
|
|
455
455
|
}
|
|
456
456
|
|
|
457
|
-
function sum64_lo(ah, al, bh, bl) {
|
|
458
|
-
const lo = al + bl
|
|
459
|
-
return lo >>> 0
|
|
457
|
+
function sum64_lo (ah, al, bh, bl) {
|
|
458
|
+
const lo = al + bl
|
|
459
|
+
return lo >>> 0
|
|
460
460
|
}
|
|
461
461
|
|
|
462
|
-
function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
|
|
463
|
-
let carry = 0
|
|
464
|
-
let lo = al
|
|
465
|
-
lo = (lo + bl) >>> 0
|
|
466
|
-
carry += lo < al ? 1 : 0
|
|
467
|
-
lo = (lo + cl) >>> 0
|
|
468
|
-
carry += lo < cl ? 1 : 0
|
|
469
|
-
lo = (lo + dl) >>> 0
|
|
470
|
-
carry += lo < dl ? 1 : 0
|
|
462
|
+
function sum64_4_hi (ah, al, bh, bl, ch, cl, dh, dl) {
|
|
463
|
+
let carry = 0
|
|
464
|
+
let lo = al
|
|
465
|
+
lo = (lo + bl) >>> 0
|
|
466
|
+
carry += lo < al ? 1 : 0
|
|
467
|
+
lo = (lo + cl) >>> 0
|
|
468
|
+
carry += lo < cl ? 1 : 0
|
|
469
|
+
lo = (lo + dl) >>> 0
|
|
470
|
+
carry += lo < dl ? 1 : 0
|
|
471
471
|
|
|
472
|
-
const hi = ah + bh + ch + dh + carry
|
|
473
|
-
return hi >>> 0
|
|
472
|
+
const hi = ah + bh + ch + dh + carry
|
|
473
|
+
return hi >>> 0
|
|
474
474
|
}
|
|
475
475
|
|
|
476
|
-
function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
|
|
477
|
-
const lo = al + bl + cl + dl
|
|
478
|
-
return lo >>> 0
|
|
476
|
+
function sum64_4_lo (ah, al, bh, bl, ch, cl, dh, dl) {
|
|
477
|
+
const lo = al + bl + cl + dl
|
|
478
|
+
return lo >>> 0
|
|
479
479
|
}
|
|
480
480
|
|
|
481
|
-
function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
|
482
|
-
let carry = 0
|
|
483
|
-
let lo = al
|
|
484
|
-
lo = (lo + bl) >>> 0
|
|
485
|
-
carry += lo < al ? 1 : 0
|
|
486
|
-
lo = (lo + cl) >>> 0
|
|
487
|
-
carry += lo < cl ? 1 : 0
|
|
488
|
-
lo = (lo + dl) >>> 0
|
|
489
|
-
carry += lo < dl ? 1 : 0
|
|
490
|
-
lo = (lo + el) >>> 0
|
|
491
|
-
carry += lo < el ? 1 : 0
|
|
481
|
+
function sum64_5_hi (ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
|
482
|
+
let carry = 0
|
|
483
|
+
let lo = al
|
|
484
|
+
lo = (lo + bl) >>> 0
|
|
485
|
+
carry += lo < al ? 1 : 0
|
|
486
|
+
lo = (lo + cl) >>> 0
|
|
487
|
+
carry += lo < cl ? 1 : 0
|
|
488
|
+
lo = (lo + dl) >>> 0
|
|
489
|
+
carry += lo < dl ? 1 : 0
|
|
490
|
+
lo = (lo + el) >>> 0
|
|
491
|
+
carry += lo < el ? 1 : 0
|
|
492
492
|
|
|
493
|
-
const hi = ah + bh + ch + dh + eh + carry
|
|
494
|
-
return hi >>> 0
|
|
493
|
+
const hi = ah + bh + ch + dh + eh + carry
|
|
494
|
+
return hi >>> 0
|
|
495
495
|
}
|
|
496
496
|
|
|
497
|
-
function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
|
498
|
-
const lo = al + bl + cl + dl + el
|
|
497
|
+
function sum64_5_lo (ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
|
498
|
+
const lo = al + bl + cl + dl + el
|
|
499
499
|
|
|
500
|
-
return lo >>> 0
|
|
500
|
+
return lo >>> 0
|
|
501
501
|
}
|
|
502
502
|
|
|
503
|
-
function rotr64_hi(ah, al, num) {
|
|
504
|
-
const r = (al << (32 - num)) | (ah >>> num)
|
|
505
|
-
return r >>> 0
|
|
503
|
+
function rotr64_hi (ah, al, num) {
|
|
504
|
+
const r = (al << (32 - num)) | (ah >>> num)
|
|
505
|
+
return r >>> 0
|
|
506
506
|
}
|
|
507
507
|
|
|
508
|
-
function rotr64_lo(ah, al, num) {
|
|
509
|
-
const r = (ah << (32 - num)) | (al >>> num)
|
|
510
|
-
return r >>> 0
|
|
508
|
+
function rotr64_lo (ah, al, num) {
|
|
509
|
+
const r = (ah << (32 - num)) | (al >>> num)
|
|
510
|
+
return r >>> 0
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
-
function shr64_hi(ah, al, num) {
|
|
514
|
-
return ah >>> num
|
|
513
|
+
function shr64_hi (ah, al, num) {
|
|
514
|
+
return ah >>> num
|
|
515
515
|
}
|
|
516
516
|
|
|
517
|
-
function shr64_lo(ah, al, num) {
|
|
518
|
-
const r = (ah << (32 - num)) | (al >>> num)
|
|
519
|
-
return r >>> 0
|
|
517
|
+
function shr64_lo (ah, al, num) {
|
|
518
|
+
const r = (ah << (32 - num)) | (al >>> num)
|
|
519
|
+
return r >>> 0
|
|
520
520
|
}
|
|
521
521
|
|
|
522
522
|
/**
|
|
@@ -539,7 +539,7 @@ function shr64_lo(ah, al, num) {
|
|
|
539
539
|
export class RIPEMD160 extends BaseHash {
|
|
540
540
|
h: number[]
|
|
541
541
|
|
|
542
|
-
constructor() {
|
|
542
|
+
constructor () {
|
|
543
543
|
super(512, 160, 192, 64)
|
|
544
544
|
this.endian = 'little'
|
|
545
545
|
|
|
@@ -547,7 +547,7 @@ export class RIPEMD160 extends BaseHash {
|
|
|
547
547
|
this.endian = 'little'
|
|
548
548
|
}
|
|
549
549
|
|
|
550
|
-
_update(msg: number[], start: number): void {
|
|
550
|
+
_update (msg: number[], start: number): void {
|
|
551
551
|
let A = this.h[0]
|
|
552
552
|
let B = this.h[1]
|
|
553
553
|
let C = this.h[2]
|
|
@@ -589,12 +589,12 @@ export class RIPEMD160 extends BaseHash {
|
|
|
589
589
|
this.h[0] = T
|
|
590
590
|
}
|
|
591
591
|
|
|
592
|
-
_digest(): number[] {
|
|
593
|
-
|
|
592
|
+
_digest (): number[] {
|
|
593
|
+
return split32(this.h, 'little')
|
|
594
594
|
}
|
|
595
595
|
|
|
596
|
-
_digestHex(): string {
|
|
597
|
-
|
|
596
|
+
_digestHex (): string {
|
|
597
|
+
return toHex32(this.h, 'little')
|
|
598
598
|
}
|
|
599
599
|
}
|
|
600
600
|
|
|
@@ -622,7 +622,7 @@ export class SHA256 extends BaseHash {
|
|
|
622
622
|
W: number[]
|
|
623
623
|
k: number[]
|
|
624
624
|
|
|
625
|
-
constructor() {
|
|
625
|
+
constructor () {
|
|
626
626
|
super(512, 256, 192, 64)
|
|
627
627
|
this.h = [
|
|
628
628
|
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
|
@@ -649,7 +649,7 @@ export class SHA256 extends BaseHash {
|
|
|
649
649
|
this.W = new Array(64)
|
|
650
650
|
}
|
|
651
651
|
|
|
652
|
-
_update(msg: number[], start?: number): void {
|
|
652
|
+
_update (msg: number[], start?: number): void {
|
|
653
653
|
const W = this.W
|
|
654
654
|
|
|
655
655
|
let i: number
|
|
@@ -693,11 +693,11 @@ export class SHA256 extends BaseHash {
|
|
|
693
693
|
this.h[7] = sum32(this.h[7], h)
|
|
694
694
|
};
|
|
695
695
|
|
|
696
|
-
_digest(): number[] {
|
|
696
|
+
_digest (): number[] {
|
|
697
697
|
return split32(this.h, 'big')
|
|
698
698
|
}
|
|
699
699
|
|
|
700
|
-
_digestHex(): string {
|
|
700
|
+
_digestHex (): string {
|
|
701
701
|
return toHex32(this.h, 'big')
|
|
702
702
|
}
|
|
703
703
|
}
|
|
@@ -726,7 +726,7 @@ export class SHA1 extends BaseHash {
|
|
|
726
726
|
W: number[]
|
|
727
727
|
k: number[]
|
|
728
728
|
|
|
729
|
-
constructor() {
|
|
729
|
+
constructor () {
|
|
730
730
|
super(512, 160, 80, 64)
|
|
731
731
|
this.k = [
|
|
732
732
|
0x5A827999, 0x6ED9EBA1,
|
|
@@ -738,7 +738,7 @@ export class SHA1 extends BaseHash {
|
|
|
738
738
|
this.W = new Array(80)
|
|
739
739
|
}
|
|
740
740
|
|
|
741
|
-
_update(msg: number[], start?: number): void {
|
|
741
|
+
_update (msg: number[], start?: number): void {
|
|
742
742
|
const W = this.W
|
|
743
743
|
|
|
744
744
|
let i: number
|
|
@@ -771,11 +771,11 @@ export class SHA1 extends BaseHash {
|
|
|
771
771
|
this.h[4] = sum32(this.h[4], e)
|
|
772
772
|
}
|
|
773
773
|
|
|
774
|
-
_digest(): number[] {
|
|
774
|
+
_digest (): number[] {
|
|
775
775
|
return split32(this.h, 'big')
|
|
776
776
|
}
|
|
777
777
|
|
|
778
|
-
_digestHex(): string {
|
|
778
|
+
_digestHex (): string {
|
|
779
779
|
return toHex32(this.h, 'big')
|
|
780
780
|
}
|
|
781
781
|
}
|
|
@@ -804,7 +804,7 @@ export class SHA512 extends BaseHash {
|
|
|
804
804
|
W: number[]
|
|
805
805
|
k: number[]
|
|
806
806
|
|
|
807
|
-
constructor() {
|
|
807
|
+
constructor () {
|
|
808
808
|
super(1024, 512, 192, 128)
|
|
809
809
|
this.h = [
|
|
810
810
|
0x6a09e667, 0xf3bcc908,
|
|
@@ -860,251 +860,237 @@ export class SHA512 extends BaseHash {
|
|
|
860
860
|
this.W = new Array(160)
|
|
861
861
|
}
|
|
862
862
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
const W = this.W;
|
|
863
|
+
_prepareBlock (msg, start) {
|
|
864
|
+
const W = this.W
|
|
866
865
|
|
|
867
866
|
// 32 x 32bit words
|
|
868
867
|
let i
|
|
869
|
-
for (i = 0; i < 32; i++)
|
|
870
|
-
W[i] = msg[start + i];
|
|
868
|
+
for (i = 0; i < 32; i++) { W[i] = msg[start + i] }
|
|
871
869
|
for (; i < W.length; i += 2) {
|
|
872
|
-
const c0_hi = g1_512_hi(W[i - 4], W[i - 3])
|
|
873
|
-
const c0_lo = g1_512_lo(W[i - 4], W[i - 3])
|
|
874
|
-
const c1_hi = W[i - 14]
|
|
875
|
-
const c1_lo = W[i - 13]
|
|
876
|
-
const c2_hi = g0_512_hi(W[i - 30], W[i - 29])
|
|
877
|
-
const c2_lo = g0_512_lo(W[i - 30], W[i - 29])
|
|
878
|
-
const c3_hi = W[i - 32]
|
|
879
|
-
const c3_lo = W[i - 31]
|
|
870
|
+
const c0_hi = g1_512_hi(W[i - 4], W[i - 3]) // i - 2
|
|
871
|
+
const c0_lo = g1_512_lo(W[i - 4], W[i - 3])
|
|
872
|
+
const c1_hi = W[i - 14] // i - 7
|
|
873
|
+
const c1_lo = W[i - 13]
|
|
874
|
+
const c2_hi = g0_512_hi(W[i - 30], W[i - 29]) // i - 15
|
|
875
|
+
const c2_lo = g0_512_lo(W[i - 30], W[i - 29])
|
|
876
|
+
const c3_hi = W[i - 32] // i - 16
|
|
877
|
+
const c3_lo = W[i - 31]
|
|
880
878
|
|
|
881
879
|
W[i] = sum64_4_hi(
|
|
882
880
|
c0_hi, c0_lo,
|
|
883
881
|
c1_hi, c1_lo,
|
|
884
882
|
c2_hi, c2_lo,
|
|
885
|
-
c3_hi, c3_lo)
|
|
883
|
+
c3_hi, c3_lo)
|
|
886
884
|
W[i + 1] = sum64_4_lo(
|
|
887
885
|
c0_hi, c0_lo,
|
|
888
886
|
c1_hi, c1_lo,
|
|
889
887
|
c2_hi, c2_lo,
|
|
890
|
-
c3_hi, c3_lo)
|
|
888
|
+
c3_hi, c3_lo)
|
|
891
889
|
}
|
|
892
890
|
}
|
|
893
891
|
|
|
894
|
-
_update(msg, start) {
|
|
895
|
-
this._prepareBlock(msg, start)
|
|
896
|
-
|
|
897
|
-
const W = this.W
|
|
898
|
-
|
|
899
|
-
let ah = this.h[0]
|
|
900
|
-
let al = this.h[1]
|
|
901
|
-
let bh = this.h[2]
|
|
902
|
-
let bl = this.h[3]
|
|
903
|
-
let ch = this.h[4]
|
|
904
|
-
let cl = this.h[5]
|
|
905
|
-
let dh = this.h[6]
|
|
906
|
-
let dl = this.h[7]
|
|
907
|
-
let eh = this.h[8]
|
|
908
|
-
let el = this.h[9]
|
|
909
|
-
let fh = this.h[10]
|
|
910
|
-
let fl = this.h[11]
|
|
911
|
-
let gh = this.h[12]
|
|
912
|
-
let gl = this.h[13]
|
|
913
|
-
let hh = this.h[14]
|
|
914
|
-
let hl = this.h[15]
|
|
915
|
-
|
|
916
|
-
assert(this.k.length === W.length)
|
|
892
|
+
_update (msg, start) {
|
|
893
|
+
this._prepareBlock(msg, start)
|
|
894
|
+
|
|
895
|
+
const W = this.W
|
|
896
|
+
|
|
897
|
+
let ah = this.h[0]
|
|
898
|
+
let al = this.h[1]
|
|
899
|
+
let bh = this.h[2]
|
|
900
|
+
let bl = this.h[3]
|
|
901
|
+
let ch = this.h[4]
|
|
902
|
+
let cl = this.h[5]
|
|
903
|
+
let dh = this.h[6]
|
|
904
|
+
let dl = this.h[7]
|
|
905
|
+
let eh = this.h[8]
|
|
906
|
+
let el = this.h[9]
|
|
907
|
+
let fh = this.h[10]
|
|
908
|
+
let fl = this.h[11]
|
|
909
|
+
let gh = this.h[12]
|
|
910
|
+
let gl = this.h[13]
|
|
911
|
+
let hh = this.h[14]
|
|
912
|
+
let hl = this.h[15]
|
|
913
|
+
|
|
914
|
+
assert(this.k.length === W.length)
|
|
917
915
|
for (let i = 0; i < W.length; i += 2) {
|
|
918
|
-
let c0_hi = hh
|
|
919
|
-
let c0_lo = hl
|
|
920
|
-
let c1_hi = s1_512_hi(eh, el)
|
|
921
|
-
let c1_lo = s1_512_lo(eh, el)
|
|
922
|
-
const c2_hi = ch64_hi(eh, el, fh, fl, gh, gl)
|
|
923
|
-
const c2_lo = ch64_lo(eh, el, fh, fl, gh, gl)
|
|
924
|
-
const c3_hi = this.k[i]
|
|
925
|
-
const c3_lo = this.k[i + 1]
|
|
926
|
-
const c4_hi = W[i]
|
|
927
|
-
const c4_lo = W[i + 1]
|
|
916
|
+
let c0_hi = hh
|
|
917
|
+
let c0_lo = hl
|
|
918
|
+
let c1_hi = s1_512_hi(eh, el)
|
|
919
|
+
let c1_lo = s1_512_lo(eh, el)
|
|
920
|
+
const c2_hi = ch64_hi(eh, el, fh, fl, gh, gl)
|
|
921
|
+
const c2_lo = ch64_lo(eh, el, fh, fl, gh, gl)
|
|
922
|
+
const c3_hi = this.k[i]
|
|
923
|
+
const c3_lo = this.k[i + 1]
|
|
924
|
+
const c4_hi = W[i]
|
|
925
|
+
const c4_lo = W[i + 1]
|
|
928
926
|
|
|
929
927
|
const T1_hi = sum64_5_hi(
|
|
930
928
|
c0_hi, c0_lo,
|
|
931
929
|
c1_hi, c1_lo,
|
|
932
930
|
c2_hi, c2_lo,
|
|
933
931
|
c3_hi, c3_lo,
|
|
934
|
-
c4_hi, c4_lo)
|
|
932
|
+
c4_hi, c4_lo)
|
|
935
933
|
const T1_lo = sum64_5_lo(
|
|
936
934
|
c0_hi, c0_lo,
|
|
937
935
|
c1_hi, c1_lo,
|
|
938
936
|
c2_hi, c2_lo,
|
|
939
937
|
c3_hi, c3_lo,
|
|
940
|
-
c4_hi, c4_lo)
|
|
938
|
+
c4_hi, c4_lo)
|
|
941
939
|
|
|
942
|
-
c0_hi = s0_512_hi(ah, al)
|
|
943
|
-
c0_lo = s0_512_lo(ah, al)
|
|
944
|
-
c1_hi = maj64_hi(ah, al, bh, bl, ch, cl)
|
|
945
|
-
c1_lo = maj64_lo(ah, al, bh, bl, ch, cl)
|
|
940
|
+
c0_hi = s0_512_hi(ah, al)
|
|
941
|
+
c0_lo = s0_512_lo(ah, al)
|
|
942
|
+
c1_hi = maj64_hi(ah, al, bh, bl, ch, cl)
|
|
943
|
+
c1_lo = maj64_lo(ah, al, bh, bl, ch, cl)
|
|
946
944
|
|
|
947
|
-
const T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo)
|
|
948
|
-
const T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo)
|
|
945
|
+
const T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo)
|
|
946
|
+
const T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo)
|
|
949
947
|
|
|
950
|
-
hh = gh
|
|
951
|
-
hl = gl
|
|
948
|
+
hh = gh
|
|
949
|
+
hl = gl
|
|
952
950
|
|
|
953
|
-
gh = fh
|
|
954
|
-
gl = fl
|
|
951
|
+
gh = fh
|
|
952
|
+
gl = fl
|
|
955
953
|
|
|
956
|
-
fh = eh
|
|
957
|
-
fl = el
|
|
954
|
+
fh = eh
|
|
955
|
+
fl = el
|
|
958
956
|
|
|
959
|
-
eh = sum64_hi(dh, dl, T1_hi, T1_lo)
|
|
960
|
-
el = sum64_lo(dl, dl, T1_hi, T1_lo)
|
|
957
|
+
eh = sum64_hi(dh, dl, T1_hi, T1_lo)
|
|
958
|
+
el = sum64_lo(dl, dl, T1_hi, T1_lo)
|
|
961
959
|
|
|
962
|
-
dh = ch
|
|
963
|
-
dl = cl
|
|
960
|
+
dh = ch
|
|
961
|
+
dl = cl
|
|
964
962
|
|
|
965
|
-
ch = bh
|
|
966
|
-
cl = bl
|
|
963
|
+
ch = bh
|
|
964
|
+
cl = bl
|
|
967
965
|
|
|
968
|
-
bh = ah
|
|
969
|
-
bl = al
|
|
966
|
+
bh = ah
|
|
967
|
+
bl = al
|
|
970
968
|
|
|
971
|
-
ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo)
|
|
972
|
-
al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo)
|
|
969
|
+
ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo)
|
|
970
|
+
al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo)
|
|
973
971
|
}
|
|
974
972
|
|
|
975
|
-
sum64(this.h, 0, ah, al)
|
|
976
|
-
sum64(this.h, 2, bh, bl)
|
|
977
|
-
sum64(this.h, 4, ch, cl)
|
|
978
|
-
sum64(this.h, 6, dh, dl)
|
|
979
|
-
sum64(this.h, 8, eh, el)
|
|
980
|
-
sum64(this.h, 10, fh, fl)
|
|
981
|
-
sum64(this.h, 12, gh, gl)
|
|
982
|
-
sum64(this.h, 14, hh, hl)
|
|
973
|
+
sum64(this.h, 0, ah, al)
|
|
974
|
+
sum64(this.h, 2, bh, bl)
|
|
975
|
+
sum64(this.h, 4, ch, cl)
|
|
976
|
+
sum64(this.h, 6, dh, dl)
|
|
977
|
+
sum64(this.h, 8, eh, el)
|
|
978
|
+
sum64(this.h, 10, fh, fl)
|
|
979
|
+
sum64(this.h, 12, gh, gl)
|
|
980
|
+
sum64(this.h, 14, hh, hl)
|
|
983
981
|
}
|
|
984
982
|
|
|
985
|
-
_digest() {
|
|
986
|
-
return split32(this.h, 'big')
|
|
983
|
+
_digest () {
|
|
984
|
+
return split32(this.h, 'big')
|
|
987
985
|
}
|
|
988
986
|
|
|
989
|
-
_digestHex() {
|
|
990
|
-
return toHex32(this.h, 'big')
|
|
987
|
+
_digestHex () {
|
|
988
|
+
return toHex32(this.h, 'big')
|
|
991
989
|
}
|
|
992
990
|
}
|
|
993
991
|
|
|
994
|
-
function ch64_hi(xh, xl, yh, yl, zh, zl) {
|
|
995
|
-
let r = (xh & yh) ^ ((~xh) & zh)
|
|
996
|
-
if (r < 0)
|
|
997
|
-
|
|
998
|
-
return r;
|
|
992
|
+
function ch64_hi (xh, xl, yh, yl, zh, zl) {
|
|
993
|
+
let r = (xh & yh) ^ ((~xh) & zh)
|
|
994
|
+
if (r < 0) { r += 0x100000000 }
|
|
995
|
+
return r
|
|
999
996
|
}
|
|
1000
997
|
|
|
1001
|
-
function ch64_lo(xh, xl, yh, yl, zh, zl) {
|
|
1002
|
-
let r = (xl & yl) ^ ((~xl) & zl)
|
|
1003
|
-
if (r < 0)
|
|
1004
|
-
|
|
1005
|
-
return r;
|
|
998
|
+
function ch64_lo (xh, xl, yh, yl, zh, zl) {
|
|
999
|
+
let r = (xl & yl) ^ ((~xl) & zl)
|
|
1000
|
+
if (r < 0) { r += 0x100000000 }
|
|
1001
|
+
return r
|
|
1006
1002
|
}
|
|
1007
1003
|
|
|
1008
|
-
function maj64_hi(xh, xl, yh, yl, zh, zl) {
|
|
1009
|
-
let r = (xh & yh) ^ (xh & zh) ^ (yh & zh)
|
|
1010
|
-
if (r < 0)
|
|
1011
|
-
|
|
1012
|
-
return r;
|
|
1004
|
+
function maj64_hi (xh, xl, yh, yl, zh, zl) {
|
|
1005
|
+
let r = (xh & yh) ^ (xh & zh) ^ (yh & zh)
|
|
1006
|
+
if (r < 0) { r += 0x100000000 }
|
|
1007
|
+
return r
|
|
1013
1008
|
}
|
|
1014
1009
|
|
|
1015
|
-
function maj64_lo(xh, xl, yh, yl, zh, zl) {
|
|
1016
|
-
let r = (xl & yl) ^ (xl & zl) ^ (yl & zl)
|
|
1017
|
-
if (r < 0)
|
|
1018
|
-
|
|
1019
|
-
return r;
|
|
1010
|
+
function maj64_lo (xh, xl, yh, yl, zh, zl) {
|
|
1011
|
+
let r = (xl & yl) ^ (xl & zl) ^ (yl & zl)
|
|
1012
|
+
if (r < 0) { r += 0x100000000 }
|
|
1013
|
+
return r
|
|
1020
1014
|
}
|
|
1021
1015
|
|
|
1022
|
-
function s0_512_hi(xh, xl) {
|
|
1023
|
-
const c0_hi = rotr64_hi(xh, xl, 28)
|
|
1024
|
-
const c1_hi = rotr64_hi(xl, xh, 2)
|
|
1025
|
-
const c2_hi = rotr64_hi(xl, xh, 7)
|
|
1016
|
+
function s0_512_hi (xh, xl) {
|
|
1017
|
+
const c0_hi = rotr64_hi(xh, xl, 28)
|
|
1018
|
+
const c1_hi = rotr64_hi(xl, xh, 2) // 34
|
|
1019
|
+
const c2_hi = rotr64_hi(xl, xh, 7) // 39
|
|
1026
1020
|
|
|
1027
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1028
|
-
if (r < 0)
|
|
1029
|
-
|
|
1030
|
-
return r;
|
|
1021
|
+
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1022
|
+
if (r < 0) { r += 0x100000000 }
|
|
1023
|
+
return r
|
|
1031
1024
|
}
|
|
1032
1025
|
|
|
1033
|
-
function s0_512_lo(xh, xl) {
|
|
1034
|
-
const c0_lo = rotr64_lo(xh, xl, 28)
|
|
1035
|
-
const c1_lo = rotr64_lo(xl, xh, 2)
|
|
1036
|
-
const c2_lo = rotr64_lo(xl, xh, 7)
|
|
1026
|
+
function s0_512_lo (xh, xl) {
|
|
1027
|
+
const c0_lo = rotr64_lo(xh, xl, 28)
|
|
1028
|
+
const c1_lo = rotr64_lo(xl, xh, 2) // 34
|
|
1029
|
+
const c2_lo = rotr64_lo(xl, xh, 7) // 39
|
|
1037
1030
|
|
|
1038
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1039
|
-
if (r < 0)
|
|
1040
|
-
|
|
1041
|
-
return r;
|
|
1031
|
+
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1032
|
+
if (r < 0) { r += 0x100000000 }
|
|
1033
|
+
return r
|
|
1042
1034
|
}
|
|
1043
1035
|
|
|
1044
|
-
function s1_512_hi(xh, xl) {
|
|
1045
|
-
const c0_hi = rotr64_hi(xh, xl, 14)
|
|
1046
|
-
const c1_hi = rotr64_hi(xh, xl, 18)
|
|
1047
|
-
const c2_hi = rotr64_hi(xl, xh, 9)
|
|
1036
|
+
function s1_512_hi (xh, xl) {
|
|
1037
|
+
const c0_hi = rotr64_hi(xh, xl, 14)
|
|
1038
|
+
const c1_hi = rotr64_hi(xh, xl, 18)
|
|
1039
|
+
const c2_hi = rotr64_hi(xl, xh, 9) // 41
|
|
1048
1040
|
|
|
1049
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1050
|
-
if (r < 0)
|
|
1051
|
-
|
|
1052
|
-
return r;
|
|
1041
|
+
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1042
|
+
if (r < 0) { r += 0x100000000 }
|
|
1043
|
+
return r
|
|
1053
1044
|
}
|
|
1054
1045
|
|
|
1055
|
-
function s1_512_lo(xh, xl) {
|
|
1056
|
-
const c0_lo = rotr64_lo(xh, xl, 14)
|
|
1057
|
-
const c1_lo = rotr64_lo(xh, xl, 18)
|
|
1058
|
-
const c2_lo = rotr64_lo(xl, xh, 9)
|
|
1046
|
+
function s1_512_lo (xh, xl) {
|
|
1047
|
+
const c0_lo = rotr64_lo(xh, xl, 14)
|
|
1048
|
+
const c1_lo = rotr64_lo(xh, xl, 18)
|
|
1049
|
+
const c2_lo = rotr64_lo(xl, xh, 9) // 41
|
|
1059
1050
|
|
|
1060
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1061
|
-
if (r < 0)
|
|
1062
|
-
|
|
1063
|
-
return r;
|
|
1051
|
+
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1052
|
+
if (r < 0) { r += 0x100000000 }
|
|
1053
|
+
return r
|
|
1064
1054
|
}
|
|
1065
1055
|
|
|
1066
|
-
function g0_512_hi(xh, xl) {
|
|
1067
|
-
const c0_hi = rotr64_hi(xh, xl, 1)
|
|
1068
|
-
const c1_hi = rotr64_hi(xh, xl, 8)
|
|
1069
|
-
const c2_hi = shr64_hi(xh, xl, 7)
|
|
1056
|
+
function g0_512_hi (xh, xl) {
|
|
1057
|
+
const c0_hi = rotr64_hi(xh, xl, 1)
|
|
1058
|
+
const c1_hi = rotr64_hi(xh, xl, 8)
|
|
1059
|
+
const c2_hi = shr64_hi(xh, xl, 7)
|
|
1070
1060
|
|
|
1071
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1072
|
-
if (r < 0)
|
|
1073
|
-
|
|
1074
|
-
return r;
|
|
1061
|
+
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1062
|
+
if (r < 0) { r += 0x100000000 }
|
|
1063
|
+
return r
|
|
1075
1064
|
}
|
|
1076
1065
|
|
|
1077
|
-
function g0_512_lo(xh, xl) {
|
|
1078
|
-
const c0_lo = rotr64_lo(xh, xl, 1)
|
|
1079
|
-
const c1_lo = rotr64_lo(xh, xl, 8)
|
|
1080
|
-
const c2_lo = shr64_lo(xh, xl, 7)
|
|
1066
|
+
function g0_512_lo (xh, xl) {
|
|
1067
|
+
const c0_lo = rotr64_lo(xh, xl, 1)
|
|
1068
|
+
const c1_lo = rotr64_lo(xh, xl, 8)
|
|
1069
|
+
const c2_lo = shr64_lo(xh, xl, 7)
|
|
1081
1070
|
|
|
1082
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1083
|
-
if (r < 0)
|
|
1084
|
-
|
|
1085
|
-
return r;
|
|
1071
|
+
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1072
|
+
if (r < 0) { r += 0x100000000 }
|
|
1073
|
+
return r
|
|
1086
1074
|
}
|
|
1087
1075
|
|
|
1088
|
-
function g1_512_hi(xh, xl) {
|
|
1089
|
-
const c0_hi = rotr64_hi(xh, xl, 19)
|
|
1090
|
-
const c1_hi = rotr64_hi(xl, xh, 29)
|
|
1091
|
-
const c2_hi = shr64_hi(xh, xl, 6)
|
|
1076
|
+
function g1_512_hi (xh, xl) {
|
|
1077
|
+
const c0_hi = rotr64_hi(xh, xl, 19)
|
|
1078
|
+
const c1_hi = rotr64_hi(xl, xh, 29) // 61
|
|
1079
|
+
const c2_hi = shr64_hi(xh, xl, 6)
|
|
1092
1080
|
|
|
1093
|
-
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1094
|
-
if (r < 0)
|
|
1095
|
-
|
|
1096
|
-
return r;
|
|
1081
|
+
let r = c0_hi ^ c1_hi ^ c2_hi
|
|
1082
|
+
if (r < 0) { r += 0x100000000 }
|
|
1083
|
+
return r
|
|
1097
1084
|
}
|
|
1098
1085
|
|
|
1099
|
-
function g1_512_lo(xh, xl) {
|
|
1100
|
-
const c0_lo = rotr64_lo(xh, xl, 19)
|
|
1101
|
-
const c1_lo = rotr64_lo(xl, xh, 29)
|
|
1102
|
-
const c2_lo = shr64_lo(xh, xl, 6)
|
|
1086
|
+
function g1_512_lo (xh, xl) {
|
|
1087
|
+
const c0_lo = rotr64_lo(xh, xl, 19)
|
|
1088
|
+
const c1_lo = rotr64_lo(xl, xh, 29) // 61
|
|
1089
|
+
const c2_lo = shr64_lo(xh, xl, 6)
|
|
1103
1090
|
|
|
1104
|
-
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1105
|
-
if (r < 0)
|
|
1106
|
-
|
|
1107
|
-
return r;
|
|
1091
|
+
let r = c0_lo ^ c1_lo ^ c2_lo
|
|
1092
|
+
if (r < 0) { r += 0x100000000 }
|
|
1093
|
+
return r
|
|
1108
1094
|
}
|
|
1109
1095
|
|
|
1110
1096
|
/**
|
|
@@ -1138,11 +1124,11 @@ export class SHA256HMAC {
|
|
|
1138
1124
|
* @example
|
|
1139
1125
|
* const myHMAC = new SHA256HMAC('deadbeef');
|
|
1140
1126
|
*/
|
|
1141
|
-
constructor(key: number[] | string) {
|
|
1127
|
+
constructor (key: number[] | string) {
|
|
1142
1128
|
key = toArray(key, 'hex')
|
|
1143
1129
|
// Shorten key, if needed
|
|
1144
1130
|
if (key.length > this.blockSize) {
|
|
1145
|
-
key = new SHA256().update(key).digest()
|
|
1131
|
+
key = new SHA256().update(key).digest()
|
|
1146
1132
|
}
|
|
1147
1133
|
assert(key.length <= this.blockSize)
|
|
1148
1134
|
|
|
@@ -1169,7 +1155,7 @@ export class SHA256HMAC {
|
|
|
1169
1155
|
* @example
|
|
1170
1156
|
* myHMAC.update('deadbeef', 'hex');
|
|
1171
1157
|
*/
|
|
1172
|
-
update(msg: number[] | string, enc?: 'hex'): SHA256HMAC {
|
|
1158
|
+
update (msg: number[] | string, enc?: 'hex'): SHA256HMAC {
|
|
1173
1159
|
this.inner.update(msg, enc)
|
|
1174
1160
|
return this
|
|
1175
1161
|
}
|
|
@@ -1183,7 +1169,7 @@ export class SHA256HMAC {
|
|
|
1183
1169
|
* @example
|
|
1184
1170
|
* let hashedMessage = myHMAC.digest();
|
|
1185
1171
|
*/
|
|
1186
|
-
digest(): number[] {
|
|
1172
|
+
digest (): number[] {
|
|
1187
1173
|
this.outer.update(this.inner.digest())
|
|
1188
1174
|
return this.outer.digest()
|
|
1189
1175
|
}
|
|
@@ -1197,7 +1183,7 @@ export class SHA256HMAC {
|
|
|
1197
1183
|
* @example
|
|
1198
1184
|
* let hashedMessage = myHMAC.digestHex();
|
|
1199
1185
|
*/
|
|
1200
|
-
digestHex(): string {
|
|
1186
|
+
digestHex (): string {
|
|
1201
1187
|
this.outer.update(this.inner.digest())
|
|
1202
1188
|
return this.outer.digestHex()
|
|
1203
1189
|
}
|
|
@@ -1234,11 +1220,11 @@ export class SHA512HMAC {
|
|
|
1234
1220
|
* @example
|
|
1235
1221
|
* const myHMAC = new SHA512HMAC('deadbeef');
|
|
1236
1222
|
*/
|
|
1237
|
-
constructor(key: number[] | string) {
|
|
1223
|
+
constructor (key: number[] | string) {
|
|
1238
1224
|
key = toArray(key, 'hex')
|
|
1239
1225
|
// Shorten key, if needed
|
|
1240
1226
|
if (key.length > this.blockSize) {
|
|
1241
|
-
key = new SHA512().update(key).digest()
|
|
1227
|
+
key = new SHA512().update(key).digest()
|
|
1242
1228
|
}
|
|
1243
1229
|
assert(key.length <= this.blockSize)
|
|
1244
1230
|
|
|
@@ -1265,7 +1251,7 @@ export class SHA512HMAC {
|
|
|
1265
1251
|
* @example
|
|
1266
1252
|
* myHMAC.update('deadbeef', 'hex');
|
|
1267
1253
|
*/
|
|
1268
|
-
update(msg: number[] | string, enc?: 'hex' | 'utf8'): SHA512HMAC {
|
|
1254
|
+
update (msg: number[] | string, enc?: 'hex' | 'utf8'): SHA512HMAC {
|
|
1269
1255
|
this.inner.update(msg, enc)
|
|
1270
1256
|
return this
|
|
1271
1257
|
}
|
|
@@ -1279,8 +1265,8 @@ export class SHA512HMAC {
|
|
|
1279
1265
|
* @example
|
|
1280
1266
|
* let hashedMessage = myHMAC.digest();
|
|
1281
1267
|
*/
|
|
1282
|
-
digest(): number[] {
|
|
1283
|
-
this.outer.update(this.inner.digest()
|
|
1268
|
+
digest (): number[] {
|
|
1269
|
+
this.outer.update(this.inner.digest())
|
|
1284
1270
|
return this.outer.digest()
|
|
1285
1271
|
}
|
|
1286
1272
|
|
|
@@ -1293,11 +1279,10 @@ export class SHA512HMAC {
|
|
|
1293
1279
|
* @example
|
|
1294
1280
|
* let hashedMessage = myHMAC.digestHex();
|
|
1295
1281
|
*/
|
|
1296
|
-
digestHex(): string {
|
|
1297
|
-
this.outer.update(this.inner.digest()
|
|
1282
|
+
digestHex (): string {
|
|
1283
|
+
this.outer.update(this.inner.digest())
|
|
1298
1284
|
return this.outer.digestHex()
|
|
1299
1285
|
}
|
|
1300
|
-
|
|
1301
1286
|
}
|
|
1302
1287
|
|
|
1303
1288
|
/**
|
|
@@ -1438,7 +1423,7 @@ export const sha512hmac = (key: number[] | string, msg: number[] | string, enc?:
|
|
|
1438
1423
|
*
|
|
1439
1424
|
* @returns The computed key
|
|
1440
1425
|
*/
|
|
1441
|
-
export function pbkdf2(password: number[], salt: number[], iterations: number, keylen: number, digest = 'sha512'): number[] {
|
|
1426
|
+
export function pbkdf2 (password: number[], salt: number[], iterations: number, keylen: number, digest = 'sha512'): number[] {
|
|
1442
1427
|
if (digest !== 'sha512') {
|
|
1443
1428
|
throw new Error('Only sha512 is supported in this PBKDF2 implementation')
|
|
1444
1429
|
}
|
|
@@ -1451,16 +1436,16 @@ export function pbkdf2(password: number[], salt: number[], iterations: number, k
|
|
|
1451
1436
|
const l = Math.ceil(keylen / hLen)
|
|
1452
1437
|
|
|
1453
1438
|
for (let i = 1; i <= l; i++) {
|
|
1454
|
-
block1[salt.length] = (i >> 24) & 0xFF
|
|
1455
|
-
block1[salt.length + 1] = (i >> 16) & 0xFF
|
|
1456
|
-
block1[salt.length + 2] = (i >> 8) & 0xFF
|
|
1457
|
-
block1[salt.length + 3] = i & 0xFF
|
|
1439
|
+
block1[salt.length] = (i >> 24) & 0xFF // MSB
|
|
1440
|
+
block1[salt.length + 1] = (i >> 16) & 0xFF
|
|
1441
|
+
block1[salt.length + 2] = (i >> 8) & 0xFF
|
|
1442
|
+
block1[salt.length + 3] = i & 0xFF // LSB
|
|
1458
1443
|
|
|
1459
|
-
const T = sha512hmac(password, block1)
|
|
1444
|
+
const T = sha512hmac(password, block1)
|
|
1460
1445
|
let U = T
|
|
1461
1446
|
|
|
1462
1447
|
for (let j = 1; j < iterations; j++) {
|
|
1463
|
-
U = sha512hmac(password, U)
|
|
1448
|
+
U = sha512hmac(password, U)
|
|
1464
1449
|
for (let k = 0; k < hLen; k++) T[k] ^= U[k]
|
|
1465
1450
|
}
|
|
1466
1451
|
|