@bitcoin-js/tiny-secp256k1-asmjs 2.2.3 → 2.2.5
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 +1 -0
- package/lib/cjs/index.cjs +26 -21
- package/lib/cjs/secp256k1.asm.cjs +19960 -20338
- package/lib/cjs/validate.cjs +6 -1
- package/lib/cjs/validate_error.cjs +15 -1
- package/lib/index.js +26 -21
- package/lib/secp256k1.asm.js +19960 -20338
- package/lib/validate.d.ts +1 -0
- package/lib/validate.js +4 -0
- package/lib/validate_error.d.ts +6 -0
- package/lib/validate_error.js +13 -0
- package/lib/wasm_loader.d.ts +4 -4
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -340,6 +340,7 @@ Returns the ECDSA public key from a signature if it can be recovered, `null` oth
|
|
|
340
340
|
|
|
341
341
|
- `Expected Signature` if `signature` has any (r, s) values not in range `(0...order - 1]`
|
|
342
342
|
- `Bad Recovery Id` if `recid & 2 !== 0` and `signature` has any r value not in range `(0...P - N - 1]`
|
|
343
|
+
- `Bad Recovery Id` if `recoveryId` is not an integer from 0 through 3
|
|
343
344
|
- `Expected Hash` if `h` is not 256-bit
|
|
344
345
|
|
|
345
346
|
|
package/lib/cjs/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.verifySchnorr = exports.recover = exports.verify = exports.signSchnorr = exports.signRecoverable = exports.sign = exports.xOnlyPointAddTweakCheck = exports.xOnlyPointAddTweak = exports.privateNegate = exports.privateSub = exports.privateAdd = exports.pointMultiply = exports.xOnlyPointFromPoint = exports.xOnlyPointFromScalar = exports.pointFromScalar = exports.pointCompress = exports.pointAddScalar = exports.pointAdd = exports.isPrivate = exports.isXOnlyPoint = exports.isPointCompressed = exports.isPoint = exports.__initializeContext = void 0;
|
|
4
4
|
const uint8array_tools_1 = require("uint8array-tools");
|
|
5
5
|
const validate = require("./validate.cjs");
|
|
6
|
+
const validate_error_js_1 = require("./validate_error.cjs");
|
|
6
7
|
const wasm_loader_js_1 = require("./wasm_loader.cjs");
|
|
7
8
|
const WASM_BUFFER = new Uint8Array(wasm_loader_js_1.default.memory.buffer);
|
|
8
9
|
const WASM_PRIVATE_KEY_PTR = wasm_loader_js_1.default.PRIVATE_INPUT.value;
|
|
@@ -34,7 +35,7 @@ function assumeCompression(compressed, p) {
|
|
|
34
35
|
function _isPoint(p) {
|
|
35
36
|
try {
|
|
36
37
|
PUBLIC_KEY_INPUT.set(p);
|
|
37
|
-
return wasm_loader_js_1.default.isPoint(p.length) === 1;
|
|
38
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.isPoint(p.length)) === 1;
|
|
38
39
|
}
|
|
39
40
|
finally {
|
|
40
41
|
PUBLIC_KEY_INPUT.fill(0);
|
|
@@ -67,7 +68,7 @@ function pointAdd(pA, pB, compressed) {
|
|
|
67
68
|
try {
|
|
68
69
|
PUBLIC_KEY_INPUT.set(pA);
|
|
69
70
|
PUBLIC_KEY_INPUT2.set(pB);
|
|
70
|
-
return wasm_loader_js_1.default.pointAdd(pA.length, pB.length, outputlen) === 1
|
|
71
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.pointAdd(pA.length, pB.length, outputlen)) === 1
|
|
71
72
|
? PUBLIC_KEY_INPUT.slice(0, outputlen)
|
|
72
73
|
: null;
|
|
73
74
|
}
|
|
@@ -84,7 +85,7 @@ function pointAddScalar(p, tweak, compressed) {
|
|
|
84
85
|
try {
|
|
85
86
|
PUBLIC_KEY_INPUT.set(p);
|
|
86
87
|
TWEAK_INPUT.set(tweak);
|
|
87
|
-
return wasm_loader_js_1.default.pointAddScalar(p.length, outputlen) === 1
|
|
88
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.pointAddScalar(p.length, outputlen)) === 1
|
|
88
89
|
? PUBLIC_KEY_INPUT.slice(0, outputlen)
|
|
89
90
|
: null;
|
|
90
91
|
}
|
|
@@ -99,7 +100,7 @@ function pointCompress(p, compressed) {
|
|
|
99
100
|
const outputlen = assumeCompression(compressed, p);
|
|
100
101
|
try {
|
|
101
102
|
PUBLIC_KEY_INPUT.set(p);
|
|
102
|
-
wasm_loader_js_1.default.pointCompress(p.length, outputlen);
|
|
103
|
+
(0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.pointCompress(p.length, outputlen));
|
|
103
104
|
return PUBLIC_KEY_INPUT.slice(0, outputlen);
|
|
104
105
|
}
|
|
105
106
|
finally {
|
|
@@ -112,7 +113,7 @@ function pointFromScalar(d, compressed) {
|
|
|
112
113
|
const outputlen = assumeCompression(compressed);
|
|
113
114
|
try {
|
|
114
115
|
PRIVATE_KEY_INPUT.set(d);
|
|
115
|
-
return wasm_loader_js_1.default.pointFromScalar(outputlen) === 1
|
|
116
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.pointFromScalar(outputlen)) === 1
|
|
116
117
|
? PUBLIC_KEY_INPUT.slice(0, outputlen)
|
|
117
118
|
: null;
|
|
118
119
|
}
|
|
@@ -126,7 +127,7 @@ function xOnlyPointFromScalar(d) {
|
|
|
126
127
|
validate.validatePrivate(d);
|
|
127
128
|
try {
|
|
128
129
|
PRIVATE_KEY_INPUT.set(d);
|
|
129
|
-
wasm_loader_js_1.default.xOnlyPointFromScalar();
|
|
130
|
+
(0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.xOnlyPointFromScalar());
|
|
130
131
|
return X_ONLY_PUBLIC_KEY_INPUT.slice(0, validate.X_ONLY_PUBLIC_KEY_SIZE);
|
|
131
132
|
}
|
|
132
133
|
finally {
|
|
@@ -139,7 +140,7 @@ function xOnlyPointFromPoint(p) {
|
|
|
139
140
|
validate.validatePoint(p);
|
|
140
141
|
try {
|
|
141
142
|
PUBLIC_KEY_INPUT.set(p);
|
|
142
|
-
wasm_loader_js_1.default.xOnlyPointFromPoint(p.length);
|
|
143
|
+
(0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.xOnlyPointFromPoint(p.length));
|
|
143
144
|
return X_ONLY_PUBLIC_KEY_INPUT.slice(0, validate.X_ONLY_PUBLIC_KEY_SIZE);
|
|
144
145
|
}
|
|
145
146
|
finally {
|
|
@@ -155,7 +156,7 @@ function pointMultiply(p, tweak, compressed) {
|
|
|
155
156
|
try {
|
|
156
157
|
PUBLIC_KEY_INPUT.set(p);
|
|
157
158
|
TWEAK_INPUT.set(tweak);
|
|
158
|
-
return wasm_loader_js_1.default.pointMultiply(p.length, outputlen) === 1
|
|
159
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.pointMultiply(p.length, outputlen)) === 1
|
|
159
160
|
? PUBLIC_KEY_INPUT.slice(0, outputlen)
|
|
160
161
|
: null;
|
|
161
162
|
}
|
|
@@ -171,7 +172,7 @@ function privateAdd(d, tweak) {
|
|
|
171
172
|
try {
|
|
172
173
|
PRIVATE_KEY_INPUT.set(d);
|
|
173
174
|
TWEAK_INPUT.set(tweak);
|
|
174
|
-
return wasm_loader_js_1.default.privateAdd() === 1
|
|
175
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.privateAdd()) === 1
|
|
175
176
|
? PRIVATE_KEY_INPUT.slice(0, validate.PRIVATE_KEY_SIZE)
|
|
176
177
|
: null;
|
|
177
178
|
}
|
|
@@ -192,7 +193,7 @@ function privateSub(d, tweak) {
|
|
|
192
193
|
try {
|
|
193
194
|
PRIVATE_KEY_INPUT.set(d);
|
|
194
195
|
TWEAK_INPUT.set(tweak);
|
|
195
|
-
return wasm_loader_js_1.default.privateSub() === 1
|
|
196
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.privateSub()) === 1
|
|
196
197
|
? PRIVATE_KEY_INPUT.slice(0, validate.PRIVATE_KEY_SIZE)
|
|
197
198
|
: null;
|
|
198
199
|
}
|
|
@@ -206,7 +207,7 @@ function privateNegate(d) {
|
|
|
206
207
|
validate.validatePrivate(d);
|
|
207
208
|
try {
|
|
208
209
|
PRIVATE_KEY_INPUT.set(d);
|
|
209
|
-
wasm_loader_js_1.default.privateNegate();
|
|
210
|
+
(0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.privateNegate());
|
|
210
211
|
return PRIVATE_KEY_INPUT.slice(0, validate.PRIVATE_KEY_SIZE);
|
|
211
212
|
}
|
|
212
213
|
finally {
|
|
@@ -220,8 +221,8 @@ function xOnlyPointAddTweak(p, tweak) {
|
|
|
220
221
|
try {
|
|
221
222
|
X_ONLY_PUBLIC_KEY_INPUT.set(p);
|
|
222
223
|
TWEAK_INPUT.set(tweak);
|
|
223
|
-
const parity = wasm_loader_js_1.default.xOnlyPointAddTweak();
|
|
224
|
-
return parity !==
|
|
224
|
+
const parity = (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.xOnlyPointAddTweak());
|
|
225
|
+
return parity !== 42
|
|
225
226
|
? {
|
|
226
227
|
parity,
|
|
227
228
|
xOnlyPubkey: X_ONLY_PUBLIC_KEY_INPUT.slice(0, validate.X_ONLY_PUBLIC_KEY_SIZE),
|
|
@@ -246,10 +247,11 @@ function xOnlyPointAddTweakCheck(point, tweak, resultToCheck, tweakParity) {
|
|
|
246
247
|
X_ONLY_PUBLIC_KEY_INPUT2.set(resultToCheck);
|
|
247
248
|
TWEAK_INPUT.set(tweak);
|
|
248
249
|
if (hasParity) {
|
|
249
|
-
return wasm_loader_js_1.default.xOnlyPointAddTweakCheck(tweakParity) === 1;
|
|
250
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.xOnlyPointAddTweakCheck(tweakParity)) === 1;
|
|
250
251
|
}
|
|
251
252
|
else {
|
|
252
|
-
wasm_loader_js_1.default.xOnlyPointAddTweak()
|
|
253
|
+
if ((0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.xOnlyPointAddTweak()) === 42)
|
|
254
|
+
return false;
|
|
253
255
|
const newKey = X_ONLY_PUBLIC_KEY_INPUT.slice(0, validate.X_ONLY_PUBLIC_KEY_SIZE);
|
|
254
256
|
return (0, uint8array_tools_1.compare)(newKey, resultToCheck) === 0;
|
|
255
257
|
}
|
|
@@ -270,7 +272,7 @@ function sign(h, d, e) {
|
|
|
270
272
|
PRIVATE_KEY_INPUT.set(d);
|
|
271
273
|
if (e !== undefined)
|
|
272
274
|
EXTRA_DATA_INPUT.set(e);
|
|
273
|
-
wasm_loader_js_1.default.sign(e === undefined ? 0 : 1);
|
|
275
|
+
(0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.sign(e === undefined ? 0 : 1));
|
|
274
276
|
return SIGNATURE_INPUT.slice(0, validate.SIGNATURE_SIZE);
|
|
275
277
|
}
|
|
276
278
|
finally {
|
|
@@ -291,7 +293,7 @@ function signRecoverable(h, d, e) {
|
|
|
291
293
|
PRIVATE_KEY_INPUT.set(d);
|
|
292
294
|
if (e !== undefined)
|
|
293
295
|
EXTRA_DATA_INPUT.set(e);
|
|
294
|
-
const recoveryId = wasm_loader_js_1.default.signRecoverable(e === undefined ? 0 : 1);
|
|
296
|
+
const recoveryId = (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.signRecoverable(e === undefined ? 0 : 1));
|
|
295
297
|
const signature = SIGNATURE_INPUT.slice(0, validate.SIGNATURE_SIZE);
|
|
296
298
|
return {
|
|
297
299
|
signature,
|
|
@@ -316,7 +318,7 @@ function signSchnorr(h, d, e) {
|
|
|
316
318
|
PRIVATE_KEY_INPUT.set(d);
|
|
317
319
|
if (e !== undefined)
|
|
318
320
|
EXTRA_DATA_INPUT.set(e);
|
|
319
|
-
wasm_loader_js_1.default.signSchnorr(e === undefined ? 0 : 1);
|
|
321
|
+
(0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.signSchnorr(e === undefined ? 0 : 1));
|
|
320
322
|
return SIGNATURE_INPUT.slice(0, validate.SIGNATURE_SIZE);
|
|
321
323
|
}
|
|
322
324
|
finally {
|
|
@@ -336,7 +338,9 @@ function verify(h, Q, signature, strict = false) {
|
|
|
336
338
|
HASH_INPUT.set(h);
|
|
337
339
|
PUBLIC_KEY_INPUT.set(Q);
|
|
338
340
|
SIGNATURE_INPUT.set(signature);
|
|
339
|
-
return wasm_loader_js_1.default.verify(Q.length, strict === true ? 1 : 0) === 1
|
|
341
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.verify(Q.length, strict === true ? 1 : 0)) === 1
|
|
342
|
+
? true
|
|
343
|
+
: false;
|
|
340
344
|
}
|
|
341
345
|
finally {
|
|
342
346
|
HASH_INPUT.fill(0);
|
|
@@ -348,6 +352,7 @@ exports.verify = verify;
|
|
|
348
352
|
function recover(h, signature, recoveryId, compressed = false) {
|
|
349
353
|
validate.validateHash(h);
|
|
350
354
|
validate.validateSignature(signature);
|
|
355
|
+
validate.validateRecoveryId(recoveryId);
|
|
351
356
|
validate.validateSignatureNonzeroRS(signature);
|
|
352
357
|
if (recoveryId & 2) {
|
|
353
358
|
validate.validateSigrPMinusN(signature);
|
|
@@ -357,7 +362,7 @@ function recover(h, signature, recoveryId, compressed = false) {
|
|
|
357
362
|
try {
|
|
358
363
|
HASH_INPUT.set(h);
|
|
359
364
|
SIGNATURE_INPUT.set(signature);
|
|
360
|
-
return wasm_loader_js_1.default.recover(outputlen, recoveryId) === 1
|
|
365
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.recover(outputlen, recoveryId)) === 1
|
|
361
366
|
? PUBLIC_KEY_INPUT.slice(0, outputlen)
|
|
362
367
|
: null;
|
|
363
368
|
}
|
|
@@ -376,7 +381,7 @@ function verifySchnorr(h, Q, signature) {
|
|
|
376
381
|
HASH_INPUT.set(h);
|
|
377
382
|
X_ONLY_PUBLIC_KEY_INPUT.set(Q);
|
|
378
383
|
SIGNATURE_INPUT.set(signature);
|
|
379
|
-
return wasm_loader_js_1.default.verifySchnorr() === 1 ? true : false;
|
|
384
|
+
return (0, validate_error_js_1.vCheck)(wasm_loader_js_1.default.verifySchnorr()) === 1 ? true : false;
|
|
380
385
|
}
|
|
381
386
|
finally {
|
|
382
387
|
HASH_INPUT.fill(0);
|