@bitgo/sdk-core 38.23.0 → 39.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +37 -3
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/errors.d.ts +6 -0
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +11 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts +22 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +31 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +18 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +39 -3
- package/dist/src/bitgo/safe/recovery.d.ts +44 -3
- package/dist/src/bitgo/safe/recovery.d.ts.map +1 -1
- package/dist/src/bitgo/safe/recovery.js +74 -46
- package/dist/src/bitgo/safe/safe.d.ts +5 -5
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +24 -16
- package/dist/src/bitgo/tss/common.d.ts +11 -2
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +16 -4
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +10 -5
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +11 -6
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +6 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +5 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +5 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +4 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +16 -21
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +32 -4
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +92 -3
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +5 -5
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +51 -76
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +40 -21
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +2 -13
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +12 -1
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts +1 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +5 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +13 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +1 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +4 -3
- package/dist/src/bitgo/wallet/wallet.d.ts +32 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +210 -83
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +23 -9
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +29 -1
- package/dist/test/unit/bitgo/safe/recovery.d.ts.map +1 -1
- package/dist/test/unit/bitgo/safe/recovery.js +164 -6
- package/dist/test/unit/bitgo/safe/safe.js +54 -32
- package/dist/test/unit/bitgo/safe/safeDerivation.js +15 -53
- package/dist/test/unit/bitgo/tss/common.js +12 -5
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +422 -5
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +215 -44
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +37 -1
- package/dist/test/unit/bitgo/wallet/BuildParams.js +14 -1
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +29 -49
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +5 -4
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +180 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
* soft-derivation remains here (it needs Ed25519BIP32/Eddsa, which live in sdk-core).
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.softDeriveChildPubEd25519AtPath = softDeriveChildPubEd25519AtPath;
|
|
13
14
|
exports.softDeriveChildPubEd25519 = softDeriveChildPubEd25519;
|
|
15
|
+
exports.softDeriveChildPrvEd25519AtPath = softDeriveChildPrvEd25519AtPath;
|
|
16
|
+
const crypto_1 = require("crypto");
|
|
14
17
|
const account_lib_1 = require("../../account-lib");
|
|
15
18
|
const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
|
|
16
19
|
let eddsaPromise;
|
|
@@ -23,13 +26,46 @@ function getEddsa() {
|
|
|
23
26
|
}
|
|
24
27
|
return eddsaPromise;
|
|
25
28
|
}
|
|
29
|
+
/** Soft-derive an unhardened path and return the derived raw 32-byte public key. */
|
|
30
|
+
async function softDeriveChildPubEd25519AtPath(compositePub, path) {
|
|
31
|
+
(0, sdk_lib_safes_1.assertBip32Path)(path, { hardened: false });
|
|
32
|
+
const { pub, chainCode } = (0, sdk_lib_safes_1.decodeDerivableEd25519Pub)(compositePub);
|
|
33
|
+
const eddsa = await getEddsa();
|
|
34
|
+
return Buffer.from(eddsa.deriveUnhardened(Buffer.concat([pub, chainCode]).toString('hex'), path).slice(0, 64), 'hex');
|
|
35
|
+
}
|
|
26
36
|
/** Soft-derive `m/<index>` and return the derived raw 32-byte public key. */
|
|
27
37
|
async function softDeriveChildPubEd25519(compositePub, index) {
|
|
28
38
|
if (!Number.isInteger(index) || index < 0 || index > 0x7fffffff) {
|
|
29
39
|
throw new Error(`ed25519 safe co-signer derivation index must be non-hardened, got ${index}`);
|
|
30
40
|
}
|
|
31
|
-
|
|
41
|
+
return softDeriveChildPubEd25519AtPath(compositePub, `m/${index}`);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Soft-derive an ed25519 co-signer child at an unhardened path, returning the private
|
|
45
|
+
* extended-key material — the clamped scalar `kL`, the nonce prefix `kR`, and the matching
|
|
46
|
+
* public point — from a root secret seed plus the root chain code carried on the keycard.
|
|
47
|
+
*/
|
|
48
|
+
async function softDeriveChildPrvEd25519AtPath(params) {
|
|
49
|
+
const { seedStrKey, chainCode, path } = params;
|
|
50
|
+
(0, sdk_lib_safes_1.assertBip32Path)(path, { hardened: false });
|
|
51
|
+
const seed = (0, sdk_lib_safes_1.decodeEd25519StrKeySecretSeed)(seedStrKey);
|
|
52
|
+
const chainCodeBuf = (0, sdk_lib_safes_1.decodeEd25519ChainCode)(chainCode);
|
|
32
53
|
const eddsa = await getEddsa();
|
|
33
|
-
|
|
54
|
+
const h = (0, crypto_1.createHash)('sha512').update(seed).digest();
|
|
55
|
+
const sk = (0, account_lib_1.clamp)((0, account_lib_1.bigIntFromBufferLE)(h.subarray(0, 32)));
|
|
56
|
+
const prefix = (0, account_lib_1.bigIntFromBufferBE)(h.subarray(32));
|
|
57
|
+
const pk = account_lib_1.Eddsa.curve.basePointMult(sk);
|
|
58
|
+
if (!eddsa.hdTree) {
|
|
59
|
+
throw new Error('Eddsa HD tree is not initialized');
|
|
60
|
+
}
|
|
61
|
+
const derived = eddsa.hdTree.privateDerive({ pk, sk, prefix, chaincode: (0, account_lib_1.bigIntFromBufferBE)(chainCodeBuf) }, path);
|
|
62
|
+
if (derived.prefix === undefined) {
|
|
63
|
+
throw new Error('soft derivation did not produce a nonce prefix');
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
kL: (0, account_lib_1.bigIntToBufferLE)(derived.sk, 32),
|
|
67
|
+
kR: (0, account_lib_1.bigIntToBufferBE)(derived.prefix, 32),
|
|
68
|
+
pub: (0, account_lib_1.bigIntToBufferLE)(derived.pk, 32),
|
|
69
|
+
};
|
|
34
70
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7QUFzQ0gsMEVBS0M7QUFHRCw4REFLQztBQU9ELDBFQTBCQztBQWxGRCxtQ0FBb0M7QUFDcEMsbURBUTJCO0FBQzNCLHdEQUs4QjtBQVM5QixJQUFJLFlBQXdDLENBQUM7QUFDN0MsU0FBUyxRQUFRO0lBQ2YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLFlBQVksR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsbUJBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSwwQkFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pGLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ3RCLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELG9GQUFvRjtBQUM3RSxLQUFLLFVBQVUsK0JBQStCLENBQUMsWUFBb0IsRUFBRSxJQUFZO0lBQ3RGLElBQUEsK0JBQWUsRUFBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUEseUNBQXlCLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkUsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztJQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4SCxDQUFDO0FBRUQsNkVBQTZFO0FBQ3RFLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxZQUFvQixFQUFFLEtBQWE7SUFDakYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ0QsT0FBTywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLCtCQUErQixDQUFDLE1BSXJEO0lBQ0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQy9DLElBQUEsK0JBQWUsRUFBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxJQUFBLDZDQUE2QixFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLElBQUEsc0NBQXNCLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztJQUMvQixNQUFNLENBQUMsR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JELE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQUssRUFBQyxJQUFBLGdDQUFrQixFQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFBLGdDQUFrQixFQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUEsZ0NBQWtCLEVBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsSCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLElBQUEsOEJBQWdCLEVBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDcEMsRUFBRSxFQUFFLElBQUEsOEJBQWdCLEVBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDeEMsR0FBRyxFQUFFLElBQUEsOEJBQWdCLEVBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7S0FDdEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVkMjU1MTkgc2FmZS1yb290IHB1YmxpYyBkZXJpdmF0aW9uIG1hdGVyaWFsIGFuZCBTdGVsbGFyIHVzZXIta2V5IGNvZGVjcy5cbiAqXG4gKiBTYWZlIGJhY2t1cCBhbmQgQml0R28gcm9vdHMgc3RvcmUgcmF3IHB1YmxpYyBrZXkgKDMyIGJ5dGVzKSB8fCByYXcgY2hhaW4gY29kZSAoMzIgYnl0ZXMpLFxuICogZW5jb2RlZCB0b2dldGhlciBhcyBjYW5vbmljYWwgdW5wYWRkZWQgUkZDIDQ2NDggYmFzZTMyLiBDb2luLXNwZWNpZmljIHB1YmxpYy1rZXkgZW5jb2RpbmdzIGFyZVxuICogYXBwbGllZCBvbmx5IHRvIGRlcml2ZWQgd2FsbGV0IGNoaWxkcmVuLlxuICpcbiAqIFRoZSBwdXJlIGNvZGVjcyArIGNvbXBvc2l0ZS1wdWIgZW5jb2RpbmcgbW92ZWQgdG8gQGJpdGdvL3Nkay1saWItc2FmZXMuIE9ubHkgdGhlIFdBU01cbiAqIHNvZnQtZGVyaXZhdGlvbiByZW1haW5zIGhlcmUgKGl0IG5lZWRzIEVkMjU1MTlCSVAzMi9FZGRzYSwgd2hpY2ggbGl2ZSBpbiBzZGstY29yZSkuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge1xuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBiaWdJbnRGcm9tQnVmZmVyQkUsXG4gIGJpZ0ludEZyb21CdWZmZXJMRSxcbiAgYmlnSW50VG9CdWZmZXJCRSxcbiAgYmlnSW50VG9CdWZmZXJMRSxcbiAgY2xhbXAsXG59IGZyb20gJy4uLy4uL2FjY291bnQtbGliJztcbmltcG9ydCB7XG4gIGFzc2VydEJpcDMyUGF0aCxcbiAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZGVjb2RlRWQyNTUxOUNoYWluQ29kZSxcbiAgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQsXG59IGZyb20gJ0BiaXRnby9zZGstbGliLXNhZmVzJztcblxuLyoqIEVkMjU1MTkgZXh0ZW5kZWQta2V5IGhhbHZlcyArIHB1YmxpYyBwb2ludCwgcGFyYW1ldGVyaXNlZCBieSBlbmNvZGluZyAoQnVmZmVyIHJhdywgc3RyaW5nIGhleCkuICovXG5leHBvcnQgdHlwZSBFZDI1NTE5RXh0ZW5kZWRLZXlQYXJ0czxUPiA9IHtcbiAgcmVhZG9ubHkga0w6IFQ7IC8vIGNsYW1wZWQgc2lnbmluZyBzY2FsYXJcbiAgcmVhZG9ubHkga1I6IFQ7IC8vIG5vbmNlIHByZWZpeFxuICByZWFkb25seSBwdWI6IFQ7IC8vIDMyLWJ5dGUgcHVibGljIGtleVxufTtcblxubGV0IGVkZHNhUHJvbWlzZTogUHJvbWlzZTxFZGRzYT4gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRFZGRzYSgpOiBQcm9taXNlPEVkZHNhPiB7XG4gIGlmICghZWRkc2FQcm9taXNlKSB7XG4gICAgZWRkc2FQcm9taXNlID0gKGFzeW5jICgpID0+IEVkZHNhLmluaXRpYWxpemUoYXdhaXQgRWQyNTUxOUJJUDMyLmluaXRpYWxpemUoKSkpKCk7XG4gICAgZWRkc2FQcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgIGVkZHNhUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZWRkc2FQcm9taXNlO1xufVxuXG4vKiogU29mdC1kZXJpdmUgYW4gdW5oYXJkZW5lZCBwYXRoIGFuZCByZXR1cm4gdGhlIGRlcml2ZWQgcmF3IDMyLWJ5dGUgcHVibGljIGtleS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoKGNvbXBvc2l0ZVB1Yjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBhc3NlcnRCaXAzMlBhdGgocGF0aCwgeyBoYXJkZW5lZDogZmFsc2UgfSk7XG4gIGNvbnN0IHsgcHViLCBjaGFpbkNvZGUgfSA9IGRlY29kZURlcml2YWJsZUVkMjU1MTlQdWIoY29tcG9zaXRlUHViKTtcbiAgY29uc3QgZWRkc2EgPSBhd2FpdCBnZXRFZGRzYSgpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZWRkc2EuZGVyaXZlVW5oYXJkZW5lZChCdWZmZXIuY29uY2F0KFtwdWIsIGNoYWluQ29kZV0pLnRvU3RyaW5nKCdoZXgnKSwgcGF0aCkuc2xpY2UoMCwgNjQpLCAnaGV4Jyk7XG59XG5cbi8qKiBTb2Z0LWRlcml2ZSBgbS88aW5kZXg+YCBhbmQgcmV0dXJuIHRoZSBkZXJpdmVkIHJhdyAzMi1ieXRlIHB1YmxpYyBrZXkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOShjb21wb3NpdGVQdWI6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gMHg3ZmZmZmZmZikge1xuICAgIHRocm93IG5ldyBFcnJvcihgZWQyNTUxOSBzYWZlIGNvLXNpZ25lciBkZXJpdmF0aW9uIGluZGV4IG11c3QgYmUgbm9uLWhhcmRlbmVkLCBnb3QgJHtpbmRleH1gKTtcbiAgfVxuICByZXR1cm4gc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChjb21wb3NpdGVQdWIsIGBtLyR7aW5kZXh9YCk7XG59XG5cbi8qKlxuICogU29mdC1kZXJpdmUgYW4gZWQyNTUxOSBjby1zaWduZXIgY2hpbGQgYXQgYW4gdW5oYXJkZW5lZCBwYXRoLCByZXR1cm5pbmcgdGhlIHByaXZhdGVcbiAqIGV4dGVuZGVkLWtleSBtYXRlcmlhbCDigJQgdGhlIGNsYW1wZWQgc2NhbGFyIGBrTGAsIHRoZSBub25jZSBwcmVmaXggYGtSYCwgYW5kIHRoZSBtYXRjaGluZ1xuICogcHVibGljIHBvaW50IOKAlCBmcm9tIGEgcm9vdCBzZWNyZXQgc2VlZCBwbHVzIHRoZSByb290IGNoYWluIGNvZGUgY2FycmllZCBvbiB0aGUga2V5Y2FyZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvZnREZXJpdmVDaGlsZFBydkVkMjU1MTlBdFBhdGgocGFyYW1zOiB7XG4gIHNlZWRTdHJLZXk6IHN0cmluZztcbiAgY2hhaW5Db2RlOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn0pOiBQcm9taXNlPEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzPEJ1ZmZlcj4+IHtcbiAgY29uc3QgeyBzZWVkU3RyS2V5LCBjaGFpbkNvZGUsIHBhdGggfSA9IHBhcmFtcztcbiAgYXNzZXJ0QmlwMzJQYXRoKHBhdGgsIHsgaGFyZGVuZWQ6IGZhbHNlIH0pO1xuICBjb25zdCBzZWVkID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoc2VlZFN0cktleSk7XG4gIGNvbnN0IGNoYWluQ29kZUJ1ZiA9IGRlY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlKTtcbiAgY29uc3QgZWRkc2EgPSBhd2FpdCBnZXRFZGRzYSgpO1xuICBjb25zdCBoID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlZWQpLmRpZ2VzdCgpO1xuICBjb25zdCBzayA9IGNsYW1wKGJpZ0ludEZyb21CdWZmZXJMRShoLnN1YmFycmF5KDAsIDMyKSkpO1xuICBjb25zdCBwcmVmaXggPSBiaWdJbnRGcm9tQnVmZmVyQkUoaC5zdWJhcnJheSgzMikpO1xuICBjb25zdCBwayA9IEVkZHNhLmN1cnZlLmJhc2VQb2ludE11bHQoc2spO1xuICBpZiAoIWVkZHNhLmhkVHJlZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRWRkc2EgSEQgdHJlZSBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgfVxuICBjb25zdCBkZXJpdmVkID0gZWRkc2EuaGRUcmVlLnByaXZhdGVEZXJpdmUoeyBwaywgc2ssIHByZWZpeCwgY2hhaW5jb2RlOiBiaWdJbnRGcm9tQnVmZmVyQkUoY2hhaW5Db2RlQnVmKSB9LCBwYXRoKTtcbiAgaWYgKGRlcml2ZWQucHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvZnQgZGVyaXZhdGlvbiBkaWQgbm90IHByb2R1Y2UgYSBub25jZSBwcmVmaXgnKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGtMOiBiaWdJbnRUb0J1ZmZlckxFKGRlcml2ZWQuc2ssIDMyKSxcbiAgICBrUjogYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkLnByZWZpeCwgMzIpLFxuICAgIHB1YjogYmlnSW50VG9CdWZmZXJMRShkZXJpdmVkLnBrLCAzMiksXG4gIH07XG59XG4iXX0=
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Buffer } from 'buffer';
|
|
7
7
|
import type { RootKeyType } from '@bitgo/public-types';
|
|
8
|
+
import { type Ed25519ExtendedKeyParts } from './derivableEd25519Pub';
|
|
8
9
|
import { BitGoBase } from '../bitgoBase';
|
|
9
10
|
export type DecryptedMpcSafeRoot = {
|
|
10
11
|
signing: Buffer;
|
|
@@ -20,6 +21,14 @@ export type MpcSafeRoot = {
|
|
|
20
21
|
backup: DecryptedMpcSafeRoot;
|
|
21
22
|
bitgo: string;
|
|
22
23
|
};
|
|
24
|
+
export type Ed25519MultisigSafeRoot = {
|
|
25
|
+
user: string;
|
|
26
|
+
backup: {
|
|
27
|
+
prv: string;
|
|
28
|
+
chainCode: string;
|
|
29
|
+
};
|
|
30
|
+
bitgo: string;
|
|
31
|
+
};
|
|
23
32
|
export type Secp256k1MultisigChildKeys = {
|
|
24
33
|
user: {
|
|
25
34
|
prv: string;
|
|
@@ -38,6 +47,31 @@ export type EcdsaMpcChildKeys = {
|
|
|
38
47
|
user: string;
|
|
39
48
|
backup: string;
|
|
40
49
|
};
|
|
50
|
+
export type EddsaMpcChildKeys = EcdsaMpcChildKeys;
|
|
51
|
+
/**
|
|
52
|
+
* A hardened (SLIP-0010) ed25519 child. The `kind` discriminator prevents a raw seed from being
|
|
53
|
+
* mistaken for an extended key downstream — both are 32-byte values that `isValidPub` would accept.
|
|
54
|
+
*/
|
|
55
|
+
export type SafeEd25519SeedKey = {
|
|
56
|
+
readonly kind: 'seed';
|
|
57
|
+
readonly seed: string;
|
|
58
|
+
readonly pub: string;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* A soft (BIP32-Ed25519) ed25519 child. No 32-byte seed maps back to a soft-derived child, so the
|
|
62
|
+
* signer needs both halves directly: `kL` (the clamped scalar) and `kR` (the nonce prefix).
|
|
63
|
+
*/
|
|
64
|
+
export type SafeEd25519ExtendedKey = {
|
|
65
|
+
readonly kind: 'extended';
|
|
66
|
+
} & Ed25519ExtendedKeyParts<string>;
|
|
67
|
+
/** The three ed25519 co-signer children. BitGo is pub-only: its private key stays in the HSM. */
|
|
68
|
+
export type Ed25519MultisigChildKeys = {
|
|
69
|
+
user: SafeEd25519SeedKey;
|
|
70
|
+
backup: SafeEd25519ExtendedKey;
|
|
71
|
+
bitgo: {
|
|
72
|
+
readonly pub: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
41
75
|
export type DerivedSafeWalletKeys = {
|
|
42
76
|
slot: 'secp256k1Multisig';
|
|
43
77
|
path: string;
|
|
@@ -46,6 +80,14 @@ export type DerivedSafeWalletKeys = {
|
|
|
46
80
|
slot: 'ecdsaMpc';
|
|
47
81
|
path: string;
|
|
48
82
|
keys: EcdsaMpcChildKeys;
|
|
83
|
+
} | {
|
|
84
|
+
slot: 'eddsaMpc';
|
|
85
|
+
path: string;
|
|
86
|
+
keys: EddsaMpcChildKeys;
|
|
87
|
+
} | {
|
|
88
|
+
slot: 'ed25519Multisig';
|
|
89
|
+
path: string;
|
|
90
|
+
keys: Ed25519MultisigChildKeys;
|
|
49
91
|
};
|
|
50
92
|
export type SafeRecoverKeyParams = {
|
|
51
93
|
userKey: string;
|
|
@@ -55,7 +97,7 @@ export type SafeRecoverKeyParams = {
|
|
|
55
97
|
};
|
|
56
98
|
export type DecryptedSafeRoots = {
|
|
57
99
|
secp256k1Multisig: OnchainSafeRoot;
|
|
58
|
-
ed25519Multisig:
|
|
100
|
+
ed25519Multisig: Ed25519MultisigSafeRoot;
|
|
59
101
|
ecdsaMpc: MpcSafeRoot;
|
|
60
102
|
eddsaMpc: MpcSafeRoot;
|
|
61
103
|
};
|
|
@@ -68,8 +110,7 @@ export declare function decryptSafeKeycard(params: {
|
|
|
68
110
|
}): Promise<DecryptedSafeRoots>;
|
|
69
111
|
/**
|
|
70
112
|
* Derives a Safe wallet's child keys at the BIP44 path for a given slot and account.
|
|
71
|
-
*
|
|
72
|
-
* until their derivation arms land (WCN-2736/WCN-2737/WCN-2894).
|
|
113
|
+
* Supports all four slots: `secp256k1Multisig`, `ed25519Multisig`, `ecdsaMpc`, and `eddsaMpc`.
|
|
73
114
|
*/
|
|
74
115
|
export declare function deriveSafeWalletKeys(params: {
|
|
75
116
|
coin: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/recovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ const crypto_1 = require("crypto");
|
|
|
7
7
|
const utxo_lib_1 = require("@bitgo/utxo-lib");
|
|
8
8
|
const statics_1 = require("@bitgo/statics");
|
|
9
9
|
const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
|
|
10
|
+
const derivableEd25519Pub_1 = require("./derivableEd25519Pub");
|
|
10
11
|
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
11
12
|
const errors_1 = require("../errors");
|
|
12
13
|
const keyShareEnvelope_1 = require("../utils/tss/keyShareEnvelope");
|
|
@@ -31,70 +32,57 @@ async function decryptSafeKeycard(params) {
|
|
|
31
32
|
throw new errors_1.IncorrectPasswordError('unable to decrypt the safe keycard with the provided password', e);
|
|
32
33
|
}
|
|
33
34
|
};
|
|
35
|
+
// Only box B's ed25519Multisig slot may carry the derivable `{ prv, chainCode }` object; every
|
|
36
|
+
// other entry — all of boxes A and C, and every non-ed25519 slot in box B — is a bare string and
|
|
37
|
+
// fails closed if it carries the object instead.
|
|
38
|
+
const requireBareString = (entry) => {
|
|
39
|
+
if (sdk_lib_safes_1.Ed25519ChainCodeEntryCodec.is(entry)) {
|
|
40
|
+
throw new Error('unexpected ed25519 chain-code entry where a bare string was required');
|
|
41
|
+
}
|
|
42
|
+
return entry;
|
|
43
|
+
};
|
|
44
|
+
const decryptEd25519Backup = async (entry) => {
|
|
45
|
+
if (!sdk_lib_safes_1.Ed25519ChainCodeEntryCodec.is(entry)) {
|
|
46
|
+
throw new Error('ed25519 backup root must carry a chain code');
|
|
47
|
+
}
|
|
48
|
+
return { prv: await decryptRoot(entry.prv), chainCode: entry.chainCode };
|
|
49
|
+
};
|
|
34
50
|
return {
|
|
35
51
|
secp256k1Multisig: {
|
|
36
|
-
user: await decryptRoot(userRoots.secp256k1Multisig),
|
|
37
|
-
backup: await decryptRoot(backupRoots.secp256k1Multisig),
|
|
38
|
-
bitgo: bitgoRoots.secp256k1Multisig,
|
|
52
|
+
user: await decryptRoot(requireBareString(userRoots.secp256k1Multisig)),
|
|
53
|
+
backup: await decryptRoot(requireBareString(backupRoots.secp256k1Multisig)),
|
|
54
|
+
bitgo: requireBareString(bitgoRoots.secp256k1Multisig),
|
|
39
55
|
},
|
|
40
56
|
ed25519Multisig: {
|
|
41
|
-
user: await decryptRoot(userRoots.ed25519Multisig),
|
|
42
|
-
backup: await
|
|
43
|
-
bitgo: bitgoRoots.ed25519Multisig,
|
|
57
|
+
user: await decryptRoot(requireBareString(userRoots.ed25519Multisig)),
|
|
58
|
+
backup: await decryptEd25519Backup(backupRoots.ed25519Multisig),
|
|
59
|
+
bitgo: requireBareString(bitgoRoots.ed25519Multisig),
|
|
44
60
|
},
|
|
45
61
|
ecdsaMpc: {
|
|
46
|
-
user: unwrapMpcRoot(await decryptRoot(userRoots.ecdsaMpc)),
|
|
47
|
-
backup: unwrapMpcRoot(await decryptRoot(backupRoots.ecdsaMpc)),
|
|
48
|
-
bitgo: bitgoRoots.ecdsaMpc,
|
|
62
|
+
user: unwrapMpcRoot(await decryptRoot(requireBareString(userRoots.ecdsaMpc))),
|
|
63
|
+
backup: unwrapMpcRoot(await decryptRoot(requireBareString(backupRoots.ecdsaMpc))),
|
|
64
|
+
bitgo: requireBareString(bitgoRoots.ecdsaMpc),
|
|
49
65
|
},
|
|
50
66
|
eddsaMpc: {
|
|
51
|
-
user: unwrapMpcRoot(await decryptRoot(userRoots.eddsaMpc)),
|
|
52
|
-
backup: unwrapMpcRoot(await decryptRoot(backupRoots.eddsaMpc)),
|
|
53
|
-
bitgo: bitgoRoots.eddsaMpc,
|
|
67
|
+
user: unwrapMpcRoot(await decryptRoot(requireBareString(userRoots.eddsaMpc))),
|
|
68
|
+
backup: unwrapMpcRoot(await decryptRoot(requireBareString(backupRoots.eddsaMpc))),
|
|
69
|
+
bitgo: requireBareString(bitgoRoots.eddsaMpc),
|
|
54
70
|
},
|
|
55
71
|
};
|
|
56
72
|
}
|
|
57
|
-
function buildSafeUserPath(coinType, slotOrdinal, account) {
|
|
58
|
-
return `m/44'/${coinType}'/${slotOrdinal}'/${account}'`;
|
|
59
|
-
}
|
|
60
|
-
function buildSafeCosignerPath(coinType, slotOrdinal, account) {
|
|
61
|
-
return `m/44/${coinType}/${slotOrdinal}/${account}`;
|
|
62
|
-
}
|
|
63
73
|
/**
|
|
64
74
|
* Derives a Safe wallet's child keys at the BIP44 path for a given slot and account.
|
|
65
|
-
*
|
|
66
|
-
* until their derivation arms land (WCN-2736/WCN-2737/WCN-2894).
|
|
75
|
+
* Supports all four slots: `secp256k1Multisig`, `ed25519Multisig`, `ecdsaMpc`, and `eddsaMpc`.
|
|
67
76
|
*/
|
|
68
77
|
async function deriveSafeWalletKeys(params) {
|
|
69
78
|
if (!Number.isInteger(params.account) || params.account < 0 || params.account > statics_1.MAX_BIP32_INDEX) {
|
|
70
79
|
throw new Error(`deriveSafeWalletKeys: invalid account '${params.account}'`);
|
|
71
80
|
}
|
|
72
|
-
const coinType = statics_1.coins.get(params.coin).bip44CoinType;
|
|
73
|
-
if (coinType === undefined) {
|
|
74
|
-
throw new Error(`Coin '${params.coin}' has no BIP44 coin type and cannot derive a safe child`);
|
|
75
|
-
}
|
|
76
|
-
const slotOrdinal = statics_1.SAFE_ROOT_SLOT_ORDINALS[params.slot];
|
|
77
81
|
const { account, roots } = params;
|
|
82
|
+
const path = (0, sdk_lib_safes_1.buildSafeBip44Path)((0, sdk_lib_safes_1.getSafeBip44CoinType)(params.coin), params.slot, account);
|
|
83
|
+
const { coinType, slotOrdinal } = (0, sdk_lib_safes_1.parseSafeBip44Path)(path);
|
|
78
84
|
if (params.slot === 'secp256k1Multisig') {
|
|
79
|
-
|
|
80
|
-
const user = utxo_lib_1.bip32.fromBase58(root.user).derivePath(buildSafeUserPath(coinType, slotOrdinal, account));
|
|
81
|
-
const backup = utxo_lib_1.bip32.fromBase58(root.backup).derivePath(buildSafeCosignerPath(coinType, slotOrdinal, account));
|
|
82
|
-
const bitgo = utxo_lib_1.bip32.fromBase58(root.bitgo).derivePath(buildSafeCosignerPath(coinType, slotOrdinal, account));
|
|
83
|
-
if (!user.privateKey || !backup.privateKey) {
|
|
84
|
-
throw new Error('deriveSafeWalletKeys: user and backup roots must be private (xprv)');
|
|
85
|
-
}
|
|
86
|
-
if (bitgo.privateKey) {
|
|
87
|
-
throw new Error('deriveSafeWalletKeys: bitgo root must be public (xpub)');
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
slot: 'secp256k1Multisig',
|
|
91
|
-
path: buildSafeUserPath(coinType, slotOrdinal, account),
|
|
92
|
-
keys: {
|
|
93
|
-
user: { prv: user.toBase58(), pub: user.neutered().toBase58() },
|
|
94
|
-
backup: { prv: backup.toBase58(), pub: backup.neutered().toBase58() },
|
|
95
|
-
bitgo: { pub: bitgo.neutered().toBase58() },
|
|
96
|
-
},
|
|
97
|
-
};
|
|
85
|
+
return { slot: 'secp256k1Multisig', path, keys: (0, sdk_lib_safes_1.deriveSafeChildTriplet)(roots.secp256k1Multisig, path) };
|
|
98
86
|
}
|
|
99
87
|
if (params.slot === 'ecdsaMpc') {
|
|
100
88
|
const { commonKeychain, userChild, backupChild } = await sdk_lib_mpc_1.DklsVrfUtils.deriveSafeEcdsaMpcChild({
|
|
@@ -102,13 +90,53 @@ async function deriveSafeWalletKeys(params) {
|
|
|
102
90
|
backupRoot: roots.ecdsaMpc.backup,
|
|
103
91
|
account,
|
|
104
92
|
coinType,
|
|
93
|
+
safeSlotOrdinal: slotOrdinal,
|
|
105
94
|
});
|
|
106
95
|
return {
|
|
107
96
|
slot: 'ecdsaMpc',
|
|
108
|
-
path
|
|
97
|
+
path,
|
|
109
98
|
keys: { commonKeychain, user: userChild, backup: backupChild },
|
|
110
99
|
};
|
|
111
100
|
}
|
|
101
|
+
if (params.slot === 'eddsaMpc') {
|
|
102
|
+
const { commonKeychain, userChild, backupChild } = await sdk_lib_mpc_1.MpsVrfUtils.deriveSafeEddsaMpcChild({
|
|
103
|
+
userRoot: roots.eddsaMpc.user,
|
|
104
|
+
backupRoot: roots.eddsaMpc.backup,
|
|
105
|
+
account,
|
|
106
|
+
coinType,
|
|
107
|
+
safeSlotOrdinal: slotOrdinal,
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
slot: 'eddsaMpc',
|
|
111
|
+
path,
|
|
112
|
+
keys: { commonKeychain, user: userChild, backup: backupChild },
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (params.slot === 'ed25519Multisig') {
|
|
116
|
+
const root = roots.ed25519Multisig;
|
|
117
|
+
const cosignerPath = (0, sdk_lib_safes_1.toSoftTwinPath)(path);
|
|
118
|
+
const user = (0, sdk_lib_safes_1.deriveSafeChildEd25519Hardened)(root.user, path);
|
|
119
|
+
const backup = await (0, derivableEd25519Pub_1.softDeriveChildPrvEd25519AtPath)({
|
|
120
|
+
seedStrKey: root.backup.prv,
|
|
121
|
+
chainCode: root.backup.chainCode,
|
|
122
|
+
path: cosignerPath,
|
|
123
|
+
});
|
|
124
|
+
const bitgo = await (0, derivableEd25519Pub_1.softDeriveChildPubEd25519AtPath)(root.bitgo, cosignerPath);
|
|
125
|
+
return {
|
|
126
|
+
slot: 'ed25519Multisig',
|
|
127
|
+
path,
|
|
128
|
+
keys: {
|
|
129
|
+
user: { kind: 'seed', seed: user.prv, pub: (0, sdk_lib_safes_1.decodeEd25519StrKeyPublicKey)(user.pub).toString('hex') },
|
|
130
|
+
backup: {
|
|
131
|
+
kind: 'extended',
|
|
132
|
+
kL: backup.kL.toString('hex'),
|
|
133
|
+
kR: backup.kR.toString('hex'),
|
|
134
|
+
pub: backup.pub.toString('hex'),
|
|
135
|
+
},
|
|
136
|
+
bitgo: { pub: bitgo.toString('hex') },
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
112
140
|
throw new Error(`deriveSafeWalletKeys: slot '${params.slot}' is not supported yet`);
|
|
113
141
|
}
|
|
114
142
|
/**
|
|
@@ -145,4 +173,4 @@ async function buildSafeRecoverKeyParams(params) {
|
|
|
145
173
|
walletPassphrase,
|
|
146
174
|
};
|
|
147
175
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1EQSxnREFtREM7QUFlRCxvREF3REM7QUFPRCw4REFzQ0M7QUFwTkQsbUNBQXFDO0FBQ3JDLDhDQUF3QztBQUN4Qyw0Q0FBaUY7QUFFakYsd0RBQTJEO0FBQzNELG9EQUFrRDtBQUVsRCxzQ0FBbUQ7QUFDbkQsb0VBQXlFO0FBcUNsRSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFNeEM7SUFDQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUUxRSxNQUFNLFNBQVMsR0FBRyxJQUFBLG1DQUFtQixFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLElBQUEsbUNBQW1CLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEQsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQ0FBbUIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUVwRCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBWSxFQUFtQixFQUFFO1FBQzFELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLCtCQUFzQixDQUFDLCtEQUErRCxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQWlCLEVBQXdCLEVBQUU7UUFDaEUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFBLDJDQUF3QixFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7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RCxNQUFNLE9BQU8sR0FBRyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sU0FBUyxHQUFHLGdCQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDN0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDekYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDNUYsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLE9BQU87UUFDUCxTQUFTO1FBQ1QsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztRQUN4QixnQkFBZ0I7S0FDakIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEBleHBlcmltZW50YWwgV1JXLWZhY2luZyBzYWZlIHJlY292ZXJ5IGVudHJ5IHBvaW50cy5cbiAqL1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGNvaW5zLCBNQVhfQklQMzJfSU5ERVgsIFNBRkVfUk9PVF9TTE9UX09SRElOQUxTIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHR5cGUgeyBSb290S2V5VHlwZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VTYWZlS2V5Y2FyZEJveCB9IGZyb20gJ0BiaXRnby9zZGstbGliLXNhZmVzJztcbmltcG9ydCB7IERrbHNWcmZVdGlscyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5cbmV4cG9ydCB0eXBlIERlY3J5cHRlZE1wY1NhZmVSb290ID0geyBzaWduaW5nOiBCdWZmZXI7IHZyZjogQnVmZmVyIH07XG5cbmV4cG9ydCB0eXBlIE9uY2hhaW5TYWZlUm9vdCA9IHsgdXNlcjogc3RyaW5nOyBiYWNrdXA6IHN0cmluZzsgYml0Z286IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgTXBjU2FmZVJvb3QgPSB7IHVzZXI6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiYWNrdXA6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiaXRnbzogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFNlY3AyNTZrMU11bHRpc2lnQ2hpbGRLZXlzID0ge1xuICB1c2VyOiB7IHBydjogc3RyaW5nOyBwdWI6IHN0cmluZyB9O1xuICBiYWNrdXA6IHsgcHJ2OiBzdHJpbmc7IHB1Yjogc3RyaW5nIH07XG4gIGJpdGdvOiB7IHB1Yjogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBFY2RzYU1wY0NoaWxkS2V5cyA9IHtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbiAgdXNlcjogc3RyaW5nO1xuICBiYWNrdXA6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlcml2ZWRTYWZlV2FsbGV0S2V5cyA9XG4gIHwgeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnOyBwYXRoOiBzdHJpbmc7IGtleXM6IFNlY3AyNTZrMU11bHRpc2lnQ2hpbGRLZXlzIH1cbiAgfCB7IHNsb3Q6ICdlY2RzYU1wYyc7IHBhdGg6IHN0cmluZzsga2V5czogRWNkc2FNcGNDaGlsZEtleXMgfTtcblxuZXhwb3J0IHR5cGUgU2FmZVJlY292ZXJLZXlQYXJhbXMgPSB7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gIHNlY3AyNTZrMU11bHRpc2lnOiBPbmNoYWluU2FmZVJvb3Q7XG4gIGVkMjU1MTlNdWx0aXNpZzogT25jaGFpblNhZmVSb290O1xuICBlY2RzYU1wYzogTXBjU2FmZVJvb3Q7XG4gIGVkZHNhTXBjOiBNcGNTYWZlUm9vdDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0U2FmZUtleWNhcmQocGFyYW1zOiB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHVzZXJLZXlCb3g6IHN0cmluZztcbiAgYmFja3VwS2V5Qm94OiBzdHJpbmc7XG4gIGJpdGdvS2V5Qm94OiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG59KTogUHJvbWlzZTxEZWNyeXB0ZWRTYWZlUm9vdHM+IHtcbiAgY29uc3QgeyBiaXRnbywgdXNlcktleUJveCwgYmFja3VwS2V5Qm94LCBiaXRnb0tleUJveCwgcGFzc3dvcmQgfSA9IHBhcmFtcztcblxuICBjb25zdCB1c2VyUm9vdHMgPSBwYXJzZVNhZmVLZXljYXJkQm94KHVzZXJLZXlCb3gpO1xuICBjb25zdCBiYWNrdXBSb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3goYmFja3VwS2V5Qm94KTtcbiAgY29uc3QgYml0Z29Sb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3goYml0Z29LZXlCb3gpO1xuXG4gIGNvbnN0IGRlY3J5cHRSb290ID0gYXN5bmMgKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHJvb3QsIHBhc3N3b3JkIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCB0aGUgc2FmZSBrZXljYXJkIHdpdGggdGhlIHByb3ZpZGVkIHBhc3N3b3JkJywgZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVud3JhcE1wY1Jvb3QgPSAoZGVjcnlwdGVkOiBzdHJpbmcpOiBEZWNyeXB0ZWRNcGNTYWZlUm9vdCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMoZGVjcnlwdGVkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcigndW5hYmxlIHRvIGRlY3J5cHQgdGhlIHNhZmUga2V5Y2FyZCB3aXRoIHRoZSBwcm92aWRlZCBwYXNzd29yZCcsIGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNlY3AyNTZrMU11bHRpc2lnOiB7XG4gICAgICB1c2VyOiBhd2FpdCBkZWNyeXB0Um9vdCh1c2VyUm9vdHMuc2VjcDI1NmsxTXVsdGlzaWcpLFxuICAgICAgYmFja3VwOiBhd2FpdCBkZWNyeXB0Um9vdChiYWNrdXBSb290cy5zZWNwMjU2azFNdWx0aXNpZyksXG4gICAgICBiaXRnbzogYml0Z29Sb290cy5zZWNwMjU2azFNdWx0aXNpZyxcbiAgICB9LFxuICAgIGVkMjU1MTlNdWx0aXNpZzoge1xuICAgICAgdXNlcjogYXdhaXQgZGVjcnlwdFJvb3QodXNlclJvb3RzLmVkMjU1MTlNdWx0aXNpZyksXG4gICAgICBiYWNrdXA6IGF3YWl0IGRlY3J5cHRSb290KGJhY2t1cFJvb3RzLmVkMjU1MTlNdWx0aXNpZyksXG4gICAgICBiaXRnbzogYml0Z29Sb290cy5lZDI1NTE5TXVsdGlzaWcsXG4gICAgfSxcbiAgICBlY2RzYU1wYzoge1xuICAgICAgdXNlcjogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdCh1c2VyUm9vdHMuZWNkc2FNcGMpKSxcbiAgICAgIGJhY2t1cDogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChiYWNrdXBSb290cy5lY2RzYU1wYykpLFxuICAgICAgYml0Z286IGJpdGdvUm9vdHMuZWNkc2FNcGMsXG4gICAgfSxcbiAgICBlZGRzYU1wYzoge1xuICAgICAgdXNlcjogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdCh1c2VyUm9vdHMuZWRkc2FNcGMpKSxcbiAgICAgIGJhY2t1cDogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChiYWNrdXBSb290cy5lZGRzYU1wYykpLFxuICAgICAgYml0Z286IGJpdGdvUm9vdHMuZWRkc2FNcGMsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTYWZlVXNlclBhdGgoY29pblR5cGU6IG51bWJlciwgc2xvdE9yZGluYWw6IG51bWJlciwgYWNjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBtLzQ0Jy8ke2NvaW5UeXBlfScvJHtzbG90T3JkaW5hbH0nLyR7YWNjb3VudH0nYDtcbn1cblxuZnVuY3Rpb24gYnVpbGRTYWZlQ29zaWduZXJQYXRoKGNvaW5UeXBlOiBudW1iZXIsIHNsb3RPcmRpbmFsOiBudW1iZXIsIGFjY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgbS80NC8ke2NvaW5UeXBlfS8ke3Nsb3RPcmRpbmFsfS8ke2FjY291bnR9YDtcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEgU2FmZSB3YWxsZXQncyBjaGlsZCBrZXlzIGF0IHRoZSBCSVA0NCBwYXRoIGZvciBhIGdpdmVuIHNsb3QgYW5kIGFjY291bnQuXG4gKiBPbmx5IGBzZWNwMjU2azFNdWx0aXNpZ2AgKHNsb3QgMSkgaXMgc3VwcG9ydGVkIGZvciBub3c7IHRoZSByZW1haW5pbmcgc2xvdHMgdGhyb3dcbiAqIHVudGlsIHRoZWlyIGRlcml2YXRpb24gYXJtcyBsYW5kIChXQ04tMjczNi9XQ04tMjczNy9XQ04tMjg5NCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXJpdmVTYWZlV2FsbGV0S2V5cyhwYXJhbXM6IHtcbiAgY29pbjogc3RyaW5nO1xuICBzbG90OiBSb290S2V5VHlwZTtcbiAgYWNjb3VudDogbnVtYmVyO1xuICByb290czogRGVjcnlwdGVkU2FmZVJvb3RzO1xufSk6IFByb21pc2U8RGVyaXZlZFNhZmVXYWxsZXRLZXlzPiB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYXJhbXMuYWNjb3VudCkgfHwgcGFyYW1zLmFjY291bnQgPCAwIHx8IHBhcmFtcy5hY2NvdW50ID4gTUFYX0JJUDMyX0lOREVYKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVTYWZlV2FsbGV0S2V5czogaW52YWxpZCBhY2NvdW50ICcke3BhcmFtcy5hY2NvdW50fSdgKTtcbiAgfVxuXG4gIGNvbnN0IGNvaW5UeXBlID0gY29pbnMuZ2V0KHBhcmFtcy5jb2luKS5iaXA0NENvaW5UeXBlO1xuICBpZiAoY29pblR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29pbiAnJHtwYXJhbXMuY29pbn0nIGhhcyBubyBCSVA0NCBjb2luIHR5cGUgYW5kIGNhbm5vdCBkZXJpdmUgYSBzYWZlIGNoaWxkYCk7XG4gIH1cbiAgY29uc3Qgc2xvdE9yZGluYWwgPSBTQUZFX1JPT1RfU0xPVF9PUkRJTkFMU1twYXJhbXMuc2xvdF07XG4gIGNvbnN0IHsgYWNjb3VudCwgcm9vdHMgfSA9IHBhcmFtcztcblxuICBpZiAocGFyYW1zLnNsb3QgPT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICBjb25zdCByb290ID0gcm9vdHMuc2VjcDI1NmsxTXVsdGlzaWc7XG4gICAgY29uc3QgdXNlciA9IGJpcDMyLmZyb21CYXNlNTgocm9vdC51c2VyKS5kZXJpdmVQYXRoKGJ1aWxkU2FmZVVzZXJQYXRoKGNvaW5UeXBlLCBzbG90T3JkaW5hbCwgYWNjb3VudCkpO1xuICAgIGNvbnN0IGJhY2t1cCA9IGJpcDMyLmZyb21CYXNlNTgocm9vdC5iYWNrdXApLmRlcml2ZVBhdGgoYnVpbGRTYWZlQ29zaWduZXJQYXRoKGNvaW5UeXBlLCBzbG90T3JkaW5hbCwgYWNjb3VudCkpO1xuICAgIGNvbnN0IGJpdGdvID0gYmlwMzIuZnJvbUJhc2U1OChyb290LmJpdGdvKS5kZXJpdmVQYXRoKGJ1aWxkU2FmZUNvc2lnbmVyUGF0aChjb2luVHlwZSwgc2xvdE9yZGluYWwsIGFjY291bnQpKTtcblxuICAgIGlmICghdXNlci5wcml2YXRlS2V5IHx8ICFiYWNrdXAucHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXJpdmVTYWZlV2FsbGV0S2V5czogdXNlciBhbmQgYmFja3VwIHJvb3RzIG11c3QgYmUgcHJpdmF0ZSAoeHBydiknKTtcbiAgICB9XG4gICAgaWYgKGJpdGdvLnByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVyaXZlU2FmZVdhbGxldEtleXM6IGJpdGdvIHJvb3QgbXVzdCBiZSBwdWJsaWMgKHhwdWIpJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNsb3Q6ICdzZWNwMjU2azFNdWx0aXNpZycsXG4gICAgICBwYXRoOiBidWlsZFNhZmVVc2VyUGF0aChjb2luVHlwZSwgc2xvdE9yZGluYWwsIGFjY291bnQpLFxuICAgICAga2V5czoge1xuICAgICAgICB1c2VyOiB7IHBydjogdXNlci50b0Jhc2U1OCgpLCBwdWI6IHVzZXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0sXG4gICAgICAgIGJhY2t1cDogeyBwcnY6IGJhY2t1cC50b0Jhc2U1OCgpLCBwdWI6IGJhY2t1cC5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgfSxcbiAgICAgICAgYml0Z286IHsgcHViOiBiaXRnby5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2xvdCA9PT0gJ2VjZHNhTXBjJykge1xuICAgIGNvbnN0IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXJDaGlsZCwgYmFja3VwQ2hpbGQgfSA9IGF3YWl0IERrbHNWcmZVdGlscy5kZXJpdmVTYWZlRWNkc2FNcGNDaGlsZCh7XG4gICAgICB1c2VyUm9vdDogcm9vdHMuZWNkc2FNcGMudXNlcixcbiAgICAgIGJhY2t1cFJvb3Q6IHJvb3RzLmVjZHNhTXBjLmJhY2t1cCxcbiAgICAgIGFjY291bnQsXG4gICAgICBjb2luVHlwZSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc2xvdDogJ2VjZHNhTXBjJyxcbiAgICAgIHBhdGg6IGJ1aWxkU2FmZVVzZXJQYXRoKGNvaW5UeXBlLCBzbG90T3JkaW5hbCwgYWNjb3VudCksXG4gICAgICBrZXlzOiB7IGNvbW1vbktleWNoYWluLCB1c2VyOiB1c2VyQ2hpbGQsIGJhY2t1cDogYmFja3VwQ2hpbGQgfSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVTYWZlV2FsbGV0S2V5czogc2xvdCAnJHtwYXJhbXMuc2xvdH0nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0YCk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBrZXkgZmllbGRzIGBjb2luLnJlY292ZXIoKWAgZXhwZWN0cyBmcm9tIGRlcml2ZWQgU2FmZSBjaGlsZCBrZXlzLlxuICogT25seSBgc2VjcDI1NmsxTXVsdGlzaWdgIChzbG90IDEpIGlzIHN1cHBvcnRlZCBmb3Igbm93LiBTaWduZWQgbW9kZSByZS1lbmNyeXB0cyB0aGVcbiAqIGNoaWxkIHhwcnZzIHVuZGVyIGEgZnJlc2ggZXBoZW1lcmFsIHBhc3NwaHJhc2UgKHYxL1NKQ0wpOyB1bnNpZ25lZCBtb2RlIHJldHVybnMgcHVicy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXMocGFyYW1zOiB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIGNvaW46IHN0cmluZztcbiAgc2xvdDogUm9vdEtleVR5cGU7XG4gIGtleXM6IFNlY3AyNTZrMU11bHRpc2lnQ2hpbGRLZXlzO1xuICBtb2RlOiAnc2lnbmVkJyB8ICd1bnNpZ25lZCc7XG59KTogUHJvbWlzZTxTYWZlUmVjb3ZlcktleVBhcmFtcz4ge1xuICBpZiAocGFyYW1zLnNsb3QgIT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJ1aWxkU2FmZVJlY292ZXJLZXlQYXJhbXM6IHNsb3QgJyR7cGFyYW1zLnNsb3R9JyBpcyBub3Qgc3VwcG9ydGVkIHlldGApO1xuICB9XG4gIGNvbnN0IHsgYml0Z28sIGtleXMsIG1vZGUgfSA9IHBhcmFtcztcblxuICBpZiAobW9kZSA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIHJldHVybiB7XG4gICAgICB1c2VyS2V5OiBrZXlzLnVzZXIucHViLFxuICAgICAgYmFja3VwS2V5OiBrZXlzLmJhY2t1cC5wdWIsXG4gICAgICBiaXRnb0tleToga2V5cy5iaXRnby5wdWIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHVzZXJQcnYgPSBiaXAzMi5mcm9tQmFzZTU4KGtleXMudXNlci5wcnYpO1xuICBjb25zdCBiYWNrdXBQcnYgPSBiaXAzMi5mcm9tQmFzZTU4KGtleXMuYmFja3VwLnBydik7XG4gIGlmICghdXNlclBydi5wcml2YXRlS2V5IHx8ICFiYWNrdXBQcnYucHJpdmF0ZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtczoga2V5cy51c2VyLnBydiBhbmQga2V5cy5iYWNrdXAucHJ2IG11c3QgYmUgcHJpdmF0ZSB4cHJ2cycpO1xuICB9XG5cbiAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9IHJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IFt1c2VyS2V5LCBiYWNrdXBLZXldID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGJpdGdvLmVuY3J5cHQoeyBpbnB1dDoga2V5cy51c2VyLnBydiwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsIGVuY3J5cHRpb25WZXJzaW9uOiAxIH0pLFxuICAgIGJpdGdvLmVuY3J5cHQoeyBpbnB1dDoga2V5cy5iYWNrdXAucHJ2LCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSksXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgdXNlcktleSxcbiAgICBiYWNrdXBLZXksXG4gICAgYml0Z29LZXk6IGtleXMuYml0Z28ucHViLFxuICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gIH07XG59XG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vc2FmZS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1HQSxnREFvRUM7QUFNRCxvREE2RUM7QUFPRCw4REFzQ0M7QUFqU0QsbUNBQXFDO0FBQ3JDLDhDQUF3QztBQUN4Qyw0Q0FBaUQ7QUFFakQsd0RBVzhCO0FBQzlCLCtEQUkrQjtBQUMvQixvREFBK0Q7QUFFL0Qsc0NBQW1EO0FBQ25ELG9FQUF5RTtBQXFFbEUsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BTXhDO0lBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUFtQixFQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEQsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBbUIsRUFBRTtRQUMxRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSwrQkFBc0IsQ0FBQywrREFBK0QsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFpQixFQUF3QixFQUFFO1FBQ2hFLElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSwyQ0FBd0IsRUFBQyxTQUFTLENBQUMsQ0FB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Q0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLG9CQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQzdDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pGLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO0tBQzVGLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxPQUFPO1FBQ1AsU0FBUztRQUNULFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7UUFDeEIsZ0JBQWdCO0tBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFdSVy1mYWNpbmcgc2FmZSByZWNvdmVyeSBlbnRyeSBwb2ludHMuXG4gKi9cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBNQVhfQklQMzJfSU5ERVggfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgdHlwZSB7IFJvb3RLZXlUeXBlIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQge1xuICBidWlsZFNhZmVCaXA0NFBhdGgsXG4gIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZCxcbiAgZGVyaXZlU2FmZUNoaWxkVHJpcGxldCxcbiAgRWQyNTUxOUNoYWluQ29kZUVudHJ5Q29kZWMsXG4gIGdldFNhZmVCaXA0NENvaW5UeXBlLFxuICBwYXJzZVNhZmVCaXA0NFBhdGgsXG4gIHBhcnNlU2FmZUtleWNhcmRCb3gsXG4gIHRvU29mdFR3aW5QYXRoLFxuICB0eXBlIFNhZmVLZXljYXJkUm9vdEVudHJ5LFxufSBmcm9tICdAYml0Z28vc2RrLWxpYi1zYWZlcyc7XG5pbXBvcnQge1xuICBzb2Z0RGVyaXZlQ2hpbGRQdWJFZDI1NTE5QXRQYXRoLFxuICBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoLFxuICB0eXBlIEVkMjU1MTlFeHRlbmRlZEtleVBhcnRzLFxufSBmcm9tICcuL2Rlcml2YWJsZUVkMjU1MTlQdWInO1xuaW1wb3J0IHsgRGtsc1ZyZlV0aWxzLCBNcHNWcmZVdGlscyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgSW5jb3JyZWN0UGFzc3dvcmRFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBwYXJzZVNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZSc7XG5cbmV4cG9ydCB0eXBlIERlY3J5cHRlZE1wY1NhZmVSb290ID0geyBzaWduaW5nOiBCdWZmZXI7IHZyZjogQnVmZmVyIH07XG5cbmV4cG9ydCB0eXBlIE9uY2hhaW5TYWZlUm9vdCA9IHsgdXNlcjogc3RyaW5nOyBiYWNrdXA6IHN0cmluZzsgYml0Z286IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgTXBjU2FmZVJvb3QgPSB7IHVzZXI6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiYWNrdXA6IERlY3J5cHRlZE1wY1NhZmVSb290OyBiaXRnbzogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBFZDI1NTE5TXVsdGlzaWdTYWZlUm9vdCA9IHtcbiAgdXNlcjogc3RyaW5nO1xuICBiYWNrdXA6IHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH07XG4gIGJpdGdvOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZWNwMjU2azFNdWx0aXNpZ0NoaWxkS2V5cyA9IHtcbiAgdXNlcjogeyBwcnY6IHN0cmluZzsgcHViOiBzdHJpbmcgfTtcbiAgYmFja3VwOiB7IHBydjogc3RyaW5nOyBwdWI6IHN0cmluZyB9O1xuICBiaXRnbzogeyBwdWI6IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgRWNkc2FNcGNDaGlsZEtleXMgPSB7XG4gIGNvbW1vbktleWNoYWluOiBzdHJpbmc7XG4gIHVzZXI6IHN0cmluZztcbiAgYmFja3VwOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFZGRzYU1wY0NoaWxkS2V5cyA9IEVjZHNhTXBjQ2hpbGRLZXlzO1xuXG4vKipcbiAqIEEgaGFyZGVuZWQgKFNMSVAtMDAxMCkgZWQyNTUxOSBjaGlsZC4gVGhlIGBraW5kYCBkaXNjcmltaW5hdG9yIHByZXZlbnRzIGEgcmF3IHNlZWQgZnJvbSBiZWluZ1xuICogbWlzdGFrZW4gZm9yIGFuIGV4dGVuZGVkIGtleSBkb3duc3RyZWFtIOKAlCBib3RoIGFyZSAzMi1ieXRlIHZhbHVlcyB0aGF0IGBpc1ZhbGlkUHViYCB3b3VsZCBhY2NlcHQuXG4gKi9cbmV4cG9ydCB0eXBlIFNhZmVFZDI1NTE5U2VlZEtleSA9IHtcbiAgcmVhZG9ubHkga2luZDogJ3NlZWQnO1xuICByZWFkb25seSBzZWVkOiBzdHJpbmc7IC8vIDMyLWJ5dGUgY2hpbGQgc2VlZCAoaGV4KSDigJQgdGhlIHNpZ25lciBpbnB1dFxuICByZWFkb25seSBwdWI6IHN0cmluZzsgLy8gMzItYnl0ZSBwdWJsaWMga2V5IChoZXgpXG59O1xuXG4vKipcbiAqIEEgc29mdCAoQklQMzItRWQyNTUxOSkgZWQyNTUxOSBjaGlsZC4gTm8gMzItYnl0ZSBzZWVkIG1hcHMgYmFjayB0byBhIHNvZnQtZGVyaXZlZCBjaGlsZCwgc28gdGhlXG4gKiBzaWduZXIgbmVlZHMgYm90aCBoYWx2ZXMgZGlyZWN0bHk6IGBrTGAgKHRoZSBjbGFtcGVkIHNjYWxhcikgYW5kIGBrUmAgKHRoZSBub25jZSBwcmVmaXgpLlxuICovXG5leHBvcnQgdHlwZSBTYWZlRWQyNTUxOUV4dGVuZGVkS2V5ID0geyByZWFkb25seSBraW5kOiAnZXh0ZW5kZWQnIH0gJiBFZDI1NTE5RXh0ZW5kZWRLZXlQYXJ0czxzdHJpbmc+OyAvLyBoZXhcblxuLyoqIFRoZSB0aHJlZSBlZDI1NTE5IGNvLXNpZ25lciBjaGlsZHJlbi4gQml0R28gaXMgcHViLW9ubHk6IGl0cyBwcml2YXRlIGtleSBzdGF5cyBpbiB0aGUgSFNNLiAqL1xuZXhwb3J0IHR5cGUgRWQyNTUxOU11bHRpc2lnQ2hpbGRLZXlzID0ge1xuICB1c2VyOiBTYWZlRWQyNTUxOVNlZWRLZXk7XG4gIGJhY2t1cDogU2FmZUVkMjU1MTlFeHRlbmRlZEtleTtcbiAgYml0Z286IHsgcmVhZG9ubHkgcHViOiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERlcml2ZWRTYWZlV2FsbGV0S2V5cyA9XG4gIHwgeyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnOyBwYXRoOiBzdHJpbmc7IGtleXM6IFNlY3AyNTZrMU11bHRpc2lnQ2hpbGRLZXlzIH1cbiAgfCB7IHNsb3Q6ICdlY2RzYU1wYyc7IHBhdGg6IHN0cmluZzsga2V5czogRWNkc2FNcGNDaGlsZEtleXMgfVxuICB8IHsgc2xvdDogJ2VkZHNhTXBjJzsgcGF0aDogc3RyaW5nOyBrZXlzOiBFZGRzYU1wY0NoaWxkS2V5cyB9XG4gIHwgeyBzbG90OiAnZWQyNTUxOU11bHRpc2lnJzsgcGF0aDogc3RyaW5nOyBrZXlzOiBFZDI1NTE5TXVsdGlzaWdDaGlsZEtleXMgfTtcblxuZXhwb3J0IHR5cGUgU2FmZVJlY292ZXJLZXlQYXJhbXMgPSB7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEZWNyeXB0ZWRTYWZlUm9vdHMgPSB7XG4gIHNlY3AyNTZrMU11bHRpc2lnOiBPbmNoYWluU2FmZVJvb3Q7XG4gIGVkMjU1MTlNdWx0aXNpZzogRWQyNTUxOU11bHRpc2lnU2FmZVJvb3Q7XG4gIGVjZHNhTXBjOiBNcGNTYWZlUm9vdDtcbiAgZWRkc2FNcGM6IE1wY1NhZmVSb290O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRTYWZlS2V5Y2FyZChwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgdXNlcktleUJveDogc3RyaW5nO1xuICBiYWNrdXBLZXlCb3g6IHN0cmluZztcbiAgYml0Z29LZXlCb3g6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbn0pOiBQcm9taXNlPERlY3J5cHRlZFNhZmVSb290cz4ge1xuICBjb25zdCB7IGJpdGdvLCB1c2VyS2V5Qm94LCBiYWNrdXBLZXlCb3gsIGJpdGdvS2V5Qm94LCBwYXNzd29yZCB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHVzZXJSb290cyA9IHBhcnNlU2FmZUtleWNhcmRCb3godXNlcktleUJveCk7XG4gIGNvbnN0IGJhY2t1cFJvb3RzID0gcGFyc2VTYWZlS2V5Y2FyZEJveChiYWNrdXBLZXlCb3gpO1xuICBjb25zdCBiaXRnb1Jvb3RzID0gcGFyc2VTYWZlS2V5Y2FyZEJveChiaXRnb0tleUJveCk7XG5cbiAgY29uc3QgZGVjcnlwdFJvb3QgPSBhc3luYyAocm9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGJpdGdvLmRlY3J5cHQoeyBpbnB1dDogcm9vdCwgcGFzc3dvcmQgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEluY29ycmVjdFBhc3N3b3JkRXJyb3IoJ3VuYWJsZSB0byBkZWNyeXB0IHRoZSBzYWZlIGtleWNhcmQgd2l0aCB0aGUgcHJvdmlkZWQgcGFzc3dvcmQnLCBlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdW53cmFwTXBjUm9vdCA9IChkZWNyeXB0ZWQ6IHN0cmluZyk6IERlY3J5cHRlZE1wY1NhZmVSb290ID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhcnNlU2FmZU1wY0tleUVudmVsb3BlcyhkZWNyeXB0ZWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCB0aGUgc2FmZSBrZXljYXJkIHdpdGggdGhlIHByb3ZpZGVkIHBhc3N3b3JkJywgZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIE9ubHkgYm94IEIncyBlZDI1NTE5TXVsdGlzaWcgc2xvdCBtYXkgY2FycnkgdGhlIGRlcml2YWJsZSBgeyBwcnYsIGNoYWluQ29kZSB9YCBvYmplY3Q7IGV2ZXJ5XG4gIC8vIG90aGVyIGVudHJ5IOKAlCBhbGwgb2YgYm94ZXMgQSBhbmQgQywgYW5kIGV2ZXJ5IG5vbi1lZDI1NTE5IHNsb3QgaW4gYm94IEIg4oCUIGlzIGEgYmFyZSBzdHJpbmcgYW5kXG4gIC8vIGZhaWxzIGNsb3NlZCBpZiBpdCBjYXJyaWVzIHRoZSBvYmplY3QgaW5zdGVhZC5cbiAgY29uc3QgcmVxdWlyZUJhcmVTdHJpbmcgPSAoZW50cnk6IFNhZmVLZXljYXJkUm9vdEVudHJ5KTogc3RyaW5nID0+IHtcbiAgICBpZiAoRWQyNTUxOUNoYWluQ29kZUVudHJ5Q29kZWMuaXMoZW50cnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZWQyNTUxOSBjaGFpbi1jb2RlIGVudHJ5IHdoZXJlIGEgYmFyZSBzdHJpbmcgd2FzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfTtcblxuICBjb25zdCBkZWNyeXB0RWQyNTUxOUJhY2t1cCA9IGFzeW5jIChlbnRyeTogU2FmZUtleWNhcmRSb290RW50cnkpOiBQcm9taXNlPHsgcHJ2OiBzdHJpbmc7IGNoYWluQ29kZTogc3RyaW5nIH0+ID0+IHtcbiAgICBpZiAoIUVkMjU1MTlDaGFpbkNvZGVFbnRyeUNvZGVjLmlzKGVudHJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IGJhY2t1cCByb290IG11c3QgY2FycnkgYSBjaGFpbiBjb2RlJyk7XG4gICAgfVxuICAgIHJldHVybiB7IHBydjogYXdhaXQgZGVjcnlwdFJvb3QoZW50cnkucHJ2KSwgY2hhaW5Db2RlOiBlbnRyeS5jaGFpbkNvZGUgfTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNlY3AyNTZrMU11bHRpc2lnOiB7XG4gICAgICB1c2VyOiBhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyh1c2VyUm9vdHMuc2VjcDI1NmsxTXVsdGlzaWcpKSxcbiAgICAgIGJhY2t1cDogYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcoYmFja3VwUm9vdHMuc2VjcDI1NmsxTXVsdGlzaWcpKSxcbiAgICAgIGJpdGdvOiByZXF1aXJlQmFyZVN0cmluZyhiaXRnb1Jvb3RzLnNlY3AyNTZrMU11bHRpc2lnKSxcbiAgICB9LFxuICAgIGVkMjU1MTlNdWx0aXNpZzoge1xuICAgICAgdXNlcjogYXdhaXQgZGVjcnlwdFJvb3QocmVxdWlyZUJhcmVTdHJpbmcodXNlclJvb3RzLmVkMjU1MTlNdWx0aXNpZykpLFxuICAgICAgYmFja3VwOiBhd2FpdCBkZWNyeXB0RWQyNTUxOUJhY2t1cChiYWNrdXBSb290cy5lZDI1NTE5TXVsdGlzaWcpLFxuICAgICAgYml0Z286IHJlcXVpcmVCYXJlU3RyaW5nKGJpdGdvUm9vdHMuZWQyNTUxOU11bHRpc2lnKSxcbiAgICB9LFxuICAgIGVjZHNhTXBjOiB7XG4gICAgICB1c2VyOiB1bndyYXBNcGNSb290KGF3YWl0IGRlY3J5cHRSb290KHJlcXVpcmVCYXJlU3RyaW5nKHVzZXJSb290cy5lY2RzYU1wYykpKSxcbiAgICAgIGJhY2t1cDogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyhiYWNrdXBSb290cy5lY2RzYU1wYykpKSxcbiAgICAgIGJpdGdvOiByZXF1aXJlQmFyZVN0cmluZyhiaXRnb1Jvb3RzLmVjZHNhTXBjKSxcbiAgICB9LFxuICAgIGVkZHNhTXBjOiB7XG4gICAgICB1c2VyOiB1bndyYXBNcGNSb290KGF3YWl0IGRlY3J5cHRSb290KHJlcXVpcmVCYXJlU3RyaW5nKHVzZXJSb290cy5lZGRzYU1wYykpKSxcbiAgICAgIGJhY2t1cDogdW53cmFwTXBjUm9vdChhd2FpdCBkZWNyeXB0Um9vdChyZXF1aXJlQmFyZVN0cmluZyhiYWNrdXBSb290cy5lZGRzYU1wYykpKSxcbiAgICAgIGJpdGdvOiByZXF1aXJlQmFyZVN0cmluZyhiaXRnb1Jvb3RzLmVkZHNhTXBjKSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIERlcml2ZXMgYSBTYWZlIHdhbGxldCdzIGNoaWxkIGtleXMgYXQgdGhlIEJJUDQ0IHBhdGggZm9yIGEgZ2l2ZW4gc2xvdCBhbmQgYWNjb3VudC5cbiAqIFN1cHBvcnRzIGFsbCBmb3VyIHNsb3RzOiBgc2VjcDI1NmsxTXVsdGlzaWdgLCBgZWQyNTUxOU11bHRpc2lnYCwgYGVjZHNhTXBjYCwgYW5kIGBlZGRzYU1wY2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXJpdmVTYWZlV2FsbGV0S2V5cyhwYXJhbXM6IHtcbiAgY29pbjogc3RyaW5nO1xuICBzbG90OiBSb290S2V5VHlwZTtcbiAgYWNjb3VudDogbnVtYmVyO1xuICByb290czogRGVjcnlwdGVkU2FmZVJvb3RzO1xufSk6IFByb21pc2U8RGVyaXZlZFNhZmVXYWxsZXRLZXlzPiB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYXJhbXMuYWNjb3VudCkgfHwgcGFyYW1zLmFjY291bnQgPCAwIHx8IHBhcmFtcy5hY2NvdW50ID4gTUFYX0JJUDMyX0lOREVYKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVTYWZlV2FsbGV0S2V5czogaW52YWxpZCBhY2NvdW50ICcke3BhcmFtcy5hY2NvdW50fSdgKTtcbiAgfVxuXG4gIGNvbnN0IHsgYWNjb3VudCwgcm9vdHMgfSA9IHBhcmFtcztcbiAgY29uc3QgcGF0aCA9IGJ1aWxkU2FmZUJpcDQ0UGF0aChnZXRTYWZlQmlwNDRDb2luVHlwZShwYXJhbXMuY29pbiksIHBhcmFtcy5zbG90LCBhY2NvdW50KTtcbiAgY29uc3QgeyBjb2luVHlwZSwgc2xvdE9yZGluYWwgfSA9IHBhcnNlU2FmZUJpcDQ0UGF0aChwYXRoKTtcblxuICBpZiAocGFyYW1zLnNsb3QgPT09ICdzZWNwMjU2azFNdWx0aXNpZycpIHtcbiAgICByZXR1cm4geyBzbG90OiAnc2VjcDI1NmsxTXVsdGlzaWcnLCBwYXRoLCBrZXlzOiBkZXJpdmVTYWZlQ2hpbGRUcmlwbGV0KHJvb3RzLnNlY3AyNTZrMU11bHRpc2lnLCBwYXRoKSB9O1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnZWNkc2FNcGMnKSB7XG4gICAgY29uc3QgeyBjb21tb25LZXljaGFpbiwgdXNlckNoaWxkLCBiYWNrdXBDaGlsZCB9ID0gYXdhaXQgRGtsc1ZyZlV0aWxzLmRlcml2ZVNhZmVFY2RzYU1wY0NoaWxkKHtcbiAgICAgIHVzZXJSb290OiByb290cy5lY2RzYU1wYy51c2VyLFxuICAgICAgYmFja3VwUm9vdDogcm9vdHMuZWNkc2FNcGMuYmFja3VwLFxuICAgICAgYWNjb3VudCxcbiAgICAgIGNvaW5UeXBlLFxuICAgICAgc2FmZVNsb3RPcmRpbmFsOiBzbG90T3JkaW5hbCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc2xvdDogJ2VjZHNhTXBjJyxcbiAgICAgIHBhdGgsXG4gICAgICBrZXlzOiB7IGNvbW1vbktleWNoYWluLCB1c2VyOiB1c2VyQ2hpbGQsIGJhY2t1cDogYmFja3VwQ2hpbGQgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zbG90ID09PSAnZWRkc2FNcGMnKSB7XG4gICAgY29uc3QgeyBjb21tb25LZXljaGFpbiwgdXNlckNoaWxkLCBiYWNrdXBDaGlsZCB9ID0gYXdhaXQgTXBzVnJmVXRpbHMuZGVyaXZlU2FmZUVkZHNhTXBjQ2hpbGQoe1xuICAgICAgdXNlclJvb3Q6IHJvb3RzLmVkZHNhTXBjLnVzZXIsXG4gICAgICBiYWNrdXBSb290OiByb290cy5lZGRzYU1wYy5iYWNrdXAsXG4gICAgICBhY2NvdW50LFxuICAgICAgY29pblR5cGUsXG4gICAgICBzYWZlU2xvdE9yZGluYWw6IHNsb3RPcmRpbmFsLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBzbG90OiAnZWRkc2FNcGMnLFxuICAgICAgcGF0aCxcbiAgICAgIGtleXM6IHsgY29tbW9uS2V5Y2hhaW4sIHVzZXI6IHVzZXJDaGlsZCwgYmFja3VwOiBiYWNrdXBDaGlsZCB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocGFyYW1zLnNsb3QgPT09ICdlZDI1NTE5TXVsdGlzaWcnKSB7XG4gICAgY29uc3Qgcm9vdCA9IHJvb3RzLmVkMjU1MTlNdWx0aXNpZztcbiAgICBjb25zdCBjb3NpZ25lclBhdGggPSB0b1NvZnRUd2luUGF0aChwYXRoKTtcblxuICAgIGNvbnN0IHVzZXIgPSBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQocm9vdC51c2VyLCBwYXRoKTtcbiAgICBjb25zdCBiYWNrdXAgPSBhd2FpdCBzb2Z0RGVyaXZlQ2hpbGRQcnZFZDI1NTE5QXRQYXRoKHtcbiAgICAgIHNlZWRTdHJLZXk6IHJvb3QuYmFja3VwLnBydixcbiAgICAgIGNoYWluQ29kZTogcm9vdC5iYWNrdXAuY2hhaW5Db2RlLFxuICAgICAgcGF0aDogY29zaWduZXJQYXRoLFxuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvID0gYXdhaXQgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOUF0UGF0aChyb290LmJpdGdvLCBjb3NpZ25lclBhdGgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNsb3Q6ICdlZDI1NTE5TXVsdGlzaWcnLFxuICAgICAgcGF0aCxcbiAgICAgIGtleXM6IHtcbiAgICAgICAgdXNlcjogeyBraW5kOiAnc2VlZCcsIHNlZWQ6IHVzZXIucHJ2LCBwdWI6IGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkodXNlci5wdWIpLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgICBiYWNrdXA6IHtcbiAgICAgICAgICBraW5kOiAnZXh0ZW5kZWQnLFxuICAgICAgICAgIGtMOiBiYWNrdXAua0wudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIGtSOiBiYWNrdXAua1IudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHB1YjogYmFja3VwLnB1Yi50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0sXG4gICAgICAgIGJpdGdvOiB7IHB1YjogYml0Z28udG9TdHJpbmcoJ2hleCcpIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGRlcml2ZVNhZmVXYWxsZXRLZXlzOiBzbG90ICcke3BhcmFtcy5zbG90fScgaXMgbm90IHN1cHBvcnRlZCB5ZXRgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGtleSBmaWVsZHMgYGNvaW4ucmVjb3ZlcigpYCBleHBlY3RzIGZyb20gZGVyaXZlZCBTYWZlIGNoaWxkIGtleXMuXG4gKiBPbmx5IGBzZWNwMjU2azFNdWx0aXNpZ2AgKHNsb3QgMSkgaXMgc3VwcG9ydGVkIGZvciBub3cuIFNpZ25lZCBtb2RlIHJlLWVuY3J5cHRzIHRoZVxuICogY2hpbGQgeHBydnMgdW5kZXIgYSBmcmVzaCBlcGhlbWVyYWwgcGFzc3BocmFzZSAodjEvU0pDTCk7IHVuc2lnbmVkIG1vZGUgcmV0dXJucyBwdWJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtcyhwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogc3RyaW5nO1xuICBzbG90OiBSb290S2V5VHlwZTtcbiAga2V5czogU2VjcDI1NmsxTXVsdGlzaWdDaGlsZEtleXM7XG4gIG1vZGU6ICdzaWduZWQnIHwgJ3Vuc2lnbmVkJztcbn0pOiBQcm9taXNlPFNhZmVSZWNvdmVyS2V5UGFyYW1zPiB7XG4gIGlmIChwYXJhbXMuc2xvdCAhPT0gJ3NlY3AyNTZrMU11bHRpc2lnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYnVpbGRTYWZlUmVjb3ZlcktleVBhcmFtczogc2xvdCAnJHtwYXJhbXMuc2xvdH0nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0YCk7XG4gIH1cbiAgY29uc3QgeyBiaXRnbywga2V5cywgbW9kZSB9ID0gcGFyYW1zO1xuXG4gIGlmIChtb2RlID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXJLZXk6IGtleXMudXNlci5wdWIsXG4gICAgICBiYWNrdXBLZXk6IGtleXMuYmFja3VwLnB1YixcbiAgICAgIGJpdGdvS2V5OiBrZXlzLmJpdGdvLnB1YixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgdXNlclBydiA9IGJpcDMyLmZyb21CYXNlNTgoa2V5cy51c2VyLnBydik7XG4gIGNvbnN0IGJhY2t1cFBydiA9IGJpcDMyLmZyb21CYXNlNTgoa2V5cy5iYWNrdXAucHJ2KTtcbiAgaWYgKCF1c2VyUHJ2LnByaXZhdGVLZXkgfHwgIWJhY2t1cFBydi5wcml2YXRlS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZFNhZmVSZWNvdmVyS2V5UGFyYW1zOiBrZXlzLnVzZXIucHJ2IGFuZCBrZXlzLmJhY2t1cC5wcnYgbXVzdCBiZSBwcml2YXRlIHhwcnZzJyk7XG4gIH1cblxuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgW3VzZXJLZXksIGJhY2t1cEtleV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgYml0Z28uZW5jcnlwdCh7IGlucHV0OiBrZXlzLnVzZXIucHJ2LCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDEgfSksXG4gICAgYml0Z28uZW5jcnlwdCh7IGlucHV0OiBrZXlzLmJhY2t1cC5wcnYsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMSB9KSxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICB1c2VyS2V5LFxuICAgIGJhY2t1cEtleSxcbiAgICBiaXRnb0tleToga2V5cy5iaXRnby5wdWIsXG4gICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -19,13 +19,13 @@ export declare class Safe implements ISafe {
|
|
|
19
19
|
*/
|
|
20
20
|
url(extra?: string): string;
|
|
21
21
|
/**
|
|
22
|
-
* Mint a child wallet: peek the
|
|
23
|
-
* them, then mint.
|
|
22
|
+
* Mint a child wallet: peek the next account for (slot, coinType), derive the child keys at
|
|
23
|
+
* `m/44'/<coinType>'/<slot>'/<account>'`, register them, then mint.
|
|
24
24
|
*
|
|
25
|
-
* `onchain`: hardened-derive the user child
|
|
26
|
-
*
|
|
25
|
+
* `onchain`: hardened-derive the user child at that path, register it public-only; backup
|
|
26
|
+
* and BitGo children are soft-derived on the server at its soft twin.
|
|
27
27
|
*
|
|
28
|
-
* `tss`: decrypt the user root blob, run the user/BitGo hard-derive ceremony,
|
|
28
|
+
* `tss`: decrypt the user root blob, run the user/BitGo hard-derive ceremony at that path,
|
|
29
29
|
* register the ordered child documents, then mint.
|
|
30
30
|
*/
|
|
31
31
|
createWallet(params: CreateSafeWalletOptions): Promise<Wallet>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/safe.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAEhH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/safe.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AAEhH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAC;AAoEjB;;GAEG;AACH,qBAAa,IAAK,YAAW,KAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,SAAgB,KAAK,EAAE,QAAQ,CAAC;gBAEpB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAKhD,EAAE,IAAI,MAAM;IAIZ,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAIf,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAI5B;;;OAGG;IACH,GAAG,CAAC,KAAK,SAAK,GAAG,MAAM;IAIvB;;;;;;;;;OASG;IACG,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAqFpE;;;OAGG;YACW,qBAAqB;YAuDrB,aAAa;IAK3B;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIhE;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC;IAIrF;;OAEG;IACG,UAAU,CAAC,MAAM,GAAE;QAAE,KAAK,CAAC,EAAE,cAAc,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAInF;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAIzE;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK1D;;;OAGG;IACG,MAAM,CAAC,MAAM,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK5D;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAKlC;;;;;;;OAOG;IACG,eAAe,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAqE/F;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BpE,MAAM,IAAI,QAAQ;CAGnB"}
|