ecash-lib 3.0.0 → 3.1.0
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/dist/ecc.d.ts +18 -1
- package/dist/ecc.d.ts.map +1 -1
- package/dist/ecc.js +29 -0
- package/dist/ecc.js.map +1 -1
- package/dist/ffi/ecash_lib_wasm_bg_browser.js +1743 -1679
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +13 -11
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +13 -11
- package/dist/ffi/ecash_lib_wasm_browser.d.ts +27 -11
- package/dist/ffi/ecash_lib_wasm_browser.js +64 -14
- package/dist/ffi/ecash_lib_wasm_nodejs.d.ts +14 -0
- package/dist/ffi/ecash_lib_wasm_nodejs.js +64 -14
- package/dist/hdwallet.d.ts.map +1 -1
- package/dist/hdwallet.js +1 -0
- package/dist/hdwallet.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/messages.d.ts +32 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +102 -0
- package/dist/messages.js.map +1 -0
- package/dist/op.d.ts.map +1 -1
- package/dist/op.js +4 -3
- package/dist/op.js.map +1 -1
- package/dist/sigHashType.js.map +1 -1
- package/dist/txBuilder.js +1 -1
- package/dist/txBuilder.js.map +1 -1
- package/package.json +4 -6
- package/src/ecc.ts +54 -2
- package/src/ffi/ecash_lib_wasm_bg_browser.js +1743 -1679
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +13 -11
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
- package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +13 -11
- package/src/ffi/ecash_lib_wasm_browser.d.ts +27 -11
- package/src/ffi/ecash_lib_wasm_browser.js +64 -14
- package/src/ffi/ecash_lib_wasm_nodejs.d.ts +14 -0
- package/src/ffi/ecash_lib_wasm_nodejs.js +64 -14
- package/src/hdwallet.ts +1 -0
- package/src/index.ts +1 -0
- package/src/messages.ts +125 -0
- package/src/op.ts +5 -3
- package/src/sigHashType.ts +2 -2
- package/src/txBuilder.ts +1 -1
- package/.eslintignore +0 -8
- package/eslint.config.js +0 -16
package/README.md
CHANGED
|
@@ -92,3 +92,4 @@ console.log(toHex(rawTx));
|
|
|
92
92
|
- 2.0.0 - Remove `initWasm`, auto-load the WebAssembly instead. Remove unneeded `ecc` parameters, esp. in `TxBuilder.sign` and `HdNode.fromSeed` [D17639](https://reviews.bitcoinabc.org/D17639) [D17640](https://reviews.bitcoinabc.org/D17640)
|
|
93
93
|
- 2.1.0 - Add `signRecoverable` and `recoverSig` to `Ecc` [D17667](https://reviews.bitcoinabc.org/D17667)
|
|
94
94
|
- 3.0.0 - Improve types and shapes in line with chronik proto updates [D17650](https://reviews.bitcoinabc.org/D17650)
|
|
95
|
+
- 3.1.0 - Add methods for signing and verifying messages [D17778](https://reviews.bitcoinabc.org/D17778)
|
package/dist/ecc.d.ts
CHANGED
|
@@ -4,8 +4,18 @@ export interface Ecc {
|
|
|
4
4
|
derivePubkey(seckey: Uint8Array): Uint8Array;
|
|
5
5
|
/** Sign an ECDSA signature. msg needs to be a 32-byte hash */
|
|
6
6
|
ecdsaSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
7
|
+
/**
|
|
8
|
+
* Verify an ECDSA signature. msg needs to be a 32-byte hash.
|
|
9
|
+
* Throws an exception if the signature is invalid.
|
|
10
|
+
**/
|
|
11
|
+
ecdsaVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void;
|
|
7
12
|
/** Sign a Schnorr signature. msg needs to be a 32-byte hash */
|
|
8
13
|
schnorrSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* Verify a Schnorr signature. msg needs to be a 32-byte hash.
|
|
16
|
+
* Throws an exception if the signature is invalid.
|
|
17
|
+
**/
|
|
18
|
+
schnorrVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void;
|
|
9
19
|
/**
|
|
10
20
|
* Return whether the given secret key is valid, i.e. whether is of correct
|
|
11
21
|
* length (32 bytes) and is on the curve.
|
|
@@ -19,19 +29,26 @@ export interface Ecc {
|
|
|
19
29
|
signRecoverable(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
20
30
|
/** Recover the public key of an ECDSA signed signature (with recovery ID) */
|
|
21
31
|
recoverSig(sig: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
32
|
+
/** Compress an uncompressed public key (must start with 0x04) */
|
|
33
|
+
compressPk(pk: Uint8Array): Uint8Array;
|
|
22
34
|
}
|
|
23
35
|
/** Dummy Ecc impl that always returns 0, useful for measuring tx size */
|
|
24
36
|
export declare class EccDummy implements Ecc {
|
|
25
37
|
derivePubkey(_seckey: Uint8Array): Uint8Array;
|
|
26
38
|
ecdsaSign(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
39
|
+
ecdsaVerify(_sig: Uint8Array, _msg: Uint8Array, _pk: Uint8Array): void;
|
|
27
40
|
schnorrSign(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
41
|
+
schnorrVerify(_sig: Uint8Array, _msg: Uint8Array, _pk: Uint8Array): void;
|
|
28
42
|
isValidSeckey(_seckey: Uint8Array): boolean;
|
|
29
43
|
seckeyAdd(_a: Uint8Array, _b: Uint8Array): Uint8Array;
|
|
30
44
|
pubkeyAdd(_a: Uint8Array, _b: Uint8Array): Uint8Array;
|
|
31
45
|
signRecoverable(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
32
46
|
recoverSig(_sig: Uint8Array, _msg: Uint8Array): Uint8Array;
|
|
47
|
+
compressPk(_pk: Uint8Array): Uint8Array;
|
|
33
48
|
}
|
|
34
|
-
|
|
49
|
+
type FfiEcc = Omit<Ecc, 'compressPk'>;
|
|
50
|
+
export declare function __setEcc(ecc: FfiEcc): void;
|
|
35
51
|
export declare class Ecc implements Ecc {
|
|
36
52
|
}
|
|
53
|
+
export {};
|
|
37
54
|
//# sourceMappingURL=ecc.d.ts.map
|
package/dist/ecc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecc.d.ts","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":"AAIA,6DAA6D;
|
|
1
|
+
{"version":3,"file":"ecc.d.ts","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":"AAIA,6DAA6D;AAE7D,MAAM,WAAW,GAAG;IAChB,2CAA2C;IAC3C,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAE7C,8DAA8D;IAC9D,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAE3D;;;QAGI;IACJ,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC;IAEpE,+DAA+D;IAC/D,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAE7D;;;QAGI;IACJ,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC;IAEtE;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAE3C,mCAAmC;IACnC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAEpD,gDAAgD;IAChD,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAEpD,mEAAmE;IACnE,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAEjE,6EAA6E;IAC7E,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAEzD,iEAAiE;IACjE,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,CAAC;CAC1C;AAED,yEAAyE;AACzE,qBAAa,QAAS,YAAW,GAAG;IAChC,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAI7C,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI5D,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAEtE,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI9D,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAExE,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAI3C,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,UAAU;IAIrD,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,UAAU;IAIrD,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAIlE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI1D,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;CAG1C;AAED,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAGtC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,QAEnC;AAGD,qBAAa,GAAI,YAAW,GAAG;CAmE9B"}
|
package/dist/ecc.js
CHANGED
|
@@ -12,9 +12,11 @@ class EccDummy {
|
|
|
12
12
|
ecdsaSign(_seckey, _msg) {
|
|
13
13
|
return new Uint8Array(73);
|
|
14
14
|
}
|
|
15
|
+
ecdsaVerify(_sig, _msg, _pk) { }
|
|
15
16
|
schnorrSign(_seckey, _msg) {
|
|
16
17
|
return new Uint8Array(64);
|
|
17
18
|
}
|
|
19
|
+
schnorrVerify(_sig, _msg, _pk) { }
|
|
18
20
|
isValidSeckey(_seckey) {
|
|
19
21
|
return false;
|
|
20
22
|
}
|
|
@@ -30,6 +32,9 @@ class EccDummy {
|
|
|
30
32
|
recoverSig(_sig, _msg) {
|
|
31
33
|
return new Uint8Array(33);
|
|
32
34
|
}
|
|
35
|
+
compressPk(_pk) {
|
|
36
|
+
return new Uint8Array(33);
|
|
37
|
+
}
|
|
33
38
|
}
|
|
34
39
|
exports.EccDummy = EccDummy;
|
|
35
40
|
const ECC = {};
|
|
@@ -37,6 +42,7 @@ function __setEcc(ecc) {
|
|
|
37
42
|
ECC.ecc = ecc;
|
|
38
43
|
}
|
|
39
44
|
exports.__setEcc = __setEcc;
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
|
|
40
46
|
class Ecc {
|
|
41
47
|
/** Derive a public key from secret key. */
|
|
42
48
|
derivePubkey(seckey) {
|
|
@@ -46,10 +52,24 @@ class Ecc {
|
|
|
46
52
|
ecdsaSign(seckey, msg) {
|
|
47
53
|
return ECC.ecc.ecdsaSign(seckey, msg);
|
|
48
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Verify an ECDSA signature. msg needs to be a 32-byte hash.
|
|
57
|
+
* Throws an exception if the signature is invalid.
|
|
58
|
+
**/
|
|
59
|
+
ecdsaVerify(sig, msg, pk) {
|
|
60
|
+
ECC.ecc?.ecdsaVerify(sig, msg, pk);
|
|
61
|
+
}
|
|
49
62
|
/** Sign a Schnorr signature. msg needs to be a 32-byte hash */
|
|
50
63
|
schnorrSign(seckey, msg) {
|
|
51
64
|
return ECC.ecc.schnorrSign(seckey, msg);
|
|
52
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Verify a Schnorr signature. msg needs to be a 32-byte hash.
|
|
68
|
+
* Throws an exception if the signature is invalid.
|
|
69
|
+
**/
|
|
70
|
+
schnorrVerify(sig, msg, pk) {
|
|
71
|
+
ECC.ecc?.schnorrVerify(sig, msg, pk);
|
|
72
|
+
}
|
|
53
73
|
/**
|
|
54
74
|
* Return whether the given secret key is valid, i.e. whether is of correct
|
|
55
75
|
* length (32 bytes) and is on the curve.
|
|
@@ -71,6 +91,15 @@ class Ecc {
|
|
|
71
91
|
recoverSig(sig, msg) {
|
|
72
92
|
return ECC.ecc.recoverSig(sig, msg);
|
|
73
93
|
}
|
|
94
|
+
compressPk(pk) {
|
|
95
|
+
if (pk[0] != 0x04) {
|
|
96
|
+
throw new Error('Uncompressed pubkey must start with 0x04');
|
|
97
|
+
}
|
|
98
|
+
const compressedPk = new Uint8Array(33);
|
|
99
|
+
compressedPk[0] = 0x02 | (pk[64] & 0x01);
|
|
100
|
+
compressedPk.set(pk.slice(1, 33), 1);
|
|
101
|
+
return compressedPk;
|
|
102
|
+
}
|
|
74
103
|
}
|
|
75
104
|
exports.Ecc = Ecc;
|
|
76
105
|
//# sourceMappingURL=ecc.js.map
|
package/dist/ecc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecc.js","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;
|
|
1
|
+
{"version":3,"file":"ecc.js","sourceRoot":"","sources":["../src/ecc.ts"],"names":[],"mappings":"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"}
|