@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.
Files changed (123) hide show
  1. package/README.md +25 -3
  2. package/package.json +9 -5
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  4. package/.github/ISSUE_TEMPLATE/discussion.md +0 -24
  5. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -23
  6. package/CHANGELOG.md +0 -72
  7. package/CONTRIBUTING.md +0 -85
  8. package/ROADMAP.md +0 -3
  9. package/docs/getting-started/COMMONJS.md +0 -94
  10. package/docs/getting-started/REACT-TS.md +0 -131
  11. package/docs/getting-started/TS-NODE.md +0 -106
  12. package/docs/getting-started/VUE.md +0 -103
  13. package/jest.config.js +0 -6
  14. package/mod.ts +0 -8
  15. package/src/compat/BSM.ts +0 -51
  16. package/src/compat/ECIES.ts +0 -557
  17. package/src/compat/HD.ts +0 -348
  18. package/src/compat/Mnemonic.ts +0 -295
  19. package/src/compat/__tests/BSM.test.ts +0 -38
  20. package/src/compat/__tests/ECIES.test.ts +0 -90
  21. package/src/compat/__tests/HD.test.ts +0 -405
  22. package/src/compat/__tests/Mnemonic.test.ts +0 -177
  23. package/src/compat/__tests/Mnemonic.vectors.ts +0 -172
  24. package/src/compat/bip-39-wordlist-en.ts +0 -2053
  25. package/src/compat/index.ts +0 -4
  26. package/src/messages/EncryptedMessage.ts +0 -70
  27. package/src/messages/SignedMessage.ts +0 -87
  28. package/src/messages/__tests/EncryptedMessage.test.ts +0 -36
  29. package/src/messages/__tests/SignedMessage.test.ts +0 -53
  30. package/src/messages/index.ts +0 -2
  31. package/src/primitives/AESGCM.ts +0 -479
  32. package/src/primitives/BasePoint.ts +0 -21
  33. package/src/primitives/BigNumber.ts +0 -4619
  34. package/src/primitives/Curve.ts +0 -1163
  35. package/src/primitives/DRBG.ts +0 -102
  36. package/src/primitives/ECDSA.ts +0 -164
  37. package/src/primitives/Hash.ts +0 -1420
  38. package/src/primitives/JacobianPoint.ts +0 -410
  39. package/src/primitives/K256.ts +0 -116
  40. package/src/primitives/Mersenne.ts +0 -123
  41. package/src/primitives/MontgomoryMethod.ts +0 -160
  42. package/src/primitives/Point.ts +0 -852
  43. package/src/primitives/PrivateKey.ts +0 -195
  44. package/src/primitives/PublicKey.ts +0 -154
  45. package/src/primitives/Random.ts +0 -55
  46. package/src/primitives/ReductionContext.ts +0 -528
  47. package/src/primitives/Signature.ts +0 -235
  48. package/src/primitives/SymmetricKey.ts +0 -75
  49. package/src/primitives/TransactionSignature.ts +0 -189
  50. package/src/primitives/__tests/AESGCM.test.ts +0 -338
  51. package/src/primitives/__tests/BRC42.private.vectors.ts +0 -33
  52. package/src/primitives/__tests/BRC42.public.vectors.ts +0 -33
  53. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +0 -572
  54. package/src/primitives/__tests/BigNumber.binary.test.ts +0 -203
  55. package/src/primitives/__tests/BigNumber.constructor.test.ts +0 -176
  56. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +0 -18
  57. package/src/primitives/__tests/BigNumber.fixtures.ts +0 -264
  58. package/src/primitives/__tests/BigNumber.serializers.test.ts +0 -157
  59. package/src/primitives/__tests/BigNumber.utils.test.ts +0 -347
  60. package/src/primitives/__tests/Curve.unit.test.ts +0 -192
  61. package/src/primitives/__tests/DRBG.test.ts +0 -18
  62. package/src/primitives/__tests/DRBG.vectors.ts +0 -167
  63. package/src/primitives/__tests/ECDH.test.ts +0 -31
  64. package/src/primitives/__tests/ECDSA.test.ts +0 -58
  65. package/src/primitives/__tests/HMAC.test.ts +0 -59
  66. package/src/primitives/__tests/Hash.test.ts +0 -121
  67. package/src/primitives/__tests/PBKDF2.vectors.ts +0 -119
  68. package/src/primitives/__tests/PrivateKey.test.ts +0 -17
  69. package/src/primitives/__tests/PublicKey.test.ts +0 -66
  70. package/src/primitives/__tests/Random.test.ts +0 -14
  71. package/src/primitives/__tests/Reader.test.ts +0 -296
  72. package/src/primitives/__tests/ReductionContext.test.ts +0 -279
  73. package/src/primitives/__tests/SymmetricKey.test.ts +0 -58
  74. package/src/primitives/__tests/SymmetricKey.vectors.ts +0 -40
  75. package/src/primitives/__tests/Writer.test.ts +0 -198
  76. package/src/primitives/__tests/sighash.vectors.ts +0 -3503
  77. package/src/primitives/__tests/utils.test.ts +0 -108
  78. package/src/primitives/index.ts +0 -8
  79. package/src/primitives/utils.ts +0 -665
  80. package/src/script/LockingScript.ts +0 -30
  81. package/src/script/OP.ts +0 -219
  82. package/src/script/Script.ts +0 -426
  83. package/src/script/ScriptChunk.ts +0 -7
  84. package/src/script/ScriptTemplate.ts +0 -36
  85. package/src/script/Spend.ts +0 -1379
  86. package/src/script/UnlockingScript.ts +0 -30
  87. package/src/script/__tests/Script.test.ts +0 -369
  88. package/src/script/__tests/Spend.test.ts +0 -248
  89. package/src/script/__tests/script.invalid.vectors.ts +0 -925
  90. package/src/script/__tests/script.valid.vectors.ts +0 -1120
  91. package/src/script/__tests/scriptFromVector.ts +0 -42
  92. package/src/script/__tests/spend.valid.vectors.ts +0 -2288
  93. package/src/script/index.ts +0 -7
  94. package/src/script/templates/P2PKH.ts +0 -109
  95. package/src/script/templates/RPuzzle.ts +0 -140
  96. package/src/script/templates/index.ts +0 -2
  97. package/src/transaction/Broadcaster.ts +0 -42
  98. package/src/transaction/ChainTracker.ts +0 -22
  99. package/src/transaction/FeeModel.ts +0 -13
  100. package/src/transaction/MerklePath.ts +0 -259
  101. package/src/transaction/Transaction.ts +0 -602
  102. package/src/transaction/TransactionInput.ts +0 -63
  103. package/src/transaction/TransactionOutput.ts +0 -37
  104. package/src/transaction/__tests/MerklePath.test.ts +0 -181
  105. package/src/transaction/__tests/Transaction.test.ts +0 -413
  106. package/src/transaction/__tests/bigtx.vectors.ts +0 -4
  107. package/src/transaction/__tests/bump.invalid.vectors.ts +0 -8
  108. package/src/transaction/__tests/bump.valid.vectors.ts +0 -4
  109. package/src/transaction/__tests/tx.invalid.vectors.ts +0 -281
  110. package/src/transaction/__tests/tx.valid.vectors.ts +0 -364
  111. package/src/transaction/broadcasters/ARC.ts +0 -106
  112. package/src/transaction/broadcasters/__tests/ARC.test.ts +0 -115
  113. package/src/transaction/broadcasters/index.ts +0 -1
  114. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +0 -71
  115. package/src/transaction/fee-models/index.ts +0 -1
  116. package/src/transaction/index.ts +0 -6
  117. package/ts2md.json +0 -5
  118. package/tsconfig.base.json +0 -26
  119. package/tsconfig.cjs.json +0 -11
  120. package/tsconfig.eslint.json +0 -12
  121. package/tsconfig.esm.json +0 -9
  122. package/tsconfig.json +0 -17
  123. 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
- })