@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.6 → 8.2.1-alpha.61
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 +447 -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 +7 -2
- 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 +14 -7
- 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 +20 -3
- 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 +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 +1 -0
- package/dist/src/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/index.js +3 -2
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +4 -1
- package/dist/src/tss/ecdsa/types.d.ts +6 -1
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/types.js +1 -1
- 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 +212 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts +20 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dkg.js +153 -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 +169 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts +4 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/index.js +26 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts +74 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/types.js +70 -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 +2 -1
- 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 +30 -8
- package/dist/tsconfig.tsbuildinfo +1 -3645
- package/package.json +9 -4
- package/dist/src/curves/baseCurve.d.ts.map +0 -1
- package/dist/src/curves/baseCurve.js +0 -6
|
@@ -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
|
-
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
|
@@ -10,6 +10,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
13
|
+
__exportStar(require("./types"), exports);
|
|
14
|
+
__exportStar(require("./util"), exports);
|
|
15
|
+
__exportStar(require("./constant"), exports);
|
|
14
16
|
__exportStar(require("./secp256k1"), exports);
|
|
15
|
-
|
|
17
|
+
__exportStar(require("./secp256k1Bip32HdTree"), exports);
|
|
18
|
+
__exportStar(require("./ed25519"), exports);
|
|
19
|
+
__exportStar(require("./ed25519Bip32HdTree"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VydmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF3QjtBQUN4Qix5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qix5REFBdUM7QUFDdkMsNENBQTBCO0FBQzFCLHVEQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWNwMjU2azEnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWNwMjU2azFCaXAzMkhkVHJlZSc7XG5leHBvcnQgKiBmcm9tICcuL2VkMjU1MTknO1xuZXhwb3J0ICogZnJvbSAnLi9lZDI1NTE5QmlwMzJIZFRyZWUnO1xuIl19
|
|
@@ -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"}
|
|
@@ -23,12 +23,19 @@ exports.Secp256k1Curve = void 0;
|
|
|
23
23
|
const util_1 = require("../util");
|
|
24
24
|
const secp = __importStar(require("@noble/secp256k1"));
|
|
25
25
|
const order = secp.CURVE.n;
|
|
26
|
+
const privateKeySize = 32;
|
|
27
|
+
const publicKeySize = 33;
|
|
26
28
|
class Secp256k1Curve {
|
|
29
|
+
constructor() {
|
|
30
|
+
this.scalarBytes = privateKeySize;
|
|
31
|
+
// Always use compressed points.
|
|
32
|
+
this.pointBytes = publicKeySize;
|
|
33
|
+
}
|
|
27
34
|
scalarRandom() {
|
|
28
35
|
return util_1.bigIntFromU8ABE(secp.utils.randomPrivateKey());
|
|
29
36
|
}
|
|
30
37
|
scalarAdd(x, y) {
|
|
31
|
-
return util_1.bigIntFromU8ABE(secp.utils.privateAdd(x, util_1.bigIntToBufferBE(y,
|
|
38
|
+
return util_1.bigIntFromU8ABE(secp.utils.privateAdd(x, util_1.bigIntToBufferBE(y, privateKeySize)));
|
|
32
39
|
}
|
|
33
40
|
scalarSub(x, y) {
|
|
34
41
|
const negatedY = secp.utils.privateNegate(y);
|
|
@@ -47,24 +54,24 @@ class Secp256k1Curve {
|
|
|
47
54
|
return secp.utils.invert(s, order);
|
|
48
55
|
}
|
|
49
56
|
pointAdd(a, b) {
|
|
50
|
-
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(a,
|
|
51
|
-
const pointB = secp.Point.fromHex(util_1.bigIntToBufferBE(b,
|
|
57
|
+
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(a, privateKeySize));
|
|
58
|
+
const pointB = secp.Point.fromHex(util_1.bigIntToBufferBE(b, privateKeySize));
|
|
52
59
|
return util_1.bigIntFromU8ABE(pointA.add(pointB).toRawBytes(true));
|
|
53
60
|
}
|
|
54
61
|
pointMultiply(p, s) {
|
|
55
|
-
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(p,
|
|
62
|
+
const pointA = secp.Point.fromHex(util_1.bigIntToBufferBE(p, privateKeySize));
|
|
56
63
|
return util_1.bigIntFromU8ABE(pointA.multiply(s).toRawBytes(true));
|
|
57
64
|
}
|
|
58
65
|
basePointMult(n) {
|
|
59
|
-
const point = util_1.bigIntToBufferBE(n,
|
|
66
|
+
const point = util_1.bigIntToBufferBE(n, privateKeySize);
|
|
60
67
|
return util_1.bigIntFromU8ABE(secp.getPublicKey(point, true));
|
|
61
68
|
}
|
|
62
69
|
verify(message, signature, publicKey) {
|
|
63
|
-
return Buffer.from(secp.recoverPublicKey(message, signature.subarray(1), signature[0], true)).equals(util_1.bigIntToBufferBE(publicKey,
|
|
70
|
+
return Buffer.from(secp.recoverPublicKey(message, signature.subarray(1), signature[0], true)).equals(util_1.bigIntToBufferBE(publicKey, publicKeySize));
|
|
64
71
|
}
|
|
65
72
|
order() {
|
|
66
73
|
return order;
|
|
67
74
|
}
|
|
68
75
|
}
|
|
69
76
|
exports.Secp256k1Curve = Secp256k1Curve;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9zZWNwMjU2azEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtDQUE0RDtBQUU1RCx1REFBeUM7QUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUV6QixNQUFhLGNBQWM7SUFBM0I7UUF3REUsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFFN0IsZ0NBQWdDO1FBQ2hDLGVBQVUsR0FBRyxhQUFhLENBQUM7SUFDN0IsQ0FBQztJQTNEQyxZQUFZO1FBQ1YsT0FBTyxzQkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDNUIsT0FBTyxzQkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxzQkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxzQkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxzQkFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLHNCQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsYUFBYSxDQUFDLENBQVM7UUFDckIsTUFBTSxLQUFLLEdBQUcsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sc0JBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBZSxFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUFDMUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ2xHLHVCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBTUY7QUE1REQsd0NBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmlnSW50RnJvbVU4QUJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBCYXNlQ3VydmUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHNlY3AgZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5cbmNvbnN0IG9yZGVyID0gc2VjcC5DVVJWRS5uO1xuY29uc3QgcHJpdmF0ZUtleVNpemUgPSAzMjtcbmNvbnN0IHB1YmxpY0tleVNpemUgPSAzMztcblxuZXhwb3J0IGNsYXNzIFNlY3AyNTZrMUN1cnZlIGltcGxlbWVudHMgQmFzZUN1cnZlIHtcbiAgc2NhbGFyUmFuZG9tKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShzZWNwLnV0aWxzLnJhbmRvbVByaXZhdGVLZXkoKSk7XG4gIH1cblxuICBzY2FsYXJBZGQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5wcml2YXRlQWRkKHgsIGJpZ0ludFRvQnVmZmVyQkUoeSwgcHJpdmF0ZUtleVNpemUpKSk7XG4gIH1cblxuICBzY2FsYXJTdWIoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IG5lZ2F0ZWRZID0gc2VjcC51dGlscy5wcml2YXRlTmVnYXRlKHkpO1xuICAgIHJldHVybiBiaWdJbnRGcm9tVThBQkUoc2VjcC51dGlscy5wcml2YXRlQWRkKHgsIG5lZ2F0ZWRZKSk7XG4gIH1cblxuICBzY2FsYXJNdWx0KHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5tb2QoeCAqIHksIG9yZGVyKTtcbiAgfVxuXG4gIHNjYWxhclJlZHVjZShzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBzZWNwLnV0aWxzLm1vZChzLCBvcmRlcik7XG4gIH1cblxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AudXRpbHMucHJpdmF0ZU5lZ2F0ZShzKSk7XG4gIH1cblxuICBzY2FsYXJJbnZlcnQoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gc2VjcC51dGlscy5pbnZlcnQocywgb3JkZXIpO1xuICB9XG5cbiAgcG9pbnRBZGQoYTogYmlnaW50LCBiOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKGEsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgY29uc3QgcG9pbnRCID0gc2VjcC5Qb2ludC5mcm9tSGV4KGJpZ0ludFRvQnVmZmVyQkUoYiwgcHJpdmF0ZUtleVNpemUpKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHBvaW50QS5hZGQocG9pbnRCKS50b1Jhd0J5dGVzKHRydWUpKTtcbiAgfVxuXG4gIHBvaW50TXVsdGlwbHkocDogYmlnaW50LCBzOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIGNvbnN0IHBvaW50QSA9IHNlY3AuUG9pbnQuZnJvbUhleChiaWdJbnRUb0J1ZmZlckJFKHAsIHByaXZhdGVLZXlTaXplKSk7XG4gICAgcmV0dXJuIGJpZ0ludEZyb21VOEFCRShwb2ludEEubXVsdGlwbHkocykudG9SYXdCeXRlcyh0cnVlKSk7XG4gIH1cblxuICBiYXNlUG9pbnRNdWx0KG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgY29uc3QgcG9pbnQgPSBiaWdJbnRUb0J1ZmZlckJFKG4sIHByaXZhdGVLZXlTaXplKTtcbiAgICByZXR1cm4gYmlnSW50RnJvbVU4QUJFKHNlY3AuZ2V0UHVibGljS2V5KHBvaW50LCB0cnVlKSk7XG4gIH1cblxuICB2ZXJpZnkobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHVibGljS2V5OiBiaWdpbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc2VjcC5yZWNvdmVyUHVibGljS2V5KG1lc3NhZ2UsIHNpZ25hdHVyZS5zdWJhcnJheSgxKSwgc2lnbmF0dXJlWzBdLCB0cnVlKSkuZXF1YWxzKFxuICAgICAgYmlnSW50VG9CdWZmZXJCRShwdWJsaWNLZXksIHB1YmxpY0tleVNpemUpXG4gICAgKTtcbiAgfVxuXG4gIG9yZGVyKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIG9yZGVyO1xuICB9XG5cbiAgc2NhbGFyQnl0ZXMgPSBwcml2YXRlS2V5U2l6ZTtcblxuICAvLyBBbHdheXMgdXNlIGNvbXByZXNzZWQgcG9pbnRzLlxuICBwb2ludEJ5dGVzID0gcHVibGljS2V5U2l6ZTtcbn1cbiJdfQ==
|
|
@@ -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,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 = 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 crypto_1.createHash('sha256')
|
|
29
|
+
.update(util_1.bigIntToBufferBE(BigInt(secret.length), bytesPerUint32))
|
|
30
|
+
.update(secret)
|
|
31
|
+
.update(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaENvbW1pdG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGFzaENvbW1pdG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWlEO0FBRWpELGlDQUEwQztBQUUxQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUUvQjs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxJQUFZLG9CQUFXLENBQUMsbUJBQW1CLENBQUM7SUFDM0YsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLG1CQUFtQixFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLG1CQUFtQixhQUFhLENBQUMsQ0FBQztLQUNsRjtJQUNELE9BQU87UUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDM0IsWUFBWSxFQUFFO1lBQ1osY0FBYyxFQUFFLENBQUM7WUFDakIsTUFBTSxFQUFFLE1BQU07U0FDZjtLQUNGLENBQUM7QUFDSixDQUFDO0FBWEQsNENBV0M7QUFFRCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFFekIsU0FBUyxJQUFJLENBQUMsTUFBYyxFQUFFLENBQVM7SUFDckMsT0FBTyxtQkFBVSxDQUFDLFFBQVEsQ0FBQztTQUN4QixNQUFNLENBQUMsdUJBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2QsTUFBTSxDQUFDLHVCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDMUQsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNULE1BQU0sRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxhQUErQjtJQUNsRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFGRCw0Q0FFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2gsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEhhc2hDb21taXREZWNvbW1pdCwgSGFzaERlY29tbWl0bWVudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG1pblJhbmRvbW5lc3NMZW5ndGggPSAzMjtcblxuLyoqXG4gKiBDcmVhdGUgaGFzaCBjb21taXRtZW50IGFuZCBkZWNvbW1pZXRtZW50IG9mIGEgc2VjcmV0IHZhbHVlLlxuICogQHBhcmFtIHNlY3JldCBUaGUgc2VjcmV0IHZhbHVlL21lc3NhZ2UuXG4gKiBAcGFyYW0gciBUaGUgcmFuZG9tbmVzcy9ub25jZSB0byBiZSBhZGRlZCB0byB0aGUgY29tbW1pdG1lbnQuXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb21taXRtZW50IGFuZCBkZWNvbW1pdG1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21taXRtZW50KHNlY3JldDogQnVmZmVyLCByOiBCdWZmZXIgPSByYW5kb21CeXRlcyhtaW5SYW5kb21uZXNzTGVuZ3RoKSk6IEhhc2hDb21taXREZWNvbW1pdCB7XG4gIGlmIChyLmxlbmd0aCA8IG1pblJhbmRvbW5lc3NMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJhbmRvbW5lc3MgbXVzdCBiZSBhdCBsZWFzdCAke21pblJhbmRvbW5lc3NMZW5ndGh9IGJ5dGVzIGxvbmdgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvbW1pdG1lbnQ6IGhhc2goc2VjcmV0LCByKSxcbiAgICBkZWNvbW1pdG1lbnQ6IHtcbiAgICAgIGJsaW5kaW5nRmFjdG9yOiByLFxuICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgYnl0ZXNQZXJVaW50MzIgPSA0O1xuXG5mdW5jdGlvbiBoYXNoKHNlY3JldDogQnVmZmVyLCByOiBCdWZmZXIpOiBCdWZmZXIge1xuICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoQmlnSW50KHNlY3JldC5sZW5ndGgpLCBieXRlc1BlclVpbnQzMikpXG4gICAgLnVwZGF0ZShzZWNyZXQpXG4gICAgLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKEJpZ0ludChyLmxlbmd0aCksIGJ5dGVzUGVyVWludDMyKSlcbiAgICAudXBkYXRlKHIpXG4gICAgLmRpZ2VzdCgpO1xufVxuXG4vKipcbiAqIFZlcmlmeSBoYXNoIGNvbW1pdG1lbnQgYW5kIGRlY29tbWlldG1lbnQgb2YgYSBzZWNyZXQgdmFsdWUuXG4gKiBAcGFyYW0gY29tbWl0bWVudCBUaGUgY29tbWl0bWVudC5cbiAqIEBwYXJhbSBkZWNvbW1pZXRtZW50IFRoZSBkZWNvbW1pdG1lbnQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHZlcmlmaWNhdGlvbiBzdWNjZWVkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUNvbW1pdG1lbnQoY29tbWl0bWVudDogQnVmZmVyLCBkZWNvbW1pZXRtZW50OiBIYXNoRGVjb21taXRtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXNoKGRlY29tbWlldG1lbnQuc2VjcmV0LCBkZWNvbW1pZXRtZW50LmJsaW5kaW5nRmFjdG9yKS5jb21wYXJlKGNvbW1pdG1lbnQpID09PSAwO1xufVxuIl19
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
export * from './tss';
|
|
2
1
|
export * from './curves';
|
|
3
|
-
export * from './util';
|
|
4
2
|
export * from './openssl';
|
|
3
|
+
export * from './shamir';
|
|
4
|
+
export * from './tss';
|
|
5
|
+
export * as HashCommitment from './hashCommitment';
|
|
6
|
+
export * as Schnorr from './schnorrProof';
|
|
7
|
+
export * from './types';
|
|
8
|
+
export * from './util';
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AAEtB,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -6,12 +6,29 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
6
6
|
if (k2 === undefined) k2 = k;
|
|
7
7
|
o[k2] = m[k];
|
|
8
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
|
+
});
|
|
9
14
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
15
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
16
|
};
|
|
17
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
18
|
+
if (mod && mod.__esModule) return mod;
|
|
19
|
+
var result = {};
|
|
20
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
21
|
+
__setModuleDefault(result, mod);
|
|
22
|
+
return result;
|
|
23
|
+
};
|
|
12
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
|
|
25
|
+
exports.Schnorr = exports.HashCommitment = void 0;
|
|
14
26
|
__exportStar(require("./curves"), exports);
|
|
15
|
-
__exportStar(require("./util"), exports);
|
|
16
27
|
__exportStar(require("./openssl"), exports);
|
|
17
|
-
|
|
28
|
+
__exportStar(require("./shamir"), exports);
|
|
29
|
+
__exportStar(require("./tss"), exports);
|
|
30
|
+
exports.HashCommitment = __importStar(require("./hashCommitment"));
|
|
31
|
+
exports.Schnorr = __importStar(require("./schnorrProof"));
|
|
32
|
+
__exportStar(require("./types"), exports);
|
|
33
|
+
__exportStar(require("./util"), exports);
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLHdDQUFzQjtBQUV0QixtRUFBbUQ7QUFDbkQsMERBQTBDO0FBQzFDLDBDQUF3QjtBQUN4Qix5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2N1cnZlcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZW5zc2wnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFtaXInO1xuZXhwb3J0ICogZnJvbSAnLi90c3MnO1xuXG5leHBvcnQgKiBhcyBIYXNoQ29tbWl0bWVudCBmcm9tICcuL2hhc2hDb21taXRtZW50JztcbmV4cG9ydCAqIGFzIFNjaG5vcnIgZnJvbSAnLi9zY2hub3JyUHJvb2YnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwnO1xuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { BaseCurve as Curve } from './curves';
|
|
3
|
+
import { SchnorrProof } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Create a Schnorr Proof of knowledge of the discrete log of an Elliptic-curve point.
|
|
6
|
+
* @param A The curve point.
|
|
7
|
+
* @param a The discrete log of the curve point.
|
|
8
|
+
* @param curve The elliptic curve.
|
|
9
|
+
* @param additionalCtx Additional contextual information to associate with the proof.
|
|
10
|
+
* @returns The created proof.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createSchnorrProof(A: bigint, a: bigint, curve: Curve, additionalCtx?: Buffer): SchnorrProof;
|
|
13
|
+
/**
|
|
14
|
+
* Verify a Schnorr Proof of knowledge of the discrete log of an Elliptic-curve point.
|
|
15
|
+
* @param A The curve point.
|
|
16
|
+
* @param proof The schnorr proof.
|
|
17
|
+
* @param curve The elliptic curve.
|
|
18
|
+
* @param additionalCtx Additional contextual information that is supposed to associate with the proof.
|
|
19
|
+
* @returns True if the proof checks out.
|
|
20
|
+
*/
|
|
21
|
+
export declare function verifySchnorrProof(A: bigint, proof: SchnorrProof, curve: Curve, additionalCtx?: Buffer): boolean;
|
|
22
|
+
//# sourceMappingURL=schnorrProof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schnorrProof.d.ts","sourceRoot":"","sources":["../../src/schnorrProof.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,KAAK,EACZ,aAAa,GAAE,MAAwB,GACtC,YAAY,CAYd;AAuBD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,KAAK,EACZ,aAAa,GAAE,MAAwB,GACtC,OAAO,CAQT"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifySchnorrProof = exports.createSchnorrProof = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Implementation of Schnorr Non-interactive Zero-Knowledge Proof.
|
|
6
|
+
* @see {@link https://datatracker.ietf.org/doc/rfc8235/}
|
|
7
|
+
*/
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
const util_1 = require("./util");
|
|
10
|
+
/**
|
|
11
|
+
* Create a Schnorr Proof of knowledge of the discrete log of an Elliptic-curve point.
|
|
12
|
+
* @param A The curve point.
|
|
13
|
+
* @param a The discrete log of the curve point.
|
|
14
|
+
* @param curve The elliptic curve.
|
|
15
|
+
* @param additionalCtx Additional contextual information to associate with the proof.
|
|
16
|
+
* @returns The created proof.
|
|
17
|
+
*/
|
|
18
|
+
function createSchnorrProof(A, a, curve, additionalCtx = Buffer.from('')) {
|
|
19
|
+
const v = curve.scalarRandom();
|
|
20
|
+
const V = curve.basePointMult(v);
|
|
21
|
+
const c = nonInteractiveChallenge(V, A, curve, additionalCtx);
|
|
22
|
+
const r = curve.scalarSub(v, curve.scalarMult(a, c));
|
|
23
|
+
return {
|
|
24
|
+
vPoint: V,
|
|
25
|
+
r: r,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.createSchnorrProof = createSchnorrProof;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate challenge for NIZK schnorr proof using Fiat-Shamir transform.
|
|
31
|
+
*
|
|
32
|
+
* @param V The point/public value corresponding to the random scalar value v chosen by the prover.
|
|
33
|
+
* @param A The point to be proved.
|
|
34
|
+
* @param curve The elliptic curve.
|
|
35
|
+
* @param additionalCtx Additional contextual information to associate with the proof.
|
|
36
|
+
* @returns The calculated challenge.
|
|
37
|
+
*/
|
|
38
|
+
function nonInteractiveChallenge(V, A, curve, additionalCtx) {
|
|
39
|
+
const G = curve.basePointMult(BigInt(1));
|
|
40
|
+
const hash = crypto_1.createHash('sha256');
|
|
41
|
+
hash.update(util_1.bigIntToBufferBE(G, 32));
|
|
42
|
+
hash.update(util_1.bigIntToBufferBE(V, 32));
|
|
43
|
+
hash.update(util_1.bigIntToBufferBE(A, 32));
|
|
44
|
+
hash.update(additionalCtx);
|
|
45
|
+
return util_1.bigIntFromBufferBE(hash.digest());
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Verify a Schnorr Proof of knowledge of the discrete log of an Elliptic-curve point.
|
|
49
|
+
* @param A The curve point.
|
|
50
|
+
* @param proof The schnorr proof.
|
|
51
|
+
* @param curve The elliptic curve.
|
|
52
|
+
* @param additionalCtx Additional contextual information that is supposed to associate with the proof.
|
|
53
|
+
* @returns True if the proof checks out.
|
|
54
|
+
*/
|
|
55
|
+
function verifySchnorrProof(A, proof, curve, additionalCtx = Buffer.from('')) {
|
|
56
|
+
const c = nonInteractiveChallenge(proof.vPoint, A, curve, additionalCtx);
|
|
57
|
+
const rG = curve.basePointMult(proof.r);
|
|
58
|
+
const cA = curve.pointMultiply(A, curve.scalarReduce(c));
|
|
59
|
+
return proof.vPoint === curve.pointAdd(rG, cA);
|
|
60
|
+
}
|
|
61
|
+
exports.verifySchnorrProof = verifySchnorrProof;
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nobm9yclByb29mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaG5vcnJQcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxtQ0FBb0M7QUFHcEMsaUNBQThEO0FBRTlEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsQ0FBUyxFQUNULENBQVMsRUFDVCxLQUFZLEVBQ1osZ0JBQXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBRXZDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpDLE1BQU0sQ0FBQyxHQUFHLHVCQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTlELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckQsT0FBTztRQUNMLE1BQU0sRUFBRSxDQUFDO1FBQ1QsQ0FBQyxFQUFFLENBQUM7S0FDTCxDQUFDO0FBQ0osQ0FBQztBQWpCRCxnREFpQkM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsdUJBQXVCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFZLEVBQUUsYUFBcUI7SUFDeEYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QyxNQUFNLElBQUksR0FBRyxtQkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFM0IsT0FBTyx5QkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxDQUFTLEVBQ1QsS0FBbUIsRUFDbkIsS0FBWSxFQUNaLGdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUV2QyxNQUFNLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFekUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBYkQsZ0RBYUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIFNjaG5vcnIgTm9uLWludGVyYWN0aXZlIFplcm8tS25vd2xlZGdlIFByb29mLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvcmZjODIzNS99XG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQmFzZUN1cnZlIGFzIEN1cnZlIH0gZnJvbSAnLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgU2Nobm9yclByb29mIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBiaWdJbnRGcm9tQnVmZmVyQkUsIGJpZ0ludFRvQnVmZmVyQkUgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZSBhIFNjaG5vcnIgUHJvb2Ygb2Yga25vd2xlZGdlIG9mIHRoZSBkaXNjcmV0ZSBsb2cgb2YgYW4gRWxsaXB0aWMtY3VydmUgcG9pbnQuXG4gKiBAcGFyYW0gQSBUaGUgY3VydmUgcG9pbnQuXG4gKiBAcGFyYW0gYSBUaGUgZGlzY3JldGUgbG9nIG9mIHRoZSBjdXJ2ZSBwb2ludC5cbiAqIEBwYXJhbSBjdXJ2ZSBUaGUgZWxsaXB0aWMgY3VydmUuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEN0eCBBZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb29mLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcHJvb2YuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY2hub3JyUHJvb2YoXG4gIEE6IGJpZ2ludCxcbiAgYTogYmlnaW50LFxuICBjdXJ2ZTogQ3VydmUsXG4gIGFkZGl0aW9uYWxDdHg6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCcnKVxuKTogU2Nobm9yclByb29mIHtcbiAgY29uc3QgdiA9IGN1cnZlLnNjYWxhclJhbmRvbSgpO1xuICBjb25zdCBWID0gY3VydmUuYmFzZVBvaW50TXVsdCh2KTtcblxuICBjb25zdCBjID0gbm9uSW50ZXJhY3RpdmVDaGFsbGVuZ2UoViwgQSwgY3VydmUsIGFkZGl0aW9uYWxDdHgpO1xuXG4gIGNvbnN0IHIgPSBjdXJ2ZS5zY2FsYXJTdWIodiwgY3VydmUuc2NhbGFyTXVsdChhLCBjKSk7XG5cbiAgcmV0dXJuIHtcbiAgICB2UG9pbnQ6IFYsXG4gICAgcjogcixcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgY2hhbGxlbmdlIGZvciBOSVpLIHNjaG5vcnIgcHJvb2YgdXNpbmcgRmlhdC1TaGFtaXIgdHJhbnNmb3JtLlxuICpcbiAqIEBwYXJhbSBWIFRoZSBwb2ludC9wdWJsaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgcmFuZG9tIHNjYWxhciB2YWx1ZSB2IGNob3NlbiBieSB0aGUgcHJvdmVyLlxuICogQHBhcmFtIEEgVGhlIHBvaW50IHRvIGJlIHByb3ZlZC5cbiAqIEBwYXJhbSBjdXJ2ZSBUaGUgZWxsaXB0aWMgY3VydmUuXG4gKiBAcGFyYW0gYWRkaXRpb25hbEN0eCBBZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb29mLlxuICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgY2hhbGxlbmdlLlxuICovXG5mdW5jdGlvbiBub25JbnRlcmFjdGl2ZUNoYWxsZW5nZShWOiBiaWdpbnQsIEE6IGJpZ2ludCwgY3VydmU6IEN1cnZlLCBhZGRpdGlvbmFsQ3R4OiBCdWZmZXIpOiBiaWdpbnQge1xuICBjb25zdCBHID0gY3VydmUuYmFzZVBvaW50TXVsdChCaWdJbnQoMSkpO1xuXG4gIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShHLCAzMikpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKFYsIDMyKSk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoQSwgMzIpKTtcbiAgaGFzaC51cGRhdGUoYWRkaXRpb25hbEN0eCk7XG5cbiAgcmV0dXJuIGJpZ0ludEZyb21CdWZmZXJCRShoYXNoLmRpZ2VzdCgpKTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSBTY2hub3JyIFByb29mIG9mIGtub3dsZWRnZSBvZiB0aGUgZGlzY3JldGUgbG9nIG9mIGFuIEVsbGlwdGljLWN1cnZlIHBvaW50LlxuICogQHBhcmFtIEEgVGhlIGN1cnZlIHBvaW50LlxuICogQHBhcmFtIHByb29mIFRoZSBzY2hub3JyIHByb29mLlxuICogQHBhcmFtIGN1cnZlIFRoZSBlbGxpcHRpYyBjdXJ2ZS5cbiAqIEBwYXJhbSBhZGRpdGlvbmFsQ3R4IEFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0aGF0IGlzIHN1cHBvc2VkIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBwcm9vZi5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb29mIGNoZWNrcyBvdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTY2hub3JyUHJvb2YoXG4gIEE6IGJpZ2ludCxcbiAgcHJvb2Y6IFNjaG5vcnJQcm9vZixcbiAgY3VydmU6IEN1cnZlLFxuICBhZGRpdGlvbmFsQ3R4OiBCdWZmZXIgPSBCdWZmZXIuZnJvbSgnJylcbik6IGJvb2xlYW4ge1xuICBjb25zdCBjID0gbm9uSW50ZXJhY3RpdmVDaGFsbGVuZ2UocHJvb2YudlBvaW50LCBBLCBjdXJ2ZSwgYWRkaXRpb25hbEN0eCk7XG5cbiAgY29uc3QgckcgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KHByb29mLnIpO1xuXG4gIGNvbnN0IGNBID0gY3VydmUucG9pbnRNdWx0aXBseShBLCBjdXJ2ZS5zY2FsYXJSZWR1Y2UoYykpO1xuXG4gIHJldHVybiBwcm9vZi52UG9pbnQgPT09IGN1cnZlLnBvaW50QWRkKHJHLCBjQSk7XG59XG4iXX0=
|