@bsv/sdk 1.0.0 → 1.0.1
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/README.md +25 -3
- package/package.json +9 -5
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
- package/.github/ISSUE_TEMPLATE/discussion.md +0 -24
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -23
- package/CHANGELOG.md +0 -72
- package/CONTRIBUTING.md +0 -85
- package/ROADMAP.md +0 -3
- package/docs/getting-started/COMMONJS.md +0 -94
- package/docs/getting-started/REACT-TS.md +0 -131
- package/docs/getting-started/TS-NODE.md +0 -106
- package/docs/getting-started/VUE.md +0 -103
- package/jest.config.js +0 -6
- package/mod.ts +0 -8
- package/src/compat/BSM.ts +0 -51
- package/src/compat/ECIES.ts +0 -557
- package/src/compat/HD.ts +0 -348
- package/src/compat/Mnemonic.ts +0 -295
- package/src/compat/__tests/BSM.test.ts +0 -38
- package/src/compat/__tests/ECIES.test.ts +0 -90
- package/src/compat/__tests/HD.test.ts +0 -405
- package/src/compat/__tests/Mnemonic.test.ts +0 -177
- package/src/compat/__tests/Mnemonic.vectors.ts +0 -172
- package/src/compat/bip-39-wordlist-en.ts +0 -2053
- package/src/compat/index.ts +0 -4
- package/src/messages/EncryptedMessage.ts +0 -70
- package/src/messages/SignedMessage.ts +0 -87
- package/src/messages/__tests/EncryptedMessage.test.ts +0 -36
- package/src/messages/__tests/SignedMessage.test.ts +0 -53
- package/src/messages/index.ts +0 -2
- package/src/primitives/AESGCM.ts +0 -479
- package/src/primitives/BasePoint.ts +0 -21
- package/src/primitives/BigNumber.ts +0 -4619
- package/src/primitives/Curve.ts +0 -1163
- package/src/primitives/DRBG.ts +0 -102
- package/src/primitives/ECDSA.ts +0 -164
- package/src/primitives/Hash.ts +0 -1420
- package/src/primitives/JacobianPoint.ts +0 -410
- package/src/primitives/K256.ts +0 -116
- package/src/primitives/Mersenne.ts +0 -123
- package/src/primitives/MontgomoryMethod.ts +0 -160
- package/src/primitives/Point.ts +0 -852
- package/src/primitives/PrivateKey.ts +0 -195
- package/src/primitives/PublicKey.ts +0 -154
- package/src/primitives/Random.ts +0 -55
- package/src/primitives/ReductionContext.ts +0 -528
- package/src/primitives/Signature.ts +0 -235
- package/src/primitives/SymmetricKey.ts +0 -75
- package/src/primitives/TransactionSignature.ts +0 -189
- package/src/primitives/__tests/AESGCM.test.ts +0 -338
- package/src/primitives/__tests/BRC42.private.vectors.ts +0 -33
- package/src/primitives/__tests/BRC42.public.vectors.ts +0 -33
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +0 -572
- package/src/primitives/__tests/BigNumber.binary.test.ts +0 -203
- package/src/primitives/__tests/BigNumber.constructor.test.ts +0 -176
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +0 -18
- package/src/primitives/__tests/BigNumber.fixtures.ts +0 -264
- package/src/primitives/__tests/BigNumber.serializers.test.ts +0 -157
- package/src/primitives/__tests/BigNumber.utils.test.ts +0 -347
- package/src/primitives/__tests/Curve.unit.test.ts +0 -192
- package/src/primitives/__tests/DRBG.test.ts +0 -18
- package/src/primitives/__tests/DRBG.vectors.ts +0 -167
- package/src/primitives/__tests/ECDH.test.ts +0 -31
- package/src/primitives/__tests/ECDSA.test.ts +0 -58
- package/src/primitives/__tests/HMAC.test.ts +0 -59
- package/src/primitives/__tests/Hash.test.ts +0 -121
- package/src/primitives/__tests/PBKDF2.vectors.ts +0 -119
- package/src/primitives/__tests/PrivateKey.test.ts +0 -17
- package/src/primitives/__tests/PublicKey.test.ts +0 -66
- package/src/primitives/__tests/Random.test.ts +0 -14
- package/src/primitives/__tests/Reader.test.ts +0 -296
- package/src/primitives/__tests/ReductionContext.test.ts +0 -279
- package/src/primitives/__tests/SymmetricKey.test.ts +0 -58
- package/src/primitives/__tests/SymmetricKey.vectors.ts +0 -40
- package/src/primitives/__tests/Writer.test.ts +0 -198
- package/src/primitives/__tests/sighash.vectors.ts +0 -3503
- package/src/primitives/__tests/utils.test.ts +0 -108
- package/src/primitives/index.ts +0 -8
- package/src/primitives/utils.ts +0 -665
- package/src/script/LockingScript.ts +0 -30
- package/src/script/OP.ts +0 -219
- package/src/script/Script.ts +0 -426
- package/src/script/ScriptChunk.ts +0 -7
- package/src/script/ScriptTemplate.ts +0 -36
- package/src/script/Spend.ts +0 -1379
- package/src/script/UnlockingScript.ts +0 -30
- package/src/script/__tests/Script.test.ts +0 -369
- package/src/script/__tests/Spend.test.ts +0 -248
- package/src/script/__tests/script.invalid.vectors.ts +0 -925
- package/src/script/__tests/script.valid.vectors.ts +0 -1120
- package/src/script/__tests/scriptFromVector.ts +0 -42
- package/src/script/__tests/spend.valid.vectors.ts +0 -2288
- package/src/script/index.ts +0 -7
- package/src/script/templates/P2PKH.ts +0 -109
- package/src/script/templates/RPuzzle.ts +0 -140
- package/src/script/templates/index.ts +0 -2
- package/src/transaction/Broadcaster.ts +0 -42
- package/src/transaction/ChainTracker.ts +0 -22
- package/src/transaction/FeeModel.ts +0 -13
- package/src/transaction/MerklePath.ts +0 -259
- package/src/transaction/Transaction.ts +0 -602
- package/src/transaction/TransactionInput.ts +0 -63
- package/src/transaction/TransactionOutput.ts +0 -37
- package/src/transaction/__tests/MerklePath.test.ts +0 -181
- package/src/transaction/__tests/Transaction.test.ts +0 -413
- package/src/transaction/__tests/bigtx.vectors.ts +0 -4
- package/src/transaction/__tests/bump.invalid.vectors.ts +0 -8
- package/src/transaction/__tests/bump.valid.vectors.ts +0 -4
- package/src/transaction/__tests/tx.invalid.vectors.ts +0 -281
- package/src/transaction/__tests/tx.valid.vectors.ts +0 -364
- package/src/transaction/broadcasters/ARC.ts +0 -106
- package/src/transaction/broadcasters/__tests/ARC.test.ts +0 -115
- package/src/transaction/broadcasters/index.ts +0 -1
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +0 -71
- package/src/transaction/fee-models/index.ts +0 -1
- package/src/transaction/index.ts +0 -6
- package/ts2md.json +0 -5
- package/tsconfig.base.json +0 -26
- package/tsconfig.cjs.json +0 -11
- package/tsconfig.eslint.json +0 -12
- package/tsconfig.esm.json +0 -9
- package/tsconfig.json +0 -17
- package/tsconfig.types.json +0 -11
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
/* eslint-env jest */
|
|
2
|
-
import Curve from '../../../dist/cjs/src/primitives/Curve.js'
|
|
3
|
-
import Point from '../../../dist/cjs/src/primitives/Point'
|
|
4
|
-
import JPoint from '../../../dist/cjs/src/primitives/JacobianPoint'
|
|
5
|
-
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
6
|
-
|
|
7
|
-
describe('Curve', () => {
|
|
8
|
-
it('should work with secp256k1', () => {
|
|
9
|
-
const curve = new Curve()
|
|
10
|
-
|
|
11
|
-
const p = new Point(
|
|
12
|
-
'79be667e f9dcbbac 55a06295 ce870b07 029bfcdb 2dce28d9 59f2815b 16f81798',
|
|
13
|
-
'483ada77 26a3c465 5da4fbfc 0e1108a8 fd17b448 a6855419 9c47d08f fb10d4b8'
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
expect(p.validate()).toBe(true)
|
|
17
|
-
expect(p.dbl().validate()).toBe(true)
|
|
18
|
-
expect(p.toJ().dbl().toP().validate()).toBe(true)
|
|
19
|
-
expect(p.mul(new BigNumber('79be667e f9dcbbac 55a06295 ce870b07', 16)).validate()).toBe(true)
|
|
20
|
-
|
|
21
|
-
// Endomorphism test
|
|
22
|
-
expect(curve.endo).toBeDefined()
|
|
23
|
-
expect(
|
|
24
|
-
curve.endo.beta.fromRed().toString(16)
|
|
25
|
-
).toEqual('7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee')
|
|
26
|
-
expect(
|
|
27
|
-
curve.endo.lambda.toString(16)
|
|
28
|
-
).toEqual('5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72')
|
|
29
|
-
|
|
30
|
-
const k = new BigNumber('1234567890123456789012345678901234', 16)
|
|
31
|
-
const split = curve._endoSplit(k)
|
|
32
|
-
const testK = split.k1.add(split.k2.mul(curve.endo.lambda)).umod(curve.n)
|
|
33
|
-
|
|
34
|
-
expect(testK.toString(16)).toEqual(k.toString(16))
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
it('should compute this problematic secp256k1 multiplication', () => {
|
|
38
|
-
const curve = new Curve()
|
|
39
|
-
const g1 = curve.g // precomputed g
|
|
40
|
-
expect(g1.precomputed).toBeDefined()
|
|
41
|
-
const g2 = new Point(g1.getX(), g1.getY()) // not precomputed g
|
|
42
|
-
expect(g2.precomputed).toBeNull()
|
|
43
|
-
|
|
44
|
-
const a = new BigNumber('6d1229a6b24c2e775c062870ad26bc261051e0198c67203167273c7c62538846', 16)
|
|
45
|
-
const p1 = g1.mul(a)
|
|
46
|
-
const p2 = g2.mul(a)
|
|
47
|
-
|
|
48
|
-
expect(p1.eq(p2)).toBe(true)
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it('should not use fixed NAF when k is too large', () => {
|
|
52
|
-
const curve = new Curve()
|
|
53
|
-
const g1 = curve.g // precomputed g
|
|
54
|
-
expect(g1.precomputed).toBeDefined()
|
|
55
|
-
const g2 = new Point(g1.getX(), g1.getY()) // not precomputed g
|
|
56
|
-
expect(g2.precomputed).toBeNull()
|
|
57
|
-
|
|
58
|
-
const a = new BigNumber(
|
|
59
|
-
'6d1229a6b24c2e775c062870ad26bc26' +
|
|
60
|
-
'1051e0198c67203167273c7c6253884612345678',
|
|
61
|
-
16)
|
|
62
|
-
const p1 = g1.mul(a)
|
|
63
|
-
const p2 = g2.mul(a)
|
|
64
|
-
|
|
65
|
-
expect(p1.eq(p2)).toBe(true)
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('should not fail on secp256k1 regression', () => {
|
|
69
|
-
const curve = new Curve()
|
|
70
|
-
const k1 = new BigNumber('32efeba414cd0c830aed727749e816a01c471831536fd2fce28c56b54f5a3bb1', 16)
|
|
71
|
-
const k2 = new BigNumber('5f2e49b5d64e53f9811545434706cde4de528af97bfd49fde1f6cf792ee37a8c', 16)
|
|
72
|
-
|
|
73
|
-
let p1 = curve.g.mul(k1)
|
|
74
|
-
let p2 = curve.g.mul(k2)
|
|
75
|
-
|
|
76
|
-
// 2 + 2 + 1 = 2 + 1 + 2
|
|
77
|
-
const two = p2.dbl()
|
|
78
|
-
const five = two.dbl().add(p2)
|
|
79
|
-
const three = two.add(p2)
|
|
80
|
-
const maybeFive = three.add(two)
|
|
81
|
-
|
|
82
|
-
expect(maybeFive.eq(five)).toBe(true)
|
|
83
|
-
|
|
84
|
-
p1 = p1.mul(k2)
|
|
85
|
-
p2 = p2.mul(k1)
|
|
86
|
-
|
|
87
|
-
expect(p1.validate()).toBe(true)
|
|
88
|
-
expect(p2.validate()).toBe(true)
|
|
89
|
-
expect(p1.eq(p2)).toBe(true)
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
test('should correctly double the affine point on secp256k1', () => {
|
|
93
|
-
let bad: any = {
|
|
94
|
-
x: '026a2073b1ef6fab47ace18e60e728a05180a82755bbcec9a0abc08ad9f7a3d4',
|
|
95
|
-
y: '9cd8cb48c3281596139f147c1364a3ede88d3f310fdb0eb98c924e599ca1b3c9',
|
|
96
|
-
z: 'd78587ad45e4102f48b54b5d85598296e069ce6085002e169c6bad78ddc6d9bd'
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
let good: any = {
|
|
100
|
-
x: 'e7789226739ac2eb3c7ccb2a9a910066beeed86cdb4e0f8a7fee8eeb29dc7016',
|
|
101
|
-
y: '4b76b191fd6d47d07828ea965e275b76d0e3e0196cd5056d38384fbb819f9fcb',
|
|
102
|
-
z: 'cbf8d99056618ba132d6145b904eee1ce566e0feedb9595139c45f84e90cfa7d'
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// const curve = new Curve()
|
|
106
|
-
bad = new JPoint(bad.x, bad.y, bad.z)
|
|
107
|
-
good = new JPoint(good.x, good.y, good.z)
|
|
108
|
-
|
|
109
|
-
// They are the same points
|
|
110
|
-
expect(bad.add(good.neg()).isInfinity()).toBe(true)
|
|
111
|
-
|
|
112
|
-
// But doubling borks them out
|
|
113
|
-
expect(bad.dbl().add(good.dbl().neg()).isInfinity()).toBe(true)
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
test('should correctly handle scalar multiplication of zero', () => {
|
|
117
|
-
const curve = new Curve()
|
|
118
|
-
const p1 = curve.g.mul('0')
|
|
119
|
-
const p2 = p1.mul('2')
|
|
120
|
-
expect(p1.eq(p2)).toBe(true)
|
|
121
|
-
})
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
describe('Point codec', () => {
|
|
125
|
-
const makeShortTest = (definition: any): any => {
|
|
126
|
-
const curve = new Curve()
|
|
127
|
-
|
|
128
|
-
return () => {
|
|
129
|
-
const co = definition.coordinates
|
|
130
|
-
const p = new Point(co.x, co.y)
|
|
131
|
-
|
|
132
|
-
// Encodes as expected
|
|
133
|
-
expect(p.encode(false, 'hex')).toBe(definition.encoded)
|
|
134
|
-
expect(p.encode(true, 'hex')).toBe(definition.compactEncoded)
|
|
135
|
-
|
|
136
|
-
// Decodes as expected
|
|
137
|
-
expect(Point.fromString(definition.encoded).eq(p)).toBe(true)
|
|
138
|
-
expect(Point.fromString(definition.compactEncoded).eq(p)).toBe(true)
|
|
139
|
-
expect(Point.fromString(definition.hybrid).eq(p)).toBe(true)
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const shortPointEvenY = {
|
|
144
|
-
coordinates: {
|
|
145
|
-
x: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
146
|
-
y: '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'
|
|
147
|
-
},
|
|
148
|
-
compactEncoded:
|
|
149
|
-
'02' +
|
|
150
|
-
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
151
|
-
encoded:
|
|
152
|
-
'04' +
|
|
153
|
-
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' +
|
|
154
|
-
'483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
|
|
155
|
-
hybrid:
|
|
156
|
-
'06' +
|
|
157
|
-
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' +
|
|
158
|
-
'483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
const shortPointOddY = {
|
|
162
|
-
coordinates: {
|
|
163
|
-
x: 'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556',
|
|
164
|
-
y: 'ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297'
|
|
165
|
-
},
|
|
166
|
-
compactEncoded:
|
|
167
|
-
'03' +
|
|
168
|
-
'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556',
|
|
169
|
-
encoded:
|
|
170
|
-
'04' +
|
|
171
|
-
'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556' +
|
|
172
|
-
'ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297',
|
|
173
|
-
hybrid:
|
|
174
|
-
'07' +
|
|
175
|
-
'fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556' +
|
|
176
|
-
'ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297'
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
it('should throw when trying to decode random bytes', () => {
|
|
180
|
-
expect(() => {
|
|
181
|
-
Point.fromString(
|
|
182
|
-
'05' +
|
|
183
|
-
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
|
|
184
|
-
}).toThrow()
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
it('should be able to encode/decode a short curve point with even Y',
|
|
188
|
-
makeShortTest(shortPointEvenY))
|
|
189
|
-
|
|
190
|
-
it('should be able to encode/decode a short curve point with odd Y',
|
|
191
|
-
makeShortTest(shortPointOddY))
|
|
192
|
-
})
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import DRBG from '../../../dist/cjs/src/primitives/DRBG'
|
|
2
|
-
import DRBGVectors from './DRBG.vectors'
|
|
3
|
-
|
|
4
|
-
describe('Hmac_DRBG', () => {
|
|
5
|
-
describe('NIST vector', function () {
|
|
6
|
-
DRBGVectors.forEach(function (opt) {
|
|
7
|
-
it('should not fail at ' + opt.name, function () {
|
|
8
|
-
const drbg = new DRBG(opt.entropy, opt.nonce)
|
|
9
|
-
|
|
10
|
-
let last
|
|
11
|
-
for (let i = 0; i < opt.add.length; i++) {
|
|
12
|
-
last = drbg.generate(opt.expected.length / 2)
|
|
13
|
-
}
|
|
14
|
-
expect(last).toEqual(opt.expected)
|
|
15
|
-
})
|
|
16
|
-
})
|
|
17
|
-
})
|
|
18
|
-
})
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
export default [
|
|
2
|
-
{
|
|
3
|
-
name: '0',
|
|
4
|
-
entropy: 'ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488',
|
|
5
|
-
nonce: '659ba96c601dc69fc902940805ec0ca8',
|
|
6
|
-
pers: null,
|
|
7
|
-
add: [
|
|
8
|
-
null,
|
|
9
|
-
null
|
|
10
|
-
],
|
|
11
|
-
expected: 'e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8'
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
name: '1',
|
|
15
|
-
entropy: '79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3',
|
|
16
|
-
nonce: '3593259c092bef4129bc2c6c9e19f343',
|
|
17
|
-
pers: null,
|
|
18
|
-
add: [
|
|
19
|
-
null,
|
|
20
|
-
null
|
|
21
|
-
],
|
|
22
|
-
expected: 'cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37'
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: '2',
|
|
26
|
-
entropy: 'b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d',
|
|
27
|
-
nonce: '65cb27735d83c0708f72684ea58f7ee5',
|
|
28
|
-
pers: null,
|
|
29
|
-
add: [
|
|
30
|
-
null,
|
|
31
|
-
null
|
|
32
|
-
],
|
|
33
|
-
expected: '75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff'
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
name: '3',
|
|
37
|
-
entropy: '8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7',
|
|
38
|
-
nonce: 'c39d35052201bdcce4e127a04f04d644',
|
|
39
|
-
pers: null,
|
|
40
|
-
add: [
|
|
41
|
-
null,
|
|
42
|
-
null
|
|
43
|
-
],
|
|
44
|
-
expected: '62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5'
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
name: '4',
|
|
48
|
-
entropy: '74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a',
|
|
49
|
-
nonce: 'c36387a544a5f2b78007651a7b74b749',
|
|
50
|
-
pers: null,
|
|
51
|
-
add: [
|
|
52
|
-
null,
|
|
53
|
-
null
|
|
54
|
-
],
|
|
55
|
-
expected: 'b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: '5',
|
|
59
|
-
entropy: '4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f',
|
|
60
|
-
nonce: '7aed52d0016fcaef0b6492bc40bbe0e9',
|
|
61
|
-
pers: null,
|
|
62
|
-
add: [
|
|
63
|
-
null,
|
|
64
|
-
null
|
|
65
|
-
],
|
|
66
|
-
expected: 'a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967'
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
name: '6',
|
|
70
|
-
entropy: 'b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0',
|
|
71
|
-
nonce: 'e2c39b84629a3de5c301db5643af1c21',
|
|
72
|
-
pers: null,
|
|
73
|
-
add: [
|
|
74
|
-
null,
|
|
75
|
-
null
|
|
76
|
-
],
|
|
77
|
-
expected: 'fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff'
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: '7',
|
|
81
|
-
entropy: 'aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e',
|
|
82
|
-
nonce: '9504c3c0c4310c1c0746a036c91d9034',
|
|
83
|
-
pers: null,
|
|
84
|
-
add: [
|
|
85
|
-
null,
|
|
86
|
-
null
|
|
87
|
-
],
|
|
88
|
-
expected: '2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431'
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
name: '8',
|
|
92
|
-
entropy: 'b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6',
|
|
93
|
-
nonce: '24baf03599c10df6ef44065d715a93f7',
|
|
94
|
-
pers: null,
|
|
95
|
-
add: [
|
|
96
|
-
null,
|
|
97
|
-
null
|
|
98
|
-
],
|
|
99
|
-
expected: 'ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2'
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: '9',
|
|
103
|
-
entropy: '27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628',
|
|
104
|
-
nonce: '39cfe0210db2e7b0eb52a387476e7ea1',
|
|
105
|
-
pers: null,
|
|
106
|
-
add: [
|
|
107
|
-
null,
|
|
108
|
-
null
|
|
109
|
-
],
|
|
110
|
-
expected: 'e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a'
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
name: '10',
|
|
114
|
-
entropy: 'd7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5',
|
|
115
|
-
nonce: 'a72882773f78c2fc4878295840a53012',
|
|
116
|
-
pers: null,
|
|
117
|
-
add: [
|
|
118
|
-
null,
|
|
119
|
-
null
|
|
120
|
-
],
|
|
121
|
-
expected: '0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd'
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
name: '11',
|
|
125
|
-
entropy: '67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532',
|
|
126
|
-
nonce: 'e256d88497738a33923aa003a8d7845c',
|
|
127
|
-
pers: null,
|
|
128
|
-
add: [
|
|
129
|
-
null,
|
|
130
|
-
null
|
|
131
|
-
],
|
|
132
|
-
expected: 'b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f'
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
name: '12',
|
|
136
|
-
entropy: 'de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb',
|
|
137
|
-
nonce: 'd01f9002c407127bc3297a561d89b81d',
|
|
138
|
-
pers: null,
|
|
139
|
-
add: [
|
|
140
|
-
null,
|
|
141
|
-
null
|
|
142
|
-
],
|
|
143
|
-
expected: '64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7'
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
name: '13',
|
|
147
|
-
entropy: '4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7',
|
|
148
|
-
nonce: '7f3cce4af8c8ce3c45bdf23c6b181a00',
|
|
149
|
-
pers: null,
|
|
150
|
-
add: [
|
|
151
|
-
null,
|
|
152
|
-
null
|
|
153
|
-
],
|
|
154
|
-
expected: '320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf'
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
name: '14',
|
|
158
|
-
entropy: '451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665',
|
|
159
|
-
nonce: '2f28e6ee8de5879db1eccd58c994e5f0',
|
|
160
|
-
pers: null,
|
|
161
|
-
add: [
|
|
162
|
-
null,
|
|
163
|
-
null
|
|
164
|
-
],
|
|
165
|
-
expected: '3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd'
|
|
166
|
-
}
|
|
167
|
-
]
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/* eslint-env jest */
|
|
2
|
-
import PublicKey from '../../../dist/cjs/src/primitives/PublicKey'
|
|
3
|
-
import PrivateKey from '../../../dist/cjs/src/primitives/PrivateKey'
|
|
4
|
-
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
5
|
-
|
|
6
|
-
describe('ECDH', function () {
|
|
7
|
-
it('should work with secp256k1', function () {
|
|
8
|
-
const s1 = PrivateKey.fromRandom()
|
|
9
|
-
const s2 = PrivateKey.fromRandom()
|
|
10
|
-
let sh1 = s1.deriveSharedSecret(s2.toPublicKey())
|
|
11
|
-
let sh2 = s2.deriveSharedSecret(s1.toPublicKey())
|
|
12
|
-
expect(sh1.toString()).toEqual(sh2.toString())
|
|
13
|
-
sh1 = s1.deriveSharedSecret(PublicKey.fromString(s2.toPublicKey().toDER()))
|
|
14
|
-
sh2 = s2.deriveSharedSecret(PublicKey.fromString(s1.toPublicKey().toDER()))
|
|
15
|
-
expect(sh1.toString()).toEqual(sh2.toString())
|
|
16
|
-
sh1 = s1.deriveSharedSecret(PublicKey.fromPrivateKey(s2))
|
|
17
|
-
sh2 = s2.deriveSharedSecret(PublicKey.fromPrivateKey(s1))
|
|
18
|
-
expect(sh1.toString()).toEqual(sh2.toString())
|
|
19
|
-
})
|
|
20
|
-
it('should be able to prevent a twist attack for secp256k1', () => {
|
|
21
|
-
const bob = PrivateKey.fromRandom()
|
|
22
|
-
// This is a bad point that shouldn't be able to be passed to derive.
|
|
23
|
-
// If a bad point can be passed it's possible to perform a twist attack.
|
|
24
|
-
const mallory = new PublicKey(new BigNumber(14), new BigNumber(16))
|
|
25
|
-
expect(() => {
|
|
26
|
-
bob.deriveSharedSecret(mallory)
|
|
27
|
-
}).toThrow(new Error(
|
|
28
|
-
'Public key not valid for ECDH secret derivation'
|
|
29
|
-
))
|
|
30
|
-
})
|
|
31
|
-
})
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import * as ECDSA from '../../../dist/cjs/src/primitives/ECDSA'
|
|
2
|
-
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
3
|
-
import Curve from '../../../dist/cjs/src/primitives/Curve'
|
|
4
|
-
import Signature from '../../../dist/cjs/src/primitives/Signature'
|
|
5
|
-
|
|
6
|
-
const msg = new BigNumber('deadbeef', 16)
|
|
7
|
-
const key = new BigNumber('1e5edd45de6d22deebef4596b80444ffcc29143839c1dce18db470e25b4be7b5', 16)
|
|
8
|
-
const curve = new Curve()
|
|
9
|
-
const pub = curve.g.mul(key)
|
|
10
|
-
const wrongPub = curve.g.mul(new BigNumber(33))
|
|
11
|
-
|
|
12
|
-
describe('ECDSA', () => {
|
|
13
|
-
it('should sign and verify', () => {
|
|
14
|
-
const signature = ECDSA.sign(msg, key)
|
|
15
|
-
expect(ECDSA.verify(msg, signature, pub)).toBeTruthy()
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('should encode and decode with DER', () => {
|
|
19
|
-
const signature = ECDSA.sign(msg, key)
|
|
20
|
-
const encoded = signature.toDER()
|
|
21
|
-
expect(encoded.length).toBe(71)
|
|
22
|
-
const decoded = Signature.fromDER(encoded)
|
|
23
|
-
expect(decoded.r.toString(16)).toEqual(signature.r.toString(16))
|
|
24
|
-
expect(decoded.s.toString(16)).toEqual(signature.s.toString(16))
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it('should encode and decode with hex DER', () => {
|
|
28
|
-
const signature = ECDSA.sign(msg, key)
|
|
29
|
-
const encoded = signature.toDER('hex')
|
|
30
|
-
expect(encoded.length).toBe(142)
|
|
31
|
-
const decoded = Signature.fromDER(encoded, 'hex')
|
|
32
|
-
expect(decoded.r.toString(16)).toEqual(signature.r.toString(16))
|
|
33
|
-
expect(decoded.s.toString(16)).toEqual(signature.s.toString(16))
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
it('should have `signature.s <= keys.ec.nh`', () => {
|
|
37
|
-
// key.sign(msg, options)
|
|
38
|
-
const sign = ECDSA.sign(msg, key, true)
|
|
39
|
-
expect(sign.s.cmp(curve.n.ushrn(1)) <= 0).toBeTruthy()
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('should support `options.k`', () => {
|
|
43
|
-
const sign = ECDSA.sign(msg, key, undefined, new BigNumber(1358))
|
|
44
|
-
expect(ECDSA.verify(msg, sign, pub)).toBeTruthy()
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('should not verify an incorrectly signed message', () => {
|
|
48
|
-
const wrongMessage = new BigNumber('BA5AABBE1AA9B6EC1E2ADB2DF99699344345678901234567890ABCDEFABCDEF02', 16)
|
|
49
|
-
const signature = ECDSA.sign(msg, key)
|
|
50
|
-
const result = ECDSA.verify(wrongMessage, signature, pub)
|
|
51
|
-
expect(result).toBe(false)
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
it('should not verify signature with wrong public key', () => {
|
|
55
|
-
const signature = ECDSA.sign(msg, key)
|
|
56
|
-
expect(ECDSA.verify(msg, signature, wrongPub)).toBeFalsy()
|
|
57
|
-
})
|
|
58
|
-
})
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/* eslint-env jest */
|
|
2
|
-
import { SHA256HMAC } from '../../../dist/cjs/src/primitives/Hash'
|
|
3
|
-
|
|
4
|
-
describe('HMAC', function () {
|
|
5
|
-
describe('mixed test vector', function () {
|
|
6
|
-
test({
|
|
7
|
-
name: 'nist 1',
|
|
8
|
-
key: '00010203 04050607 08090A0B 0C0D0E0F' +
|
|
9
|
-
'10111213 14151617 18191A1B 1C1D1E1F 20212223 24252627' +
|
|
10
|
-
'28292A2B 2C2D2E2F 30313233 34353637 38393A3B 3C3D3E3F',
|
|
11
|
-
msg: 'Sample message for keylen=blocklen',
|
|
12
|
-
res: '8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62'
|
|
13
|
-
})
|
|
14
|
-
test({
|
|
15
|
-
name: 'nist 2',
|
|
16
|
-
key: '00010203 04050607' +
|
|
17
|
-
'08090A0B 0C0D0E0F 10111213 14151617 18191A1B 1C1D1E1F',
|
|
18
|
-
msg: 'Sample message for keylen<blocklen',
|
|
19
|
-
res: 'a28cf43130ee696a98f14a37678b56bcfcbdd9e5cf69717fecf5480f0ebdf790'
|
|
20
|
-
})
|
|
21
|
-
test({
|
|
22
|
-
name: 'nist 3',
|
|
23
|
-
key: '00010203' +
|
|
24
|
-
'04050607 08090A0B 0C0D0E0F 10111213 14151617 18191A1B' +
|
|
25
|
-
'1C1D1E1F 20212223 24252627 28292A2B 2C2D2E2F 30313233' +
|
|
26
|
-
'34353637 38393A3B 3C3D3E3F 40414243 44454647 48494A4B' +
|
|
27
|
-
'4C4D4E4F 50515253 54555657 58595A5B 5C5D5E5F 60616263',
|
|
28
|
-
msg: 'Sample message for keylen=blocklen',
|
|
29
|
-
res: 'bdccb6c72ddeadb500ae768386cb38cc41c63dbb0878ddb9c7a38a431b78378d'
|
|
30
|
-
})
|
|
31
|
-
test({
|
|
32
|
-
name: 'nist 4',
|
|
33
|
-
key: '00' +
|
|
34
|
-
'01020304 05060708 090A0B0C 0D0E0F10 11121314 15161718' +
|
|
35
|
-
'191A1B1C 1D1E1F20 21222324 25262728 292A2B2C 2D2E2F30',
|
|
36
|
-
msg: 'Sample message for keylen<blocklen, with truncated tag',
|
|
37
|
-
res: '27a8b157839efeac98df070b331d593618ddb985d403c0c786d23b5d132e57c7'
|
|
38
|
-
})
|
|
39
|
-
test({
|
|
40
|
-
name: 'regression 1',
|
|
41
|
-
key: '48f38d0c6a344959cc94502b7b5e8dffb6a5f41795d9066fc9a649557167ee2f',
|
|
42
|
-
msg: '1d495eef7761b65dccd0a983d2d7204fea28b5c81f1758046e062eb043755ea1',
|
|
43
|
-
msgEnc: 'hex',
|
|
44
|
-
res: 'cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655'
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
function test (opt): void {
|
|
48
|
-
it(`should not fail at ${opt.name as string}`, function (): void {
|
|
49
|
-
let h = new SHA256HMAC(opt.key)
|
|
50
|
-
expect(h.update(opt.msg, opt.msgEnc).digest('hex')).toEqual(opt.res)
|
|
51
|
-
h = h = new SHA256HMAC(opt.key)
|
|
52
|
-
expect(h
|
|
53
|
-
.update(opt.msg.slice(0, 10), opt.msgEnc)
|
|
54
|
-
.update(opt.msg.slice(10), opt.msgEnc)
|
|
55
|
-
.digest('hex')).toEqual(opt.res)
|
|
56
|
-
})
|
|
57
|
-
}
|
|
58
|
-
})
|
|
59
|
-
})
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/* eslint-env jest */
|
|
2
|
-
import * as hash from '../../../dist/cjs/src/primitives/Hash'
|
|
3
|
-
import * as crypto from 'crypto'
|
|
4
|
-
import PBKDF2Vectors from './PBKDF2.vectors'
|
|
5
|
-
import { toArray, toHex } from '../../../dist/cjs/src/primitives/utils'
|
|
6
|
-
|
|
7
|
-
describe('Hash', function () {
|
|
8
|
-
function test(Hash, cases): void {
|
|
9
|
-
for (let i = 0; i < cases.length; i++) {
|
|
10
|
-
const msg = cases[i][0]
|
|
11
|
-
const res = cases[i][1]
|
|
12
|
-
const enc = cases[i][2]
|
|
13
|
-
|
|
14
|
-
let dgst = new Hash().update(msg, enc).digest('hex')
|
|
15
|
-
expect(dgst).toEqual(res)
|
|
16
|
-
|
|
17
|
-
// Split message
|
|
18
|
-
dgst = new Hash().update(msg.slice(0, 2), enc)
|
|
19
|
-
.update(msg.slice(2), enc)
|
|
20
|
-
.digest('hex')
|
|
21
|
-
expect(dgst).toEqual(res)
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
it('should support sha256', function () {
|
|
26
|
-
test(hash.SHA256, [
|
|
27
|
-
['abc',
|
|
28
|
-
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'],
|
|
29
|
-
['abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
|
30
|
-
'248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'],
|
|
31
|
-
['deadbeef',
|
|
32
|
-
'5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953',
|
|
33
|
-
'hex']
|
|
34
|
-
])
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
it('should support ripemd160', function () {
|
|
38
|
-
test(hash.RIPEMD160, [
|
|
39
|
-
['', '9c1185a5c5e9fc54612808977ee8f548b2258d31'],
|
|
40
|
-
['abc',
|
|
41
|
-
'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc'],
|
|
42
|
-
['message digest',
|
|
43
|
-
'5d0689ef49d2fae572b881b123a85ffa21595f36'],
|
|
44
|
-
['abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
|
45
|
-
'12a053384a9c0c88e405a06c27dcf49ada62eb2b'],
|
|
46
|
-
['ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
|
|
47
|
-
'b0e20b6e3116640286ed3a87a5713079b21f5189']
|
|
48
|
-
])
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it('should support sha1', function () {
|
|
52
|
-
test(hash.SHA1, [
|
|
53
|
-
['',
|
|
54
|
-
'da39a3ee5e6b4b0d3255bfef95601890afd80709'],
|
|
55
|
-
['abc',
|
|
56
|
-
'a9993e364706816aba3e25717850c26c9cd0d89d'],
|
|
57
|
-
['abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
|
58
|
-
'84983e441c3bd26ebaae4aa1f95129e5e54670f1'],
|
|
59
|
-
['deadbeef',
|
|
60
|
-
'd78f8bb992a56a597f6c7a1fb918bb78271367eb',
|
|
61
|
-
'hex']
|
|
62
|
-
])
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it('should support sha512', function () {
|
|
66
|
-
test(hash.SHA512, [
|
|
67
|
-
['abc',
|
|
68
|
-
'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a' +
|
|
69
|
-
'2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f'
|
|
70
|
-
],
|
|
71
|
-
[
|
|
72
|
-
'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' +
|
|
73
|
-
'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu',
|
|
74
|
-
'8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018' +
|
|
75
|
-
'501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909'
|
|
76
|
-
]
|
|
77
|
-
])
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
it('handles utf8 in strings just like crypto', function () {
|
|
81
|
-
test(hash.SHA256, [
|
|
82
|
-
'hello', // one byte per character
|
|
83
|
-
'привет', // two bytes per character
|
|
84
|
-
'您好', // three bytes per character
|
|
85
|
-
'👋', // four bytes per character
|
|
86
|
-
'hello привет 您好 👋!!!' // mixed character lengths
|
|
87
|
-
].map(str => [str, crypto
|
|
88
|
-
.createHash('sha256')
|
|
89
|
-
.update(str)
|
|
90
|
-
.digest('hex')]))
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
describe('PBKDF2 vectors', () => {
|
|
94
|
-
for (let i = 0; i < PBKDF2Vectors.length; i++) {
|
|
95
|
-
let v = PBKDF2Vectors[i]
|
|
96
|
-
let key, salt
|
|
97
|
-
if (v.keyUint8Array) {
|
|
98
|
-
key = v.keyUint8Array
|
|
99
|
-
}
|
|
100
|
-
if (v.key) {
|
|
101
|
-
key = toArray(v.key, 'utf8')
|
|
102
|
-
}
|
|
103
|
-
if (v.keyHex) {
|
|
104
|
-
key = toArray(v.keyHex, 'hex')
|
|
105
|
-
}
|
|
106
|
-
if (v.saltUint8Array) {
|
|
107
|
-
salt = v.saltUint8Array
|
|
108
|
-
}
|
|
109
|
-
if (v.salt) {
|
|
110
|
-
salt = toArray(v.salt, 'utf8')
|
|
111
|
-
}
|
|
112
|
-
if (v.saltHex) {
|
|
113
|
-
salt = toArray(v.saltHex, 'hex')
|
|
114
|
-
}
|
|
115
|
-
it(`Passes PBKDF2 vector ${i}`, () => {
|
|
116
|
-
const output = hash.pbkdf2(key, salt, v.iterations, v.dkLen)
|
|
117
|
-
expect(toHex(output)).toEqual(v.results.sha512)
|
|
118
|
-
})
|
|
119
|
-
}
|
|
120
|
-
})
|
|
121
|
-
})
|