@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,572 +0,0 @@
|
|
|
1
|
-
/* global describe, it */
|
|
2
|
-
|
|
3
|
-
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
4
|
-
import * as fixtures from './BigNumber.fixtures'
|
|
5
|
-
|
|
6
|
-
describe('BN.js/Arithmetic', () => {
|
|
7
|
-
describe('.add()', () => {
|
|
8
|
-
it('should add numbers', () => {
|
|
9
|
-
expect(new BigNumber(14).add(new BigNumber(26)).toString(16)).toBe('28')
|
|
10
|
-
const k = new BigNumber(0x1234)
|
|
11
|
-
let r = k
|
|
12
|
-
|
|
13
|
-
for (let i = 0; i < 257; i++) {
|
|
14
|
-
r = r.add(k)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
expect(r.toString(16)).toBe('125868')
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it('should handle carry properly (in-place)', () => {
|
|
21
|
-
const k = new BigNumber('abcdefabcdefabcdef', 16)
|
|
22
|
-
const r = new BigNumber('deadbeef', 16)
|
|
23
|
-
|
|
24
|
-
for (let i = 0; i < 257; i++) {
|
|
25
|
-
r.iadd(k)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
expect(r.toString(16)).toBe('ac79bd9b79be7a277bde')
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
it('should properly do positive + negative', () => {
|
|
32
|
-
let a = new BigNumber('abcd', 16)
|
|
33
|
-
let b = new BigNumber('-abce', 16)
|
|
34
|
-
|
|
35
|
-
expect(a.iadd(b).toString(16)).toBe('-1')
|
|
36
|
-
|
|
37
|
-
a = new BigNumber('abcd', 16)
|
|
38
|
-
b = new BigNumber('-abce', 16)
|
|
39
|
-
|
|
40
|
-
expect(a.add(b).toString(16)).toBe('-1')
|
|
41
|
-
expect(b.add(a).toString(16)).toBe('-1')
|
|
42
|
-
})
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
describe('.iaddn()', () => {
|
|
46
|
-
it('should allow a sign change', () => {
|
|
47
|
-
const a = new BigNumber(-100)
|
|
48
|
-
expect(a.negative).toBe(1)
|
|
49
|
-
|
|
50
|
-
a.iaddn(200)
|
|
51
|
-
|
|
52
|
-
expect(a.negative).toBe(0)
|
|
53
|
-
expect(a.toString()).toBe('100')
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
it('should add negative number', () => {
|
|
57
|
-
const a = new BigNumber(-100)
|
|
58
|
-
expect(a.negative).toBe(1)
|
|
59
|
-
|
|
60
|
-
a.iaddn(-200)
|
|
61
|
-
|
|
62
|
-
expect(a.toString()).toBe('-300')
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it('should allow neg + pos with big number', () => {
|
|
66
|
-
const a = new BigNumber('-1000000000', 10)
|
|
67
|
-
expect(a.negative).toBe(1)
|
|
68
|
-
|
|
69
|
-
a.iaddn(200)
|
|
70
|
-
|
|
71
|
-
expect(a.toString()).toBe('-999999800')
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
it('should carry limb', () => {
|
|
75
|
-
const a = new BigNumber('3ffffff', 16)
|
|
76
|
-
|
|
77
|
-
expect(a.iaddn(1).toString(16)).toBe('4000000')
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
it('should throw error with num eq 0x4000000', () => {
|
|
81
|
-
expect(() => new BigNumber(0).iaddn(0x4000000)).toThrow('num is too large')
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('should reset sign if value equal to value in instance', () => {
|
|
85
|
-
const a = new BigNumber(-1)
|
|
86
|
-
expect(a.addn(1).toString()).toBe('0')
|
|
87
|
-
})
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
describe('.sub()', () => {
|
|
91
|
-
it('should subtract small numbers', () => {
|
|
92
|
-
expect(new BigNumber(26).sub(new BigNumber(14)).toString(16)).toBe('c')
|
|
93
|
-
expect(new BigNumber(14).sub(new BigNumber(26)).toString(16)).toBe('-c')
|
|
94
|
-
expect(new BigNumber(26).sub(new BigNumber(26)).toString(16)).toBe('0')
|
|
95
|
-
expect(new BigNumber(-26).sub(new BigNumber(26)).toString(16)).toBe('-34')
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
const a = new BigNumber(
|
|
99
|
-
'31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' +
|
|
100
|
-
'a7d8daef41395491e2',
|
|
101
|
-
16)
|
|
102
|
-
const b = new BigNumber(
|
|
103
|
-
'6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000',
|
|
104
|
-
16)
|
|
105
|
-
const r = new BigNumber(
|
|
106
|
-
'31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' +
|
|
107
|
-
'76281f34583ddb91e2',
|
|
108
|
-
16)
|
|
109
|
-
|
|
110
|
-
it('should subtract big numbers', () => {
|
|
111
|
-
expect(a.sub(b).cmp(r)).toBe(0)
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
it('should subtract numbers in place', () => {
|
|
115
|
-
expect(b.clone().isub(a).neg().cmp(r)).toBe(0)
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
it('should subtract with carry', () => {
|
|
119
|
-
let a = new BigNumber('12345', 16)
|
|
120
|
-
let b = new BigNumber('1000000000000', 16)
|
|
121
|
-
expect(a.isub(b).toString(16)).toBe('-fffffffedcbb')
|
|
122
|
-
|
|
123
|
-
a = new BigNumber('12345', 16)
|
|
124
|
-
b = new BigNumber('1000000000000', 16)
|
|
125
|
-
expect(b.isub(a).toString(16)).toBe('fffffffedcbb')
|
|
126
|
-
})
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
describe('.isubn()', () => {
|
|
130
|
-
it('should subtract negative number', () => {
|
|
131
|
-
const r = new BigNumber(
|
|
132
|
-
'7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16)
|
|
133
|
-
expect(r.isubn(-1).toString(16)).toBe(
|
|
134
|
-
'7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c')
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
it('should work for positive numbers', () => {
|
|
138
|
-
const a = new BigNumber(-100)
|
|
139
|
-
expect(a.negative).toBe(1)
|
|
140
|
-
|
|
141
|
-
a.isubn(200)
|
|
142
|
-
expect(a.negative).toBe(1)
|
|
143
|
-
expect(a.toString()).toBe('-300')
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
it('should not allow a sign change', () => {
|
|
147
|
-
const a = new BigNumber(-100)
|
|
148
|
-
expect(a.negative).toBe(1)
|
|
149
|
-
|
|
150
|
-
a.isubn(-200)
|
|
151
|
-
expect(a.negative).toBe(0)
|
|
152
|
-
expect(a.toString()).toBe('100')
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
it('should change sign on small numbers at 0', () => {
|
|
156
|
-
const a = new BigNumber(0).subn(2)
|
|
157
|
-
expect(a.toString()).toBe('-2')
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
it('should change sign on small numbers at 1', () => {
|
|
161
|
-
const a = new BigNumber(1).subn(2)
|
|
162
|
-
expect(a.toString()).toBe('-1')
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
it('should throw error with num eq 0x4000000', () => {
|
|
166
|
-
expect(() => new BigNumber(0).isubn(0x4000000)).toThrow('Assertion failed')
|
|
167
|
-
})
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
function testMethod (name, mul): void {
|
|
171
|
-
describe(name, () => {
|
|
172
|
-
it('should multiply numbers of different signs', () => {
|
|
173
|
-
const offsets = [
|
|
174
|
-
1, // smallMulTo
|
|
175
|
-
250, // comb10MulTo
|
|
176
|
-
1000, // bigMulTo
|
|
177
|
-
15000 // jumboMulTo
|
|
178
|
-
]
|
|
179
|
-
|
|
180
|
-
for (let i = 0; i < offsets.length; ++i) {
|
|
181
|
-
const x = new BigNumber(1).ishln(offsets[i])
|
|
182
|
-
|
|
183
|
-
expect(mul(x, x).isNeg()).toBe(false)
|
|
184
|
-
expect(mul(x, x.neg()).isNeg()).toBe(true)
|
|
185
|
-
expect(mul(x.neg(), x).isNeg()).toBe(true)
|
|
186
|
-
expect(mul(x.neg(), x.neg()).isNeg()).toBe(false)
|
|
187
|
-
}
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
it('should multiply with carry', () => {
|
|
191
|
-
const n = new BigNumber(0x1001)
|
|
192
|
-
let r = n
|
|
193
|
-
|
|
194
|
-
for (let i = 0; i < 4; i++) {
|
|
195
|
-
r = mul(r, n)
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
expect(r.toString(16)).toBe('100500a00a005001')
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
it('should correctly multiply big numbers', () => {
|
|
202
|
-
const n = new BigNumber(
|
|
203
|
-
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
204
|
-
16
|
|
205
|
-
)
|
|
206
|
-
expect(
|
|
207
|
-
mul(n, n).toString(16)
|
|
208
|
-
).toBe(
|
|
209
|
-
'39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' +
|
|
210
|
-
'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' +
|
|
211
|
-
'978a8bd8acaa40'
|
|
212
|
-
)
|
|
213
|
-
expect(
|
|
214
|
-
mul(mul(n, n), n).toString(16)
|
|
215
|
-
).toBe(
|
|
216
|
-
'1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' +
|
|
217
|
-
'46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' +
|
|
218
|
-
'0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' +
|
|
219
|
-
'907322dc330562697d0d600'
|
|
220
|
-
)
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
it('should multiply neg number on 0', () => {
|
|
224
|
-
expect(
|
|
225
|
-
mul(new BigNumber('-100000000000'), new BigNumber('3').div(new BigNumber('4')))
|
|
226
|
-
.toString(16)
|
|
227
|
-
).toBe('0')
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
it('should regress mul big numbers', () => {
|
|
231
|
-
const qs = fixtures.dhGroups.p17.qs
|
|
232
|
-
const q = new BigNumber(fixtures.dhGroups.p17.q, 16)
|
|
233
|
-
expect(mul(q, q).toString(16)).toBe(qs)
|
|
234
|
-
})
|
|
235
|
-
})
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
testMethod('.mul()', function (x, y) {
|
|
239
|
-
return BigNumber.prototype.mul.apply(x, [y])
|
|
240
|
-
})
|
|
241
|
-
|
|
242
|
-
describe('.imul()', () => {
|
|
243
|
-
it('should multiply numbers in-place', () => {
|
|
244
|
-
let a = new BigNumber('abcdef01234567890abcd', 16)
|
|
245
|
-
let b = new BigNumber('deadbeefa551edebabba8', 16)
|
|
246
|
-
let c = a.mul(b)
|
|
247
|
-
|
|
248
|
-
expect(a.imul(b).toString(16)).toBe(c.toString(16))
|
|
249
|
-
|
|
250
|
-
a = new BigNumber('abcdef01234567890abcd214a25123f512361e6d236', 16)
|
|
251
|
-
b = new BigNumber('deadbeefa551edebabba8121234fd21bac0341324dd', 16)
|
|
252
|
-
c = a.mul(b)
|
|
253
|
-
|
|
254
|
-
expect(a.imul(b).toString(16)).toBe(c.toString(16))
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
it('should multiply by 0', () => {
|
|
258
|
-
const a = new BigNumber('abcdef01234567890abcd', 16)
|
|
259
|
-
const b = new BigNumber('0', 16)
|
|
260
|
-
const c = a.mul(b)
|
|
261
|
-
|
|
262
|
-
expect(a.imul(b).toString(16)).toBe(c.toString(16))
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
it('should regress mul big numbers in-place', () => {
|
|
266
|
-
const qs = fixtures.dhGroups.p17.qs
|
|
267
|
-
const q = new BigNumber(fixtures.dhGroups.p17.q, 16)
|
|
268
|
-
expect(q.isqr().toString(16)).toBe(qs)
|
|
269
|
-
})
|
|
270
|
-
})
|
|
271
|
-
|
|
272
|
-
describe('.muln()', () => {
|
|
273
|
-
it('should multiply number by small number', () => {
|
|
274
|
-
const a = new BigNumber('abcdef01234567890abcd', 16)
|
|
275
|
-
const b = new BigNumber('dead', 16)
|
|
276
|
-
const c = a.mul(b)
|
|
277
|
-
|
|
278
|
-
expect(a.muln(0xdead).toString(16)).toBe(c.toString(16))
|
|
279
|
-
})
|
|
280
|
-
|
|
281
|
-
it('should throw error with num eq 0x4000000', () => {
|
|
282
|
-
expect(() => new BigNumber(0).imuln(0x4000000)).toThrow(/^Assertion failed$/)
|
|
283
|
-
})
|
|
284
|
-
|
|
285
|
-
it('should negate number if number is negative', () => {
|
|
286
|
-
const a = new BigNumber('dead', 16)
|
|
287
|
-
expect(a.clone().imuln(-1).toString(16)).toBe(a.clone().neg().toString(16))
|
|
288
|
-
expect(a.clone().muln(-1).toString(16)).toBe(a.clone().neg().toString(16))
|
|
289
|
-
|
|
290
|
-
const b = new BigNumber('dead', 16)
|
|
291
|
-
expect(b.clone().imuln(-42).toString(16)).toBe(b.clone().neg().muln(42).toString(16))
|
|
292
|
-
expect(b.clone().muln(-42).toString(16)).toBe(b.clone().neg().muln(42).toString(16))
|
|
293
|
-
})
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
describe('.pow()', () => {
|
|
297
|
-
it('should raise number to the power', () => {
|
|
298
|
-
const a = new BigNumber('ab', 16)
|
|
299
|
-
const b = new BigNumber('13', 10)
|
|
300
|
-
const c = a.pow(b)
|
|
301
|
-
|
|
302
|
-
expect(c.toString(16)).toBe('15963da06977df51909c9ba5b')
|
|
303
|
-
})
|
|
304
|
-
})
|
|
305
|
-
|
|
306
|
-
describe('.div()', () => {
|
|
307
|
-
it('should divide small numbers (<=26 bits)', () => {
|
|
308
|
-
expect(new BigNumber('256').div(new BigNumber(10)).toString(10)).toEqual('25')
|
|
309
|
-
expect(new BigNumber('-256').div(new BigNumber(10)).toString(10)).toEqual('-25')
|
|
310
|
-
expect(new BigNumber('256').div(new BigNumber(-10)).toString(10)).toEqual('-25')
|
|
311
|
-
expect(new BigNumber('-256').div(new BigNumber(-10)).toString(10)).toEqual('25')
|
|
312
|
-
|
|
313
|
-
expect(new BigNumber('10').div(new BigNumber(256)).toString(10)).toEqual('0')
|
|
314
|
-
expect(new BigNumber('-10').div(new BigNumber(256)).toString(10)).toEqual('0')
|
|
315
|
-
expect(new BigNumber('10').div(new BigNumber(-256)).toString(10)).toEqual('0')
|
|
316
|
-
expect(new BigNumber('-10').div(new BigNumber(-256)).toString(10)).toEqual('0')
|
|
317
|
-
})
|
|
318
|
-
|
|
319
|
-
it('should divide large numbers (>53 bits)', () => {
|
|
320
|
-
expect(new BigNumber('1222222225255589').div(new BigNumber('611111124969028')).toString(10)).toEqual('1')
|
|
321
|
-
expect(new BigNumber('-1222222225255589').div(new BigNumber('611111124969028')).toString(10)).toEqual('-1')
|
|
322
|
-
expect(new BigNumber('1222222225255589').div(new BigNumber('-611111124969028')).toString(10)).toEqual('-1')
|
|
323
|
-
expect(new BigNumber('-1222222225255589').div(new BigNumber('-611111124969028')).toString(10)).toEqual('1')
|
|
324
|
-
|
|
325
|
-
expect(new BigNumber('611111124969028').div(new BigNumber('1222222225255589')).toString(10)).toEqual('0')
|
|
326
|
-
expect(new BigNumber('-611111124969028').div(new BigNumber('1222222225255589')).toString(10)).toEqual('0')
|
|
327
|
-
expect(new BigNumber('611111124969028').div(new BigNumber('-1222222225255589')).toString(10)).toEqual('0')
|
|
328
|
-
expect(new BigNumber('-611111124969028').div(new BigNumber('-1222222225255589')).toString(10)).toEqual('0')
|
|
329
|
-
})
|
|
330
|
-
|
|
331
|
-
it('should divide numbers', () => {
|
|
332
|
-
expect(new BigNumber('69527932928').div(new BigNumber('16974594')).toString(16)).toEqual('fff')
|
|
333
|
-
expect(new BigNumber('-69527932928').div(new BigNumber('16974594')).toString(16)).toEqual('-fff')
|
|
334
|
-
|
|
335
|
-
const b = new BigNumber('39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9978a8bd8acaa40', 16)
|
|
336
|
-
const n = new BigNumber('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16)
|
|
337
|
-
expect(b.div(n).toString(16)).toEqual(n.toString(16))
|
|
338
|
-
|
|
339
|
-
expect(new BigNumber('1').div(new BigNumber('-5')).toString(10)).toEqual('0')
|
|
340
|
-
})
|
|
341
|
-
|
|
342
|
-
it('should not fail on regression after moving to _wordDiv', function () {
|
|
343
|
-
// Regression after moving to word div
|
|
344
|
-
let p = new BigNumber(
|
|
345
|
-
'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',
|
|
346
|
-
16)
|
|
347
|
-
let a = new BigNumber(
|
|
348
|
-
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
|
349
|
-
16)
|
|
350
|
-
const as = a.sqr()
|
|
351
|
-
expect(
|
|
352
|
-
as.div(p).toString(16)).toEqual(
|
|
353
|
-
'39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9')
|
|
354
|
-
|
|
355
|
-
p = new BigNumber(
|
|
356
|
-
'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff',
|
|
357
|
-
16)
|
|
358
|
-
a = new BigNumber(
|
|
359
|
-
'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' +
|
|
360
|
-
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
|
|
361
|
-
16)
|
|
362
|
-
expect(
|
|
363
|
-
a.div(p).toString(16)).toEqual(
|
|
364
|
-
'ffffffff00000002000000000000000000000001000000000000000000000001')
|
|
365
|
-
})
|
|
366
|
-
})
|
|
367
|
-
|
|
368
|
-
describe('.idivn()', () => {
|
|
369
|
-
it('should divide numbers in-place', () => {
|
|
370
|
-
expect(new BigNumber('10', 16).idivn(3).toString(16)).toEqual('5')
|
|
371
|
-
expect(new BigNumber('10', 16).idivn(-3).toString(16)).toEqual('-5')
|
|
372
|
-
expect(new BigNumber('12', 16).idivn(3).toString(16)).toEqual('6')
|
|
373
|
-
expect(new BigNumber('10000000000000000').idivn(3).toString(10)).toEqual('3333333333333333')
|
|
374
|
-
expect(new BigNumber('100000000000000000000000000000').idivn(3).toString(10)).toEqual('33333333333333333333333333333')
|
|
375
|
-
|
|
376
|
-
const t = new BigNumber(3)
|
|
377
|
-
expect(new BigNumber('12345678901234567890123456', 16).idivn(3).toString(16)).toEqual(new BigNumber('12345678901234567890123456', 16).div(t).toString(16))
|
|
378
|
-
})
|
|
379
|
-
})
|
|
380
|
-
|
|
381
|
-
describe('.divRound()', () => {
|
|
382
|
-
it('should divide numbers with rounding', () => {
|
|
383
|
-
expect(new BigNumber(9).divRound(new BigNumber(20)).toString(10)).toEqual('0')
|
|
384
|
-
expect(new BigNumber(10).divRound(new BigNumber(20)).toString(10)).toEqual('1')
|
|
385
|
-
expect(new BigNumber(150).divRound(new BigNumber(20)).toString(10)).toEqual('8')
|
|
386
|
-
expect(new BigNumber(149).divRound(new BigNumber(20)).toString(10)).toEqual('7')
|
|
387
|
-
expect(new BigNumber(149).divRound(new BigNumber(17)).toString(10)).toEqual('9')
|
|
388
|
-
expect(new BigNumber(144).divRound(new BigNumber(17)).toString(10)).toEqual('8')
|
|
389
|
-
expect(new BigNumber(-144).divRound(new BigNumber(17)).toString(10)).toEqual('-8')
|
|
390
|
-
})
|
|
391
|
-
|
|
392
|
-
it('should return 1 on exact division', () => {
|
|
393
|
-
expect(new BigNumber(144).divRound(new BigNumber(144)).toString(10)).toEqual('1')
|
|
394
|
-
})
|
|
395
|
-
})
|
|
396
|
-
|
|
397
|
-
describe('.mod()', () => {
|
|
398
|
-
it('should modulo small numbers (<=26 bits)', () => {
|
|
399
|
-
expect(new BigNumber('256').mod(new BigNumber(10)).toString(10)).toEqual('6')
|
|
400
|
-
expect(new BigNumber('-256').mod(new BigNumber(10)).toString(10)).toEqual('-6')
|
|
401
|
-
expect(new BigNumber('256').mod(new BigNumber(-10)).toString(10)).toEqual('6')
|
|
402
|
-
expect(new BigNumber('-256').mod(new BigNumber(-10)).toString(10)).toEqual('-6')
|
|
403
|
-
|
|
404
|
-
expect(new BigNumber('10').mod(new BigNumber(256)).toString(10)).toEqual('10')
|
|
405
|
-
expect(new BigNumber('-10').mod(new BigNumber(256)).toString(10)).toEqual('-10')
|
|
406
|
-
expect(new BigNumber('10').mod(new BigNumber(-256)).toString(10)).toEqual('10')
|
|
407
|
-
expect(new BigNumber('-10').mod(new BigNumber(-256)).toString(10)).toEqual('-10')
|
|
408
|
-
})
|
|
409
|
-
|
|
410
|
-
it('should modulo large numbers (>53 bits)', () => {
|
|
411
|
-
expect(new BigNumber('1222222225255589').mod(new BigNumber('611111124969028')).toString(10)).toEqual('611111100286561')
|
|
412
|
-
expect(new BigNumber('-1222222225255589').mod(new BigNumber('611111124969028')).toString(10)).toEqual('-611111100286561')
|
|
413
|
-
expect(new BigNumber('1222222225255589').mod(new BigNumber('-611111124969028')).toString(10)).toEqual('611111100286561')
|
|
414
|
-
expect(new BigNumber('-1222222225255589').mod(new BigNumber('-611111124969028')).toString(10)).toEqual('-611111100286561')
|
|
415
|
-
|
|
416
|
-
expect(new BigNumber('611111124969028').mod(new BigNumber('1222222225255589')).toString(10)).toEqual('611111124969028')
|
|
417
|
-
expect(new BigNumber('-611111124969028').mod(new BigNumber('1222222225255589')).toString(10)).toEqual('-611111124969028')
|
|
418
|
-
expect(new BigNumber('611111124969028').mod(new BigNumber('-1222222225255589')).toString(10)).toEqual('611111124969028')
|
|
419
|
-
expect(new BigNumber('-611111124969028').mod(new BigNumber('-1222222225255589')).toString(10)).toEqual('-611111124969028')
|
|
420
|
-
})
|
|
421
|
-
|
|
422
|
-
it('should mod numbers', () => {
|
|
423
|
-
expect(new BigNumber('10').mod(new BigNumber(256)).toString(16)).toEqual('a')
|
|
424
|
-
expect(new BigNumber('69527932928').mod(new BigNumber('16974594')).toString(16)).toEqual('102f302')
|
|
425
|
-
|
|
426
|
-
expect(new BigNumber(178).div(new BigNumber(10)).toNumber()).toEqual(17)
|
|
427
|
-
expect(new BigNumber(178).mod(new BigNumber(10)).toNumber()).toEqual(8)
|
|
428
|
-
expect(new BigNumber(178).umod(new BigNumber(10)).toNumber()).toEqual(8)
|
|
429
|
-
|
|
430
|
-
expect(new BigNumber(-178).div(new BigNumber(10)).toNumber()).toEqual(-17)
|
|
431
|
-
expect(new BigNumber(-178).mod(new BigNumber(10)).toNumber()).toEqual(-8)
|
|
432
|
-
expect(new BigNumber(-178).umod(new BigNumber(10)).toNumber()).toEqual(2)
|
|
433
|
-
|
|
434
|
-
expect(new BigNumber(178).div(new BigNumber(-10)).toNumber()).toEqual(-17)
|
|
435
|
-
expect(new BigNumber(178).mod(new BigNumber(-10)).toNumber()).toEqual(8)
|
|
436
|
-
expect(new BigNumber(178).umod(new BigNumber(-10)).toNumber()).toEqual(8)
|
|
437
|
-
|
|
438
|
-
expect(new BigNumber(-178).div(new BigNumber(-10)).toNumber()).toEqual(17)
|
|
439
|
-
expect(new BigNumber(-178).mod(new BigNumber(-10)).toNumber()).toEqual(-8)
|
|
440
|
-
expect(new BigNumber(-178).umod(new BigNumber(-10)).toNumber()).toEqual(2)
|
|
441
|
-
|
|
442
|
-
expect(new BigNumber(-4).div(new BigNumber(-3)).toNumber()).toEqual(1)
|
|
443
|
-
expect(new BigNumber(-4).mod(new BigNumber(-3)).toNumber()).toEqual(-1)
|
|
444
|
-
|
|
445
|
-
expect(new BigNumber(-4).mod(new BigNumber(3)).toNumber()).toEqual(-1)
|
|
446
|
-
expect(new BigNumber(-4).umod(new BigNumber(-3)).toNumber()).toEqual(2)
|
|
447
|
-
|
|
448
|
-
const p = new BigNumber(
|
|
449
|
-
'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff',
|
|
450
|
-
16)
|
|
451
|
-
const a = new BigNumber(
|
|
452
|
-
'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' +
|
|
453
|
-
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
|
|
454
|
-
16)
|
|
455
|
-
expect(a.mod(p).toString(16)).toEqual('0')
|
|
456
|
-
})
|
|
457
|
-
|
|
458
|
-
it('should properly carry the sign inside division', () => {
|
|
459
|
-
const a = new BigNumber('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex')
|
|
460
|
-
const b = new BigNumber(
|
|
461
|
-
'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe',
|
|
462
|
-
'hex')
|
|
463
|
-
|
|
464
|
-
expect(a.mul(b).mod(a).cmpn(0)).toEqual(0)
|
|
465
|
-
})
|
|
466
|
-
})
|
|
467
|
-
|
|
468
|
-
describe('.modrn()', () => {
|
|
469
|
-
it('should act like .mod() on small numbers', () => {
|
|
470
|
-
expect(new BigNumber('10', 16).modrn(256).toString(16)).toEqual('10')
|
|
471
|
-
expect(new BigNumber('10', 16).modrn(-256).toString(16)).toEqual('-10')
|
|
472
|
-
expect(new BigNumber('100', 16).modrn(256).toString(16)).toEqual('0')
|
|
473
|
-
expect(new BigNumber('1001', 16).modrn(256).toString(16)).toEqual('1')
|
|
474
|
-
expect(new BigNumber('100000000001', 16).modrn(256).toString(16)).toEqual('1')
|
|
475
|
-
expect(new BigNumber('100000000001', 16).modrn(257).toString(16)).toEqual(
|
|
476
|
-
new BigNumber('100000000001', 16).mod(new BigNumber(257)).toString(16))
|
|
477
|
-
expect(new BigNumber('123456789012', 16).modrn(3).toString(16)).toEqual(
|
|
478
|
-
new BigNumber('123456789012', 16).mod(new BigNumber(3)).toString(16))
|
|
479
|
-
})
|
|
480
|
-
})
|
|
481
|
-
|
|
482
|
-
describe('.abs()', () => {
|
|
483
|
-
it('should return absolute value', () => {
|
|
484
|
-
expect(new BigNumber(0x1001).abs().toString()).toEqual('4097')
|
|
485
|
-
expect(new BigNumber(-0x1001).abs().toString()).toEqual('4097')
|
|
486
|
-
expect(new BigNumber('ffffffff', 16).abs().toString()).toEqual('4294967295')
|
|
487
|
-
})
|
|
488
|
-
})
|
|
489
|
-
|
|
490
|
-
describe('.invm()', () => {
|
|
491
|
-
it('should invert relatively-prime numbers', () => {
|
|
492
|
-
const p = new BigNumber(257)
|
|
493
|
-
let a = new BigNumber(3)
|
|
494
|
-
let b = a.invm(p)
|
|
495
|
-
expect(a.mul(b).mod(p).toString(16)).toEqual('1')
|
|
496
|
-
|
|
497
|
-
const p192 = new BigNumber(
|
|
498
|
-
'fffffffffffffffffffffffffffffffeffffffffffffffff',
|
|
499
|
-
16)
|
|
500
|
-
a = new BigNumber('deadbeef', 16)
|
|
501
|
-
b = a.invm(p192)
|
|
502
|
-
expect(a.mul(b).mod(p192).toString(16)).toEqual('1')
|
|
503
|
-
|
|
504
|
-
const phi = new BigNumber('872d9b030ba368706b68932cf07a0e0c', 16)
|
|
505
|
-
const e = new BigNumber(65537)
|
|
506
|
-
const d = e.invm(phi)
|
|
507
|
-
expect(e.mul(d).mod(phi).toString(16)).toEqual('1')
|
|
508
|
-
|
|
509
|
-
a = new BigNumber('5')
|
|
510
|
-
b = new BigNumber('6')
|
|
511
|
-
const r = a.invm(b)
|
|
512
|
-
expect(r.mul(a).mod(b).toString(16)).toEqual('1')
|
|
513
|
-
})
|
|
514
|
-
})
|
|
515
|
-
|
|
516
|
-
describe('.gcd()', () => {
|
|
517
|
-
it('should return GCD', () => {
|
|
518
|
-
expect(new BigNumber(3).gcd(new BigNumber(2)).toString(10)).toEqual('1')
|
|
519
|
-
expect(new BigNumber(18).gcd(new BigNumber(12)).toString(10)).toEqual('6')
|
|
520
|
-
expect(new BigNumber(-18).gcd(new BigNumber(12)).toString(10)).toEqual('6')
|
|
521
|
-
expect(new BigNumber(-18).gcd(new BigNumber(-12)).toString(10)).toEqual('6')
|
|
522
|
-
expect(new BigNumber(-18).gcd(new BigNumber(0)).toString(10)).toEqual('18')
|
|
523
|
-
expect(new BigNumber(0).gcd(new BigNumber(-18)).toString(10)).toEqual('18')
|
|
524
|
-
expect(new BigNumber(2).gcd(new BigNumber(0)).toString(10)).toEqual('2')
|
|
525
|
-
expect(new BigNumber(0).gcd(new BigNumber(3)).toString(10)).toEqual('3')
|
|
526
|
-
expect(new BigNumber(0).gcd(new BigNumber(0)).toString(10)).toEqual('0')
|
|
527
|
-
})
|
|
528
|
-
})
|
|
529
|
-
|
|
530
|
-
describe('.egcd()', () => {
|
|
531
|
-
it('should return EGCD', () => {
|
|
532
|
-
expect(new BigNumber(3).egcd(new BigNumber(2)).gcd.toString(10)).toEqual('1')
|
|
533
|
-
expect(new BigNumber(18).egcd(new BigNumber(12)).gcd.toString(10)).toEqual('6')
|
|
534
|
-
expect(new BigNumber(-18).egcd(new BigNumber(12)).gcd.toString(10)).toEqual('6')
|
|
535
|
-
expect(new BigNumber(0).egcd(new BigNumber(12)).gcd.toString(10)).toEqual('12')
|
|
536
|
-
})
|
|
537
|
-
it('should not allow 0 input', () => {
|
|
538
|
-
expect(() => {
|
|
539
|
-
new BigNumber(1).egcd(0 as unknown as BigNumber)
|
|
540
|
-
}).toThrow(/^p must not be negative$/)
|
|
541
|
-
})
|
|
542
|
-
it('should not allow negative input', () => {
|
|
543
|
-
expect(() => {
|
|
544
|
-
new BigNumber(1).egcd(-1 as unknown as BigNumber)
|
|
545
|
-
}).toThrow(/^p must not be negative$/)
|
|
546
|
-
})
|
|
547
|
-
})
|
|
548
|
-
|
|
549
|
-
describe('BN.max(a, b)', () => {
|
|
550
|
-
it('should return maximum', () => {
|
|
551
|
-
expect(BigNumber.max(new BigNumber(3), new BigNumber(2)).toString(16)).toEqual('3')
|
|
552
|
-
expect(BigNumber.max(new BigNumber(2), new BigNumber(3)).toString(16)).toEqual('3')
|
|
553
|
-
expect(BigNumber.max(new BigNumber(2), new BigNumber(2)).toString(16)).toEqual('2')
|
|
554
|
-
expect(BigNumber.max(new BigNumber(2), new BigNumber(-2)).toString(16)).toEqual('2')
|
|
555
|
-
})
|
|
556
|
-
})
|
|
557
|
-
|
|
558
|
-
describe('BN.min(a, b)', () => {
|
|
559
|
-
it('should return minimum', () => {
|
|
560
|
-
expect(BigNumber.min(new BigNumber(3), new BigNumber(2)).toString(16)).toEqual('2')
|
|
561
|
-
expect(BigNumber.min(new BigNumber(2), new BigNumber(3)).toString(16)).toEqual('2')
|
|
562
|
-
expect(BigNumber.min(new BigNumber(2), new BigNumber(2)).toString(16)).toEqual('2')
|
|
563
|
-
expect(BigNumber.min(new BigNumber(2), new BigNumber(-2)).toString(16)).toEqual('-2')
|
|
564
|
-
})
|
|
565
|
-
})
|
|
566
|
-
|
|
567
|
-
describe('BN.ineg', () => {
|
|
568
|
-
it('shouldn\'t change sign for zero', () => {
|
|
569
|
-
expect(new BigNumber(0).ineg().toString(10)).toEqual('0')
|
|
570
|
-
})
|
|
571
|
-
})
|
|
572
|
-
})
|