@bitgo-beta/sdk-lib-safes 1.0.0-beta.63 → 1.0.0-beta.65
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/ed25519Pub.d.ts +9 -0
- package/dist/src/ed25519Pub.d.ts.map +1 -1
- package/dist/src/ed25519Pub.js +52 -1
- package/dist/src/safeDerivation.d.ts +68 -11
- package/dist/src/safeDerivation.d.ts.map +1 -1
- package/dist/src/safeDerivation.js +136 -49
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
package/dist/src/ed25519Pub.d.ts
CHANGED
|
@@ -28,9 +28,18 @@ export declare function decodeDerivableEd25519Pub(composite: string): {
|
|
|
28
28
|
export declare function generateEd25519ChainCode(): Buffer;
|
|
29
29
|
/** Encode a raw 32-byte chain code as canonical unpadded RFC 4648 base32 (52 characters). */
|
|
30
30
|
export declare function encodeEd25519ChainCode(chainCode: Buffer): string;
|
|
31
|
+
/** Decode a canonical base32 chain code into its raw 32-byte buffer. */
|
|
32
|
+
export declare function decodeEd25519ChainCode(chainCode: string): Buffer;
|
|
31
33
|
export declare function decodeEd25519StrKeyPublicKey(pub: string): Buffer;
|
|
32
34
|
export declare function isValidEd25519StrKeyPublicKey(pub: string): boolean;
|
|
33
35
|
export declare function decodeEd25519StrKeySecretSeed(seed: string): Buffer;
|
|
34
36
|
export declare function encodeEd25519StrKeyPublicKey(rawPub: Buffer): string;
|
|
37
|
+
export declare function encodeEd25519StrKeySecretSeed(rawSeed: Buffer): string;
|
|
35
38
|
export declare function isChecksumValidStrKeyEd25519Pub(pub: string): boolean;
|
|
39
|
+
/** Encode a raw 32-byte key (secret seed or public key) as an Algorand 58-character base32 value. */
|
|
40
|
+
export declare function encodeAlgoKey(bytes: Buffer): string;
|
|
41
|
+
/** Encode a raw 32-byte public key as a DER-prefixed Hedera public key (88 hex chars). */
|
|
42
|
+
export declare function encodeHbarPublicKeyDer(pub: Buffer): string;
|
|
43
|
+
/** Encode a raw 32-byte secret seed as a DER-prefixed Hedera private key (96 hex chars). */
|
|
44
|
+
export declare function encodeHbarPrivateKeyDer(seed: Buffer): string;
|
|
36
45
|
//# sourceMappingURL=ed25519Pub.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519Pub.d.ts","sourceRoot":"","sources":["../../src/ed25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"ed25519Pub.d.ts","sourceRoot":"","sources":["../../src/ed25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAwEhD,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED,8EAA8E;AAC9E,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,uEAAuE;AACvE,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAO/F;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wEAAwE;AACxE,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOpE;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5D"}
|
package/dist/src/ed25519Pub.js
CHANGED
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
* The WASM soft-derivation (`softDeriveChildPubEd25519`) stays in sdk-core's
|
|
12
12
|
* bitgo/safe/derivableEd25519Pub — it needs Ed25519BIP32/Eddsa and is not part of this leaf.
|
|
13
13
|
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
14
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
18
|
exports.DERIVABLE_ED25519_PUB_LENGTH = exports.DERIVABLE_ED25519_CHAIN_CODE_BYTES = exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES = void 0;
|
|
16
19
|
exports.isDerivableEd25519Pub = isDerivableEd25519Pub;
|
|
@@ -19,22 +22,32 @@ exports.encodeDerivableEd25519Pub = encodeDerivableEd25519Pub;
|
|
|
19
22
|
exports.decodeDerivableEd25519Pub = decodeDerivableEd25519Pub;
|
|
20
23
|
exports.generateEd25519ChainCode = generateEd25519ChainCode;
|
|
21
24
|
exports.encodeEd25519ChainCode = encodeEd25519ChainCode;
|
|
25
|
+
exports.decodeEd25519ChainCode = decodeEd25519ChainCode;
|
|
22
26
|
exports.decodeEd25519StrKeyPublicKey = decodeEd25519StrKeyPublicKey;
|
|
23
27
|
exports.isValidEd25519StrKeyPublicKey = isValidEd25519StrKeyPublicKey;
|
|
24
28
|
exports.decodeEd25519StrKeySecretSeed = decodeEd25519StrKeySecretSeed;
|
|
25
29
|
exports.encodeEd25519StrKeyPublicKey = encodeEd25519StrKeyPublicKey;
|
|
30
|
+
exports.encodeEd25519StrKeySecretSeed = encodeEd25519StrKeySecretSeed;
|
|
26
31
|
exports.isChecksumValidStrKeyEd25519Pub = isChecksumValidStrKeyEd25519Pub;
|
|
32
|
+
exports.encodeAlgoKey = encodeAlgoKey;
|
|
33
|
+
exports.encodeHbarPublicKeyDer = encodeHbarPublicKeyDer;
|
|
34
|
+
exports.encodeHbarPrivateKeyDer = encodeHbarPrivateKeyDer;
|
|
27
35
|
const crypto_1 = require("crypto");
|
|
36
|
+
const js_sha512_1 = __importDefault(require("js-sha512"));
|
|
28
37
|
exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES = 32;
|
|
29
38
|
exports.DERIVABLE_ED25519_CHAIN_CODE_BYTES = 32;
|
|
30
39
|
exports.DERIVABLE_ED25519_PUB_LENGTH = 103;
|
|
31
40
|
const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
32
41
|
const BASE32_ROOT_REGEX = /^[A-Z2-7]{103}$/;
|
|
42
|
+
const CHAIN_CODE_REGEX = /^[A-Z2-7]{52}$/;
|
|
33
43
|
const STRKEY_PUBLIC_KEY_REGEX = /^G[A-Z2-7]{55}$/;
|
|
34
44
|
const STRKEY_SECRET_SEED_REGEX = /^S[A-Z2-7]{55}$/;
|
|
35
45
|
const STRKEY_VERSION_PUBLIC_KEY = 6 << 3;
|
|
36
46
|
const STRKEY_VERSION_SECRET_SEED = 18 << 3;
|
|
37
47
|
const STRKEY_DECODED_BYTES = 35;
|
|
48
|
+
const ALGORAND_CHECKSUM_BYTES = 4;
|
|
49
|
+
const HBAR_PUBLIC_KEY_PREFIX = '302a300506032b6570032100';
|
|
50
|
+
const HBAR_PRIVATE_KEY_PREFIX = '302e020100300506032b657004220420';
|
|
38
51
|
function base32Decode(input) {
|
|
39
52
|
const output = Buffer.alloc(Math.floor((input.length * 5) / 8));
|
|
40
53
|
let bits = 0;
|
|
@@ -124,6 +137,13 @@ function encodeEd25519ChainCode(chainCode) {
|
|
|
124
137
|
}
|
|
125
138
|
return base32Encode(chainCode);
|
|
126
139
|
}
|
|
140
|
+
/** Decode a canonical base32 chain code into its raw 32-byte buffer. */
|
|
141
|
+
function decodeEd25519ChainCode(chainCode) {
|
|
142
|
+
if (!CHAIN_CODE_REGEX.test(chainCode) || base32Encode(base32Decode(chainCode)) !== chainCode) {
|
|
143
|
+
throw new Error('Invalid ed25519 chain code: expected canonical 52-character base32');
|
|
144
|
+
}
|
|
145
|
+
return base32Decode(chainCode);
|
|
146
|
+
}
|
|
127
147
|
function decodeEd25519StrKeyPublicKey(pub) {
|
|
128
148
|
if (!STRKEY_PUBLIC_KEY_REGEX.test(pub)) {
|
|
129
149
|
throw new Error('Invalid ed25519 StrKey public key');
|
|
@@ -154,6 +174,15 @@ function encodeEd25519StrKeyPublicKey(rawPub) {
|
|
|
154
174
|
checksum.writeUInt16LE(crc16Xmodem(payload), 0);
|
|
155
175
|
return base32Encode(Buffer.concat([payload, checksum]));
|
|
156
176
|
}
|
|
177
|
+
function encodeEd25519StrKeySecretSeed(rawSeed) {
|
|
178
|
+
if (rawSeed.length !== exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES) {
|
|
179
|
+
throw new Error('ed25519 secret seed must be 32 bytes');
|
|
180
|
+
}
|
|
181
|
+
const payload = Buffer.concat([Buffer.from([STRKEY_VERSION_SECRET_SEED]), rawSeed]);
|
|
182
|
+
const checksum = Buffer.alloc(2);
|
|
183
|
+
checksum.writeUInt16LE(crc16Xmodem(payload), 0);
|
|
184
|
+
return base32Encode(Buffer.concat([payload, checksum]));
|
|
185
|
+
}
|
|
157
186
|
function isChecksumValidStrKeyEd25519Pub(pub) {
|
|
158
187
|
try {
|
|
159
188
|
decodeEd25519StrKeyPublicKey(pub);
|
|
@@ -163,4 +192,26 @@ function isChecksumValidStrKeyEd25519Pub(pub) {
|
|
|
163
192
|
return false;
|
|
164
193
|
}
|
|
165
194
|
}
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZDI1NTE5UHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBMkVILHNEQUVDO0FBR0QsOERBSUM7QUFHRCw4REFLQztBQUdELDhEQU9DO0FBR0QsNERBRUM7QUFHRCx3REFLQztBQUVELG9FQUtDO0FBRUQsc0VBT0M7QUFFRCxzRUFLQztBQUVELG9FQVFDO0FBRUQsMEVBT0M7QUEzSkQsbUNBQXFDO0FBRXhCLFFBQUEsa0NBQWtDLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLFFBQUEsa0NBQWtDLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLFFBQUEsNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRWhELE1BQU0sZUFBZSxHQUFHLGtDQUFrQyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDNUMsTUFBTSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQztBQUNsRCxNQUFNLHdCQUF3QixHQUFHLGlCQUFpQixDQUFDO0FBQ25ELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFFaEMsU0FBUyxZQUFZLENBQUMsS0FBYTtJQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUs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TUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUFDLEdBQVc7SUFDekQsSUFBSSxDQUFDO1FBQ0gsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogRWQyNTUxOSBzYWZlLXJvb3QgcHVibGljIGRlcml2YXRpb24gbWF0ZXJpYWwgYW5kIFN0ZWxsYXIgdXNlci1rZXkgY29kZWNzLlxuICpcbiAqIFNhZmUgYmFja3VwIGFuZCBCaXRHbyByb290cyBzdG9yZSByYXcgcHVibGljIGtleSAoMzIgYnl0ZXMpIHx8IHJhdyBjaGFpbiBjb2RlICgzMiBieXRlcyksXG4gKiBlbmNvZGVkIHRvZ2V0aGVyIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIuIENvaW4tc3BlY2lmaWMgcHVibGljLWtleSBlbmNvZGluZ3MgYXJlXG4gKiBhcHBsaWVkIG9ubHkgdG8gZGVyaXZlZCB3YWxsZXQgY2hpbGRyZW4uXG4gKlxuICogVGhlIFdBU00gc29mdC1kZXJpdmF0aW9uIChgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOWApIHN0YXlzIGluIHNkay1jb3JlJ3NcbiAqIGJpdGdvL3NhZmUvZGVyaXZhYmxlRWQyNTUxOVB1YiDigJQgaXQgbmVlZHMgRWQyNTUxOUJJUDMyL0VkZHNhIGFuZCBpcyBub3QgcGFydCBvZiB0aGlzIGxlYWYuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5leHBvcnQgY29uc3QgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyA9IDMyO1xuZXhwb3J0IGNvbnN0IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMgPSAzMjtcbmV4cG9ydCBjb25zdCBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RIID0gMTAzO1xuXG5jb25zdCBCQVNFMzJfQUxQSEFCRVQgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnO1xuY29uc3QgQkFTRTMyX1JPT1RfUkVHRVggPSAvXltBLVoyLTddezEwM30kLztcbmNvbnN0IFNUUktFWV9QVUJMSUNfS0VZX1JFR0VYID0gL15HW0EtWjItN117NTV9JC87XG5jb25zdCBTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVggPSAvXlNbQS1aMi03XXs1NX0kLztcbmNvbnN0IFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVkgPSA2IDw8IDM7XG5jb25zdCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCA9IDE4IDw8IDM7XG5jb25zdCBTVFJLRVlfREVDT0RFRF9CWVRFUyA9IDM1O1xuXG5mdW5jdGlvbiBiYXNlMzJEZWNvZGUoaW5wdXQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhNYXRoLmZsb29yKChpbnB1dC5sZW5ndGggKiA1KSAvIDgpKTtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBjaGFyIG9mIGlucHV0KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBCQVNFMzJfQUxQSEFCRVQuaW5kZXhPZihjaGFyKTtcbiAgICBiaXRzICs9IDU7XG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgYml0cyAtPSA4O1xuICAgICAgb3V0cHV0W29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gYml0cykgJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBiYXNlMzJFbmNvZGUoZGF0YTogQnVmZmVyKTogc3RyaW5nIHtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgYnl0ZSBvZiBkYXRhKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgIGJpdHMgKz0gODtcbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICBvdXRwdXQgKz0gQkFTRTMyX0FMUEhBQkVUWyh2YWx1ZSA+Pj4gYml0cykgJiAweDFmXTtcbiAgICB9XG4gIH1cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IEJBU0UzMl9BTFBIQUJFVFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAweDFmXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBjcmMxNlhtb2RlbShkYXRhOiBCdWZmZXIpOiBudW1iZXIge1xuICBsZXQgY3JjID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGRhdGEpIHtcbiAgICBjcmMgXj0gYnl0ZSA8PCA4O1xuICAgIGZvciAobGV0IGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7XG4gICAgICBjcmMgPSBjcmMgJiAweDgwMDAgPyAoKGNyYyA8PCAxKSBeIDB4MTAyMSkgJiAweGZmZmYgOiAoY3JjIDw8IDEpICYgMHhmZmZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JjO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHJLZXkodmFsdWU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgZGVjb2RlZCA9IGJhc2UzMkRlY29kZSh2YWx1ZSk7XG4gIGlmIChcbiAgICBkZWNvZGVkLmxlbmd0aCAhPT0gU1RSS0VZX0RFQ09ERURfQllURVMgfHxcbiAgICBkZWNvZGVkWzBdICE9PSB2ZXJzaW9uIHx8XG4gICAgYmFzZTMyRW5jb2RlKGRlY29kZWQpICE9PSB2YWx1ZSB8fFxuICAgIGNyYzE2WG1vZGVtKGRlY29kZWQuc3ViYXJyYXkoMCwgU1RSS0VZX0RFQ09ERURfQllURVMgLSAyKSkgIT09IGRlY29kZWQucmVhZFVJbnQxNkxFKFNUUktFWV9ERUNPREVEX0JZVEVTIC0gMilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVkMjU1MTkgU3RyS2V5ICR7bGFiZWx9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQuc3ViYXJyYXkoMSwgMzMpO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGZvciBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJBU0UzMl9ST09UX1JFR0VYLnRlc3QocHViKSAmJiBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKHB1YikpID09PSBwdWI7XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIHRoZSB2YWx1ZSBpcyBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSByb290IG1hdGVyaWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWI6IGV4cGVjdGVkIDY0IGJ5dGVzIG9mIGNhbm9uaWNhbCBiYXNlMzInKTtcbiAgfVxufVxuXG4vKiogQ29tcG9zZSByYXcgcHVibGljLWtleSBhbmQgY2hhaW4tY29kZSBieXRlcyBpbnRvIG9uZSBiYXNlMzIgcm9vdCB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHB1YjogQnVmZmVyLCBjaGFpbkNvZGU6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChwdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTIHx8IGNoYWluQ29kZS5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViOiBleHBlY3RlZCAzMi1ieXRlIHB1YmxpYyBrZXkgYW5kIGNoYWluIGNvZGUgYnVmZmVycycpO1xuICB9XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcHViLCBjaGFpbkNvZGVdKSk7XG59XG5cbi8qKiBEZWNvZGUgYSBiYXNlMzIgcm9vdCBpbnRvIHJhdyBwdWJsaWMta2V5IGFuZCBjaGFpbi1jb2RlIGJ1ZmZlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihjb21wb3NpdGU6IHN0cmluZyk6IHsgcHViOiBCdWZmZXI7IGNoYWluQ29kZTogQnVmZmVyIH0ge1xuICBhc3NlcnREZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gIGNvbnN0IGRlY29kZWQgPSBiYXNlMzJEZWNvZGUoY29tcG9zaXRlKTtcbiAgcmV0dXJuIHtcbiAgICBwdWI6IGRlY29kZWQuc3ViYXJyYXkoMCwgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyksXG4gICAgY2hhaW5Db2RlOiBkZWNvZGVkLnN1YmFycmF5KERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpLFxuICB9O1xufVxuXG4vKiogR2VuZXJhdGUgYSBmcmVzaCByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpOiBCdWZmZXIge1xuICByZXR1cm4gcmFuZG9tQnl0ZXMoREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIgKDUyIGNoYXJhY3RlcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAoY2hhaW5Db2RlLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IGNoYWluIGNvZGU6IGV4cGVjdGVkIDMyIGJ5dGVzJyk7XG4gIH1cbiAgcmV0dXJuIGJhc2UzMkVuY29kZShjaGFpbkNvZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWI6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmICghU1RSS0VZX1BVQkxJQ19LRVlfUkVHRVgudGVzdChwdWIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVkMjU1MTkgU3RyS2V5IHB1YmxpYyBrZXknKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlU3RyS2V5KHB1YiwgU1RSS0VZX1ZFUlNJT05fUFVCTElDX0tFWSwgJ3B1YmxpYyBrZXknKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKHNlZWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmICghU1RSS0VZX1NFQ1JFVF9TRUVEX1JFR0VYLnRlc3Qoc2VlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgc2VjcmV0IHNlZWQnKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlU3RyS2V5KHNlZWQsIFNUUktFWV9WRVJTSU9OX1NFQ1JFVF9TRUVELCAnc2VjcmV0IHNlZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocmF3UHViOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocmF3UHViLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBwdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oW1NUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVldKSwgcmF3UHViXSk7XG4gIGNvbnN0IGNoZWNrc3VtID0gQnVmZmVyLmFsbG9jKDIpO1xuICBjaGVja3N1bS53cml0ZVVJbnQxNkxFKGNyYzE2WG1vZGVtKHBheWxvYWQpLCAwKTtcbiAgcmV0dXJuIGJhc2UzMkVuY29kZShCdWZmZXIuY29uY2F0KFtwYXlsb2FkLCBjaGVja3N1bV0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
195
|
+
/** Encode a raw 32-byte key (secret seed or public key) as an Algorand 58-character base32 value. */
|
|
196
|
+
function encodeAlgoKey(bytes) {
|
|
197
|
+
if (bytes.length !== exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES) {
|
|
198
|
+
throw new Error('ed25519 key must be 32 bytes');
|
|
199
|
+
}
|
|
200
|
+
const checksum = Buffer.from(js_sha512_1.default.sha512_256.array(bytes).slice(28, 28 + ALGORAND_CHECKSUM_BYTES));
|
|
201
|
+
return base32Encode(Buffer.concat([bytes, checksum]));
|
|
202
|
+
}
|
|
203
|
+
/** Encode a raw 32-byte public key as a DER-prefixed Hedera public key (88 hex chars). */
|
|
204
|
+
function encodeHbarPublicKeyDer(pub) {
|
|
205
|
+
if (pub.length !== exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES) {
|
|
206
|
+
throw new Error('ed25519 public key must be 32 bytes');
|
|
207
|
+
}
|
|
208
|
+
return HBAR_PUBLIC_KEY_PREFIX + pub.toString('hex');
|
|
209
|
+
}
|
|
210
|
+
/** Encode a raw 32-byte secret seed as a DER-prefixed Hedera private key (96 hex chars). */
|
|
211
|
+
function encodeHbarPrivateKeyDer(seed) {
|
|
212
|
+
if (seed.length !== exports.DERIVABLE_ED25519_PUBLIC_KEY_BYTES) {
|
|
213
|
+
throw new Error('ed25519 secret seed must be 32 bytes');
|
|
214
|
+
}
|
|
215
|
+
return HBAR_PRIVATE_KEY_PREFIX + seed.toString('hex');
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZDI1NTE5UHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7Ozs7O0FBZ0ZILHNEQUVDO0FBR0QsOERBSUM7QUFHRCw4REFLQztBQUdELDhEQU9DO0FBR0QsNERBRUM7QUFHRCx3REFLQztBQUdELHdEQUtDO0FBRUQsb0VBS0M7QUFFRCxzRUFPQztBQUVELHNFQUtDO0FBRUQsb0VBUUM7QUFFRCxzRUFRQztBQUVELDBFQU9DO0FBR0Qsc0NBTUM7QUFHRCx3REFLQztBQUdELDBEQUtDO0FBM01ELG1DQUFxQztBQUNyQywwREFBK0I7QUFFbEIsUUFBQSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFDeEMsUUFBQSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFDeEMsUUFBQSw0QkFBNEIsR0FBRyxHQUFHLENBQUM7QUFFaEQsTUFBTSxlQUFlLEdBQUcsa0NBQWtDLENBQUM7QUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM1QyxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzFDLE1BQU0sdUJBQXVCLEdBQUcsaUJBQWlCLENBQUM7QUFDbEQsTUFBTSx3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRCxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUM7QUFDMUQsTUFBTSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUVuRSxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENB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LDBDQUFrQyxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxPQUFPLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixTQUFnQix1QkFBdUIsQ0FBQyxJQUFZO0lBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSywwQ0FBa0MsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsT0FBTyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEVkMjU1MTkgc2FmZS1yb290IHB1YmxpYyBkZXJpdmF0aW9uIG1hdGVyaWFsIGFuZCBTdGVsbGFyIHVzZXIta2V5IGNvZGVjcy5cbiAqXG4gKiBTYWZlIGJhY2t1cCBhbmQgQml0R28gcm9vdHMgc3RvcmUgcmF3IHB1YmxpYyBrZXkgKDMyIGJ5dGVzKSB8fCByYXcgY2hhaW4gY29kZSAoMzIgYnl0ZXMpLFxuICogZW5jb2RlZCB0b2dldGhlciBhcyBjYW5vbmljYWwgdW5wYWRkZWQgUkZDIDQ2NDggYmFzZTMyLiBDb2luLXNwZWNpZmljIHB1YmxpYy1rZXkgZW5jb2RpbmdzIGFyZVxuICogYXBwbGllZCBvbmx5IHRvIGRlcml2ZWQgd2FsbGV0IGNoaWxkcmVuLlxuICpcbiAqIFRoZSBXQVNNIHNvZnQtZGVyaXZhdGlvbiAoYHNvZnREZXJpdmVDaGlsZFB1YkVkMjU1MTlgKSBzdGF5cyBpbiBzZGstY29yZSdzXG4gKiBiaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIg4oCUIGl0IG5lZWRzIEVkMjU1MTlCSVAzMi9FZGRzYSBhbmQgaXMgbm90IHBhcnQgb2YgdGhpcyBsZWFmLlxuICovXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBzaGE1MTIgZnJvbSAnanMtc2hhNTEyJztcblxuZXhwb3J0IGNvbnN0IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMgPSAzMjtcbmV4cG9ydCBjb25zdCBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0JZVEVTID0gMzI7XG5leHBvcnQgY29uc3QgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCA9IDEwMztcblxuY29uc3QgQkFTRTMyX0FMUEhBQkVUID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3JztcbmNvbnN0IEJBU0UzMl9ST09UX1JFR0VYID0gL15bQS1aMi03XXsxMDN9JC87XG5jb25zdCBDSEFJTl9DT0RFX1JFR0VYID0gL15bQS1aMi03XXs1Mn0kLztcbmNvbnN0IFNUUktFWV9QVUJMSUNfS0VZX1JFR0VYID0gL15HW0EtWjItN117NTV9JC87XG5jb25zdCBTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVggPSAvXlNbQS1aMi03XXs1NX0kLztcbmNvbnN0IFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVkgPSA2IDw8IDM7XG5jb25zdCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCA9IDE4IDw8IDM7XG5jb25zdCBTVFJLRVlfREVDT0RFRF9CWVRFUyA9IDM1O1xuY29uc3QgQUxHT1JBTkRfQ0hFQ0tTVU1fQllURVMgPSA0O1xuY29uc3QgSEJBUl9QVUJMSUNfS0VZX1BSRUZJWCA9ICczMDJhMzAwNTA2MDMyYjY1NzAwMzIxMDAnO1xuY29uc3QgSEJBUl9QUklWQVRFX0tFWV9QUkVGSVggPSAnMzAyZTAyMDEwMDMwMDUwNjAzMmI2NTcwMDQyMjA0MjAnO1xuXG5mdW5jdGlvbiBiYXNlMzJEZWNvZGUoaW5wdXQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhNYXRoLmZsb29yKChpbnB1dC5sZW5ndGggKiA1KSAvIDgpKTtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBjaGFyIG9mIGlucHV0KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBCQVNFMzJfQUxQSEFCRVQuaW5kZXhPZihjaGFyKTtcbiAgICBiaXRzICs9IDU7XG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgYml0cyAtPSA4O1xuICAgICAgb3V0cHV0W29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gYml0cykgJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBiYXNlMzJFbmNvZGUoZGF0YTogQnVmZmVyKTogc3RyaW5nIHtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgYnl0ZSBvZiBkYXRhKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgIGJpdHMgKz0gODtcbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICBvdXRwdXQgKz0gQkFTRTMyX0FMUEhBQkVUWyh2YWx1ZSA+Pj4gYml0cykgJiAweDFmXTtcbiAgICB9XG4gIH1cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IEJBU0UzMl9BTFBIQUJFVFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAweDFmXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBjcmMxNlhtb2RlbShkYXRhOiBCdWZmZXIpOiBudW1iZXIge1xuICBsZXQgY3JjID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGRhdGEpIHtcbiAgICBjcmMgXj0gYnl0ZSA8PCA4O1xuICAgIGZvciAobGV0IGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7XG4gICAgICBjcmMgPSBjcmMgJiAweDgwMDAgPyAoKGNyYyA8PCAxKSBeIDB4MTAyMSkgJiAweGZmZmYgOiAoY3JjIDw8IDEpICYgMHhmZmZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JjO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHJLZXkodmFsdWU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgZGVjb2RlZCA9IGJhc2UzMkRlY29kZSh2YWx1ZSk7XG4gIGlmIChcbiAgICBkZWNvZGVkLmxlbmd0aCAhPT0gU1RSS0VZX0RFQ09ERURfQllURVMgfHxcbiAgICBkZWNvZGVkWzBdICE9PSB2ZXJzaW9uIHx8XG4gICAgYmFzZTMyRW5jb2RlKGRlY29kZWQpICE9PSB2YWx1ZSB8fFxuICAgIGNyYzE2WG1vZGVtKGRlY29kZWQuc3ViYXJyYXkoMCwgU1RSS0VZX0RFQ09ERURfQllURVMgLSAyKSkgIT09IGRlY29kZWQucmVhZFVJbnQxNkxFKFNUUktFWV9ERUNPREVEX0JZVEVTIC0gMilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVkMjU1MTkgU3RyS2V5ICR7bGFiZWx9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQuc3ViYXJyYXkoMSwgMzMpO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGZvciBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJBU0UzMl9ST09UX1JFR0VYLnRlc3QocHViKSAmJiBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKHB1YikpID09PSBwdWI7XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIHRoZSB2YWx1ZSBpcyBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSByb290IG1hdGVyaWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWI6IGV4cGVjdGVkIDY0IGJ5dGVzIG9mIGNhbm9uaWNhbCBiYXNlMzInKTtcbiAgfVxufVxuXG4vKiogQ29tcG9zZSByYXcgcHVibGljLWtleSBhbmQgY2hhaW4tY29kZSBieXRlcyBpbnRvIG9uZSBiYXNlMzIgcm9vdCB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHB1YjogQnVmZmVyLCBjaGFpbkNvZGU6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChwdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTIHx8IGNoYWluQ29kZS5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViOiBleHBlY3RlZCAzMi1ieXRlIHB1YmxpYyBrZXkgYW5kIGNoYWluIGNvZGUgYnVmZmVycycpO1xuICB9XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcHViLCBjaGFpbkNvZGVdKSk7XG59XG5cbi8qKiBEZWNvZGUgYSBiYXNlMzIgcm9vdCBpbnRvIHJhdyBwdWJsaWMta2V5IGFuZCBjaGFpbi1jb2RlIGJ1ZmZlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihjb21wb3NpdGU6IHN0cmluZyk6IHsgcHViOiBCdWZmZXI7IGNoYWluQ29kZTogQnVmZmVyIH0ge1xuICBhc3NlcnREZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gIGNvbnN0IGRlY29kZWQgPSBiYXNlMzJEZWNvZGUoY29tcG9zaXRlKTtcbiAgcmV0dXJuIHtcbiAgICBwdWI6IGRlY29kZWQuc3ViYXJyYXkoMCwgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyksXG4gICAgY2hhaW5Db2RlOiBkZWNvZGVkLnN1YmFycmF5KERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpLFxuICB9O1xufVxuXG4vKiogR2VuZXJhdGUgYSBmcmVzaCByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpOiBCdWZmZXIge1xuICByZXR1cm4gcmFuZG9tQnl0ZXMoREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIgKDUyIGNoYXJhY3RlcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAoY2hhaW5Db2RlLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IGNoYWluIGNvZGU6IGV4cGVjdGVkIDMyIGJ5dGVzJyk7XG4gIH1cbiAgcmV0dXJuIGJhc2UzMkVuY29kZShjaGFpbkNvZGUpO1xufVxuXG4vKiogRGVjb2RlIGEgY2Fub25pY2FsIGJhc2UzMiBjaGFpbiBjb2RlIGludG8gaXRzIHJhdyAzMi1ieXRlIGJ1ZmZlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFZDI1NTE5Q2hhaW5Db2RlKGNoYWluQ29kZTogc3RyaW5nKTogQnVmZmVyIHtcbiAgaWYgKCFDSEFJTl9DT0RFX1JFR0VYLnRlc3QoY2hhaW5Db2RlKSB8fCBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKGNoYWluQ29kZSkpICE9PSBjaGFpbkNvZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBjaGFpbiBjb2RlOiBleHBlY3RlZCBjYW5vbmljYWwgNTItY2hhcmFjdGVyIGJhc2UzMicpO1xuICB9XG4gIHJldHVybiBiYXNlMzJEZWNvZGUoY2hhaW5Db2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBCdWZmZXIge1xuICBpZiAoIVNUUktFWV9QVUJMSUNfS0VZX1JFR0VYLnRlc3QocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IFN0cktleSBwdWJsaWMga2V5Jyk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZVN0cktleShwdWIsIFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVksICdwdWJsaWMga2V5Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChzZWVkOiBzdHJpbmcpOiBCdWZmZXIge1xuICBpZiAoIVNUUktFWV9TRUNSRVRfU0VFRF9SRUdFWC50ZXN0KHNlZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVkMjU1MTkgU3RyS2V5IHNlY3JldCBzZWVkJyk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZVN0cktleShzZWVkLCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCwgJ3NlY3JldCBzZWVkJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHJhd1B1YjogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHJhd1B1Yi5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkMjU1MTkgcHVibGljIGtleSBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFtTVFJLRVlfVkVSU0lPTl9QVUJMSUNfS0VZXSksIHJhd1B1Yl0pO1xuICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgY2hlY2tzdW0ud3JpdGVVSW50MTZMRShjcmMxNlhtb2RlbShwYXlsb2FkKSwgMCk7XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcGF5bG9hZCwgY2hlY2tzdW1dKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZChyYXdTZWVkOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocmF3U2VlZC5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2VkMjU1MTkgc2VjcmV0IHNlZWQgbXVzdCBiZSAzMiBieXRlcycpO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbU1RSS0VZX1ZFUlNJT05fU0VDUkVUX1NFRURdKSwgcmF3U2VlZF0pO1xuICBjb25zdCBjaGVja3N1bSA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgY2hlY2tzdW0ud3JpdGVVSW50MTZMRShjcmMxNlhtb2RlbShwYXlsb2FkKSwgMCk7XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcGF5bG9hZCwgY2hlY2tzdW1dKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NoZWNrc3VtVmFsaWRTdHJLZXlFZDI1NTE5UHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIEVuY29kZSBhIHJhdyAzMi1ieXRlIGtleSAoc2VjcmV0IHNlZWQgb3IgcHVibGljIGtleSkgYXMgYW4gQWxnb3JhbmQgNTgtY2hhcmFjdGVyIGJhc2UzMiB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVBbGdvS2V5KGJ5dGVzOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IGtleSBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gIH1cbiAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuZnJvbShzaGE1MTIuc2hhNTEyXzI1Ni5hcnJheShieXRlcykuc2xpY2UoMjgsIDI4ICsgQUxHT1JBTkRfQ0hFQ0tTVU1fQllURVMpKTtcbiAgcmV0dXJuIGJhc2UzMkVuY29kZShCdWZmZXIuY29uY2F0KFtieXRlcywgY2hlY2tzdW1dKSk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBwdWJsaWMga2V5IGFzIGEgREVSLXByZWZpeGVkIEhlZGVyYSBwdWJsaWMga2V5ICg4OCBoZXggY2hhcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUhiYXJQdWJsaWNLZXlEZXIocHViOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocHViLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBwdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICByZXR1cm4gSEJBUl9QVUJMSUNfS0VZX1BSRUZJWCArIHB1Yi50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBzZWNyZXQgc2VlZCBhcyBhIERFUi1wcmVmaXhlZCBIZWRlcmEgcHJpdmF0ZSBrZXkgKDk2IGhleCBjaGFycykuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSGJhclByaXZhdGVLZXlEZXIoc2VlZDogQnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHNlZWQubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IHNlY3JldCBzZWVkIG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICByZXR1cm4gSEJBUl9QUklWQVRFX0tFWV9QUkVGSVggKyBzZWVkLnRvU3RyaW5nKCdoZXgnKTtcbn1cbiJdfQ==
|
|
@@ -3,34 +3,69 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @experimental Shared safe child derivation for mint, sign, and recovery.
|
|
5
5
|
*
|
|
6
|
-
* User child: hardened `m/<
|
|
7
|
-
*
|
|
6
|
+
* User child (every slot): hardened `m/44'/<coinType>'/<slot>'/<account>'`.
|
|
7
|
+
* Multisig co-signers (backup / BitGo): the soft twin `m/44/<coinType>/<slot>/<account>`.
|
|
8
|
+
* `<coinType>` is statics `bip44CoinType`, `<slot>` is statics `SAFE_ROOT_SLOT_ORDINALS[slot]`,
|
|
9
|
+
* and `<account>` is the safe's per-(slot, coinType) counter.
|
|
8
10
|
*
|
|
9
11
|
* Do not use `derivedFromParentWithSeed` / `deriveKeyWithSeed` (`m/999999/a/b`) —
|
|
10
12
|
* that is the custody hashed path and cannot reproduce a safe child.
|
|
11
13
|
*/
|
|
12
14
|
import * as t from 'io-ts';
|
|
13
|
-
|
|
14
|
-
export
|
|
15
|
-
|
|
15
|
+
import type { RootKeyType } from '@bitgo/public-types';
|
|
16
|
+
export interface SafeBip44PathSegments {
|
|
17
|
+
coinType: number;
|
|
18
|
+
slotOrdinal: number;
|
|
19
|
+
account: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Assert `path` is a valid BIP32 path for the given derivation kind. Hardened paths require every
|
|
23
|
+
* segment to carry the `'` marker; soft paths reject it. Every segment must be a non-negative
|
|
24
|
+
* integer at or below {@link MAX_BIP32_INDEX}.
|
|
25
|
+
*/
|
|
26
|
+
export declare function assertBip32Path(path: string, opts: {
|
|
27
|
+
hardened: boolean;
|
|
28
|
+
}): void;
|
|
16
29
|
export interface DerivedFromParentWithHardenedPathBrand {
|
|
17
30
|
readonly DerivedFromParentWithHardenedPath: unique symbol;
|
|
18
31
|
}
|
|
32
|
+
export interface DerivedFromParentWithSoftPathBrand {
|
|
33
|
+
readonly DerivedFromParentWithSoftPath: unique symbol;
|
|
34
|
+
}
|
|
35
|
+
/** Safe user-child path `m/44'/<coinType>'/<slot>'/<account>'`; also every MPC child. */
|
|
19
36
|
export type DerivedFromParentWithHardenedPath = t.Branded<string, DerivedFromParentWithHardenedPathBrand>;
|
|
37
|
+
/** Multisig co-signer path `m/44/<coinType>/<slot>/<account>`, the soft twin of a user-child path. */
|
|
38
|
+
export type DerivedFromParentWithSoftPath = t.Branded<string, DerivedFromParentWithSoftPathBrand>;
|
|
39
|
+
export declare function isDerivedFromParentWithHardenedPath(s: string): s is DerivedFromParentWithHardenedPath;
|
|
40
|
+
export declare function isDerivedFromParentWithSoftPath(s: string): s is DerivedFromParentWithSoftPath;
|
|
20
41
|
export declare const DerivedFromParentWithHardenedPath: t.BrandC<t.StringC, DerivedFromParentWithHardenedPathBrand>;
|
|
21
|
-
export declare
|
|
42
|
+
export declare const DerivedFromParentWithSoftPath: t.BrandC<t.StringC, DerivedFromParentWithSoftPathBrand>;
|
|
43
|
+
/**
|
|
44
|
+
* Reads the numeric segments out of a user/MPC child path. Rejects anything else, including a
|
|
45
|
+
* cast soft path: a hardened derive ceremony must never run at, or register, a soft path.
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseSafeBip44Path(path: DerivedFromParentWithHardenedPath): SafeBip44PathSegments;
|
|
48
|
+
/** The `<coinType>` segment for a coin. OFC and fiat coins have none and cannot mint a safe child. */
|
|
49
|
+
export declare function getSafeBip44CoinType(coin: string): number;
|
|
50
|
+
/**
|
|
51
|
+
* Builds the user-child path `m/44'/<coinType>'/<slot>'/<account>'`. `coinType` comes from statics
|
|
52
|
+
* (or the derivation-index response) and `account` from the safe's per-(slot, coinType) counter.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildSafeBip44Path(coinType: number, slot: RootKeyType, account: number): DerivedFromParentWithHardenedPath;
|
|
55
|
+
/** Strips hardening from every level: the co-signer path paired with a user-child path. */
|
|
56
|
+
export declare function toSoftTwinPath(path: DerivedFromParentWithHardenedPath): DerivedFromParentWithSoftPath;
|
|
22
57
|
export interface SafeHardenedChildKey {
|
|
23
58
|
prv: string;
|
|
24
59
|
pub: string;
|
|
25
|
-
derivationPath:
|
|
60
|
+
derivationPath: DerivedFromParentWithHardenedPath;
|
|
26
61
|
}
|
|
27
|
-
export declare function deriveSafeChildHardenedFromXprv(rootXprv: string,
|
|
62
|
+
export declare function deriveSafeChildHardenedFromXprv(rootXprv: string, path: DerivedFromParentWithHardenedPath): SafeHardenedChildKey;
|
|
28
63
|
/** Re-derive and assert both results match before the child is registered. */
|
|
29
|
-
export declare function deriveAndSelfCheckSafeChildHardened(rootXprv: string,
|
|
64
|
+
export declare function deriveAndSelfCheckSafeChildHardened(rootXprv: string, path: DerivedFromParentWithHardenedPath): SafeHardenedChildKey;
|
|
30
65
|
/**
|
|
31
66
|
* SLIP-0010 hardened derivation of a safe user child from an ed25519 root secret seed.
|
|
32
67
|
*
|
|
33
|
-
* `rootPrv` is a Stellar StrKey `S…` secret seed (what slot
|
|
68
|
+
* `rootPrv` is a Stellar StrKey `S…` secret seed (what slot-② `ed25519Multisig` user roots store).
|
|
34
69
|
* The derivation reuses the existing SLIP-0010 implementation {@link Ed25519KeyDeriver.derivePath}
|
|
35
70
|
* (hardened-only CKDPriv over the `ed25519 seed` HMAC master), then expands the resulting 32-byte
|
|
36
71
|
* child seed into a keypair with `nacl`. The child `pub` is a bare StrKey `G…`; the `prv` is the
|
|
@@ -39,5 +74,27 @@ export declare function deriveAndSelfCheckSafeChildHardened(rootXprv: string, in
|
|
|
39
74
|
* Unlike the secp256k1 path, ed25519 hardened derivation needs no chain code — the composite
|
|
40
75
|
* `pub‖chainCode` form is only for SOFT co-signer derivation and is not used here.
|
|
41
76
|
*/
|
|
42
|
-
export declare function deriveSafeChildEd25519Hardened(rootPrv: string,
|
|
77
|
+
export declare function deriveSafeChildEd25519Hardened(rootPrv: string, path: DerivedFromParentWithHardenedPath): SafeHardenedChildKey;
|
|
78
|
+
export interface SafeSecp256k1ChildTriplet {
|
|
79
|
+
user: {
|
|
80
|
+
prv: string;
|
|
81
|
+
pub: string;
|
|
82
|
+
};
|
|
83
|
+
backup: {
|
|
84
|
+
prv: string;
|
|
85
|
+
pub: string;
|
|
86
|
+
};
|
|
87
|
+
bitgo: {
|
|
88
|
+
pub: string;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Derives the slot-① (secp256k1Multisig) child triplet from the keycard roots: the user child at
|
|
93
|
+
* the hardened `path`, the backup and BitGo children at its soft twin.
|
|
94
|
+
*/
|
|
95
|
+
export declare function deriveSafeChildTriplet(roots: {
|
|
96
|
+
user: string;
|
|
97
|
+
backup: string;
|
|
98
|
+
bitgo: string;
|
|
99
|
+
}, path: DerivedFromParentWithHardenedPath): SafeSecp256k1ChildTriplet;
|
|
43
100
|
//# sourceMappingURL=safeDerivation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeDerivation.d.ts","sourceRoot":"","sources":["../../src/safeDerivation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"safeDerivation.d.ts","sourceRoot":"","sources":["../../src/safeDerivation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAI3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAa/E;AA2BD,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,iCAAiC,EAAE,OAAO,MAAM,CAAC;CAC3D;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,6BAA6B,EAAE,OAAO,MAAM,CAAC;CACvD;AAED,yFAAyF;AACzF,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;AAE1G,sGAAsG;AACtG,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;AAElG,wBAAgB,mCAAmC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,iCAAiC,CAErG;AAED,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,6BAA6B,CAE7F;AAED,eAAO,MAAM,iCAAiC,6DAI7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,yDAIzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iCAAiC,GAAG,qBAAqB,CAMjG;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,GACd,iCAAiC,CAMnC;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,IAAI,EAAE,iCAAiC,GAAG,6BAA6B,CAMrG;AAYD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,iCAAiC,CAAC;CACnD;AAaD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iCAAiC,GACtC,oBAAoB,CAGtB;AAED,8EAA8E;AAC9E,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iCAAiC,GACtC,oBAAoB,CAOtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,iCAAiC,GACtC,oBAAoB,CAWtB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACtD,IAAI,EAAE,iCAAiC,GACtC,yBAAyB,CAmB3B"}
|