@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.3 → 8.2.1-alpha.31
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/CHANGELOG.md +98 -0
- package/dist/src/curves/constant.d.ts +2 -0
- package/dist/src/curves/constant.d.ts.map +1 -0
- package/dist/src/curves/constant.js +6 -0
- package/dist/src/curves/{baseCurve.d.ts → ed25519.d.ts} +7 -8
- package/dist/src/curves/ed25519.d.ts.map +1 -0
- package/dist/src/curves/ed25519.js +66 -0
- package/dist/src/curves/ed25519Bip32HdTree.d.ts +10 -0
- package/dist/src/curves/ed25519Bip32HdTree.d.ts.map +1 -0
- package/dist/src/curves/ed25519Bip32HdTree.js +85 -0
- package/dist/src/curves/index.d.ts +7 -2
- package/dist/src/curves/index.d.ts.map +1 -1
- package/dist/src/curves/index.js +18 -1
- package/dist/src/curves/secp256k1.d.ts +17 -0
- package/dist/src/curves/secp256k1.d.ts.map +1 -0
- package/dist/src/curves/secp256k1.js +70 -0
- package/dist/src/curves/secp256k1Bip32HdTree.d.ts +8 -0
- package/dist/src/curves/secp256k1Bip32HdTree.d.ts.map +1 -0
- package/dist/src/curves/secp256k1Bip32HdTree.js +54 -0
- package/dist/src/curves/types.d.ts +34 -0
- package/dist/src/curves/types.d.ts.map +1 -0
- package/dist/src/curves/types.js +3 -0
- package/dist/src/curves/util.d.ts +2 -0
- package/dist/src/curves/util.d.ts.map +1 -0
- package/dist/src/curves/util.js +11 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/shamir/index.d.ts +3 -0
- package/dist/src/shamir/index.d.ts.map +1 -0
- package/dist/src/shamir/index.js +15 -0
- package/dist/src/shamir/shamir.d.ts +38 -0
- package/dist/src/shamir/shamir.d.ts.map +1 -0
- package/dist/src/shamir/shamir.js +136 -0
- package/dist/src/shamir/types.d.ts +5 -0
- package/dist/src/shamir/types.d.ts.map +1 -0
- package/dist/src/shamir/types.js +3 -0
- package/dist/src/tss/ecdsa/index.d.ts +3 -1
- package/dist/src/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/index.js +5 -3
- package/dist/src/tss/ecdsa/paillierproof.d.ts +24 -0
- package/dist/src/tss/ecdsa/paillierproof.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/paillierproof.js +86 -0
- package/dist/src/tss/ecdsa/primes.d.ts +2 -0
- package/dist/src/tss/ecdsa/primes.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/primes.js +1846 -0
- package/dist/src/tss/ecdsa/rangeproof.d.ts +3 -4
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +24 -32
- package/dist/src/tss/ecdsa/types.d.ts +79 -7
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/types.js +130 -1
- package/dist/src/tss/index.d.ts +1 -1
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +4 -14
- package/dist/src/util.d.ts +53 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +135 -2
- package/dist/tsconfig.tsbuildinfo +1 -3588
- package/package.json +5 -4
- package/dist/src/curves/baseCurve.d.ts.map +0 -1
- package/dist/src/curves/baseCurve.js +0 -6
package/CHANGELOG.md
CHANGED
|
@@ -2,3 +2,101 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
# [8.10.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.10.0) (2023-09-07)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **root:** update @types/node ([cedc1a0](https://github.com/BitGo/BitGoJS/commit/cedc1a0035e79bb42fda57bf6ac29d606242f50b))
|
|
11
|
+
- **sdk-lib-mpc:** fix 0 values attack on range proof ([4a689dc](https://github.com/BitGo/BitGoJS/commit/4a689dcfcf0345132e54ddfd3e8a10e2452b0997))
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- **sdk-core:** add getDerivationPath method for smc wallets ([e0be65f](https://github.com/BitGo/BitGoJS/commit/e0be65f4c8904be313b4f453996f86326d2005e8))
|
|
16
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
17
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
18
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
19
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
20
|
+
|
|
21
|
+
# [8.9.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.9.0) (2023-09-05)
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
- **root:** update @types/node ([cedc1a0](https://github.com/BitGo/BitGoJS/commit/cedc1a0035e79bb42fda57bf6ac29d606242f50b))
|
|
26
|
+
- **sdk-lib-mpc:** fix 0 values attack on range proof ([4a689dc](https://github.com/BitGo/BitGoJS/commit/4a689dcfcf0345132e54ddfd3e8a10e2452b0997))
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
|
|
30
|
+
- **sdk-core:** add getDerivationPath method for smc wallets ([e0be65f](https://github.com/BitGo/BitGoJS/commit/e0be65f4c8904be313b4f453996f86326d2005e8))
|
|
31
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
32
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
33
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
34
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
35
|
+
|
|
36
|
+
# [8.8.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.8.0) (2023-09-01)
|
|
37
|
+
|
|
38
|
+
### Bug Fixes
|
|
39
|
+
|
|
40
|
+
- **root:** update @types/node ([cedc1a0](https://github.com/BitGo/BitGoJS/commit/cedc1a0035e79bb42fda57bf6ac29d606242f50b))
|
|
41
|
+
- **sdk-lib-mpc:** fix 0 values attack on range proof ([4a689dc](https://github.com/BitGo/BitGoJS/commit/4a689dcfcf0345132e54ddfd3e8a10e2452b0997))
|
|
42
|
+
|
|
43
|
+
### Features
|
|
44
|
+
|
|
45
|
+
- **sdk-core:** add getDerivationPath method for smc wallets ([e0be65f](https://github.com/BitGo/BitGoJS/commit/e0be65f4c8904be313b4f453996f86326d2005e8))
|
|
46
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
47
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
48
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
49
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
50
|
+
|
|
51
|
+
# [8.7.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.7.0) (2023-08-29)
|
|
52
|
+
|
|
53
|
+
### Features
|
|
54
|
+
|
|
55
|
+
- **sdk-core:** add getDerivationPath method for smc wallets ([e0be65f](https://github.com/BitGo/BitGoJS/commit/e0be65f4c8904be313b4f453996f86326d2005e8))
|
|
56
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
57
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
58
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
59
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
60
|
+
|
|
61
|
+
# [8.6.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.6.0) (2023-08-25)
|
|
62
|
+
|
|
63
|
+
### Features
|
|
64
|
+
|
|
65
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
66
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
67
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
68
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
69
|
+
|
|
70
|
+
# [8.5.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.4.0...@bitgo/sdk-lib-mpc@8.5.0) (2023-06-13)
|
|
71
|
+
|
|
72
|
+
### Features
|
|
73
|
+
|
|
74
|
+
- **sdk-core:** make paillier proofs mandatory ([4c62dd8](https://github.com/BitGo/BitGoJS/commit/4c62dd8bae41b0a66a4aa840c16f2cdf5abc9997))
|
|
75
|
+
|
|
76
|
+
# [8.4.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.3.1...@bitgo/sdk-lib-mpc@8.4.0) (2023-06-05)
|
|
77
|
+
|
|
78
|
+
### Bug Fixes
|
|
79
|
+
|
|
80
|
+
- **sdk-lib-mpc:** add retry to generateModulus fn ([95b1598](https://github.com/BitGo/BitGoJS/commit/95b1598b32743a69fea3b4cd9365216b693b6c59))
|
|
81
|
+
- **sdk-lib-mpc:** pallier -> paillier ([e4182d4](https://github.com/BitGo/BitGoJS/commit/e4182d4457b1fb14d0df71d7db769e61970864fe))
|
|
82
|
+
- **sdk-lib-mpc:** pallier -> paillier ([9d0a12d](https://github.com/BitGo/BitGoJS/commit/9d0a12dd1d2e1d6e3107f62e2757263fb2fd258e))
|
|
83
|
+
|
|
84
|
+
### Features
|
|
85
|
+
|
|
86
|
+
- **root:** add optional paillier proof plumbing ([18093bf](https://github.com/BitGo/BitGoJS/commit/18093bfc370745130958075349814d493d5a8c72))
|
|
87
|
+
- **sdk-core:** paillier proof user<>backup ([8c0a381](https://github.com/BitGo/BitGoJS/commit/8c0a381318be2088572e06e34c3627323d7bfe38))
|
|
88
|
+
- **sdk-lib-mpc:** add proof of paillier correctness ([e759a13](https://github.com/BitGo/BitGoJS/commit/e759a13ea0aaf6d88b5ca26c6c75ffa6a27819f1)), closes [#3502](https://github.com/BitGo/BitGoJS/issues/3502)
|
|
89
|
+
- **sdk-lib-mpc:** add tests for palierproof and utils ([7c4674b](https://github.com/BitGo/BitGoJS/commit/7c4674b430741ccb33f4b447b4efca7942ee70e7))
|
|
90
|
+
- **sdk-lib-mpc:** make rangeProof challenges mandatory for appendChallenge ([1f68b30](https://github.com/BitGo/BitGoJS/commit/1f68b30676966720cb1a42c039e35d3ddeea4974))
|
|
91
|
+
- **sdk-lib-mpc:** move randomCoPrimeLessThan to utils ([5c2f7f2](https://github.com/BitGo/BitGoJS/commit/5c2f7f233858ff695081e86f827e0e72f99c27f7))
|
|
92
|
+
- **sdk-lib-mpc:** optimize pallier proof prove,verify ([c1a9c1e](https://github.com/BitGo/BitGoJS/commit/c1a9c1eff5d65c89341351b9dbc5750b3e5bd4a6))
|
|
93
|
+
|
|
94
|
+
## [8.3.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.3.0...@bitgo/sdk-lib-mpc@8.3.1) (2023-05-25)
|
|
95
|
+
|
|
96
|
+
**Note:** Version bump only for package @bitgo/sdk-lib-mpc
|
|
97
|
+
|
|
98
|
+
# 8.3.0 (2023-05-17)
|
|
99
|
+
|
|
100
|
+
### Features
|
|
101
|
+
|
|
102
|
+
- **sdk-lib-mpc:** init module with range proof ([bfd8368](https://github.com/BitGo/BitGoJS/commit/bfd836823f6dd7596924421b9066f5186b0df186))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/curves/constant.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,QAAiF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chaincodeBase = void 0;
|
|
4
|
+
// 2^256
|
|
5
|
+
exports.chaincodeBase = BigInt('0x010000000000000000000000000000000000000000000000000000000000000000');
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL2NvbnN0YW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFFBQVE7QUFDSyxRQUFBLGFBQWEsR0FBRyxNQUFNLENBQUMsc0VBQXNFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDJeMjU2XG5leHBvcnQgY29uc3QgY2hhaW5jb2RlQmFzZSA9IEJpZ0ludCgnMHgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnKTtcbiJdfQ==
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base Interface for supporting elliptic curve parameters
|
|
3
|
-
*/
|
|
4
1
|
/// <reference types="node" />
|
|
5
|
-
|
|
2
|
+
import { BaseCurve } from './types';
|
|
3
|
+
export declare class Ed25519Curve implements BaseCurve {
|
|
4
|
+
static initialized: boolean;
|
|
5
|
+
static initialize(): Promise<Ed25519Curve>;
|
|
6
|
+
scalarRandom(): bigint;
|
|
6
7
|
scalarReduce(s: bigint): bigint;
|
|
7
8
|
scalarNegate(s: bigint): bigint;
|
|
8
9
|
scalarInvert(s: bigint): bigint;
|
|
9
|
-
scalarRandom(): bigint;
|
|
10
10
|
scalarAdd(x: bigint, y: bigint): bigint;
|
|
11
11
|
scalarSub(x: bigint, y: bigint): bigint;
|
|
12
12
|
scalarMult(x: bigint, y: bigint): bigint;
|
|
@@ -14,7 +14,6 @@ interface BaseCurve {
|
|
|
14
14
|
pointAdd(p: bigint, q: bigint): bigint;
|
|
15
15
|
pointMultiply(p: bigint, s: bigint): bigint;
|
|
16
16
|
verify(message: Buffer, signature: Buffer, publicKey: bigint): boolean;
|
|
17
|
-
order
|
|
17
|
+
order(): bigint;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=baseCurve.d.ts.map
|
|
19
|
+
//# sourceMappingURL=ed25519.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../src/curves/ed25519.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,qBAAa,YAAa,YAAW,SAAS;IAC5C,MAAM,CAAC,WAAW,UAAS;WAEd,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAShD,YAAY,IAAI,MAAM;IAMtB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMvC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMvC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMxC,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIhC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAM3C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAYtE,KAAK,IAAI,MAAM;CAGhB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Ed25519Curve = void 0;
|
|
7
|
+
const libsodium_wrappers_sumo_1 = __importDefault(require("libsodium-wrappers-sumo"));
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
const util_1 = require("../util");
|
|
10
|
+
class Ed25519Curve {
|
|
11
|
+
static async initialize() {
|
|
12
|
+
if (!Ed25519Curve.initialized) {
|
|
13
|
+
await libsodium_wrappers_sumo_1.default.ready;
|
|
14
|
+
Ed25519Curve.initialized = true;
|
|
15
|
+
}
|
|
16
|
+
return new Ed25519Curve();
|
|
17
|
+
}
|
|
18
|
+
scalarRandom() {
|
|
19
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_reduce(util_1.bigIntFromBufferLE(crypto_1.randomBytes(64)))));
|
|
20
|
+
}
|
|
21
|
+
scalarReduce(s) {
|
|
22
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_reduce(util_1.bigIntToBufferLE(s, 64))));
|
|
23
|
+
}
|
|
24
|
+
scalarNegate(s) {
|
|
25
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_negate(util_1.bigIntToBufferLE(s, 32))));
|
|
26
|
+
}
|
|
27
|
+
scalarInvert(s) {
|
|
28
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_invert(util_1.bigIntToBufferLE(s, 32))));
|
|
29
|
+
}
|
|
30
|
+
scalarAdd(x, y) {
|
|
31
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_add(util_1.bigIntToBufferLE(x, 32), util_1.bigIntToBufferLE(y, 32))));
|
|
32
|
+
}
|
|
33
|
+
scalarSub(x, y) {
|
|
34
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_sub(util_1.bigIntToBufferLE(x, 32), util_1.bigIntToBufferLE(y, 32))));
|
|
35
|
+
}
|
|
36
|
+
scalarMult(x, y) {
|
|
37
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_mul(util_1.bigIntToBufferLE(x, 32), util_1.bigIntToBufferLE(y, 32))));
|
|
38
|
+
}
|
|
39
|
+
basePointMult(n) {
|
|
40
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_scalarmult_ed25519_base_noclamp(util_1.bigIntToBufferLE(n, 32))));
|
|
41
|
+
}
|
|
42
|
+
pointAdd(p, q) {
|
|
43
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_add(util_1.bigIntToBufferLE(p, 32), util_1.bigIntToBufferLE(q, 32))));
|
|
44
|
+
}
|
|
45
|
+
pointMultiply(p, s) {
|
|
46
|
+
return util_1.bigIntFromBufferLE(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_scalarmult_ed25519_noclamp(util_1.bigIntToBufferLE(s, 32), util_1.bigIntToBufferLE(p, 32))));
|
|
47
|
+
}
|
|
48
|
+
verify(message, signature, publicKey) {
|
|
49
|
+
const signedMessage = Buffer.concat([signature, message]);
|
|
50
|
+
try {
|
|
51
|
+
// Returns the message which was signed if the signature is valid
|
|
52
|
+
const result = Buffer.from(libsodium_wrappers_sumo_1.default.crypto_sign_open(signedMessage, util_1.bigIntToBufferLE(publicKey, 32)));
|
|
53
|
+
return Buffer.compare(message, result) === 0;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Invalid signature causes an exception
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
order() {
|
|
61
|
+
return BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed') * BigInt('0x08');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.Ed25519Curve = Ed25519Curve;
|
|
65
|
+
Ed25519Curve.initialized = false;
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXJ2ZXMvZWQyNTUxOS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzRkFBNkM7QUFDN0MsbUNBQXFDO0FBQ3JDLGtDQUErRDtBQUcvRCxNQUFhLFlBQVk7SUFHdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQzdCLE1BQU0saUNBQU0sQ0FBQyxLQUFLLENBQUM7WUFDbkIsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDakM7UUFFRCxPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLHlCQUFrQixDQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFNLENBQUMsaUNBQWlDLENBQUMseUJBQWtCLENBQUMsb0JBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLHlCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQU0sQ0FBQyxpQ0FBaUMsQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTO1FBQ3BCLE9BQU8seUJBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBTSxDQUFDLGlDQUFpQyxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyx5QkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFNLENBQUMsaUNBQWlDLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDNUIsT0FBTyx5QkFBa0IsQ0FDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBTSxDQUFDLDhCQUE4QixDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNyRyxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM1QixPQUFPLHlCQUFrQixDQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFNLENBQUMsOEJBQThCLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3JHLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzdCLE9BQU8seUJBQWtCLENBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQU0sQ0FBQyw4QkFBOEIsQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDckcsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBUztRQUNyQixPQUFPLHlCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQU0sQ0FBQyxzQ0FBc0MsQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUMzQixPQUFPLHlCQUFrQixDQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFNLENBQUMsdUJBQXVCLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2hDLE9BQU8seUJBQWtCLENBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQU0sQ0FBQyxpQ0FBaUMsQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDeEcsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBZSxFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUFDMUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUk7WUFDRixpRUFBaUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSx1QkFBZ0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BHLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCx3Q0FBd0M7WUFDeEMsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxNQUFNLENBQUMsb0VBQW9FLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkcsQ0FBQzs7QUE5RUgsb0NBK0VDO0FBOUVRLHdCQUFXLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNvZGl1bSBmcm9tICdsaWJzb2RpdW0td3JhcHBlcnMtc3Vtbyc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaWdJbnRGcm9tQnVmZmVyTEUsIGJpZ0ludFRvQnVmZmVyTEUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEJhc2VDdXJ2ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRWQyNTUxOUN1cnZlIGltcGxlbWVudHMgQmFzZUN1cnZlIHtcbiAgc3RhdGljIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgc3RhdGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTxFZDI1NTE5Q3VydmU+IHtcbiAgICBpZiAoIUVkMjU1MTlDdXJ2ZS5pbml0aWFsaXplZCkge1xuICAgICAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICAgICAgRWQyNTUxOUN1cnZlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVkMjU1MTlDdXJ2ZSgpO1xuICB9XG5cbiAgc2NhbGFyUmFuZG9tKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJMRShcbiAgICAgIEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9yZWR1Y2UoYmlnSW50RnJvbUJ1ZmZlckxFKHJhbmRvbUJ5dGVzKDY0KSkpKVxuICAgICk7XG4gIH1cblxuICBzY2FsYXJSZWR1Y2UoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9yZWR1Y2UoYmlnSW50VG9CdWZmZXJMRShzLCA2NCkpKSk7XG4gIH1cblxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9uZWdhdGUoYmlnSW50VG9CdWZmZXJMRShzLCAzMikpKSk7XG4gIH1cblxuICBzY2FsYXJJbnZlcnQoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9pbnZlcnQoYmlnSW50VG9CdWZmZXJMRShzLCAzMikpKSk7XG4gIH1cblxuICBzY2FsYXJBZGQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfYWRkKGJpZ0ludFRvQnVmZmVyTEUoeCwgMzIpLCBiaWdJbnRUb0J1ZmZlckxFKHksIDMyKSkpXG4gICAgKTtcbiAgfVxuXG4gIHNjYWxhclN1Yih4OiBiaWdpbnQsIHk6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJMRShcbiAgICAgIEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9zdWIoYmlnSW50VG9CdWZmZXJMRSh4LCAzMiksIGJpZ0ludFRvQnVmZmVyTEUoeSwgMzIpKSlcbiAgICApO1xuICB9XG5cbiAgc2NhbGFyTXVsdCh4OiBiaWdpbnQsIHk6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJMRShcbiAgICAgIEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9tdWwoYmlnSW50VG9CdWZmZXJMRSh4LCAzMiksIGJpZ0ludFRvQnVmZmVyTEUoeSwgMzIpKSlcbiAgICApO1xuICB9XG5cbiAgYmFzZVBvaW50TXVsdChuOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19zY2FsYXJtdWx0X2VkMjU1MTlfYmFzZV9ub2NsYW1wKGJpZ0ludFRvQnVmZmVyTEUobiwgMzIpKSkpO1xuICB9XG5cbiAgcG9pbnRBZGQocDogYmlnaW50LCBxOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9hZGQoYmlnSW50VG9CdWZmZXJMRShwLCAzMiksIGJpZ0ludFRvQnVmZmVyTEUocSwgMzIpKSlcbiAgICApO1xuICB9XG5cbiAgcG9pbnRNdWx0aXBseShwOiBiaWdpbnQsIHM6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJMRShcbiAgICAgIEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fc2NhbGFybXVsdF9lZDI1NTE5X25vY2xhbXAoYmlnSW50VG9CdWZmZXJMRShzLCAzMiksIGJpZ0ludFRvQnVmZmVyTEUocCwgMzIpKSlcbiAgICApO1xuICB9XG5cbiAgdmVyaWZ5KG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIsIHB1YmxpY0tleTogYmlnaW50KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2lnbmVkTWVzc2FnZSA9IEJ1ZmZlci5jb25jYXQoW3NpZ25hdHVyZSwgbWVzc2FnZV0pO1xuICAgIHRyeSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSBtZXNzYWdlIHdoaWNoIHdhcyBzaWduZWQgaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZFxuICAgICAgY29uc3QgcmVzdWx0ID0gQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19zaWduX29wZW4oc2lnbmVkTWVzc2FnZSwgYmlnSW50VG9CdWZmZXJMRShwdWJsaWNLZXksIDMyKSkpO1xuICAgICAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKG1lc3NhZ2UsIHJlc3VsdCkgPT09IDA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEludmFsaWQgc2lnbmF0dXJlIGNhdXNlcyBhbiBleGNlcHRpb25cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvcmRlcigpOiBiaWdpbnQge1xuICAgIHJldHVybiBCaWdJbnQoJzB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNGRlZjlkZWEyZjc5Y2Q2NTgxMjYzMWE1Y2Y1ZDNlZCcpICogQmlnSW50KCcweDA4Jyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Ed25519Curve } from './ed25519';
|
|
2
|
+
import { PrivateKeychain, PublicKeychain } from './types';
|
|
3
|
+
export declare class Ed25519Bip32HdTree {
|
|
4
|
+
static curve: Ed25519Curve;
|
|
5
|
+
static initialized: boolean;
|
|
6
|
+
static initialize(): Promise<Ed25519Bip32HdTree>;
|
|
7
|
+
publicDerive(keychain: PublicKeychain, path: string): PublicKeychain;
|
|
8
|
+
privateDerive(keychain: PrivateKeychain, path: string): PrivateKeychain;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ed25519Bip32HdTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519Bip32HdTree.d.ts","sourceRoot":"","sources":["../../../src/curves/ed25519Bip32HdTree.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI1D,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,KAAK,EAAE,YAAY,CAAsB;IAChD,MAAM,CAAC,WAAW,UAAS;WAEd,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAStD,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAepE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe;CAqBxE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Ed25519Bip32HdTree = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const ed25519_1 = require("./ed25519");
|
|
7
|
+
const util_2 = require("./util");
|
|
8
|
+
const constant_1 = require("./constant");
|
|
9
|
+
class Ed25519Bip32HdTree {
|
|
10
|
+
static async initialize() {
|
|
11
|
+
if (!Ed25519Bip32HdTree.initialized) {
|
|
12
|
+
await ed25519_1.Ed25519Curve.initialize();
|
|
13
|
+
Ed25519Bip32HdTree.initialized = true;
|
|
14
|
+
}
|
|
15
|
+
return new Ed25519Bip32HdTree();
|
|
16
|
+
}
|
|
17
|
+
publicDerive(keychain, path) {
|
|
18
|
+
const indices = util_2.pathToIndices(path);
|
|
19
|
+
function deriveIndex(acc, index) {
|
|
20
|
+
const [pk, chaincode] = acc;
|
|
21
|
+
const [zout, iout] = deriveEd25519Helper(index, chaincode, pk);
|
|
22
|
+
const zl = zout.slice(0, 32);
|
|
23
|
+
// left = kl + 8 * trunc28(zl)
|
|
24
|
+
const t = BigInt(8) * util_1.bigIntFromBufferLE(zl.slice(0, 28));
|
|
25
|
+
const left = Ed25519Bip32HdTree.curve.pointAdd(pk, Ed25519Bip32HdTree.curve.basePointMult(t));
|
|
26
|
+
return [left, util_1.bigIntFromBufferBE(iout.slice(32))];
|
|
27
|
+
}
|
|
28
|
+
const subkey = indices.reduce(deriveIndex, deriveIndex([keychain.pk, keychain.chaincode], indices.shift()));
|
|
29
|
+
return { pk: subkey[0], chaincode: subkey[1] };
|
|
30
|
+
}
|
|
31
|
+
privateDerive(keychain, path) {
|
|
32
|
+
const indices = util_2.pathToIndices(path);
|
|
33
|
+
function deriveIndex(acc, index) {
|
|
34
|
+
const [pk, sk, prefix, chaincode] = acc;
|
|
35
|
+
const [zout, iout] = deriveEd25519Helper(index, chaincode, pk, sk);
|
|
36
|
+
const zl = zout.slice(0, 32);
|
|
37
|
+
const zr = zout.slice(32);
|
|
38
|
+
// left = kl + 8 * trunc28(zl)
|
|
39
|
+
const t = BigInt(8) * util_1.bigIntFromBufferLE(zl.slice(0, 28));
|
|
40
|
+
const left_pk = Ed25519Bip32HdTree.curve.pointAdd(pk, Ed25519Bip32HdTree.curve.basePointMult(t));
|
|
41
|
+
const left_sk = Ed25519Bip32HdTree.curve.scalarAdd(sk, t);
|
|
42
|
+
// right = zr + kr
|
|
43
|
+
const right = (prefix + util_1.bigIntFromBufferBE(zr)) % constant_1.chaincodeBase;
|
|
44
|
+
return [left_pk, left_sk, right, util_1.bigIntFromBufferBE(iout.slice(32))];
|
|
45
|
+
}
|
|
46
|
+
const [pk, sk, prefix, chaincode] = indices.reduce(deriveIndex, deriveIndex([keychain.pk, keychain.sk, keychain.prefix, keychain.chaincode], indices.shift()));
|
|
47
|
+
return { pk, sk, prefix, chaincode };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Ed25519Bip32HdTree = Ed25519Bip32HdTree;
|
|
51
|
+
Ed25519Bip32HdTree.curve = new ed25519_1.Ed25519Curve();
|
|
52
|
+
Ed25519Bip32HdTree.initialized = false;
|
|
53
|
+
function deriveEd25519Helper(index = 0, chaincode, pk, sk) {
|
|
54
|
+
const zmac = crypto_1.createHmac('sha512', util_1.bigIntToBufferBE(chaincode, 32));
|
|
55
|
+
const imac = crypto_1.createHmac('sha512', util_1.bigIntToBufferBE(chaincode, 32));
|
|
56
|
+
const seri = Buffer.alloc(4);
|
|
57
|
+
seri.writeUInt32LE(index, 0);
|
|
58
|
+
if (((index >>> 0) & 0x80000000) === 0) {
|
|
59
|
+
// Normal derivation:
|
|
60
|
+
// Z = HMAC-SHA512(Key = cpar, Data = 0x02 || serP(point(kpar)) || ser32(i)).
|
|
61
|
+
// I = HMAC-SHA512(Key = cpar, Data = 0x03 || serP(point(kpar)) || ser32(i)).
|
|
62
|
+
zmac.update('\x02');
|
|
63
|
+
zmac.update(util_1.bigIntToBufferLE(pk, 32));
|
|
64
|
+
zmac.update(seri);
|
|
65
|
+
imac.update('\x03');
|
|
66
|
+
imac.update(util_1.bigIntToBufferLE(pk, 32));
|
|
67
|
+
imac.update(seri);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (sk === undefined) {
|
|
71
|
+
throw new Error("Can't performed hardened derivation without private key");
|
|
72
|
+
}
|
|
73
|
+
// Hardened derivation:
|
|
74
|
+
// Z = HMAC-SHA512(Key = cpar, Data = 0x00 || ser256(left(kpar)) || ser32(i)).
|
|
75
|
+
// I = HMAC-SHA512(Key = cpar, Data = 0x01 || ser256(left(kpar)) || ser32(i)).
|
|
76
|
+
zmac.update('\x00');
|
|
77
|
+
zmac.update(util_1.bigIntToBufferLE(sk, 32));
|
|
78
|
+
zmac.update(seri);
|
|
79
|
+
imac.update('\x01');
|
|
80
|
+
imac.update(util_1.bigIntToBufferLE(sk, 32));
|
|
81
|
+
imac.update(seri);
|
|
82
|
+
}
|
|
83
|
+
return [zmac.digest(), imac.digest()];
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUJpcDMySGRUcmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9lZDI1NTE5QmlwMzJIZFRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW9DO0FBQ3BDLGtDQUFxRztBQUNyRyx1Q0FBeUM7QUFFekMsaUNBQXVDO0FBQ3ZDLHlDQUEyQztBQUUzQyxNQUFhLGtCQUFrQjtJQUk3QixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVU7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRTtZQUNuQyxNQUFNLHNCQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEMsa0JBQWtCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN2QztRQUVELE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBd0IsRUFBRSxJQUFZO1FBQ2pELE1BQU0sT0FBTyxHQUFHLG9CQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsU0FBUyxXQUFXLENBQUMsR0FBYSxFQUFFLEtBQXlCO1lBQzNELE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3Qiw4QkFBOEI7WUFDOUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLHlCQUFrQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFD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LENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQjtJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhtYWMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRGcm9tQnVmZmVyTEUsIGJpZ0ludFRvQnVmZmVyQkUsIGJpZ0ludFRvQnVmZmVyTEUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEVkMjU1MTlDdXJ2ZSB9IGZyb20gJy4vZWQyNTUxOSc7XG5pbXBvcnQgeyBQcml2YXRlS2V5Y2hhaW4sIFB1YmxpY0tleWNoYWluIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBwYXRoVG9JbmRpY2VzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGNoYWluY29kZUJhc2UgfSBmcm9tICcuL2NvbnN0YW50JztcblxuZXhwb3J0IGNsYXNzIEVkMjU1MTlCaXAzMkhkVHJlZSB7XG4gIHN0YXRpYyBjdXJ2ZTogRWQyNTUxOUN1cnZlID0gbmV3IEVkMjU1MTlDdXJ2ZSgpO1xuICBzdGF0aWMgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPEVkMjU1MTlCaXAzMkhkVHJlZT4ge1xuICAgIGlmICghRWQyNTUxOUJpcDMySGRUcmVlLmluaXRpYWxpemVkKSB7XG4gICAgICBhd2FpdCBFZDI1NTE5Q3VydmUuaW5pdGlhbGl6ZSgpO1xuICAgICAgRWQyNTUxOUJpcDMySGRUcmVlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVkMjU1MTlCaXAzMkhkVHJlZSgpO1xuICB9XG5cbiAgcHVibGljRGVyaXZlKGtleWNoYWluOiBQdWJsaWNLZXljaGFpbiwgcGF0aDogc3RyaW5nKTogUHVibGljS2V5Y2hhaW4ge1xuICAgIGNvbnN0IGluZGljZXMgPSBwYXRoVG9JbmRpY2VzKHBhdGgpO1xuICAgIGZ1bmN0aW9uIGRlcml2ZUluZGV4KGFjYzogYmlnaW50W10sIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpOiBiaWdpbnRbXSB7XG4gICAgICBjb25zdCBbcGssIGNoYWluY29kZV0gPSBhY2M7XG4gICAgICBjb25zdCBbem91dCwgaW91dF0gPSBkZXJpdmVFZDI1NTE5SGVscGVyKGluZGV4LCBjaGFpbmNvZGUsIHBrKTtcbiAgICAgIGNvbnN0IHpsID0gem91dC5zbGljZSgwLCAzMik7XG4gICAgICAvLyBsZWZ0ID0ga2wgKyA4ICogdHJ1bmMyOCh6bClcbiAgICAgIGNvbnN0IHQgPSBCaWdJbnQoOCkgKiBiaWdJbnRGcm9tQnVmZmVyTEUoemwuc2xpY2UoMCwgMjgpKTtcbiAgICAgIGNvbnN0IGxlZnQgPSBFZDI1NTE5QmlwMzJIZFRyZWUuY3VydmUucG9pbnRBZGQocGssIEVkMjU1MTlCaXAzMkhkVHJlZS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KHQpKTtcbiAgICAgIHJldHVybiBbbGVmdCwgYmlnSW50RnJvbUJ1ZmZlckJFKGlvdXQuc2xpY2UoMzIpKV07XG4gICAgfVxuICAgIGNvbnN0IHN1YmtleSA9IGluZGljZXMucmVkdWNlKGRlcml2ZUluZGV4LCBkZXJpdmVJbmRleChba2V5Y2hhaW4ucGssIGtleWNoYWluLmNoYWluY29kZV0sIGluZGljZXMuc2hpZnQoKSkpO1xuICAgIHJldHVybiB7IHBrOiBzdWJrZXlbMF0sIGNoYWluY29kZTogc3Via2V5WzFdIH07XG4gIH1cblxuICBwcml2YXRlRGVyaXZlKGtleWNoYWluOiBQcml2YXRlS2V5Y2hhaW4sIHBhdGg6IHN0cmluZyk6IFByaXZhdGVLZXljaGFpbiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHBhdGhUb0luZGljZXMocGF0aCk7XG4gICAgZnVuY3Rpb24gZGVyaXZlSW5kZXgoYWNjOiBiaWdpbnRbXSwgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJpZ2ludFtdIHtcbiAgICAgIGNvbnN0IFtwaywgc2ssIHByZWZpeCwgY2hhaW5jb2RlXSA9IGFjYztcbiAgICAgIGNvbnN0IFt6b3V0LCBpb3V0XSA9IGRlcml2ZUVkMjU1MTlIZWxwZXIoaW5kZXgsIGNoYWluY29kZSwgcGssIHNrKTtcbiAgICAgIGNvbnN0IHpsID0gem91dC5zbGljZSgwLCAzMik7XG4gICAgICBjb25zdCB6ciA9IHpvdXQuc2xpY2UoMzIpO1xuICAgICAgLy8gbGVmdCA9IGtsICsgOCAqIHRydW5jMjgoemwpXG4gICAgICBjb25zdCB0ID0gQmlnSW50KDgpICogYmlnSW50RnJvbUJ1ZmZlckxFKHpsLnNsaWNlKDAsIDI4KSk7XG4gICAgICBjb25zdCBsZWZ0X3BrID0gRWQyNTUxOUJpcDMySGRUcmVlLmN1cnZlLnBvaW50QWRkKHBrLCBFZDI1NTE5QmlwMzJIZFRyZWUuY3VydmUuYmFzZVBvaW50TXVsdCh0KSk7XG4gICAgICBjb25zdCBsZWZ0X3NrID0gRWQyNTUxOUJpcDMySGRUcmVlLmN1cnZlLnNjYWxhckFkZChzaywgdCk7XG4gICAgICAvLyByaWdodCA9IHpyICsga3JcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKHByZWZpeCArIGJpZ0ludEZyb21CdWZmZXJCRSh6cikpICUgY2hhaW5jb2RlQmFzZTtcbiAgICAgIHJldHVybiBbbGVmdF9waywgbGVmdF9zaywgcmlnaHQsIGJpZ0ludEZyb21CdWZmZXJCRShpb3V0LnNsaWNlKDMyKSldO1xuICAgIH1cbiAgICBjb25zdCBbcGssIHNrLCBwcmVmaXgsIGNoYWluY29kZV0gPSBpbmRpY2VzLnJlZHVjZShcbiAgICAgIGRlcml2ZUluZGV4LFxuICAgICAgZGVyaXZlSW5kZXgoW2tleWNoYWluLnBrLCBrZXljaGFpbi5zaywga2V5Y2hhaW4ucHJlZml4ISwga2V5Y2hhaW4uY2hhaW5jb2RlXSwgaW5kaWNlcy5zaGlmdCgpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgcGssIHNrLCBwcmVmaXgsIGNoYWluY29kZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlcml2ZUVkMjU1MTlIZWxwZXIoaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDAsIGNoYWluY29kZTogYmlnaW50LCBwazogYmlnaW50LCBzaz86IGJpZ2ludCk6IEJ1ZmZlcltdIHtcbiAgY29uc3Qgem1hYyA9IGNyZWF0ZUhtYWMoJ3NoYTUxMicsIGJpZ0ludFRvQnVmZmVyQkUoY2hhaW5jb2RlLCAzMikpO1xuICBjb25zdCBpbWFjID0gY3JlYXRlSG1hYygnc2hhNTEyJywgYmlnSW50VG9CdWZmZXJCRShjaGFpbmNvZGUsIDMyKSk7XG4gIGNvbnN0IHNlcmkgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIHNlcmkud3JpdGVVSW50MzJMRShpbmRleCwgMCk7XG4gIGlmICgoKGluZGV4ID4+PiAwKSAmIDB4ODAwMDAwMDApID09PSAwKSB7XG4gICAgLy8gTm9ybWFsIGRlcml2YXRpb246XG4gICAgLy8gWiA9IEhNQUMtU0hBNTEyKEtleSA9IGNwYXIsIERhdGEgPSAweDAyIHx8IHNlclAocG9pbnQoa3BhcikpIHx8IHNlcjMyKGkpKS5cbiAgICAvLyBJID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDMgfHwgc2VyUChwb2ludChrcGFyKSkgfHwgc2VyMzIoaSkpLlxuICAgIHptYWMudXBkYXRlKCdcXHgwMicpO1xuICAgIHptYWMudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUocGssIDMyKSk7XG4gICAgem1hYy51cGRhdGUoc2VyaSk7XG4gICAgaW1hYy51cGRhdGUoJ1xceDAzJyk7XG4gICAgaW1hYy51cGRhdGUoYmlnSW50VG9CdWZmZXJMRShwaywgMzIpKTtcbiAgICBpbWFjLnVwZGF0ZShzZXJpKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGVyZm9ybWVkIGhhcmRlbmVkIGRlcml2YXRpb24gd2l0aG91dCBwcml2YXRlIGtleVwiKTtcbiAgICB9XG4gICAgLy8gSGFyZGVuZWQgZGVyaXZhdGlvbjpcbiAgICAvLyBaID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDAgfHwgc2VyMjU2KGxlZnQoa3BhcikpIHx8IHNlcjMyKGkpKS5cbiAgICAvLyBJID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDEgfHwgc2VyMjU2KGxlZnQoa3BhcikpIHx8IHNlcjMyKGkpKS5cbiAgICB6bWFjLnVwZGF0ZSgnXFx4MDAnKTtcbiAgICB6bWFjLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckxFKHNrLCAzMikpO1xuICAgIHptYWMudXBkYXRlKHNlcmkpO1xuICAgIGltYWMudXBkYXRlKCdcXHgwMScpO1xuICAgIGltYWMudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUoc2ssIDMyKSk7XG4gICAgaW1hYy51cGRhdGUoc2VyaSk7XG4gIH1cbiAgcmV0dXJuIFt6bWFjLmRpZ2VzdCgpLCBpbWFjLmRpZ2VzdCgpXTtcbn1cbiJdfQ==
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
1
|
+
export * from './types';
|
|
2
|
+
export * from './util';
|
|
3
|
+
export * from './constant';
|
|
4
|
+
export * from './secp256k1';
|
|
5
|
+
export * from './secp256k1Bip32HdTree';
|
|
6
|
+
export * from './ed25519';
|
|
7
|
+
export * from './ed25519Bip32HdTree';
|
|
3
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/curves/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/curves/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
|
package/dist/src/curves/index.js
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
2
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
13
|
+
__exportStar(require("./types"), exports);
|
|
14
|
+
__exportStar(require("./util"), exports);
|
|
15
|
+
__exportStar(require("./constant"), exports);
|
|
16
|
+
__exportStar(require("./secp256k1"), exports);
|
|
17
|
+
__exportStar(require("./secp256k1Bip32HdTree"), exports);
|
|
18
|
+
__exportStar(require("./ed25519"), exports);
|
|
19
|
+
__exportStar(require("./ed25519Bip32HdTree"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF3QjtBQUN4Qix5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qix5REFBdUM7QUFDdkMsNENBQTBCO0FBQzFCLHVEQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWNwMjU2azEnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWNwMjU2azFCaXAzMkhkVHJlZSc7XG5leHBvcnQgKiBmcm9tICcuL2VkMjU1MTknO1xuZXhwb3J0ICogZnJvbSAnLi9lZDI1NTE5QmlwMzJIZFRyZWUnO1xuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { BaseCurve } from './types';
|
|
3
|
+
export declare class Secp256k1Curve implements BaseCurve {
|
|
4
|
+
scalarRandom(): bigint;
|
|
5
|
+
scalarAdd(x: bigint, y: bigint): bigint;
|
|
6
|
+
scalarSub(x: bigint, y: bigint): bigint;
|
|
7
|
+
scalarMult(x: bigint, y: bigint): bigint;
|
|
8
|
+
scalarReduce(s: bigint): bigint;
|
|
9
|
+
scalarNegate(s: bigint): bigint;
|
|
10
|
+
scalarInvert(s: bigint): bigint;
|
|
11
|
+
pointAdd(a: bigint, b: bigint): bigint;
|
|
12
|
+
pointMultiply(p: bigint, s: bigint): bigint;
|
|
13
|
+
basePointMult(n: bigint): bigint;
|
|
14
|
+
verify(message: Buffer, signature: Buffer, publicKey: bigint): boolean;
|
|
15
|
+
order(): bigint;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=secp256k1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/curves/secp256k1.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKpC,qBAAa,cAAe,YAAW,SAAS;IAC9C,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAKvC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK3C,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAKhC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAMtE,KAAK,IAAI,MAAM;CAGhB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Secp256k1Curve = void 0;
|
|
23
|
+
const util_1 = require("../util");
|
|
24
|
+
const secp = __importStar(require("@noble/secp256k1"));
|
|
25
|
+
const order = secp.CURVE.n;
|
|
26
|
+
class Secp256k1Curve {
|
|
27
|
+
scalarRandom() {
|
|
28
|
+
return util_1.bigIntFromU8ABE(secp.utils.randomPrivateKey());
|
|
29
|
+
}
|
|
30
|
+
scalarAdd(x, y) {
|
|
31
|
+
return util_1.bigIntFromU8ABE(secp.utils.privateAdd(x, util_1.bigIntToBufferBE(y, 32)));
|
|
32
|
+
}
|
|
33
|
+
scalarSub(x, y) {
|
|
34
|
+
const negatedY = secp.utils.privateNegate(y);
|
|
35
|
+
return util_1.bigIntFromU8ABE(secp.utils.privateAdd(x, negatedY));
|
|
36
|
+
}
|
|
37
|
+
scalarMult(x, y) {
|
|
38
|
+
return secp.utils.mod(x * y, order);
|
|
39
|
+
}
|
|
40
|
+
scalarReduce(s) {
|
|
41
|
+
return secp.utils.mod(s, order);
|
|
42
|
+
}
|
|
43
|
+
scalarNegate(s) {
|
|
44
|
+
return util_1.bigIntFromU8ABE(secp.utils.privateNegate(s));
|
|
45
|
+
}
|
|
46
|
+
scalarInvert(s) {
|
|
47
|
+
return secp.utils.invert(s, order);
|
|
48
|
+
}
|
|
49
|
+
pointAdd(a, b) {
|
|
50
|
+
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(a, 32));
|
|
51
|
+
const pointB = secp.Point.fromHex(util_1.bigIntToBufferBE(b, 32));
|
|
52
|
+
return util_1.bigIntFromU8ABE(pointA.add(pointB).toRawBytes(true));
|
|
53
|
+
}
|
|
54
|
+
pointMultiply(p, s) {
|
|
55
|
+
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(p, 32));
|
|
56
|
+
return util_1.bigIntFromU8ABE(pointA.multiply(s).toRawBytes(true));
|
|
57
|
+
}
|
|
58
|
+
basePointMult(n) {
|
|
59
|
+
const point = util_1.bigIntToBufferBE(n, 32);
|
|
60
|
+
return util_1.bigIntFromU8ABE(secp.getPublicKey(point, true));
|
|
61
|
+
}
|
|
62
|
+
verify(message, signature, publicKey) {
|
|
63
|
+
return Buffer.from(secp.recoverPublicKey(message, signature.subarray(1), signature[0], true)).equals(util_1.bigIntToBufferBE(publicKey, 33));
|
|
64
|
+
}
|
|
65
|
+
order() {
|
|
66
|
+
return order;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.Secp256k1Curve = Secp256k1Curve;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9zZWNwMjU2azEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtDQUE0RDtBQUU1RCx1REFBeUM7QUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFM0IsTUFBYSxjQUFjO0lBQ3pCLFlBQVk7UUFDVixPQUFPLHNCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM1QixPQUFPLHNCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLHNCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLHNCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLHNCQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sc0JBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBUztRQUNyQixNQUFNLEtBQUssR0FBRyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsT0FBTyxzQkFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFlLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjtRQUMxRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDbEcsdUJBQWdCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQXZERCx3Q0F1REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaWdJbnRGcm9tVThBQkUsIGJpZ0ludFRvQnVmZmVyQkUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEJhc2VDdXJ2ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgc2VjcCBmcm9tICdAbm9ibGUvc2VjcDI1NmsxJztcblxuY29uc3Qgb3JkZXIgPSBzZWNwLkNVUlZFLm47XG5cbmV4cG9ydCBjbGFzcyBTZWNwMjU2azFDdXJ2ZSBpbXBsZW1lbnRzIEJhc2VDdXJ2ZSB7XG4gIHNjYWxhclJhbmRvbSgpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5yYW5kb21Qcml2YXRlS2V5KCkpO1xuICB9XG5cbiAgc2NhbGFyQWRkKHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AudXRpbHMucHJpdmF0ZUFkZCh4LCBiaWdJbnRUb0J1ZmZlckJFKHksIDMyKSkpO1xuICB9XG5cbiAgc2NhbGFyU3ViKHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICBjb25zdCBuZWdhdGVkWSA9IHNlY3AudXRpbHMucHJpdmF0ZU5lZ2F0ZSh5KTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AudXRpbHMucHJpdmF0ZUFkZCh4LCBuZWdhdGVkWSkpO1xuICB9XG5cbiAgc2NhbGFyTXVsdCh4OiBiaWdpbnQsIHk6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIHNlY3AudXRpbHMubW9kKHggKiB5LCBvcmRlcik7XG4gIH1cblxuICBzY2FsYXJSZWR1Y2UoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5tb2Qocywgb3JkZXIpO1xuICB9XG5cbiAgc2NhbGFyTmVnYXRlKHM6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShzZWNwLnV0aWxzLnByaXZhdGVOZWdhdGUocykpO1xuICB9XG5cbiAgc2NhbGFySW52ZXJ0KHM6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIHNlY3AudXRpbHMuaW52ZXJ0KHMsIG9yZGVyKTtcbiAgfVxuXG4gIHBvaW50QWRkKGE6IGJpZ2ludCwgYjogYmlnaW50KTogYmlnaW50IHtcbiAgICBjb25zdCBwb2ludEEgPSBzZWNwLlBvaW50LmZyb21IZXgoYmlnSW50VG9CdWZmZXJCRShhLCAzMikpO1xuICAgIGNvbnN0IHBvaW50QiA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKGIsIDMyKSk7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShwb2ludEEuYWRkKHBvaW50QikudG9SYXdCeXRlcyh0cnVlKSk7XG4gIH1cblxuICBwb2ludE11bHRpcGx5KHA6IGJpZ2ludCwgczogYmlnaW50KTogYmlnaW50IHtcbiAgICBjb25zdCBwb2ludEEgPSBzZWNwLlBvaW50LmZyb21IZXgoYmlnSW50VG9CdWZmZXJCRShwLCAzMikpO1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUocG9pbnRBLm11bHRpcGx5KHMpLnRvUmF3Qnl0ZXModHJ1ZSkpO1xuICB9XG5cbiAgYmFzZVBvaW50TXVsdChuOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50ID0gYmlnSW50VG9CdWZmZXJCRShuLCAzMik7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShzZWNwLmdldFB1YmxpY0tleShwb2ludCwgdHJ1ZSkpO1xuICB9XG5cbiAgdmVyaWZ5KG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIsIHB1YmxpY0tleTogYmlnaW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNlY3AucmVjb3ZlclB1YmxpY0tleShtZXNzYWdlLCBzaWduYXR1cmUuc3ViYXJyYXkoMSksIHNpZ25hdHVyZVswXSwgdHJ1ZSkpLmVxdWFscyhcbiAgICAgIGJpZ0ludFRvQnVmZmVyQkUocHVibGljS2V5LCAzMylcbiAgICApO1xuICB9XG5cbiAgb3JkZXIoKTogYmlnaW50IHtcbiAgICByZXR1cm4gb3JkZXI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PrivateKeychain, PublicKeychain } from './types';
|
|
2
|
+
import { Secp256k1Curve } from './secp256k1';
|
|
3
|
+
export declare class Secp256k1Bip32HdTree {
|
|
4
|
+
static curve: Secp256k1Curve;
|
|
5
|
+
publicDerive(keychain: PublicKeychain, path: string): PublicKeychain;
|
|
6
|
+
privateDerive(keychain: PrivateKeychain, path: string): PrivateKeychain;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=secp256k1Bip32HdTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secp256k1Bip32HdTree.d.ts","sourceRoot":"","sources":["../../../src/curves/secp256k1Bip32HdTree.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,KAAK,EAAE,cAAc,CAAwB;IAEpD,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAiBpE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe;CAiBxE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Secp256k1Bip32HdTree = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const secp256k1_1 = require("./secp256k1");
|
|
6
|
+
const util_1 = require("../util");
|
|
7
|
+
const util_2 = require("./util");
|
|
8
|
+
class Secp256k1Bip32HdTree {
|
|
9
|
+
publicDerive(keychain, path) {
|
|
10
|
+
const indices = util_2.pathToIndices(path);
|
|
11
|
+
function deriveIndex(acc, index) {
|
|
12
|
+
const [pk, chaincode] = acc;
|
|
13
|
+
const I = deriveSecp256k1Helper(index, chaincode, pk);
|
|
14
|
+
const il = util_1.bigIntFromBufferBE(I.slice(0, 32));
|
|
15
|
+
const ir = util_1.bigIntFromBufferBE(I.slice(32));
|
|
16
|
+
const left_pk = Secp256k1Bip32HdTree.curve.pointAdd(pk, Secp256k1Bip32HdTree.curve.basePointMult(il));
|
|
17
|
+
return [left_pk, ir];
|
|
18
|
+
}
|
|
19
|
+
const [pk, chaincode] = indices.reduce(deriveIndex, deriveIndex([keychain.pk, keychain.chaincode], indices.shift()));
|
|
20
|
+
return { pk, chaincode };
|
|
21
|
+
}
|
|
22
|
+
privateDerive(keychain, path) {
|
|
23
|
+
const indices = util_2.pathToIndices(path);
|
|
24
|
+
function deriveIndex(acc, index) {
|
|
25
|
+
const [pk, sk, chaincode] = acc;
|
|
26
|
+
const I = deriveSecp256k1Helper(index, chaincode, pk, sk);
|
|
27
|
+
const il = util_1.bigIntFromBufferBE(I.slice(0, 32));
|
|
28
|
+
const ir = util_1.bigIntFromBufferBE(I.slice(32));
|
|
29
|
+
const left_pk = Secp256k1Bip32HdTree.curve.pointAdd(pk, Secp256k1Bip32HdTree.curve.basePointMult(il));
|
|
30
|
+
const left_sk = Secp256k1Bip32HdTree.curve.scalarAdd(sk, il);
|
|
31
|
+
return [left_pk, left_sk, ir];
|
|
32
|
+
}
|
|
33
|
+
const [pk, sk, chaincode] = indices.reduce(deriveIndex, deriveIndex([keychain.pk, keychain.sk, keychain.chaincode], indices.shift()));
|
|
34
|
+
return { pk, sk, chaincode };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.Secp256k1Bip32HdTree = Secp256k1Bip32HdTree;
|
|
38
|
+
Secp256k1Bip32HdTree.curve = new secp256k1_1.Secp256k1Curve();
|
|
39
|
+
function deriveSecp256k1Helper(index = 0, chaincode, pk, sk) {
|
|
40
|
+
const data = Buffer.alloc(33 + 4);
|
|
41
|
+
if (((index >>> 0) & 0x80000000) === 0) {
|
|
42
|
+
util_1.bigIntToBufferBE(pk, 33).copy(data);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (sk === undefined) {
|
|
46
|
+
throw new Error("Can't performed hardened derivation without private key");
|
|
47
|
+
}
|
|
48
|
+
data[0] = 0;
|
|
49
|
+
util_1.bigIntToBufferBE(sk, 32).copy(data, 1);
|
|
50
|
+
}
|
|
51
|
+
data.writeUInt32BE(index, 33);
|
|
52
|
+
return crypto_1.createHmac('sha512', util_1.bigIntToBufferBE(chaincode, 32)).update(data).digest();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxQmlwMzJIZFRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL3NlY3AyNTZrMUJpcDMySGRUcmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUdwQywyQ0FBNkM7QUFDN0Msa0NBQStEO0FBQy9ELGlDQUF1QztBQUV2QyxNQUFhLG9CQUFvQjtJQUcvQixZQUFZLENBQUMsUUFBd0IsRUFBRSxJQUFZO1FBQ2pELE1BQU0sT0FBTyxHQUFHLG9CQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsU0FBUyxXQUFXLENBQUMsR0FBYSxFQUFFLEtBQXlCO1lBQzNELE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLHFCQUFxQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsTUFBTSxFQUFFLEdBQUcseUJBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLEVBQUUsR0FBRyx5QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDcEMsV0FBVyxFQUNYLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUNoRSxDQUFDO1FBQ0YsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQXlCLEVBQUUsSUFBWTtRQUNuRCxNQUFNLE9BQU8sR0FBRyxvQkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLFNBQVMsV0FBVyxDQUFDLEdBQWEsRUFBRSxLQUF5QjtZQUMzRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDaEMsTUFBTSxDQUFDLEdBQUcscUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFFLEdBQUcseUJBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLEVBQUUsR0FBRyx5QkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUN4QyxXQUFXLEVBQ1gsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDN0UsQ0FBQztRQUNGLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQy9CLENBQUM7O0FBcENILG9EQXFDQztBQXBDUSwwQkFBSyxHQUFtQixJQUFJLDBCQUFjLEVBQUUsQ0FBQztBQXNDdEQsU0FBUyxxQkFBcUIsQ0FBQyxRQUE0QixDQUFDLEVBQUUsU0FBaUIsRUFBRSxFQUFVLEVBQUUsRUFBVztJQUN0RyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3RDLHVCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7U0FBTTtRQUNMLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7U0FDNUU7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1osdUJBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDeEM7SUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLG1CQUFVLENBQUMsUUFBUSxFQUFFLHVCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSG1hYyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IFByaXZhdGVLZXljaGFpbiwgUHVibGljS2V5Y2hhaW4gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNlY3AyNTZrMUN1cnZlIH0gZnJvbSAnLi9zZWNwMjU2azEnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBwYXRoVG9JbmRpY2VzIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGNsYXNzIFNlY3AyNTZrMUJpcDMySGRUcmVlIHtcbiAgc3RhdGljIGN1cnZlOiBTZWNwMjU2azFDdXJ2ZSA9IG5ldyBTZWNwMjU2azFDdXJ2ZSgpO1xuXG4gIHB1YmxpY0Rlcml2ZShrZXljaGFpbjogUHVibGljS2V5Y2hhaW4sIHBhdGg6IHN0cmluZyk6IFB1YmxpY0tleWNoYWluIHtcbiAgICBjb25zdCBpbmRpY2VzID0gcGF0aFRvSW5kaWNlcyhwYXRoKTtcbiAgICBmdW5jdGlvbiBkZXJpdmVJbmRleChhY2M6IGJpZ2ludFtdLCBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYmlnaW50W10ge1xuICAgICAgY29uc3QgW3BrLCBjaGFpbmNvZGVdID0gYWNjO1xuICAgICAgY29uc3QgSSA9IGRlcml2ZVNlY3AyNTZrMUhlbHBlcihpbmRleCwgY2hhaW5jb2RlLCBwayk7XG4gICAgICBjb25zdCBpbCA9IGJpZ0ludEZyb21CdWZmZXJCRShJLnNsaWNlKDAsIDMyKSk7XG4gICAgICBjb25zdCBpciA9IGJpZ0ludEZyb21CdWZmZXJCRShJLnNsaWNlKDMyKSk7XG4gICAgICBjb25zdCBsZWZ0X3BrID0gU2VjcDI1NmsxQmlwMzJIZFRyZWUuY3VydmUucG9pbnRBZGQocGssIFNlY3AyNTZrMUJpcDMySGRUcmVlLmN1cnZlLmJhc2VQb2ludE11bHQoaWwpKTtcbiAgICAgIHJldHVybiBbbGVmdF9waywgaXJdO1xuICAgIH1cbiAgICBjb25zdCBbcGssIGNoYWluY29kZV0gPSBpbmRpY2VzLnJlZHVjZShcbiAgICAgIGRlcml2ZUluZGV4LFxuICAgICAgZGVyaXZlSW5kZXgoW2tleWNoYWluLnBrLCBrZXljaGFpbi5jaGFpbmNvZGVdLCBpbmRpY2VzLnNoaWZ0KCkpXG4gICAgKTtcbiAgICByZXR1cm4geyBwaywgY2hhaW5jb2RlIH07XG4gIH1cblxuICBwcml2YXRlRGVyaXZlKGtleWNoYWluOiBQcml2YXRlS2V5Y2hhaW4sIHBhdGg6IHN0cmluZyk6IFByaXZhdGVLZXljaGFpbiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHBhdGhUb0luZGljZXMocGF0aCk7XG4gICAgZnVuY3Rpb24gZGVyaXZlSW5kZXgoYWNjOiBiaWdpbnRbXSwgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJpZ2ludFtdIHtcbiAgICAgIGNvbnN0IFtwaywgc2ssIGNoYWluY29kZV0gPSBhY2M7XG4gICAgICBjb25zdCBJID0gZGVyaXZlU2VjcDI1NmsxSGVscGVyKGluZGV4LCBjaGFpbmNvZGUsIHBrLCBzayk7XG4gICAgICBjb25zdCBpbCA9IGJpZ0ludEZyb21CdWZmZXJCRShJLnNsaWNlKDAsIDMyKSk7XG4gICAgICBjb25zdCBpciA9IGJpZ0ludEZyb21CdWZmZXJCRShJLnNsaWNlKDMyKSk7XG4gICAgICBjb25zdCBsZWZ0X3BrID0gU2VjcDI1NmsxQmlwMzJIZFRyZWUuY3VydmUucG9pbnRBZGQocGssIFNlY3AyNTZrMUJpcDMySGRUcmVlLmN1cnZlLmJhc2VQb2ludE11bHQoaWwpKTtcbiAgICAgIGNvbnN0IGxlZnRfc2sgPSBTZWNwMjU2azFCaXAzMkhkVHJlZS5jdXJ2ZS5zY2FsYXJBZGQoc2ssIGlsKTtcbiAgICAgIHJldHVybiBbbGVmdF9waywgbGVmdF9zaywgaXJdO1xuICAgIH1cbiAgICBjb25zdCBbcGssIHNrLCBjaGFpbmNvZGVdID0gaW5kaWNlcy5yZWR1Y2UoXG4gICAgICBkZXJpdmVJbmRleCxcbiAgICAgIGRlcml2ZUluZGV4KFtrZXljaGFpbi5waywga2V5Y2hhaW4uc2ssIGtleWNoYWluLmNoYWluY29kZV0sIGluZGljZXMuc2hpZnQoKSlcbiAgICApO1xuICAgIHJldHVybiB7IHBrLCBzaywgY2hhaW5jb2RlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVyaXZlU2VjcDI1NmsxSGVscGVyKGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwLCBjaGFpbmNvZGU6IGJpZ2ludCwgcGs6IGJpZ2ludCwgc2s/OiBiaWdpbnQpOiBCdWZmZXIge1xuICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKDMzICsgNCk7XG4gIGlmICgoKGluZGV4ID4+PiAwKSAmIDB4ODAwMDAwMDApID09PSAwKSB7XG4gICAgYmlnSW50VG9CdWZmZXJCRShwaywgMzMpLmNvcHkoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHBlcmZvcm1lZCBoYXJkZW5lZCBkZXJpdmF0aW9uIHdpdGhvdXQgcHJpdmF0ZSBrZXlcIik7XG4gICAgfVxuICAgIGRhdGFbMF0gPSAwO1xuICAgIGJpZ0ludFRvQnVmZmVyQkUoc2ssIDMyKS5jb3B5KGRhdGEsIDEpO1xuICB9XG4gIGRhdGEud3JpdGVVSW50MzJCRShpbmRleCwgMzMpO1xuICByZXR1cm4gY3JlYXRlSG1hYygnc2hhNTEyJywgYmlnSW50VG9CdWZmZXJCRShjaGFpbmNvZGUsIDMyKSkudXBkYXRlKGRhdGEpLmRpZ2VzdCgpO1xufVxuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export declare type PublicKeychain = {
|
|
3
|
+
pk: bigint;
|
|
4
|
+
chaincode: bigint;
|
|
5
|
+
};
|
|
6
|
+
export declare type PrivateKeychain = PublicKeychain & {
|
|
7
|
+
sk: bigint;
|
|
8
|
+
prefix?: bigint;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* An interface for calculating a subkey in an HD key scheme.
|
|
12
|
+
*/
|
|
13
|
+
export interface HDTree {
|
|
14
|
+
publicDerive(keychain: PublicKeychain, path: string): PublicKeychain;
|
|
15
|
+
privateDerive(keychain: PrivateKeychain, path: string): PrivateKeychain;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Base Interface for supporting elliptic curve parameters
|
|
19
|
+
*/
|
|
20
|
+
export interface BaseCurve {
|
|
21
|
+
scalarReduce(s: bigint): bigint;
|
|
22
|
+
scalarNegate(s: bigint): bigint;
|
|
23
|
+
scalarInvert(s: bigint): bigint;
|
|
24
|
+
scalarRandom(): bigint;
|
|
25
|
+
scalarAdd(x: bigint, y: bigint): bigint;
|
|
26
|
+
scalarSub(x: bigint, y: bigint): bigint;
|
|
27
|
+
scalarMult(x: bigint, y: bigint): bigint;
|
|
28
|
+
basePointMult(n: bigint): bigint;
|
|
29
|
+
pointAdd(p: bigint, q: bigint): bigint;
|
|
30
|
+
pointMultiply(p: bigint, s: bigint): bigint;
|
|
31
|
+
verify(message: Buffer, signature: Buffer, publicKey: bigint): boolean;
|
|
32
|
+
order: () => bigint;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/curves/types.ts"],"names":[],"mappings":";AAAA,oBAAY,cAAc,GAAG;IAE3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,eAAe,GAAG,cAAc,GAAG;IAE7C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAErE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IAGxB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGhC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGhC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC,YAAY,IAAI,MAAM,CAAC;IAGvB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGxC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGxC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzC,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEjC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvE,KAAK,EAAE,MAAM,MAAM,CAAC;CACrB"}
|