@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.9 → 8.2.1-alpha.90
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 +504 -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} +9 -7
- package/dist/src/curves/ed25519.d.ts.map +1 -0
- package/dist/src/curves/ed25519.js +72 -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 +6 -1
- package/dist/src/curves/index.d.ts.map +1 -1
- package/dist/src/curves/index.js +12 -3
- package/dist/src/curves/secp256k1.d.ts +3 -1
- package/dist/src/curves/secp256k1.d.ts.map +1 -1
- package/dist/src/curves/secp256k1.js +25 -14
- 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 +36 -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/hashCommitment.d.ts +17 -0
- package/dist/src/hashCommitment.d.ts.map +1 -0
- package/dist/src/hashCommitment.js +45 -0
- package/dist/src/index.d.ts +6 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +25 -4
- package/dist/src/openssl/index.js +6 -2
- package/dist/src/openssl/openssl.js +3 -3
- package/dist/src/safePrime.d.ts +3 -0
- package/dist/src/safePrime.d.ts.map +1 -0
- package/dist/src/safePrime.js +20 -0
- package/dist/src/schnorrProof.d.ts +22 -0
- package/dist/src/schnorrProof.d.ts.map +1 -0
- package/dist/src/schnorrProof.js +62 -0
- 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 +19 -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 +1 -0
- package/dist/src/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/index.js +8 -3
- package/dist/src/tss/ecdsa/paillierproof.js +6 -6
- package/dist/src/tss/ecdsa/rangeproof.d.ts +0 -1
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +102 -108
- package/dist/src/tss/ecdsa/types.d.ts +16 -0
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/types.js +19 -20
- package/dist/src/tss/ecdsa/zkVProof.d.ts +25 -0
- package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/zkVProof.js +71 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +43 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.js +222 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts +25 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dkg.js +224 -0
- package/dist/src/tss/ecdsa-dkls/dsg.d.ts +30 -0
- package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dsg.js +171 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/index.js +32 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts +120 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/types.js +155 -0
- package/dist/src/tss/ecdsa-dkls/util.d.ts +28 -0
- package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/util.js +261 -0
- package/dist/src/tss/index.d.ts +1 -0
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +7 -2
- package/dist/src/types.d.ts +14 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/util.d.ts +8 -2
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +35 -13
- package/dist/tsconfig.tsbuildinfo +1 -3645
- package/package.json +17 -6
- package/dist/src/curves/baseCurve.d.ts.map +0 -1
- package/dist/src/curves/baseCurve.js +0 -6
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
const privateKeySize = 32;
|
|
11
|
+
const publicKeySize = 32;
|
|
12
|
+
class Ed25519Curve {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.scalarBytes = privateKeySize;
|
|
15
|
+
this.pointBytes = publicKeySize;
|
|
16
|
+
}
|
|
17
|
+
static async initialize() {
|
|
18
|
+
if (!Ed25519Curve.initialized) {
|
|
19
|
+
await libsodium_wrappers_sumo_1.default.ready;
|
|
20
|
+
Ed25519Curve.initialized = true;
|
|
21
|
+
}
|
|
22
|
+
return new Ed25519Curve();
|
|
23
|
+
}
|
|
24
|
+
scalarRandom() {
|
|
25
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_reduce((0, util_1.bigIntFromBufferLE)((0, crypto_1.randomBytes)(64)))));
|
|
26
|
+
}
|
|
27
|
+
scalarReduce(s) {
|
|
28
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_reduce((0, util_1.bigIntToBufferLE)(s, 64))));
|
|
29
|
+
}
|
|
30
|
+
scalarNegate(s) {
|
|
31
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_negate((0, util_1.bigIntToBufferLE)(s, privateKeySize))));
|
|
32
|
+
}
|
|
33
|
+
scalarInvert(s) {
|
|
34
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_invert((0, util_1.bigIntToBufferLE)(s, privateKeySize))));
|
|
35
|
+
}
|
|
36
|
+
scalarAdd(x, y) {
|
|
37
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_add((0, util_1.bigIntToBufferLE)(x, privateKeySize), (0, util_1.bigIntToBufferLE)(y, privateKeySize))));
|
|
38
|
+
}
|
|
39
|
+
scalarSub(x, y) {
|
|
40
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_sub((0, util_1.bigIntToBufferLE)(x, privateKeySize), (0, util_1.bigIntToBufferLE)(y, privateKeySize))));
|
|
41
|
+
}
|
|
42
|
+
scalarMult(x, y) {
|
|
43
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_scalar_mul((0, util_1.bigIntToBufferLE)(x, privateKeySize), (0, util_1.bigIntToBufferLE)(y, privateKeySize))));
|
|
44
|
+
}
|
|
45
|
+
basePointMult(n) {
|
|
46
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_scalarmult_ed25519_base_noclamp((0, util_1.bigIntToBufferLE)(n, privateKeySize))));
|
|
47
|
+
}
|
|
48
|
+
pointAdd(p, q) {
|
|
49
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_core_ed25519_add((0, util_1.bigIntToBufferLE)(p, publicKeySize), (0, util_1.bigIntToBufferLE)(q, publicKeySize))));
|
|
50
|
+
}
|
|
51
|
+
pointMultiply(p, s) {
|
|
52
|
+
return (0, util_1.bigIntFromBufferLE)(Buffer.from(libsodium_wrappers_sumo_1.default.crypto_scalarmult_ed25519_noclamp((0, util_1.bigIntToBufferLE)(s, publicKeySize), (0, util_1.bigIntToBufferLE)(p, publicKeySize))));
|
|
53
|
+
}
|
|
54
|
+
verify(message, signature, publicKey) {
|
|
55
|
+
const signedMessage = Buffer.concat([signature, message]);
|
|
56
|
+
try {
|
|
57
|
+
// Returns the message which was signed if the signature is valid
|
|
58
|
+
const result = Buffer.from(libsodium_wrappers_sumo_1.default.crypto_sign_open(signedMessage, (0, util_1.bigIntToBufferLE)(publicKey, publicKeySize)));
|
|
59
|
+
return Buffer.compare(message, result) === 0;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
// Invalid signature causes an exception
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
order() {
|
|
67
|
+
return BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed') * BigInt('0x08');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.Ed25519Curve = Ed25519Curve;
|
|
71
|
+
Ed25519Curve.initialized = false;
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXJ2ZXMvZWQyNTUxOS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzRkFBNkM7QUFDN0MsbUNBQXFDO0FBQ3JDLGtDQUErRDtBQUcvRCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBRXpCLE1BQWEsWUFBWTtJQUF6QjtRQWdHRSxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQUU3QixlQUFVLEdBQUcsYUFBYSxDQUFDO0lBQzdCLENBQUM7SUFoR0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQzdCLE1BQU0saUNBQU0sQ0FBQyxLQUFLLENBQUM7WUFDbkIsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDakM7UUFFRCxPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUEseUJBQWtCLEVBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFBLHlCQUFrQixFQUFDLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUEseUJBQWtCLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBTSxDQUFDLGlDQUFpQyxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUEseUJBQWtCLEVBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQU0sQ0FBQyxpQ0FBaUMsQ0FB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QUFLLEVBQUU7WUFDZCx3Q0FBd0M7WUFDeEMsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxNQUFNLENBQUMsb0VBQW9FLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkcsQ0FBQzs7QUE5Rkgsb0NBbUdDO0FBbEdRLHdCQUFXLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNvZGl1bSBmcm9tICdsaWJzb2RpdW0td3JhcHBlcnMtc3Vtbyc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaWdJbnRGcm9tQnVmZmVyTEUsIGJpZ0ludFRvQnVmZmVyTEUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEJhc2VDdXJ2ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBwcml2YXRlS2V5U2l6ZSA9IDMyO1xuY29uc3QgcHVibGljS2V5U2l6ZSA9IDMyO1xuXG5leHBvcnQgY2xhc3MgRWQyNTUxOUN1cnZlIGltcGxlbWVudHMgQmFzZUN1cnZlIHtcbiAgc3RhdGljIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgc3RhdGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTxFZDI1NTE5Q3VydmU+IHtcbiAgICBpZiAoIUVkMjU1MTlDdXJ2ZS5pbml0aWFsaXplZCkge1xuICAgICAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICAgICAgRWQyNTUxOUN1cnZlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVkMjU1MTlDdXJ2ZSgpO1xuICB9XG5cbiAgc2NhbGFyUmFuZG9tKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJMRShcbiAgICAgIEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9yZWR1Y2UoYmlnSW50RnJvbUJ1ZmZlckxFKHJhbmRvbUJ5dGVzKDY0KSkpKVxuICAgICk7XG4gIH1cblxuICBzY2FsYXJSZWR1Y2UoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9yZWR1Y2UoYmlnSW50VG9CdWZmZXJMRShzLCA2NCkpKSk7XG4gIH1cblxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX25lZ2F0ZShiaWdJbnRUb0J1ZmZlckxFKHMsIHByaXZhdGVLZXlTaXplKSkpXG4gICAgKTtcbiAgfVxuXG4gIHNjYWxhckludmVydChzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfaW52ZXJ0KGJpZ0ludFRvQnVmZmVyTEUocywgcHJpdmF0ZUtleVNpemUpKSlcbiAgICApO1xuICB9XG5cbiAgc2NhbGFyQWRkKHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgQnVmZmVyLmZyb20oXG4gICAgICAgIHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9hZGQoYmlnSW50VG9CdWZmZXJMRSh4LCBwcml2YXRlS2V5U2l6ZSksIGJpZ0ludFRvQnVmZmVyTEUoeSwgcHJpdmF0ZUtleVNpemUpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzY2FsYXJTdWIoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX3N1YihiaWdJbnRUb0J1ZmZlckxFKHgsIHByaXZhdGVLZXlTaXplKSwgYmlnSW50VG9CdWZmZXJMRSh5LCBwcml2YXRlS2V5U2l6ZSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNjYWxhck11bHQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX211bChiaWdJbnRUb0J1ZmZlckxFKHgsIHByaXZhdGVLZXlTaXplKSwgYmlnSW50VG9CdWZmZXJMRSh5LCBwcml2YXRlS2V5U2l6ZSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGJhc2VQb2ludE11bHQobjogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19zY2FsYXJtdWx0X2VkMjU1MTlfYmFzZV9ub2NsYW1wKGJpZ0ludFRvQnVmZmVyTEUobiwgcHJpdmF0ZUtleVNpemUpKSlcbiAgICApO1xuICB9XG5cbiAgcG9pbnRBZGQocDogYmlnaW50LCBxOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfYWRkKGJpZ0ludFRvQnVmZmVyTEUocCwgcHVibGljS2V5U2l6ZSksIGJpZ0ludFRvQnVmZmVyTEUocSwgcHVibGljS2V5U2l6ZSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHBvaW50TXVsdGlwbHkocDogYmlnaW50LCBzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgc29kaXVtLmNyeXB0b19zY2FsYXJtdWx0X2VkMjU1MTlfbm9jbGFtcChiaWdJbnRUb0J1ZmZlckxFKHMsIHB1YmxpY0tleVNpemUpLCBiaWdJbnRUb0J1ZmZlckxFKHAsIHB1YmxpY0tleVNpemUpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICB2ZXJpZnkobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHVibGljS2V5OiBiaWdpbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gQnVmZmVyLmNvbmNhdChbc2lnbmF0dXJlLCBtZXNzYWdlXSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJldHVybnMgdGhlIG1lc3NhZ2Ugd2hpY2ggd2FzIHNpZ25lZCBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkXG4gICAgICBjb25zdCByZXN1bHQgPSBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX3NpZ25fb3BlbihzaWduZWRNZXNzYWdlLCBiaWdJbnRUb0J1ZmZlckxFKHB1YmxpY0tleSwgcHVibGljS2V5U2l6ZSkpKTtcbiAgICAgIHJldHVybiBCdWZmZXIuY29tcGFyZShtZXNzYWdlLCByZXN1bHQpID09PSAwO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJbnZhbGlkIHNpZ25hdHVyZSBjYXVzZXMgYW4gZXhjZXB0aW9uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb3JkZXIoKTogYmlnaW50IHtcbiAgICByZXR1cm4gQmlnSW50KCcweDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRkZWY5ZGVhMmY3OWNkNjU4MTI2MzFhNWNmNWQzZWQnKSAqIEJpZ0ludCgnMHgwOCcpO1xuICB9XG5cbiAgc2NhbGFyQnl0ZXMgPSBwcml2YXRlS2V5U2l6ZTtcblxuICBwb2ludEJ5dGVzID0gcHVibGljS2V5U2l6ZTtcbn1cbiJdfQ==
|
|
@@ -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 = (0, 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) * (0, util_1.bigIntFromBufferLE)(zl.slice(0, 28));
|
|
25
|
+
const left = Ed25519Bip32HdTree.curve.pointAdd(pk, Ed25519Bip32HdTree.curve.basePointMult(t));
|
|
26
|
+
return [left, (0, 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 = (0, 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) * (0, 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 + (0, util_1.bigIntFromBufferBE)(zr)) % constant_1.chaincodeBase;
|
|
44
|
+
return [left_pk, left_sk, right, (0, 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 = (0, crypto_1.createHmac)('sha512', (0, util_1.bigIntToBufferBE)(chaincode, 32));
|
|
55
|
+
const imac = (0, crypto_1.createHmac)('sha512', (0, 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((0, util_1.bigIntToBufferLE)(pk, 32));
|
|
64
|
+
zmac.update(seri);
|
|
65
|
+
imac.update('\x03');
|
|
66
|
+
imac.update((0, 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((0, util_1.bigIntToBufferLE)(sk, 32));
|
|
78
|
+
zmac.update(seri);
|
|
79
|
+
imac.update('\x01');
|
|
80
|
+
imac.update((0, util_1.bigIntToBufferLE)(sk, 32));
|
|
81
|
+
imac.update(seri);
|
|
82
|
+
}
|
|
83
|
+
return [zmac.digest(), imac.digest()];
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUJpcDMySGRUcmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9lZDI1NTE5QmlwMzJIZFRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW9DO0FBQ3BDLGtDQUFxRztBQUNyRyx1Q0FBeUM7QUFFekMsaUNBQXVDO0FBQ3ZDLHlDQUEyQztBQUUzQyxNQUFhLGtCQUFrQjtJQUk3QixNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVU7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRTtZQUNuQyxNQUFNLHNCQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEMsa0JBQWtCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN2QztRQUVELE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBd0IsRUFBRSxJQUFZO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxTQUFTLFdBQVcsQ0FBQyxHQUFhLEVBQUUsS0FBeUI7WUFDM0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLDhCQUE4QjtZQUM5QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFD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QUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFBLHVCQUFnQixFQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUEsdUJBQWdCLEVBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQjtJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhtYWMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRGcm9tQnVmZmVyTEUsIGJpZ0ludFRvQnVmZmVyQkUsIGJpZ0ludFRvQnVmZmVyTEUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEVkMjU1MTlDdXJ2ZSB9IGZyb20gJy4vZWQyNTUxOSc7XG5pbXBvcnQgeyBQcml2YXRlS2V5Y2hhaW4sIFB1YmxpY0tleWNoYWluIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBwYXRoVG9JbmRpY2VzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGNoYWluY29kZUJhc2UgfSBmcm9tICcuL2NvbnN0YW50JztcblxuZXhwb3J0IGNsYXNzIEVkMjU1MTlCaXAzMkhkVHJlZSB7XG4gIHN0YXRpYyBjdXJ2ZTogRWQyNTUxOUN1cnZlID0gbmV3IEVkMjU1MTlDdXJ2ZSgpO1xuICBzdGF0aWMgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPEVkMjU1MTlCaXAzMkhkVHJlZT4ge1xuICAgIGlmICghRWQyNTUxOUJpcDMySGRUcmVlLmluaXRpYWxpemVkKSB7XG4gICAgICBhd2FpdCBFZDI1NTE5Q3VydmUuaW5pdGlhbGl6ZSgpO1xuICAgICAgRWQyNTUxOUJpcDMySGRUcmVlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVkMjU1MTlCaXAzMkhkVHJlZSgpO1xuICB9XG5cbiAgcHVibGljRGVyaXZlKGtleWNoYWluOiBQdWJsaWNLZXljaGFpbiwgcGF0aDogc3RyaW5nKTogUHVibGljS2V5Y2hhaW4ge1xuICAgIGNvbnN0IGluZGljZXMgPSBwYXRoVG9JbmRpY2VzKHBhdGgpO1xuICAgIGZ1bmN0aW9uIGRlcml2ZUluZGV4KGFjYzogYmlnaW50W10sIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpOiBiaWdpbnRbXSB7XG4gICAgICBjb25zdCBbcGssIGNoYWluY29kZV0gPSBhY2M7XG4gICAgICBjb25zdCBbem91dCwgaW91dF0gPSBkZXJpdmVFZDI1NTE5SGVscGVyKGluZGV4LCBjaGFpbmNvZGUsIHBrKTtcbiAgICAgIGNvbnN0IHpsID0gem91dC5zbGljZSgwLCAzMik7XG4gICAgICAvLyBsZWZ0ID0ga2wgKyA4ICogdHJ1bmMyOCh6bClcbiAgICAgIGNvbnN0IHQgPSBCaWdJbnQoOCkgKiBiaWdJbnRGcm9tQnVmZmVyTEUoemwuc2xpY2UoMCwgMjgpKTtcbiAgICAgIGNvbnN0IGxlZnQgPSBFZDI1NTE5QmlwMzJIZFRyZWUuY3VydmUucG9pbnRBZGQocGssIEVkMjU1MTlCaXAzMkhkVHJlZS5jdXJ2ZS5iYXNlUG9pbnRNdWx0KHQpKTtcbiAgICAgIHJldHVybiBbbGVmdCwgYmlnSW50RnJvbUJ1ZmZlckJFKGlvdXQuc2xpY2UoMzIpKV07XG4gICAgfVxuICAgIGNvbnN0IHN1YmtleSA9IGluZGljZXMucmVkdWNlKGRlcml2ZUluZGV4LCBkZXJpdmVJbmRleChba2V5Y2hhaW4ucGssIGtleWNoYWluLmNoYWluY29kZV0sIGluZGljZXMuc2hpZnQoKSkpO1xuICAgIHJldHVybiB7IHBrOiBzdWJrZXlbMF0sIGNoYWluY29kZTogc3Via2V5WzFdIH07XG4gIH1cblxuICBwcml2YXRlRGVyaXZlKGtleWNoYWluOiBQcml2YXRlS2V5Y2hhaW4sIHBhdGg6IHN0cmluZyk6IFByaXZhdGVLZXljaGFpbiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHBhdGhUb0luZGljZXMocGF0aCk7XG4gICAgZnVuY3Rpb24gZGVyaXZlSW5kZXgoYWNjOiBiaWdpbnRbXSwgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJpZ2ludFtdIHtcbiAgICAgIGNvbnN0IFtwaywgc2ssIHByZWZpeCwgY2hhaW5jb2RlXSA9IGFjYztcbiAgICAgIGNvbnN0IFt6b3V0LCBpb3V0XSA9IGRlcml2ZUVkMjU1MTlIZWxwZXIoaW5kZXgsIGNoYWluY29kZSwgcGssIHNrKTtcbiAgICAgIGNvbnN0IHpsID0gem91dC5zbGljZSgwLCAzMik7XG4gICAgICBjb25zdCB6ciA9IHpvdXQuc2xpY2UoMzIpO1xuICAgICAgLy8gbGVmdCA9IGtsICsgOCAqIHRydW5jMjgoemwpXG4gICAgICBjb25zdCB0ID0gQmlnSW50KDgpICogYmlnSW50RnJvbUJ1ZmZlckxFKHpsLnNsaWNlKDAsIDI4KSk7XG4gICAgICBjb25zdCBsZWZ0X3BrID0gRWQyNTUxOUJpcDMySGRUcmVlLmN1cnZlLnBvaW50QWRkKHBrLCBFZDI1NTE5QmlwMzJIZFRyZWUuY3VydmUuYmFzZVBvaW50TXVsdCh0KSk7XG4gICAgICBjb25zdCBsZWZ0X3NrID0gRWQyNTUxOUJpcDMySGRUcmVlLmN1cnZlLnNjYWxhckFkZChzaywgdCk7XG4gICAgICAvLyByaWdodCA9IHpyICsga3JcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKHByZWZpeCArIGJpZ0ludEZyb21CdWZmZXJCRSh6cikpICUgY2hhaW5jb2RlQmFzZTtcbiAgICAgIHJldHVybiBbbGVmdF9waywgbGVmdF9zaywgcmlnaHQsIGJpZ0ludEZyb21CdWZmZXJCRShpb3V0LnNsaWNlKDMyKSldO1xuICAgIH1cbiAgICBjb25zdCBbcGssIHNrLCBwcmVmaXgsIGNoYWluY29kZV0gPSBpbmRpY2VzLnJlZHVjZShcbiAgICAgIGRlcml2ZUluZGV4LFxuICAgICAgZGVyaXZlSW5kZXgoW2tleWNoYWluLnBrLCBrZXljaGFpbi5zaywga2V5Y2hhaW4ucHJlZml4ISwga2V5Y2hhaW4uY2hhaW5jb2RlXSwgaW5kaWNlcy5zaGlmdCgpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgcGssIHNrLCBwcmVmaXgsIGNoYWluY29kZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlcml2ZUVkMjU1MTlIZWxwZXIoaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDAsIGNoYWluY29kZTogYmlnaW50LCBwazogYmlnaW50LCBzaz86IGJpZ2ludCk6IEJ1ZmZlcltdIHtcbiAgY29uc3Qgem1hYyA9IGNyZWF0ZUhtYWMoJ3NoYTUxMicsIGJpZ0ludFRvQnVmZmVyQkUoY2hhaW5jb2RlLCAzMikpO1xuICBjb25zdCBpbWFjID0gY3JlYXRlSG1hYygnc2hhNTEyJywgYmlnSW50VG9CdWZmZXJCRShjaGFpbmNvZGUsIDMyKSk7XG4gIGNvbnN0IHNlcmkgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIHNlcmkud3JpdGVVSW50MzJMRShpbmRleCwgMCk7XG4gIGlmICgoKGluZGV4ID4+PiAwKSAmIDB4ODAwMDAwMDApID09PSAwKSB7XG4gICAgLy8gTm9ybWFsIGRlcml2YXRpb246XG4gICAgLy8gWiA9IEhNQUMtU0hBNTEyKEtleSA9IGNwYXIsIERhdGEgPSAweDAyIHx8IHNlclAocG9pbnQoa3BhcikpIHx8IHNlcjMyKGkpKS5cbiAgICAvLyBJID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDMgfHwgc2VyUChwb2ludChrcGFyKSkgfHwgc2VyMzIoaSkpLlxuICAgIHptYWMudXBkYXRlKCdcXHgwMicpO1xuICAgIHptYWMudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUocGssIDMyKSk7XG4gICAgem1hYy51cGRhdGUoc2VyaSk7XG4gICAgaW1hYy51cGRhdGUoJ1xceDAzJyk7XG4gICAgaW1hYy51cGRhdGUoYmlnSW50VG9CdWZmZXJMRShwaywgMzIpKTtcbiAgICBpbWFjLnVwZGF0ZShzZXJpKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGVyZm9ybWVkIGhhcmRlbmVkIGRlcml2YXRpb24gd2l0aG91dCBwcml2YXRlIGtleVwiKTtcbiAgICB9XG4gICAgLy8gSGFyZGVuZWQgZGVyaXZhdGlvbjpcbiAgICAvLyBaID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDAgfHwgc2VyMjU2KGxlZnQoa3BhcikpIHx8IHNlcjMyKGkpKS5cbiAgICAvLyBJID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDEgfHwgc2VyMjU2KGxlZnQoa3BhcikpIHx8IHNlcjMyKGkpKS5cbiAgICB6bWFjLnVwZGF0ZSgnXFx4MDAnKTtcbiAgICB6bWFjLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckxFKHNrLCAzMikpO1xuICAgIHptYWMudXBkYXRlKHNlcmkpO1xuICAgIGltYWMudXBkYXRlKCdcXHgwMScpO1xuICAgIGltYWMudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUoc2ssIDMyKSk7XG4gICAgaW1hYy51cGRhdGUoc2VyaSk7XG4gIH1cbiAgcmV0dXJuIFt6bWFjLmRpZ2VzdCgpLCBpbWFjLmRpZ2VzdCgpXTtcbn1cbiJdfQ==
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './types';
|
|
2
|
+
export * from './util';
|
|
3
|
+
export * from './constant';
|
|
2
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,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
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,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -10,6 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
15
|
};
|
|
12
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./util"), exports);
|
|
19
|
+
__exportStar(require("./constant"), exports);
|
|
14
20
|
__exportStar(require("./secp256k1"), exports);
|
|
15
|
-
|
|
21
|
+
__exportStar(require("./secp256k1Bip32HdTree"), exports);
|
|
22
|
+
__exportStar(require("./ed25519"), exports);
|
|
23
|
+
__exportStar(require("./ed25519Bip32HdTree"), exports);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIseUNBQXVCO0FBQ3ZCLDZDQUEyQjtBQUMzQiw4Q0FBNEI7QUFDNUIseURBQXVDO0FBQ3ZDLDRDQUEwQjtBQUMxQix1REFBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2VjcDI1NmsxJztcbmV4cG9ydCAqIGZyb20gJy4vc2VjcDI1NmsxQmlwMzJIZFRyZWUnO1xuZXhwb3J0ICogZnJvbSAnLi9lZDI1NTE5JztcbmV4cG9ydCAqIGZyb20gJy4vZWQyNTUxOUJpcDMySGRUcmVlJztcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { BaseCurve } from './
|
|
2
|
+
import { BaseCurve } from './types';
|
|
3
3
|
export declare class Secp256k1Curve implements BaseCurve {
|
|
4
4
|
scalarRandom(): bigint;
|
|
5
5
|
scalarAdd(x: bigint, y: bigint): bigint;
|
|
@@ -13,5 +13,7 @@ export declare class Secp256k1Curve implements BaseCurve {
|
|
|
13
13
|
basePointMult(n: bigint): bigint;
|
|
14
14
|
verify(message: Buffer, signature: Buffer, publicKey: bigint): boolean;
|
|
15
15
|
order(): bigint;
|
|
16
|
+
scalarBytes: number;
|
|
17
|
+
pointBytes: number;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=secp256k1.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/curves/secp256k1.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/curves/secp256k1.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOpC,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;IAIf,WAAW,SAAkB;IAG7B,UAAU,SAAiB;CAC5B"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -23,16 +27,23 @@ exports.Secp256k1Curve = void 0;
|
|
|
23
27
|
const util_1 = require("../util");
|
|
24
28
|
const secp = __importStar(require("@noble/secp256k1"));
|
|
25
29
|
const order = secp.CURVE.n;
|
|
30
|
+
const privateKeySize = 32;
|
|
31
|
+
const publicKeySize = 33;
|
|
26
32
|
class Secp256k1Curve {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.scalarBytes = privateKeySize;
|
|
35
|
+
// Always use compressed points.
|
|
36
|
+
this.pointBytes = publicKeySize;
|
|
37
|
+
}
|
|
27
38
|
scalarRandom() {
|
|
28
|
-
return util_1.bigIntFromU8ABE(secp.utils.randomPrivateKey());
|
|
39
|
+
return (0, util_1.bigIntFromU8ABE)(secp.utils.randomPrivateKey());
|
|
29
40
|
}
|
|
30
41
|
scalarAdd(x, y) {
|
|
31
|
-
return util_1.bigIntFromU8ABE(secp.utils.privateAdd(x, util_1.bigIntToBufferBE(y,
|
|
42
|
+
return (0, util_1.bigIntFromU8ABE)(secp.utils.privateAdd(x, (0, util_1.bigIntToBufferBE)(y, privateKeySize)));
|
|
32
43
|
}
|
|
33
44
|
scalarSub(x, y) {
|
|
34
45
|
const negatedY = secp.utils.privateNegate(y);
|
|
35
|
-
return util_1.bigIntFromU8ABE(secp.utils.privateAdd(x, negatedY));
|
|
46
|
+
return (0, util_1.bigIntFromU8ABE)(secp.utils.privateAdd(x, negatedY));
|
|
36
47
|
}
|
|
37
48
|
scalarMult(x, y) {
|
|
38
49
|
return secp.utils.mod(x * y, order);
|
|
@@ -41,30 +52,30 @@ class Secp256k1Curve {
|
|
|
41
52
|
return secp.utils.mod(s, order);
|
|
42
53
|
}
|
|
43
54
|
scalarNegate(s) {
|
|
44
|
-
return util_1.bigIntFromU8ABE(secp.utils.privateNegate(s));
|
|
55
|
+
return (0, util_1.bigIntFromU8ABE)(secp.utils.privateNegate(s));
|
|
45
56
|
}
|
|
46
57
|
scalarInvert(s) {
|
|
47
58
|
return secp.utils.invert(s, order);
|
|
48
59
|
}
|
|
49
60
|
pointAdd(a, b) {
|
|
50
|
-
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(a,
|
|
51
|
-
const pointB = secp.Point.fromHex(util_1.bigIntToBufferBE(b,
|
|
52
|
-
return util_1.bigIntFromU8ABE(pointA.add(pointB).toRawBytes(true));
|
|
61
|
+
const pointA = secp.Point.fromHex((0, util_1.bigIntToBufferBE)(a, privateKeySize));
|
|
62
|
+
const pointB = secp.Point.fromHex((0, util_1.bigIntToBufferBE)(b, privateKeySize));
|
|
63
|
+
return (0, util_1.bigIntFromU8ABE)(pointA.add(pointB).toRawBytes(true));
|
|
53
64
|
}
|
|
54
65
|
pointMultiply(p, s) {
|
|
55
|
-
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(p,
|
|
56
|
-
return util_1.bigIntFromU8ABE(pointA.multiply(s).toRawBytes(true));
|
|
66
|
+
const pointA = secp.Point.fromHex((0, util_1.bigIntToBufferBE)(p, privateKeySize));
|
|
67
|
+
return (0, util_1.bigIntFromU8ABE)(pointA.multiply(s).toRawBytes(true));
|
|
57
68
|
}
|
|
58
69
|
basePointMult(n) {
|
|
59
|
-
const point = util_1.bigIntToBufferBE(n,
|
|
60
|
-
return util_1.bigIntFromU8ABE(secp.getPublicKey(point, true));
|
|
70
|
+
const point = (0, util_1.bigIntToBufferBE)(n, privateKeySize);
|
|
71
|
+
return (0, util_1.bigIntFromU8ABE)(secp.getPublicKey(point, true));
|
|
61
72
|
}
|
|
62
73
|
verify(message, signature, publicKey) {
|
|
63
|
-
return Buffer.from(secp.recoverPublicKey(message, signature.subarray(1), signature[0], true)).equals(util_1.bigIntToBufferBE(publicKey,
|
|
74
|
+
return Buffer.from(secp.recoverPublicKey(message, signature.subarray(1), signature[0], true)).equals((0, util_1.bigIntToBufferBE)(publicKey, publicKeySize));
|
|
64
75
|
}
|
|
65
76
|
order() {
|
|
66
77
|
return order;
|
|
67
78
|
}
|
|
68
79
|
}
|
|
69
80
|
exports.Secp256k1Curve = Secp256k1Curve;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9zZWNwMjU2azEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQ0FBNEQ7QUFFNUQsdURBQXlDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsTUFBYSxjQUFjO0lBQTNCO1FBd0RFLGdCQUFXLEdBQUcsY0FBYyxDQUFDO1FBRTdCLGdDQUFnQztRQUNoQyxlQUFVLEdBQUcsYUFBYSxDQUFDO0lBQzdCLENBQUM7SUEzREMsWUFBWTtRQUNWLE9BQU8sSUFBQSxzQkFBZSxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDNUIsT0FBTyxJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBQSxzQkFBZSxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFBLHVCQUFnQixFQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFBLHNCQUFlLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFBLHNCQUFlLEVBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVM7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBQSx1QkFBZ0IsRUFBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQWUsRUFBRSxTQUFpQixFQUFFLFNBQWlCO1FBQzFELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUNsRyxJQUFBLHVCQUFnQixFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBTUY7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmlnSW50RnJvbVU4QUJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBCYXNlQ3VydmUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHNlY3AgZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5cbmNvbnN0IG9yZGVyID0gc2VjcC5DVVJWRS5uO1xuY29uc3QgcHJpdmF0ZUtleVNpemUgPSAzMjtcbmNvbnN0IHB1YmxpY0tleVNpemUgPSAzMztcblxuZXhwb3J0IGNsYXNzIFNlY3AyNTZrMUN1cnZlIGltcGxlbWVudHMgQmFzZUN1cnZlIHtcbiAgc2NhbGFyUmFuZG9tKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShzZWNwLnV0aWxzLnJhbmRvbVByaXZhdGVLZXkoKSk7XG4gIH1cblxuICBzY2FsYXJBZGQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5wcml2YXRlQWRkKHgsIGJpZ0ludFRvQnVmZmVyQkUoeSwgcHJpdmF0ZUtleVNpemUpKSk7XG4gIH1cblxuICBzY2FsYXJTdWIoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IG5lZ2F0ZWRZID0gc2VjcC51dGlscy5wcml2YXRlTmVnYXRlKHkpO1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5wcml2YXRlQWRkKHgsIG5lZ2F0ZWRZKSk7XG4gIH1cblxuICBzY2FsYXJNdWx0KHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5tb2QoeCAqIHksIG9yZGVyKTtcbiAgfVxuXG4gIHNjYWxhclJlZHVjZShzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBzZWNwLnV0aWxzLm1vZChzLCBvcmRlcik7XG4gIH1cblxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AudXRpbHMucHJpdmF0ZU5lZ2F0ZShzKSk7XG4gIH1cblxuICBzY2FsYXJJbnZlcnQoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5pbnZlcnQocywgb3JkZXIpO1xuICB9XG5cbiAgcG9pbnRBZGQoYTogYmlnaW50LCBiOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKGEsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgY29uc3QgcG9pbnRCID0gc2VjcC5Qb2ludC5mcm9tSGV4KGJpZ0ludFRvQnVmZmVyQkUoYiwgcHJpdmF0ZUtleVNpemUpKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHBvaW50QS5hZGQocG9pbnRCKS50b1Jhd0J5dGVzKHRydWUpKTtcbiAgfVxuXG4gIHBvaW50TXVsdGlwbHkocDogYmlnaW50LCBzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKHAsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShwb2ludEEubXVsdGlwbHkocykudG9SYXdCeXRlcyh0cnVlKSk7XG4gIH1cblxuICBiYXNlUG9pbnRNdWx0KG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgY29uc3QgcG9pbnQgPSBiaWdJbnRUb0J1ZmZlckJFKG4sIHByaXZhdGVLZXlTaXplKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AuZ2V0UHVibGljS2V5KHBvaW50LCB0cnVlKSk7XG4gIH1cblxuICB2ZXJpZnkobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHVibGljS2V5OiBiaWdpbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc2VjcC5yZWNvdmVyUHVibGljS2V5KG1lc3NhZ2UsIHNpZ25hdHVyZS5zdWJhcnJheSgxKSwgc2lnbmF0dXJlWzBdLCB0cnVlKSkuZXF1YWxzKFxuICAgICAgYmlnSW50VG9CdWZmZXJCRShwdWJsaWNLZXksIHB1YmxpY0tleVNpemUpXG4gICAgKTtcbiAgfVxuXG4gIG9yZGVyKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgc2NhbGFyQnl0ZXMgPSBwcml2YXRlS2V5U2l6ZTtcblxuICAvLyBBbHdheXMgdXNlIGNvbXByZXNzZWQgcG9pbnRzLlxuICBwb2ludEJ5dGVzID0gcHVibGljS2V5U2l6ZTtcbn1cbiJdfQ==
|
|
@@ -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 = (0, util_2.pathToIndices)(path);
|
|
11
|
+
function deriveIndex(acc, index) {
|
|
12
|
+
const [pk, chaincode] = acc;
|
|
13
|
+
const I = deriveSecp256k1Helper(index, chaincode, pk);
|
|
14
|
+
const il = (0, util_1.bigIntFromBufferBE)(I.slice(0, 32));
|
|
15
|
+
const ir = (0, 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 = (0, 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 = (0, util_1.bigIntFromBufferBE)(I.slice(0, 32));
|
|
28
|
+
const ir = (0, 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
|
+
(0, 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
|
+
(0, util_1.bigIntToBufferBE)(sk, 32).copy(data, 1);
|
|
50
|
+
}
|
|
51
|
+
data.writeUInt32BE(index, 33);
|
|
52
|
+
return (0, crypto_1.createHmac)('sha512', (0, util_1.bigIntToBufferBE)(chaincode, 32)).update(data).digest();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxQmlwMzJIZFRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL3NlY3AyNTZrMUJpcDMySGRUcmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUdwQywyQ0FBNkM7QUFDN0Msa0NBQStEO0FBQy9ELGlDQUF1QztBQUV2QyxNQUFhLG9CQUFvQjtJQUcvQixZQUFZLENBQUMsUUFBd0IsRUFBRSxJQUFZO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxTQUFTLFdBQVcsQ0FBQyxHQUFhLEVBQUUsS0FBeUI7WUFDM0QsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUIsTUFBTSxDQUFDLEdBQUcscUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RCxNQUFNLEVBQUUsR0FBRyxJQUFBLHlCQUFrQixFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDcEMsV0FBVyxFQUNYLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxD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cnQgeyBjcmVhdGVIbWFjIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgUHJpdmF0ZUtleWNoYWluLCBQdWJsaWNLZXljaGFpbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBiaWdJbnRGcm9tQnVmZmVyQkUsIGJpZ0ludFRvQnVmZmVyQkUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IHBhdGhUb0luZGljZXMgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgU2VjcDI1NmsxQmlwMzJIZFRyZWUge1xuICBzdGF0aWMgY3VydmU6IFNlY3AyNTZrMUN1cnZlID0gbmV3IFNlY3AyNTZrMUN1cnZlKCk7XG5cbiAgcHVibGljRGVyaXZlKGtleWNoYWluOiBQdWJsaWNLZXljaGFpbiwgcGF0aDogc3RyaW5nKTogUHVibGljS2V5Y2hhaW4ge1xuICAgIGNvbnN0IGluZGljZXMgPSBwYXRoVG9JbmRpY2VzKHBhdGgpO1xuICAgIGZ1bmN0aW9uIGRlcml2ZUluZGV4KGFjYzogYmlnaW50W10sIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQpOiBiaWdpbnRbXSB7XG4gICAgICBjb25zdCBbcGssIGNoYWluY29kZV0gPSBhY2M7XG4gICAgICBjb25zdCBJID0gZGVyaXZlU2VjcDI1NmsxSGVscGVyKGluZGV4LCBjaGFpbmNvZGUsIHBrKTtcbiAgICAgIGNvbnN0IGlsID0gYmlnSW50RnJvbUJ1ZmZlckJFKEkuc2xpY2UoMCwgMzIpKTtcbiAgICAgIGNvbnN0IGlyID0gYmlnSW50RnJvbUJ1ZmZlckJFKEkuc2xpY2UoMzIpKTtcbiAgICAgIGNvbnN0IGxlZnRfcGsgPSBTZWNwMjU2azFCaXAzMkhkVHJlZS5jdXJ2ZS5wb2ludEFkZChwaywgU2VjcDI1NmsxQmlwMzJIZFRyZWUuY3VydmUuYmFzZVBvaW50TXVsdChpbCkpO1xuICAgICAgcmV0dXJuIFtsZWZ0X3BrLCBpcl07XG4gICAgfVxuICAgIGNvbnN0IFtwaywgY2hhaW5jb2RlXSA9IGluZGljZXMucmVkdWNlKFxuICAgICAgZGVyaXZlSW5kZXgsXG4gICAgICBkZXJpdmVJbmRleChba2V5Y2hhaW4ucGssIGtleWNoYWluLmNoYWluY29kZV0sIGluZGljZXMuc2hpZnQoKSlcbiAgICApO1xuICAgIHJldHVybiB7IHBrLCBjaGFpbmNvZGUgfTtcbiAgfVxuXG4gIHByaXZhdGVEZXJpdmUoa2V5Y2hhaW46IFByaXZhdGVLZXljaGFpbiwgcGF0aDogc3RyaW5nKTogUHJpdmF0ZUtleWNoYWluIHtcbiAgICBjb25zdCBpbmRpY2VzID0gcGF0aFRvSW5kaWNlcyhwYXRoKTtcbiAgICBmdW5jdGlvbiBkZXJpdmVJbmRleChhY2M6IGJpZ2ludFtdLCBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYmlnaW50W10ge1xuICAgICAgY29uc3QgW3BrLCBzaywgY2hhaW5jb2RlXSA9IGFjYztcbiAgICAgIGNvbnN0IEkgPSBkZXJpdmVTZWNwMjU2azFIZWxwZXIoaW5kZXgsIGNoYWluY29kZSwgcGssIHNrKTtcbiAgICAgIGNvbnN0IGlsID0gYmlnSW50RnJvbUJ1ZmZlckJFKEkuc2xpY2UoMCwgMzIpKTtcbiAgICAgIGNvbnN0IGlyID0gYmlnSW50RnJvbUJ1ZmZlckJFKEkuc2xpY2UoMzIpKTtcbiAgICAgIGNvbnN0IGxlZnRfcGsgPSBTZWNwMjU2azFCaXAzMkhkVHJlZS5jdXJ2ZS5wb2ludEFkZChwaywgU2VjcDI1NmsxQmlwMzJIZFRyZWUuY3VydmUuYmFzZVBvaW50TXVsdChpbCkpO1xuICAgICAgY29uc3QgbGVmdF9zayA9IFNlY3AyNTZrMUJpcDMySGRUcmVlLmN1cnZlLnNjYWxhckFkZChzaywgaWwpO1xuICAgICAgcmV0dXJuIFtsZWZ0X3BrLCBsZWZ0X3NrLCBpcl07XG4gICAgfVxuICAgIGNvbnN0IFtwaywgc2ssIGNoYWluY29kZV0gPSBpbmRpY2VzLnJlZHVjZShcbiAgICAgIGRlcml2ZUluZGV4LFxuICAgICAgZGVyaXZlSW5kZXgoW2tleWNoYWluLnBrLCBrZXljaGFpbi5zaywga2V5Y2hhaW4uY2hhaW5jb2RlXSwgaW5kaWNlcy5zaGlmdCgpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgcGssIHNrLCBjaGFpbmNvZGUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXJpdmVTZWNwMjU2azFIZWxwZXIoaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDAsIGNoYWluY29kZTogYmlnaW50LCBwazogYmlnaW50LCBzaz86IGJpZ2ludCk6IEJ1ZmZlciB7XG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMzMgKyA0KTtcbiAgaWYgKCgoaW5kZXggPj4+IDApICYgMHg4MDAwMDAwMCkgPT09IDApIHtcbiAgICBiaWdJbnRUb0J1ZmZlckJFKHBrLCAzMykuY29weShkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGVyZm9ybWVkIGhhcmRlbmVkIGRlcml2YXRpb24gd2l0aG91dCBwcml2YXRlIGtleVwiKTtcbiAgICB9XG4gICAgZGF0YVswXSA9IDA7XG4gICAgYmlnSW50VG9CdWZmZXJCRShzaywgMzIpLmNvcHkoZGF0YSwgMSk7XG4gIH1cbiAgZGF0YS53cml0ZVVJbnQzMkJFKGluZGV4LCAzMyk7XG4gIHJldHVybiBjcmVhdGVIbWFjKCdzaGE1MTInLCBiaWdJbnRUb0J1ZmZlckJFKGNoYWluY29kZSwgMzIpKS51cGRhdGUoZGF0YSkuZGlnZXN0KCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
scalarBytes: number;
|
|
34
|
+
pointBytes: number;
|
|
35
|
+
}
|
|
36
|
+
//# 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;IAEpB,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBQdWJsaWNLZXljaGFpbiA9IHtcbiAgLy8gcHVibGljIGtleVxuICBwazogYmlnaW50O1xuICBjaGFpbmNvZGU6IGJpZ2ludDtcbn07XG5cbmV4cG9ydCB0eXBlIFByaXZhdGVLZXljaGFpbiA9IFB1YmxpY0tleWNoYWluICYge1xuICAvLyBzZWNyZXQga2V5XG4gIHNrOiBiaWdpbnQ7XG4gIHByZWZpeD86IGJpZ2ludDtcbn07XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIGZvciBjYWxjdWxhdGluZyBhIHN1YmtleSBpbiBhbiBIRCBrZXkgc2NoZW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhEVHJlZSB7XG4gIHB1YmxpY0Rlcml2ZShrZXljaGFpbjogUHVibGljS2V5Y2hhaW4sIHBhdGg6IHN0cmluZyk6IFB1YmxpY0tleWNoYWluO1xuXG4gIHByaXZhdGVEZXJpdmUoa2V5Y2hhaW46IFByaXZhdGVLZXljaGFpbiwgcGF0aDogc3RyaW5nKTogUHJpdmF0ZUtleWNoYWluO1xufVxuXG4vKipcbiAqIEJhc2UgSW50ZXJmYWNlIGZvciBzdXBwb3J0aW5nIGVsbGlwdGljIGN1cnZlIHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlQ3VydmUge1xuICAvLyBGdW5jdGlvbiB0aGF0IHJlZHVjZXMgYSBzY2FsYXIgbW9kdWxvIHRoZSBvcmRlciBvZiB0aGVcbiAgLy8gY3VydmUuXG4gIHNjYWxhclJlZHVjZShzOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmVnYXRlZCBmaWVsZCBlbGVtZW50IG1vZHVsb1xuICAvLyB0aGUgb3JkZXIgb2YgdGhlIGN1cnZlLlxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50O1xuICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG1vZHVsYXIgbXVsdGlwbGljYXRpdmUgaW52ZXJzZVxuICAvLyBvZiBhIGZpZWxkIGVsZW1lbnQuXG4gIHNjYWxhckludmVydChzOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHJhbmRvbSBmaWVsZCBlbGVtZW50LlxuICBzY2FsYXJSYW5kb20oKTogYmlnaW50O1xuICAvLyAgRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzdW0gb2YgdHdvIGZpZWxkIGVsZW1lbnRzIG1vZHVsb1xuICAvLyAgdGhlIG9yZGVyIG9mIHRoZSBjdXJ2ZS5cbiAgc2NhbGFyQWRkKHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50O1xuICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIGZpZWxkIGVsZW1lbnRzXG4gIC8vIG1vZHVsbyB0aGUgb3JkZXIgb2YgdGhlIGN1cnZlLlxuICBzY2FsYXJTdWIoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQ7XG4gIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0d28gZmllbGQgZWxlbWVudHNcbiAgLy8gbW9kdWxvIHRoZSBvcmRlciBvZiB0aGUgY3VydmUuXG4gIHNjYWxhck11bHQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQ7XG4gIC8vIEZ1bmN0aW9uIHRoYXQgbXVsdGlwbGllcyBhIGdyb3VwIGVsZW1lbnQgYnkgYSBmaWVsZCBlbGVtZW50LlxuICBiYXNlUG9pbnRNdWx0KG46IGJpZ2ludCk6IGJpZ2ludDtcbiAgLy8gRnVuY3Rpb24gdGhhdCBhZGRzIHR3byBncm91cCBlbGVtZW50cy5cbiAgcG9pbnRBZGQocDogYmlnaW50LCBxOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIC8vIE11bHRpcGx5IGEgcG9pbnQgYnkgYSBzY2FsYXIuXG4gIHBvaW50TXVsdGlwbHkocDogYmlnaW50LCBzOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIC8vIEZ1bmN0aW9uIHRoYXQgdmVyaWZpZXMgYSBzaWduYXR1cmUuXG4gIHZlcmlmeShtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyLCBwdWJsaWNLZXk6IGJpZ2ludCk6IGJvb2xlYW47XG4gIC8vIG9yZGVyIG9mIHRoZSBjdXJ2ZVxuICBvcmRlcjogKCkgPT4gYmlnaW50O1xuICAvLyB0aGUgc2l6ZSBvZiBzY2FsYXIgb2YgdGhlIGN1cnZlIGluIGJ5dGVzXG4gIHNjYWxhckJ5dGVzOiBudW1iZXI7XG4gIC8vIHRoZSBzaXplIG9mIHBvaW50IG9mIHRoZSBjdXJ2ZSBpbiBieXRlc1xuICBwb2ludEJ5dGVzOiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/curves/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKpD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pathToIndices = void 0;
|
|
4
|
+
function pathToIndices(path) {
|
|
5
|
+
return path
|
|
6
|
+
.replace(/^m?\//, '')
|
|
7
|
+
.split('/')
|
|
8
|
+
.map((index) => parseInt(index, 10));
|
|
9
|
+
}
|
|
10
|
+
exports.pathToIndices = pathToIndices;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXJ2ZXMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixhQUFhLENBQUMsSUFBWTtJQUN4QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztTQUNwQixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUxELHNDQUtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb0luZGljZXMocGF0aDogc3RyaW5nKTogbnVtYmVyW10ge1xuICByZXR1cm4gcGF0aFxuICAgIC5yZXBsYWNlKC9ebT9cXC8vLCAnJylcbiAgICAuc3BsaXQoJy8nKVxuICAgIC5tYXAoKGluZGV4KSA9PiBwYXJzZUludChpbmRleCwgMTApKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { HashCommitDecommit, HashDecommitment } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Create hash commitment and decommietment of a secret value.
|
|
5
|
+
* @param secret The secret value/message.
|
|
6
|
+
* @param r The randomness/nonce to be added to the commmitment.
|
|
7
|
+
* @returns The created commitment and decommitment.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createCommitment(secret: Buffer, r?: Buffer): HashCommitDecommit;
|
|
10
|
+
/**
|
|
11
|
+
* Verify hash commitment and decommietment of a secret value.
|
|
12
|
+
* @param commitment The commitment.
|
|
13
|
+
* @param decommietment The decommitment.
|
|
14
|
+
* @returns True if verification succeeds.
|
|
15
|
+
*/
|
|
16
|
+
export declare function verifyCommitment(commitment: Buffer, decommietment: HashDecommitment): boolean;
|
|
17
|
+
//# sourceMappingURL=hashCommitment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashCommitment.d.ts","sourceRoot":"","sources":["../../src/hashCommitment.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAK/D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAE,MAAyC,GAAG,kBAAkB,CAWjH;AAaD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,GAAG,OAAO,CAE7F"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyCommitment = exports.createCommitment = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const util_1 = require("./util");
|
|
6
|
+
const minRandomnessLength = 32;
|
|
7
|
+
/**
|
|
8
|
+
* Create hash commitment and decommietment of a secret value.
|
|
9
|
+
* @param secret The secret value/message.
|
|
10
|
+
* @param r The randomness/nonce to be added to the commmitment.
|
|
11
|
+
* @returns The created commitment and decommitment.
|
|
12
|
+
*/
|
|
13
|
+
function createCommitment(secret, r = (0, crypto_1.randomBytes)(minRandomnessLength)) {
|
|
14
|
+
if (r.length < minRandomnessLength) {
|
|
15
|
+
throw new Error(`randomness must be at least ${minRandomnessLength} bytes long`);
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
commitment: hash(secret, r),
|
|
19
|
+
decommitment: {
|
|
20
|
+
blindingFactor: r,
|
|
21
|
+
secret: secret,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.createCommitment = createCommitment;
|
|
26
|
+
const bytesPerUint32 = 4;
|
|
27
|
+
function hash(secret, r) {
|
|
28
|
+
return (0, crypto_1.createHash)('sha256')
|
|
29
|
+
.update((0, util_1.bigIntToBufferBE)(BigInt(secret.length), bytesPerUint32))
|
|
30
|
+
.update(secret)
|
|
31
|
+
.update((0, util_1.bigIntToBufferBE)(BigInt(r.length), bytesPerUint32))
|
|
32
|
+
.update(r)
|
|
33
|
+
.digest();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Verify hash commitment and decommietment of a secret value.
|
|
37
|
+
* @param commitment The commitment.
|
|
38
|
+
* @param decommietment The decommitment.
|
|
39
|
+
* @returns True if verification succeeds.
|
|
40
|
+
*/
|
|
41
|
+
function verifyCommitment(commitment, decommietment) {
|
|
42
|
+
return hash(decommietment.secret, decommietment.blindingFactor).compare(commitment) === 0;
|
|
43
|
+
}
|
|
44
|
+
exports.verifyCommitment = verifyCommitment;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaENvbW1pdG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGFzaENvbW1pdG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWlEO0FBRWpELGlDQUEwQztBQUUxQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUUvQjs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxJQUFZLElBQUEsb0JBQVcsRUFBQyxtQkFBbUIsQ0FBQztJQUMzRixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsbUJBQW1CLGFBQWEsQ0FBQyxDQUFDO0tBQ2xGO0lBQ0QsT0FBTztRQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzQixZQUFZLEVBQUU7WUFDWixjQUFjLEVBQUUsQ0FBQztZQUNqQixNQUFNLEVBQUUsTUFBTTtTQUNmO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFYRCw0Q0FXQztBQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV6QixTQUFTLElBQUksQ0FBQyxNQUFjLEVBQUUsQ0FBUztJQUNyQyxPQUFPLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUM7U0FDeEIsTUFBTSxDQUFDLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2QsTUFBTSxDQUFDLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUMxRCxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ1QsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLGFBQStCO0lBQ2xGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUZELDRDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgSGFzaENvbW1pdERlY29tbWl0LCBIYXNoRGVjb21taXRtZW50IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgbWluUmFuZG9tbmVzc0xlbmd0aCA9IDMyO1xuXG4vKipcbiAqIENyZWF0ZSBoYXNoIGNvbW1pdG1lbnQgYW5kIGRlY29tbWlldG1lbnQgb2YgYSBzZWNyZXQgdmFsdWUuXG4gKiBAcGFyYW0gc2VjcmV0IFRoZSBzZWNyZXQgdmFsdWUvbWVzc2FnZS5cbiAqIEBwYXJhbSByIFRoZSByYW5kb21uZXNzL25vbmNlIHRvIGJlIGFkZGVkIHRvIHRoZSBjb21tbWl0bWVudC5cbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbW1pdG1lbnQgYW5kIGRlY29tbWl0bWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbW1pdG1lbnQoc2VjcmV0OiBCdWZmZXIsIHI6IEJ1ZmZlciA9IHJhbmRvbUJ5dGVzKG1pblJhbmRvbW5lc3NMZW5ndGgpKTogSGFzaENvbW1pdERlY29tbWl0IHtcbiAgaWYgKHIubGVuZ3RoIDwgbWluUmFuZG9tbmVzc0xlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmFuZG9tbmVzcyBtdXN0IGJlIGF0IGxlYXN0ICR7bWluUmFuZG9tbmVzc0xlbmd0aH0gYnl0ZXMgbG9uZ2ApO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29tbWl0bWVudDogaGFzaChzZWNyZXQsIHIpLFxuICAgIGRlY29tbWl0bWVudDoge1xuICAgICAgYmxpbmRpbmdGYWN0b3I6IHIsXG4gICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBieXRlc1BlclVpbnQzMiA9IDQ7XG5cbmZ1bmN0aW9uIGhhc2goc2VjcmV0OiBCdWZmZXIsIHI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgIC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShCaWdJbnQoc2VjcmV0Lmxlbmd0aCksIGJ5dGVzUGVyVWludDMyKSlcbiAgICAudXBkYXRlKHNlY3JldClcbiAgICAudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoQmlnSW50KHIubGVuZ3RoKSwgYnl0ZXNQZXJVaW50MzIpKVxuICAgIC51cGRhdGUocilcbiAgICAuZGlnZXN0KCk7XG59XG5cbi8qKlxuICogVmVyaWZ5IGhhc2ggY29tbWl0bWVudCBhbmQgZGVjb21taWV0bWVudCBvZiBhIHNlY3JldCB2YWx1ZS5cbiAqIEBwYXJhbSBjb21taXRtZW50IFRoZSBjb21taXRtZW50LlxuICogQHBhcmFtIGRlY29tbWlldG1lbnQgVGhlIGRlY29tbWl0bWVudC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdmVyaWZpY2F0aW9uIHN1Y2NlZWRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5Q29tbWl0bWVudChjb21taXRtZW50OiBCdWZmZXIsIGRlY29tbWlldG1lbnQ6IEhhc2hEZWNvbW1pdG1lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGhhc2goZGVjb21taWV0bWVudC5zZWNyZXQsIGRlY29tbWlldG1lbnQuYmxpbmRpbmdGYWN0b3IpLmNvbXBhcmUoY29tbWl0bWVudCkgPT09IDA7XG59XG4iXX0=
|