@bitgo-beta/sdk-lib-safes 1.0.0-beta.6 → 1.0.0-beta.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/ed25519Pub.d.ts +2 -0
- package/dist/src/ed25519Pub.d.ts.map +1 -1
- package/dist/src/ed25519Pub.js +9 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -2
- package/dist/src/keycardCodec.d.ts +42 -0
- package/dist/src/keycardCodec.d.ts.map +1 -0
- package/dist/src/keycardCodec.js +87 -0
- package/dist/src/safeDerivation.d.ts +2 -2
- package/dist/src/safeDerivation.js +5 -5
- package/dist/src/safeSlot.d.ts +8 -1
- package/dist/src/safeSlot.d.ts.map +1 -1
- package/dist/src/safeSlot.js +37 -15
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
package/dist/src/ed25519Pub.d.ts
CHANGED
|
@@ -26,6 +26,8 @@ export declare function decodeDerivableEd25519Pub(composite: string): {
|
|
|
26
26
|
};
|
|
27
27
|
/** Generate a fresh raw 32-byte chain code for root composition. */
|
|
28
28
|
export declare function generateEd25519ChainCode(): Buffer;
|
|
29
|
+
/** Encode a raw 32-byte chain code as canonical unpadded RFC 4648 base32 (52 characters). */
|
|
30
|
+
export declare function encodeEd25519ChainCode(chainCode: Buffer): string;
|
|
29
31
|
export declare function decodeEd25519StrKeyPublicKey(pub: string): Buffer;
|
|
30
32
|
export declare function isValidEd25519StrKeyPublicKey(pub: string): boolean;
|
|
31
33
|
export declare function decodeEd25519StrKeySecretSeed(seed: string): Buffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519Pub.d.ts","sourceRoot":"","sources":["../../src/ed25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAoEhD,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,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,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOpE"}
|
|
1
|
+
{"version":3,"file":"ed25519Pub.d.ts","sourceRoot":"","sources":["../../src/ed25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAoEhD,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,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,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOpE"}
|
package/dist/src/ed25519Pub.js
CHANGED
|
@@ -18,6 +18,7 @@ exports.assertDerivableEd25519Pub = assertDerivableEd25519Pub;
|
|
|
18
18
|
exports.encodeDerivableEd25519Pub = encodeDerivableEd25519Pub;
|
|
19
19
|
exports.decodeDerivableEd25519Pub = decodeDerivableEd25519Pub;
|
|
20
20
|
exports.generateEd25519ChainCode = generateEd25519ChainCode;
|
|
21
|
+
exports.encodeEd25519ChainCode = encodeEd25519ChainCode;
|
|
21
22
|
exports.decodeEd25519StrKeyPublicKey = decodeEd25519StrKeyPublicKey;
|
|
22
23
|
exports.isValidEd25519StrKeyPublicKey = isValidEd25519StrKeyPublicKey;
|
|
23
24
|
exports.decodeEd25519StrKeySecretSeed = decodeEd25519StrKeySecretSeed;
|
|
@@ -116,6 +117,13 @@ function decodeDerivableEd25519Pub(composite) {
|
|
|
116
117
|
function generateEd25519ChainCode() {
|
|
117
118
|
return (0, crypto_1.randomBytes)(exports.DERIVABLE_ED25519_CHAIN_CODE_BYTES);
|
|
118
119
|
}
|
|
120
|
+
/** Encode a raw 32-byte chain code as canonical unpadded RFC 4648 base32 (52 characters). */
|
|
121
|
+
function encodeEd25519ChainCode(chainCode) {
|
|
122
|
+
if (chainCode.length !== exports.DERIVABLE_ED25519_CHAIN_CODE_BYTES) {
|
|
123
|
+
throw new Error('Invalid ed25519 chain code: expected 32 bytes');
|
|
124
|
+
}
|
|
125
|
+
return base32Encode(chainCode);
|
|
126
|
+
}
|
|
119
127
|
function decodeEd25519StrKeyPublicKey(pub) {
|
|
120
128
|
if (!STRKEY_PUBLIC_KEY_REGEX.test(pub)) {
|
|
121
129
|
throw new Error('Invalid ed25519 StrKey public key');
|
|
@@ -155,4 +163,4 @@ function isChecksumValidStrKeyEd25519Pub(pub) {
|
|
|
155
163
|
return false;
|
|
156
164
|
}
|
|
157
165
|
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZDI1NTE5UHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBMkVILHNEQUVDO0FBR0QsOERBSUM7QUFHRCw4REFLQztBQUdELDhEQU9DO0FBR0QsNERBRUM7QUFFRCxvRUFLQztBQUVELHNFQU9DO0FBRUQsc0VBS0M7QUFFRCxvRUFRQztBQUVELDBFQU9DO0FBbkpELG1DQUFxQztBQUV4QixRQUFBLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQztBQUN4QyxRQUFBLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQztBQUN4QyxRQUFBLDRCQUE0QixHQUFHLEdBQUcsQ0FBQztBQUVoRCxNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQUMzRCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsaUJBQWlCLENBQUM7QUFDbEQsTUFBTSx3QkFBd0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRCxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRWhDLFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIs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QUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUFDLEdBQVc7SUFDekQsSUFBSSxDQUFDO1FBQ0gsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogRWQyNTUxOSBzYWZlLXJvb3QgcHVibGljIGRlcml2YXRpb24gbWF0ZXJpYWwgYW5kIFN0ZWxsYXIgdXNlci1rZXkgY29kZWNzLlxuICpcbiAqIFNhZmUgYmFja3VwIGFuZCBCaXRHbyByb290cyBzdG9yZSByYXcgcHVibGljIGtleSAoMzIgYnl0ZXMpIHx8IHJhdyBjaGFpbiBjb2RlICgzMiBieXRlcyksXG4gKiBlbmNvZGVkIHRvZ2V0aGVyIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIuIENvaW4tc3BlY2lmaWMgcHVibGljLWtleSBlbmNvZGluZ3MgYXJlXG4gKiBhcHBsaWVkIG9ubHkgdG8gZGVyaXZlZCB3YWxsZXQgY2hpbGRyZW4uXG4gKlxuICogVGhlIFdBU00gc29mdC1kZXJpdmF0aW9uIChgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOWApIHN0YXlzIGluIHNkay1jb3JlJ3NcbiAqIGJpdGdvL3NhZmUvZGVyaXZhYmxlRWQyNTUxOVB1YiDigJQgaXQgbmVlZHMgRWQyNTUxOUJJUDMyL0VkZHNhIGFuZCBpcyBub3QgcGFydCBvZiB0aGlzIGxlYWYuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5leHBvcnQgY29uc3QgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyA9IDMyO1xuZXhwb3J0IGNvbnN0IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMgPSAzMjtcbmV4cG9ydCBjb25zdCBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RIID0gMTAzO1xuXG5jb25zdCBCQVNFMzJfQUxQSEFCRVQgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnO1xuY29uc3QgQkFTRTMyX1JPT1RfUkVHRVggPSAvXltBLVoyLTddezEwM30kLztcbmNvbnN0IFNUUktFWV9QVUJMSUNfS0VZX1JFR0VYID0gL15HW0EtWjItN117NTV9JC87XG5jb25zdCBTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVggPSAvXlNbQS1aMi03XXs1NX0kLztcbmNvbnN0IFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVkgPSA2IDw8IDM7XG5jb25zdCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCA9IDE4IDw8IDM7XG5jb25zdCBTVFJLRVlfREVDT0RFRF9CWVRFUyA9IDM1O1xuXG5mdW5jdGlvbiBiYXNlMzJEZWNvZGUoaW5wdXQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhNYXRoLmZsb29yKChpbnB1dC5sZW5ndGggKiA1KSAvIDgpKTtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBjaGFyIG9mIGlucHV0KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBCQVNFMzJfQUxQSEFCRVQuaW5kZXhPZihjaGFyKTtcbiAgICBiaXRzICs9IDU7XG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgYml0cyAtPSA4O1xuICAgICAgb3V0cHV0W29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gYml0cykgJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBiYXNlMzJFbmNvZGUoZGF0YTogQnVmZmVyKTogc3RyaW5nIHtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgYnl0ZSBvZiBkYXRhKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgIGJpdHMgKz0gODtcbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICBvdXRwdXQgKz0gQkFTRTMyX0FMUEhBQkVUWyh2YWx1ZSA+Pj4gYml0cykgJiAweDFmXTtcbiAgICB9XG4gIH1cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IEJBU0UzMl9BTFBIQUJFVFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAweDFmXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBjcmMxNlhtb2RlbShkYXRhOiBCdWZmZXIpOiBudW1iZXIge1xuICBsZXQgY3JjID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGRhdGEpIHtcbiAgICBjcmMgXj0gYnl0ZSA8PCA4O1xuICAgIGZvciAobGV0IGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7XG4gICAgICBjcmMgPSBjcmMgJiAweDgwMDAgPyAoKGNyYyA8PCAxKSBeIDB4MTAyMSkgJiAweGZmZmYgOiAoY3JjIDw8IDEpICYgMHhmZmZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JjO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHJLZXkodmFsdWU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgZGVjb2RlZCA9IGJhc2UzMkRlY29kZSh2YWx1ZSk7XG4gIGlmIChcbiAgICBkZWNvZGVkLmxlbmd0aCAhPT0gU1RSS0VZX0RFQ09ERURfQllURVMgfHxcbiAgICBkZWNvZGVkWzBdICE9PSB2ZXJzaW9uIHx8XG4gICAgYmFzZTMyRW5jb2RlKGRlY29kZWQpICE9PSB2YWx1ZSB8fFxuICAgIGNyYzE2WG1vZGVtKGRlY29kZWQuc3ViYXJyYXkoMCwgU1RSS0VZX0RFQ09ERURfQllURVMgLSAyKSkgIT09IGRlY29kZWQucmVhZFVJbnQxNkxFKFNUUktFWV9ERUNPREVEX0JZVEVTIC0gMilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVkMjU1MTkgU3RyS2V5ICR7bGFiZWx9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQuc3ViYXJyYXkoMSwgMzMpO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGZvciBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJBU0UzMl9ST09UX1JFR0VYLnRlc3QocHViKSAmJiBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKHB1YikpID09PSBwdWI7XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIHRoZSB2YWx1ZSBpcyBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSByb290IG1hdGVyaWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWI6IGV4cGVjdGVkIDY0IGJ5dGVzIG9mIGNhbm9uaWNhbCBiYXNlMzInKTtcbiAgfVxufVxuXG4vKiogQ29tcG9zZSByYXcgcHVibGljLWtleSBhbmQgY2hhaW4tY29kZSBieXRlcyBpbnRvIG9uZSBiYXNlMzIgcm9vdCB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHB1YjogQnVmZmVyLCBjaGFpbkNvZGU6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChwdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTIHx8IGNoYWluQ29kZS5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViOiBleHBlY3RlZCAzMi1ieXRlIHB1YmxpYyBrZXkgYW5kIGNoYWluIGNvZGUgYnVmZmVycycpO1xuICB9XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcHViLCBjaGFpbkNvZGVdKSk7XG59XG5cbi8qKiBEZWNvZGUgYSBiYXNlMzIgcm9vdCBpbnRvIHJhdyBwdWJsaWMta2V5IGFuZCBjaGFpbi1jb2RlIGJ1ZmZlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihjb21wb3NpdGU6IHN0cmluZyk6IHsgcHViOiBCdWZmZXI7IGNoYWluQ29kZTogQnVmZmVyIH0ge1xuICBhc3NlcnREZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gIGNvbnN0IGRlY29kZWQgPSBiYXNlMzJEZWNvZGUoY29tcG9zaXRlKTtcbiAgcmV0dXJuIHtcbiAgICBwdWI6IGRlY29kZWQuc3ViYXJyYXkoMCwgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyksXG4gICAgY2hhaW5Db2RlOiBkZWNvZGVkLnN1YmFycmF5KERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpLFxuICB9O1xufVxuXG4vKiogR2VuZXJhdGUgYSBmcmVzaCByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpOiBCdWZmZXIge1xuICByZXR1cm4gcmFuZG9tQnl0ZXMoREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yjogc3RyaW5nKTogQnVmZmVyIHtcbiAgaWYgKCFTVFJLRVlfUFVCTElDX0tFWV9SRUdFWC50ZXN0KHB1YikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgcHVibGljIGtleScpO1xuICB9XG4gIHJldHVybiBkZWNvZGVTdHJLZXkocHViLCBTVFJLRVlfVkVSU0lPTl9QVUJMSUNfS0VZLCAncHVibGljIGtleScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQoc2VlZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgaWYgKCFTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVgudGVzdChzZWVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IFN0cktleSBzZWNyZXQgc2VlZCcpO1xuICB9XG4gIHJldHVybiBkZWNvZGVTdHJLZXkoc2VlZCwgU1RSS0VZX1ZFUlNJT05fU0VDUkVUX1NFRUQsICdzZWNyZXQgc2VlZCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShyYXdQdWI6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChyYXdQdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdlZDI1NTE5IHB1YmxpYyBrZXkgbXVzdCBiZSAzMiBieXRlcycpO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbU1RSS0VZX1ZFUlNJT05fUFVCTElDX0tFWV0pLCByYXdQdWJdKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBCdWZmZXIuYWxsb2MoMik7XG4gIGNoZWNrc3VtLndyaXRlVUludDE2TEUoY3JjMTZYbW9kZW0ocGF5bG9hZCksIDApO1xuICByZXR1cm4gYmFzZTMyRW5jb2RlKEJ1ZmZlci5jb25jYXQoW3BheWxvYWQsIGNoZWNrc3VtXSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDaGVja3N1bVZhbGlkU3RyS2V5RWQyNTUxOVB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocHViKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lZDI1NTE5UHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBMkVILHNEQUVDO0FBR0QsOERBSUM7QUFHRCw4REFLQztBQUdELDhEQU9DO0FBR0QsNERBRUM7QUFHRCx3REFLQztBQUVELG9FQUtDO0FBRUQsc0VBT0M7QUFFRCxzRUFLQztBQUVELG9FQVFDO0FBRUQsMEVBT0M7QUEzSkQsbUNBQXFDO0FBRXhCLFFBQUEsa0NBQWtDLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLFFBQUEsa0NBQWtDLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLFFBQUEsNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRWhELE1BQU0sZUFBZSxHQUFHLGtDQUFrQyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDNUMsTUFBTSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQztBQUNsRCxNQUFNLHdCQUF3QixHQUFHLGlCQUFpQixDQUFDO0FBQ25ELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFFaEMsU0FBUyxZQUFZLENBQUMsS0FBYTtJQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUs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TUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUFDLEdBQVc7SUFDekQsSUFBSSxDQUFDO1FBQ0gsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogRWQyNTUxOSBzYWZlLXJvb3QgcHVibGljIGRlcml2YXRpb24gbWF0ZXJpYWwgYW5kIFN0ZWxsYXIgdXNlci1rZXkgY29kZWNzLlxuICpcbiAqIFNhZmUgYmFja3VwIGFuZCBCaXRHbyByb290cyBzdG9yZSByYXcgcHVibGljIGtleSAoMzIgYnl0ZXMpIHx8IHJhdyBjaGFpbiBjb2RlICgzMiBieXRlcyksXG4gKiBlbmNvZGVkIHRvZ2V0aGVyIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIuIENvaW4tc3BlY2lmaWMgcHVibGljLWtleSBlbmNvZGluZ3MgYXJlXG4gKiBhcHBsaWVkIG9ubHkgdG8gZGVyaXZlZCB3YWxsZXQgY2hpbGRyZW4uXG4gKlxuICogVGhlIFdBU00gc29mdC1kZXJpdmF0aW9uIChgc29mdERlcml2ZUNoaWxkUHViRWQyNTUxOWApIHN0YXlzIGluIHNkay1jb3JlJ3NcbiAqIGJpdGdvL3NhZmUvZGVyaXZhYmxlRWQyNTUxOVB1YiDigJQgaXQgbmVlZHMgRWQyNTUxOUJJUDMyL0VkZHNhIGFuZCBpcyBub3QgcGFydCBvZiB0aGlzIGxlYWYuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5leHBvcnQgY29uc3QgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyA9IDMyO1xuZXhwb3J0IGNvbnN0IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMgPSAzMjtcbmV4cG9ydCBjb25zdCBERVJJVkFCTEVfRUQyNTUxOV9QVUJfTEVOR1RIID0gMTAzO1xuXG5jb25zdCBCQVNFMzJfQUxQSEFCRVQgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnO1xuY29uc3QgQkFTRTMyX1JPT1RfUkVHRVggPSAvXltBLVoyLTddezEwM30kLztcbmNvbnN0IFNUUktFWV9QVUJMSUNfS0VZX1JFR0VYID0gL15HW0EtWjItN117NTV9JC87XG5jb25zdCBTVFJLRVlfU0VDUkVUX1NFRURfUkVHRVggPSAvXlNbQS1aMi03XXs1NX0kLztcbmNvbnN0IFNUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVkgPSA2IDw8IDM7XG5jb25zdCBTVFJLRVlfVkVSU0lPTl9TRUNSRVRfU0VFRCA9IDE4IDw8IDM7XG5jb25zdCBTVFJLRVlfREVDT0RFRF9CWVRFUyA9IDM1O1xuXG5mdW5jdGlvbiBiYXNlMzJEZWNvZGUoaW5wdXQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5hbGxvYyhNYXRoLmZsb29yKChpbnB1dC5sZW5ndGggKiA1KSAvIDgpKTtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBjaGFyIG9mIGlucHV0KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBCQVNFMzJfQUxQSEFCRVQuaW5kZXhPZihjaGFyKTtcbiAgICBiaXRzICs9IDU7XG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgYml0cyAtPSA4O1xuICAgICAgb3V0cHV0W29mZnNldCsrXSA9ICh2YWx1ZSA+Pj4gYml0cykgJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBiYXNlMzJFbmNvZGUoZGF0YTogQnVmZmVyKTogc3RyaW5nIHtcbiAgbGV0IGJpdHMgPSAwO1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgb3V0cHV0ID0gJyc7XG4gIGZvciAoY29uc3QgYnl0ZSBvZiBkYXRhKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBieXRlO1xuICAgIGJpdHMgKz0gODtcbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICBvdXRwdXQgKz0gQkFTRTMyX0FMUEhBQkVUWyh2YWx1ZSA+Pj4gYml0cykgJiAweDFmXTtcbiAgICB9XG4gIH1cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IEJBU0UzMl9BTFBIQUJFVFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAweDFmXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBjcmMxNlhtb2RlbShkYXRhOiBCdWZmZXIpOiBudW1iZXIge1xuICBsZXQgY3JjID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGRhdGEpIHtcbiAgICBjcmMgXj0gYnl0ZSA8PCA4O1xuICAgIGZvciAobGV0IGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7XG4gICAgICBjcmMgPSBjcmMgJiAweDgwMDAgPyAoKGNyYyA8PCAxKSBeIDB4MTAyMSkgJiAweGZmZmYgOiAoY3JjIDw8IDEpICYgMHhmZmZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JjO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTdHJLZXkodmFsdWU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgZGVjb2RlZCA9IGJhc2UzMkRlY29kZSh2YWx1ZSk7XG4gIGlmIChcbiAgICBkZWNvZGVkLmxlbmd0aCAhPT0gU1RSS0VZX0RFQ09ERURfQllURVMgfHxcbiAgICBkZWNvZGVkWzBdICE9PSB2ZXJzaW9uIHx8XG4gICAgYmFzZTMyRW5jb2RlKGRlY29kZWQpICE9PSB2YWx1ZSB8fFxuICAgIGNyYzE2WG1vZGVtKGRlY29kZWQuc3ViYXJyYXkoMCwgU1RSS0VZX0RFQ09ERURfQllURVMgLSAyKSkgIT09IGRlY29kZWQucmVhZFVJbnQxNkxFKFNUUktFWV9ERUNPREVEX0JZVEVTIC0gMilcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVkMjU1MTkgU3RyS2V5ICR7bGFiZWx9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQuc3ViYXJyYXkoMSwgMzMpO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGZvciBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSBwdWJsaWMgZGVyaXZhdGlvbiBtYXRlcmlhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJBU0UzMl9ST09UX1JFR0VYLnRlc3QocHViKSAmJiBiYXNlMzJFbmNvZGUoYmFzZTMyRGVjb2RlKHB1YikpID09PSBwdWI7XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIHRoZSB2YWx1ZSBpcyBjYW5vbmljYWwgYmFzZTMyLWVuY29kZWQgNjQtYnl0ZSByb290IG1hdGVyaWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlcml2YWJsZUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFpc0Rlcml2YWJsZUVkMjU1MTlQdWIocHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmFibGUgZWQyNTUxOSBwdWI6IGV4cGVjdGVkIDY0IGJ5dGVzIG9mIGNhbm9uaWNhbCBiYXNlMzInKTtcbiAgfVxufVxuXG4vKiogQ29tcG9zZSByYXcgcHVibGljLWtleSBhbmQgY2hhaW4tY29kZSBieXRlcyBpbnRvIG9uZSBiYXNlMzIgcm9vdCB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHB1YjogQnVmZmVyLCBjaGFpbkNvZGU6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGlmIChwdWIubGVuZ3RoICE9PSBERVJJVkFCTEVfRUQyNTUxOV9QVUJMSUNfS0VZX0JZVEVTIHx8IGNoYWluQ29kZS5sZW5ndGggIT09IERFUklWQUJMRV9FRDI1NTE5X0NIQUlOX0NPREVfQllURVMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViOiBleHBlY3RlZCAzMi1ieXRlIHB1YmxpYyBrZXkgYW5kIGNoYWluIGNvZGUgYnVmZmVycycpO1xuICB9XG4gIHJldHVybiBiYXNlMzJFbmNvZGUoQnVmZmVyLmNvbmNhdChbcHViLCBjaGFpbkNvZGVdKSk7XG59XG5cbi8qKiBEZWNvZGUgYSBiYXNlMzIgcm9vdCBpbnRvIHJhdyBwdWJsaWMta2V5IGFuZCBjaGFpbi1jb2RlIGJ1ZmZlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yihjb21wb3NpdGU6IHN0cmluZyk6IHsgcHViOiBCdWZmZXI7IGNoYWluQ29kZTogQnVmZmVyIH0ge1xuICBhc3NlcnREZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gIGNvbnN0IGRlY29kZWQgPSBiYXNlMzJEZWNvZGUoY29tcG9zaXRlKTtcbiAgcmV0dXJuIHtcbiAgICBwdWI6IGRlY29kZWQuc3ViYXJyYXkoMCwgREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUyksXG4gICAgY2hhaW5Db2RlOiBkZWNvZGVkLnN1YmFycmF5KERFUklWQUJMRV9FRDI1NTE5X1BVQkxJQ19LRVlfQllURVMpLFxuICB9O1xufVxuXG4vKiogR2VuZXJhdGUgYSBmcmVzaCByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGZvciByb290IGNvbXBvc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpOiBCdWZmZXIge1xuICByZXR1cm4gcmFuZG9tQnl0ZXMoREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUyk7XG59XG5cbi8qKiBFbmNvZGUgYSByYXcgMzItYnl0ZSBjaGFpbiBjb2RlIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzIgKDUyIGNoYXJhY3RlcnMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAoY2hhaW5Db2RlLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlZDI1NTE5IGNoYWluIGNvZGU6IGV4cGVjdGVkIDMyIGJ5dGVzJyk7XG4gIH1cbiAgcmV0dXJuIGJhc2UzMkVuY29kZShjaGFpbkNvZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWI6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmICghU1RSS0VZX1BVQkxJQ19LRVlfUkVHRVgudGVzdChwdWIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVkMjU1MTkgU3RyS2V5IHB1YmxpYyBrZXknKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlU3RyS2V5KHB1YiwgU1RSS0VZX1ZFUlNJT05fUFVCTElDX0tFWSwgJ3B1YmxpYyBrZXknKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleShwdWIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUVkMjU1MTlTdHJLZXlTZWNyZXRTZWVkKHNlZWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIGlmICghU1RSS0VZX1NFQ1JFVF9TRUVEX1JFR0VYLnRlc3Qoc2VlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgc2VjcmV0IHNlZWQnKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlU3RyS2V5KHNlZWQsIFNUUktFWV9WRVJTSU9OX1NFQ1JFVF9TRUVELCAnc2VjcmV0IHNlZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkocmF3UHViOiBCdWZmZXIpOiBzdHJpbmcge1xuICBpZiAocmF3UHViLmxlbmd0aCAhPT0gREVSSVZBQkxFX0VEMjU1MTlfUFVCTElDX0tFWV9CWVRFUykge1xuICAgIHRocm93IG5ldyBFcnJvcignZWQyNTUxOSBwdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oW1NUUktFWV9WRVJTSU9OX1BVQkxJQ19LRVldKSwgcmF3UHViXSk7XG4gIGNvbnN0IGNoZWNrc3VtID0gQnVmZmVyLmFsbG9jKDIpO1xuICBjaGVja3N1bS53cml0ZVVJbnQxNkxFKGNyYzE2WG1vZGVtKHBheWxvYWQpLCAwKTtcbiAgcmV0dXJuIGJhc2UzMkVuY29kZShCdWZmZXIuY29uY2F0KFtwYXlsb2FkLCBjaGVja3N1bV0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hlY2tzdW1WYWxpZFN0cktleUVkMjU1MTlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBkZWNvZGVFZDI1NTE5U3RyS2V5UHVibGljS2V5KHB1Yik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @prettier
|
|
3
3
|
*
|
|
4
|
-
* @experimental Pure Safe derivation leaf. Never imports sdk-core/BaseCoin/Wallet/Safe/key-card.
|
|
4
|
+
* @experimental Pure Safe derivation and keycard box codec leaf. Never imports sdk-core/BaseCoin/Wallet/Safe/key-card.
|
|
5
5
|
*/
|
|
6
6
|
export * from './ed25519KeyDeriver';
|
|
7
7
|
export * from './ed25519Pub';
|
|
8
|
+
export * from './keycardCodec';
|
|
8
9
|
export * from './safeDerivation';
|
|
9
10
|
export * from './safeSlot';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,10 +17,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
/**
|
|
18
18
|
* @prettier
|
|
19
19
|
*
|
|
20
|
-
* @experimental Pure Safe derivation leaf. Never imports sdk-core/BaseCoin/Wallet/Safe/key-card.
|
|
20
|
+
* @experimental Pure Safe derivation and keycard box codec leaf. Never imports sdk-core/BaseCoin/Wallet/Safe/key-card.
|
|
21
21
|
*/
|
|
22
22
|
__exportStar(require("./ed25519KeyDeriver"), exports);
|
|
23
23
|
__exportStar(require("./ed25519Pub"), exports);
|
|
24
|
+
__exportStar(require("./keycardCodec"), exports);
|
|
24
25
|
__exportStar(require("./safeDerivation"), exports);
|
|
25
26
|
__exportStar(require("./safeSlot"), exports);
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0dBSUc7QUFDSCxzREFBb0M7QUFDcEMsK0NBQTZCO0FBQzdCLGlEQUErQjtBQUMvQixtREFBaUM7QUFDakMsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFB1cmUgU2FmZSBkZXJpdmF0aW9uIGFuZCBrZXljYXJkIGJveCBjb2RlYyBsZWFmLiBOZXZlciBpbXBvcnRzIHNkay1jb3JlL0Jhc2VDb2luL1dhbGxldC9TYWZlL2tleS1jYXJkLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2VkMjU1MTlLZXlEZXJpdmVyJztcbmV4cG9ydCAqIGZyb20gJy4vZWQyNTUxOVB1Yic7XG5leHBvcnQgKiBmcm9tICcuL2tleWNhcmRDb2RlYyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmVEZXJpdmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc2FmZVNsb3QnO1xuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*
|
|
4
|
+
* @experimental Safe keycard box codec.
|
|
5
|
+
*
|
|
6
|
+
* Each of Boxes A/B/C on a Safe keycard is a JSON object mapping a root slot name to that slot's key
|
|
7
|
+
* string. It lives in this leaf so sdk-core and WRW can parse a box without depending on key-card,
|
|
8
|
+
* which pulls in PDF/QR libraries and itself depends on sdk-core.
|
|
9
|
+
*/
|
|
10
|
+
import * as t from 'io-ts';
|
|
11
|
+
import type { RootKeyType } from '@bitgo/public-types';
|
|
12
|
+
/**
|
|
13
|
+
* Identifier for one of a safe's four roots (one per signing scheme). Each value is the
|
|
14
|
+
* root's `rootKeyType`, which is also the key used in the keycard's per-box JSON.
|
|
15
|
+
*/
|
|
16
|
+
export type SafeRootKeyType = RootKeyType;
|
|
17
|
+
/**
|
|
18
|
+
* The JSON object encoded in a safe keycard box (A/B/C): the four roots keyed by
|
|
19
|
+
* {@link SafeRootKeyType}. Values are per-root ciphertext for A/B (encryptedPrv or
|
|
20
|
+
* reducedEncryptedPrv; safe MPC ciphertext decrypts to a versioned signing+VRF envelope) or
|
|
21
|
+
* public keys for C. The root-key-type keys are self-identifying, so a
|
|
22
|
+
* consumer parses by key rather than by size/offset. Box B's `ed25519Multisig` entry carries a
|
|
23
|
+
* `{ prv, chainCode }` object (the chain code is independent randomness not recomputable from the
|
|
24
|
+
* seed); every other entry is a bare string.
|
|
25
|
+
*/
|
|
26
|
+
export declare const Ed25519ChainCodeEntryCodec: t.TypeC<{
|
|
27
|
+
prv: t.StringC;
|
|
28
|
+
chainCode: t.StringC;
|
|
29
|
+
}>;
|
|
30
|
+
export type Ed25519ChainCodeEntry = t.TypeOf<typeof Ed25519ChainCodeEntryCodec>;
|
|
31
|
+
export type SafeKeycardRootEntry = string | Ed25519ChainCodeEntry;
|
|
32
|
+
export type SafeKeycardRoots = Record<SafeRootKeyType, SafeKeycardRootEntry>;
|
|
33
|
+
/**
|
|
34
|
+
* Parses a safe keycard box value — the JSON packed by key-card's `generateSafeQrData`, e.g.
|
|
35
|
+
* `{"secp256k1Multisig":"…","ecdsaMpc":"…",…}` — into its four roots. Throws if the value is
|
|
36
|
+
* not valid JSON or any root is not a bare string or a `{ prv, chainCode }` entry. Recovery tooling calls this on the A/B/C
|
|
37
|
+
* box value, then decrypts each root value with the safe password. An MPC root value is an
|
|
38
|
+
* opaque versioned envelope; recovery must unwrap its `prvKeyShare` and `vrf` fields instead
|
|
39
|
+
* of treating the decrypted bytes as a bare share.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseSafeKeycardBox(data: string): SafeKeycardRoots;
|
|
42
|
+
//# sourceMappingURL=keycardCodec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keycardCodec.d.ts","sourceRoot":"","sources":["../../src/keycardCodec.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAI3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B;;;EAAiD,CAAC;AACzF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEhF,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,qBAAqB,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;AAe7E;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAOlE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Ed25519ChainCodeEntryCodec = void 0;
|
|
37
|
+
exports.parseSafeKeycardBox = parseSafeKeycardBox;
|
|
38
|
+
/**
|
|
39
|
+
* @prettier
|
|
40
|
+
*
|
|
41
|
+
* @experimental Safe keycard box codec.
|
|
42
|
+
*
|
|
43
|
+
* Each of Boxes A/B/C on a Safe keycard is a JSON object mapping a root slot name to that slot's key
|
|
44
|
+
* string. It lives in this leaf so sdk-core and WRW can parse a box without depending on key-card,
|
|
45
|
+
* which pulls in PDF/QR libraries and itself depends on sdk-core.
|
|
46
|
+
*/
|
|
47
|
+
const t = __importStar(require("io-ts"));
|
|
48
|
+
const E = __importStar(require("fp-ts/Either"));
|
|
49
|
+
const PathReporter_1 = require("io-ts/lib/PathReporter");
|
|
50
|
+
const io_ts_types_1 = require("io-ts-types");
|
|
51
|
+
/**
|
|
52
|
+
* The JSON object encoded in a safe keycard box (A/B/C): the four roots keyed by
|
|
53
|
+
* {@link SafeRootKeyType}. Values are per-root ciphertext for A/B (encryptedPrv or
|
|
54
|
+
* reducedEncryptedPrv; safe MPC ciphertext decrypts to a versioned signing+VRF envelope) or
|
|
55
|
+
* public keys for C. The root-key-type keys are self-identifying, so a
|
|
56
|
+
* consumer parses by key rather than by size/offset. Box B's `ed25519Multisig` entry carries a
|
|
57
|
+
* `{ prv, chainCode }` object (the chain code is independent randomness not recomputable from the
|
|
58
|
+
* seed); every other entry is a bare string.
|
|
59
|
+
*/
|
|
60
|
+
exports.Ed25519ChainCodeEntryCodec = t.type({ prv: t.string, chainCode: t.string });
|
|
61
|
+
const SafeKeycardRootEntryCodec = t.union([t.string, exports.Ed25519ChainCodeEntryCodec]);
|
|
62
|
+
// Annotating with SafeKeycardRoots makes the compiler reject a key added to or removed from one side only.
|
|
63
|
+
const SafeKeycardRootsCodec = t.type({
|
|
64
|
+
secp256k1Multisig: SafeKeycardRootEntryCodec,
|
|
65
|
+
ecdsaMpc: SafeKeycardRootEntryCodec,
|
|
66
|
+
eddsaMpc: SafeKeycardRootEntryCodec,
|
|
67
|
+
ed25519Multisig: SafeKeycardRootEntryCodec,
|
|
68
|
+
});
|
|
69
|
+
// Decodes a box's JSON string straight into the validated roots record.
|
|
70
|
+
const SafeKeycardBoxFromString = io_ts_types_1.JsonFromString.pipe(SafeKeycardRootsCodec);
|
|
71
|
+
/**
|
|
72
|
+
* Parses a safe keycard box value — the JSON packed by key-card's `generateSafeQrData`, e.g.
|
|
73
|
+
* `{"secp256k1Multisig":"…","ecdsaMpc":"…",…}` — into its four roots. Throws if the value is
|
|
74
|
+
* not valid JSON or any root is not a bare string or a `{ prv, chainCode }` entry. Recovery tooling calls this on the A/B/C
|
|
75
|
+
* box value, then decrypts each root value with the safe password. An MPC root value is an
|
|
76
|
+
* opaque versioned envelope; recovery must unwrap its `prvKeyShare` and `vrf` fields instead
|
|
77
|
+
* of treating the decrypted bytes as a bare share.
|
|
78
|
+
*/
|
|
79
|
+
function parseSafeKeycardBox(data) {
|
|
80
|
+
const decoded = SafeKeycardBoxFromString.decode(data);
|
|
81
|
+
if (E.isLeft(decoded)) {
|
|
82
|
+
// PathReporter, not decodeWithCodec: io-ts errors carry no message, so decodeWithCodec would report only "unknown".
|
|
83
|
+
throw new Error(`parseSafeKeycardBox: ${PathReporter_1.PathReporter.report(decoded).join('; ')}`);
|
|
84
|
+
}
|
|
85
|
+
return decoded.right;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2FyZENvZGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2tleWNhcmRDb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwREEsa0RBT0M7QUFqRUQ7Ozs7Ozs7O0dBUUc7QUFDSCx5Q0FBMkI7QUFDM0IsZ0RBQWtDO0FBQ2xDLHlEQUFzRDtBQUN0RCw2Q0FBNkM7QUFTN0M7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFPekYsTUFBTSx5QkFBeUIsR0FBaUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsa0NBQTBCLENBQUMsQ0FBQyxDQUFDO0FBRWhILDJHQUEyRztBQUMzRyxNQUFNLHFCQUFxQixHQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdELGlCQUFpQixFQUFFLHlCQUF5QjtJQUM1QyxRQUFRLEVBQUUseUJBQXlCO0lBQ25DLFFBQVEsRUFBRSx5QkFBeUI7SUFDbkMsZUFBZSxFQUFFLHlCQUF5QjtDQUMzQyxDQUFDLENBQUM7QUFFSCx3RUFBd0U7QUFDeEUsTUFBTSx3QkFBd0IsR0FBRyw0QkFBYyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTVFOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN0QixvSEFBb0g7UUFDcEgsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsMkJBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICpcbiAqIEBleHBlcmltZW50YWwgU2FmZSBrZXljYXJkIGJveCBjb2RlYy5cbiAqXG4gKiBFYWNoIG9mIEJveGVzIEEvQi9DIG9uIGEgU2FmZSBrZXljYXJkIGlzIGEgSlNPTiBvYmplY3QgbWFwcGluZyBhIHJvb3Qgc2xvdCBuYW1lIHRvIHRoYXQgc2xvdCdzIGtleVxuICogc3RyaW5nLiBJdCBsaXZlcyBpbiB0aGlzIGxlYWYgc28gc2RrLWNvcmUgYW5kIFdSVyBjYW4gcGFyc2UgYSBib3ggd2l0aG91dCBkZXBlbmRpbmcgb24ga2V5LWNhcmQsXG4gKiB3aGljaCBwdWxscyBpbiBQREYvUVIgbGlicmFyaWVzIGFuZCBpdHNlbGYgZGVwZW5kcyBvbiBzZGstY29yZS5cbiAqL1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgKiBhcyBFIGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5pbXBvcnQgeyBQYXRoUmVwb3J0ZXIgfSBmcm9tICdpby10cy9saWIvUGF0aFJlcG9ydGVyJztcbmltcG9ydCB7IEpzb25Gcm9tU3RyaW5nIH0gZnJvbSAnaW8tdHMtdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSb290S2V5VHlwZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuXG4vKipcbiAqIElkZW50aWZpZXIgZm9yIG9uZSBvZiBhIHNhZmUncyBmb3VyIHJvb3RzIChvbmUgcGVyIHNpZ25pbmcgc2NoZW1lKS4gRWFjaCB2YWx1ZSBpcyB0aGVcbiAqIHJvb3QncyBgcm9vdEtleVR5cGVgLCB3aGljaCBpcyBhbHNvIHRoZSBrZXkgdXNlZCBpbiB0aGUga2V5Y2FyZCdzIHBlci1ib3ggSlNPTi5cbiAqL1xuZXhwb3J0IHR5cGUgU2FmZVJvb3RLZXlUeXBlID0gUm9vdEtleVR5cGU7XG5cbi8qKlxuICogVGhlIEpTT04gb2JqZWN0IGVuY29kZWQgaW4gYSBzYWZlIGtleWNhcmQgYm94IChBL0IvQyk6IHRoZSBmb3VyIHJvb3RzIGtleWVkIGJ5XG4gKiB7QGxpbmsgU2FmZVJvb3RLZXlUeXBlfS4gVmFsdWVzIGFyZSBwZXItcm9vdCBjaXBoZXJ0ZXh0IGZvciBBL0IgKGVuY3J5cHRlZFBydiBvclxuICogcmVkdWNlZEVuY3J5cHRlZFBydjsgc2FmZSBNUEMgY2lwaGVydGV4dCBkZWNyeXB0cyB0byBhIHZlcnNpb25lZCBzaWduaW5nK1ZSRiBlbnZlbG9wZSkgb3JcbiAqIHB1YmxpYyBrZXlzIGZvciBDLiBUaGUgcm9vdC1rZXktdHlwZSBrZXlzIGFyZSBzZWxmLWlkZW50aWZ5aW5nLCBzbyBhXG4gKiBjb25zdW1lciBwYXJzZXMgYnkga2V5IHJhdGhlciB0aGFuIGJ5IHNpemUvb2Zmc2V0LiBCb3ggQidzIGBlZDI1NTE5TXVsdGlzaWdgIGVudHJ5IGNhcnJpZXMgYVxuICogYHsgcHJ2LCBjaGFpbkNvZGUgfWAgb2JqZWN0ICh0aGUgY2hhaW4gY29kZSBpcyBpbmRlcGVuZGVudCByYW5kb21uZXNzIG5vdCByZWNvbXB1dGFibGUgZnJvbSB0aGVcbiAqIHNlZWQpOyBldmVyeSBvdGhlciBlbnRyeSBpcyBhIGJhcmUgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgRWQyNTUxOUNoYWluQ29kZUVudHJ5Q29kZWMgPSB0LnR5cGUoeyBwcnY6IHQuc3RyaW5nLCBjaGFpbkNvZGU6IHQuc3RyaW5nIH0pO1xuZXhwb3J0IHR5cGUgRWQyNTUxOUNoYWluQ29kZUVudHJ5ID0gdC5UeXBlT2Y8dHlwZW9mIEVkMjU1MTlDaGFpbkNvZGVFbnRyeUNvZGVjPjtcblxuZXhwb3J0IHR5cGUgU2FmZUtleWNhcmRSb290RW50cnkgPSBzdHJpbmcgfCBFZDI1NTE5Q2hhaW5Db2RlRW50cnk7XG5cbmV4cG9ydCB0eXBlIFNhZmVLZXljYXJkUm9vdHMgPSBSZWNvcmQ8U2FmZVJvb3RLZXlUeXBlLCBTYWZlS2V5Y2FyZFJvb3RFbnRyeT47XG5cbmNvbnN0IFNhZmVLZXljYXJkUm9vdEVudHJ5Q29kZWM6IHQuVHlwZTxTYWZlS2V5Y2FyZFJvb3RFbnRyeT4gPSB0LnVuaW9uKFt0LnN0cmluZywgRWQyNTUxOUNoYWluQ29kZUVudHJ5Q29kZWNdKTtcblxuLy8gQW5ub3RhdGluZyB3aXRoIFNhZmVLZXljYXJkUm9vdHMgbWFrZXMgdGhlIGNvbXBpbGVyIHJlamVjdCBhIGtleSBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gb25lIHNpZGUgb25seS5cbmNvbnN0IFNhZmVLZXljYXJkUm9vdHNDb2RlYzogdC5UeXBlPFNhZmVLZXljYXJkUm9vdHM+ID0gdC50eXBlKHtcbiAgc2VjcDI1NmsxTXVsdGlzaWc6IFNhZmVLZXljYXJkUm9vdEVudHJ5Q29kZWMsXG4gIGVjZHNhTXBjOiBTYWZlS2V5Y2FyZFJvb3RFbnRyeUNvZGVjLFxuICBlZGRzYU1wYzogU2FmZUtleWNhcmRSb290RW50cnlDb2RlYyxcbiAgZWQyNTUxOU11bHRpc2lnOiBTYWZlS2V5Y2FyZFJvb3RFbnRyeUNvZGVjLFxufSk7XG5cbi8vIERlY29kZXMgYSBib3gncyBKU09OIHN0cmluZyBzdHJhaWdodCBpbnRvIHRoZSB2YWxpZGF0ZWQgcm9vdHMgcmVjb3JkLlxuY29uc3QgU2FmZUtleWNhcmRCb3hGcm9tU3RyaW5nID0gSnNvbkZyb21TdHJpbmcucGlwZShTYWZlS2V5Y2FyZFJvb3RzQ29kZWMpO1xuXG4vKipcbiAqIFBhcnNlcyBhIHNhZmUga2V5Y2FyZCBib3ggdmFsdWUg4oCUIHRoZSBKU09OIHBhY2tlZCBieSBrZXktY2FyZCdzIGBnZW5lcmF0ZVNhZmVRckRhdGFgLCBlLmcuXG4gKiBge1wic2VjcDI1NmsxTXVsdGlzaWdcIjpcIuKAplwiLFwiZWNkc2FNcGNcIjpcIuKAplwiLOKApn1gIOKAlCBpbnRvIGl0cyBmb3VyIHJvb3RzLiBUaHJvd3MgaWYgdGhlIHZhbHVlIGlzXG4gKiBub3QgdmFsaWQgSlNPTiBvciBhbnkgcm9vdCBpcyBub3QgYSBiYXJlIHN0cmluZyBvciBhIGB7IHBydiwgY2hhaW5Db2RlIH1gIGVudHJ5LiBSZWNvdmVyeSB0b29saW5nIGNhbGxzIHRoaXMgb24gdGhlIEEvQi9DXG4gKiBib3ggdmFsdWUsIHRoZW4gZGVjcnlwdHMgZWFjaCByb290IHZhbHVlIHdpdGggdGhlIHNhZmUgcGFzc3dvcmQuIEFuIE1QQyByb290IHZhbHVlIGlzIGFuXG4gKiBvcGFxdWUgdmVyc2lvbmVkIGVudmVsb3BlOyByZWNvdmVyeSBtdXN0IHVud3JhcCBpdHMgYHBydktleVNoYXJlYCBhbmQgYHZyZmAgZmllbGRzIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBkZWNyeXB0ZWQgYnl0ZXMgYXMgYSBiYXJlIHNoYXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTYWZlS2V5Y2FyZEJveChkYXRhOiBzdHJpbmcpOiBTYWZlS2V5Y2FyZFJvb3RzIHtcbiAgY29uc3QgZGVjb2RlZCA9IFNhZmVLZXljYXJkQm94RnJvbVN0cmluZy5kZWNvZGUoZGF0YSk7XG4gIGlmIChFLmlzTGVmdChkZWNvZGVkKSkge1xuICAgIC8vIFBhdGhSZXBvcnRlciwgbm90IGRlY29kZVdpdGhDb2RlYzogaW8tdHMgZXJyb3JzIGNhcnJ5IG5vIG1lc3NhZ2UsIHNvIGRlY29kZVdpdGhDb2RlYyB3b3VsZCByZXBvcnQgb25seSBcInVua25vd25cIi5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnNlU2FmZUtleWNhcmRCb3g6ICR7UGF0aFJlcG9ydGVyLnJlcG9ydChkZWNvZGVkKS5qb2luKCc7ICcpfWApO1xuICB9XG4gIHJldHVybiBkZWNvZGVkLnJpZ2h0O1xufVxuIl19
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @prettier
|
|
3
3
|
*
|
|
4
|
-
* @experimental Shared safe child derivation for mint and
|
|
4
|
+
* @experimental Shared safe child derivation for mint, sign, and recovery.
|
|
5
5
|
*
|
|
6
6
|
* User child: hardened `m/<index>'` from the sequential `safe.derivationIndex[slot]`.
|
|
7
|
-
* Backup / BitGo children are soft-derived
|
|
7
|
+
* Backup / BitGo children are soft-derived at `m/<index>` client-side for recovery.
|
|
8
8
|
*
|
|
9
9
|
* Do not use `derivedFromParentWithSeed` / `deriveKeyWithSeed` (`m/999999/a/b`) —
|
|
10
10
|
* that is the custody hashed path and cannot reproduce a safe child.
|
|
@@ -43,10 +43,10 @@ exports.deriveSafeChildEd25519Hardened = deriveSafeChildEd25519Hardened;
|
|
|
43
43
|
/**
|
|
44
44
|
* @prettier
|
|
45
45
|
*
|
|
46
|
-
* @experimental Shared safe child derivation for mint and
|
|
46
|
+
* @experimental Shared safe child derivation for mint, sign, and recovery.
|
|
47
47
|
*
|
|
48
48
|
* User child: hardened `m/<index>'` from the sequential `safe.derivationIndex[slot]`.
|
|
49
|
-
* Backup / BitGo children are soft-derived
|
|
49
|
+
* Backup / BitGo children are soft-derived at `m/<index>` client-side for recovery.
|
|
50
50
|
*
|
|
51
51
|
* Do not use `derivedFromParentWithSeed` / `deriveKeyWithSeed` (`m/999999/a/b`) —
|
|
52
52
|
* that is the custody hashed path and cannot reproduce a safe child.
|
|
@@ -54,10 +54,10 @@ exports.deriveSafeChildEd25519Hardened = deriveSafeChildEd25519Hardened;
|
|
|
54
54
|
const t = __importStar(require("io-ts"));
|
|
55
55
|
const nacl = __importStar(require("tweetnacl"));
|
|
56
56
|
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
57
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
57
58
|
const ed25519KeyDeriver_1 = require("./ed25519KeyDeriver");
|
|
58
59
|
const codecs_1 = require("./codecs");
|
|
59
60
|
const ed25519Pub_1 = require("./ed25519Pub");
|
|
60
|
-
const MAX_BIP32_INDEX = 0x7fffffff;
|
|
61
61
|
exports.DERIVED_FROM_PARENT_WITH_HARDENED_PATH = /^m\/(\d+)'$/;
|
|
62
62
|
function parseSafeDerivationIndex(index) {
|
|
63
63
|
let idx;
|
|
@@ -70,7 +70,7 @@ function parseSafeDerivationIndex(index) {
|
|
|
70
70
|
else {
|
|
71
71
|
throw new Error(`Invalid safe derivation index '${index}': expected a non-negative integer`);
|
|
72
72
|
}
|
|
73
|
-
if (!Number.isInteger(idx) || idx < 0 || idx > MAX_BIP32_INDEX) {
|
|
73
|
+
if (!Number.isInteger(idx) || idx < 0 || idx > statics_1.MAX_BIP32_INDEX) {
|
|
74
74
|
throw new Error(`Invalid safe derivation index '${index}': expected a non-negative integer`);
|
|
75
75
|
}
|
|
76
76
|
return idx;
|
|
@@ -148,4 +148,4 @@ function deriveSafeChildEd25519Hardened(rootPrv, index) {
|
|
|
148
148
|
derivationPath,
|
|
149
149
|
};
|
|
150
150
|
}
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZURlcml2YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2FmZURlcml2YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLDREQWFDO0FBRUQsc0VBRUM7QUEwQkQsd0ZBT0M7QUFtQkQsMEVBSUM7QUFHRCxrRkFPQztBQWNELHdFQVlDO0FBbElEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx5Q0FBMkI7QUFDM0IsZ0RBQWtDO0FBQ2xDLG1EQUE2RDtBQUM3RCwyREFBd0Q7QUFDeEQscUNBQTJDO0FBQzNDLDZDQUEyRjtBQUUzRixNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFDdEIsUUFBQSxzQ0FBc0MsR0FBRyxhQUFhLENBQUM7QUFFcEUsU0FBZ0Isd0JBQXdCLENBQUMsS0FBc0I7SUFDN0QsSUFBSSxHQUFXLENBQUM7SUFDaEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2QsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLG9DQUFvQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEtBQUssb0NBQW9DLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsNkJBQTZC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Q0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFBLDBDQUE2QixFQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxxQ0FBaUIsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMvRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sR0FBRyxHQUFHLElBQUEseUNBQTRCLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPO1FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUMzQyxHQUFHO1FBQ0gsY0FBYztLQUNmLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFNoYXJlZCBzYWZlIGNoaWxkIGRlcml2YXRpb24gZm9yIG1pbnQgYW5kIHNpZ24uXG4gKlxuICogVXNlciBjaGlsZDogaGFyZGVuZWQgYG0vPGluZGV4PidgIGZyb20gdGhlIHNlcXVlbnRpYWwgYHNhZmUuZGVyaXZhdGlvbkluZGV4W3Nsb3RdYC5cbiAqIEJhY2t1cCAvIEJpdEdvIGNoaWxkcmVuIGFyZSBzb2Z0LWRlcml2ZWQgc2VydmVyLXNpZGUgYXQgYG0vPGluZGV4PmAgKG5vdCBoZXJlKS5cbiAqXG4gKiBEbyBub3QgdXNlIGBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkYCAvIGBkZXJpdmVLZXlXaXRoU2VlZGAgKGBtLzk5OTk5OS9hL2JgKSDigJRcbiAqIHRoYXQgaXMgdGhlIGN1c3RvZHkgaGFzaGVkIHBhdGggYW5kIGNhbm5vdCByZXByb2R1Y2UgYSBzYWZlIGNoaWxkLlxuICovXG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCAqIGFzIG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IEVkMjU1MTlLZXlEZXJpdmVyIH0gZnJvbSAnLi9lZDI1NTE5S2V5RGVyaXZlcic7XG5pbXBvcnQgeyBkZWNvZGVXaXRoQ29kZWMgfSBmcm9tICcuL2NvZGVjcyc7XG5pbXBvcnQgeyBkZWNvZGVFZDI1NTE5U3RyS2V5U2VjcmV0U2VlZCwgZW5jb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSB9IGZyb20gJy4vZWQyNTUxOVB1Yic7XG5cbmNvbnN0IE1BWF9CSVAzMl9JTkRFWCA9IDB4N2ZmZmZmZmY7XG5leHBvcnQgY29uc3QgREVSSVZFRF9GUk9NX1BBUkVOVF9XSVRIX0hBUkRFTkVEX1BBVEggPSAvXm1cXC8oXFxkKyknJC87XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBpZHg6IG51bWJlcjtcbiAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICBpZHggPSBpbmRleDtcbiAgfSBlbHNlIGlmICgvXlxcZCskLy50ZXN0KGluZGV4KSkge1xuICAgIGlkeCA9IE51bWJlcihpbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleCAnJHtpbmRleH0nOiBleHBlY3RlZCBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYCk7XG4gIH1cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlkeCkgfHwgaWR4IDwgMCB8fCBpZHggPiBNQVhfQklQMzJfSU5ERVgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4ICcke2luZGV4fSc6IGV4cGVjdGVkIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgKTtcbiAgfVxuICByZXR1cm4gaWR4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgbS8ke3BhcnNlU2FmZURlcml2YXRpb25JbmRleChpbmRleCl9J2A7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoQnJhbmQge1xuICByZWFkb25seSBEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGg6IHVuaXF1ZSBzeW1ib2w7XG59XG5cbmV4cG9ydCB0eXBlIERlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCA9IHQuQnJhbmRlZDxzdHJpbmcsIERlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aEJyYW5kPjtcblxuZXhwb3J0IGNvbnN0IERlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCA9IHQuYnJhbmQoXG4gIHQuc3RyaW5nLFxuICAocyk6IHMgaXMgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoID0+IHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoSW5kZXgocykgIT09IHVuZGVmaW5lZCxcbiAgJ0Rlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCdcbik7XG5cbmZ1bmN0aW9uIHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoSW5kZXgocGF0aDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSBERVJJVkVEX0ZST01fUEFSRU5UX1dJVEhfSEFSREVORURfUEFUSC5leGVjKHBhdGgpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgobWF0Y2hbMV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB2YWxpZGF0ZWQgPSBkZWNvZGVXaXRoQ29kZWMoRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLCBwYXRoLCAnZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoJyk7XG4gIGNvbnN0IGluZGV4ID0gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGhJbmRleCh2YWxpZGF0ZWQpO1xuICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggJyR7cGF0aH0nOiBleHBlY3RlZCBtLzxuPidgKTtcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FmZUhhcmRlbmVkQ2hpbGRLZXkge1xuICBwcnY6IHN0cmluZztcbiAgcHViOiBzdHJpbmc7XG4gIGRlcml2YXRpb25QYXRoOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNoaWxkRnJvbU5vZGUoY2hpbGQ6IEJJUDMySW50ZXJmYWNlLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nKTogU2FmZUhhcmRlbmVkQ2hpbGRLZXkge1xuICBpZiAoIWNoaWxkLnByaXZhdGVLZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZXJpdmUgaGFyZGVuZWQgc2FmZSBjaGlsZCBhdCAke2Rlcml2YXRpb25QYXRofWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJ2OiBjaGlsZC50b0Jhc2U1OCgpLFxuICAgIHB1YjogY2hpbGQubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIGRlcml2YXRpb25QYXRoLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydihyb290WHBydjogc3RyaW5nLCBpbmRleDogc3RyaW5nIHwgbnVtYmVyKTogU2FmZUhhcmRlbmVkQ2hpbGRLZXkge1xuICBjb25zdCBpZHggPSBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoaW5kZXgpO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9IGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoKGlkeCk7XG4gIHJldHVybiBjaGlsZEZyb21Ob2RlKGJpcDMyLmZyb21CYXNlNTgocm9vdFhwcnYpLmRlcml2ZUhhcmRlbmVkKGlkeCksIGRlcml2YXRpb25QYXRoKTtcbn1cblxuLyoqIFJlLWRlcml2ZSBhbmQgYXNzZXJ0IGJvdGggcmVzdWx0cyBtYXRjaCBiZWZvcmUgdGhlIGNoaWxkIGlzIHJlZ2lzdGVyZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlQW5kU2VsZkNoZWNrU2FmZUNoaWxkSGFyZGVuZWQocm9vdFhwcnY6IHN0cmluZywgaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IFNhZmVIYXJkZW5lZENoaWxkS2V5IHtcbiAgY29uc3QgZmlyc3QgPSBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2KHJvb3RYcHJ2LCBpbmRleCk7XG4gIGNvbnN0IHNlY29uZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYocm9vdFhwcnYsIGluZGV4KTtcbiAgaWYgKGZpcnN0LnB1YiAhPT0gc2Vjb25kLnB1YiB8fCBmaXJzdC5wcnYgIT09IHNlY29uZC5wcnYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmUgY2hpbGQgc2VsZi1jaGVjayBmYWlsZWQgYXQgJHtmaXJzdC5kZXJpdmF0aW9uUGF0aH06IGRlcml2YXRpb24gd2FzIG5vdCBkZXRlcm1pbmlzdGljYCk7XG4gIH1cbiAgcmV0dXJuIGZpcnN0O1xufVxuXG4vKipcbiAqIFNMSVAtMDAxMCBoYXJkZW5lZCBkZXJpdmF0aW9uIG9mIGEgc2FmZSB1c2VyIGNoaWxkIGZyb20gYW4gZWQyNTUxOSByb290IHNlY3JldCBzZWVkLlxuICpcbiAqIGByb290UHJ2YCBpcyBhIFN0ZWxsYXIgU3RyS2V5IGBT4oCmYCBzZWNyZXQgc2VlZCAod2hhdCBzbG90LeKRoyBgZWQyNTUxOU11bHRpc2lnYCB1c2VyIHJvb3RzIHN0b3JlKS5cbiAqIFRoZSBkZXJpdmF0aW9uIHJldXNlcyB0aGUgZXhpc3RpbmcgU0xJUC0wMDEwIGltcGxlbWVudGF0aW9uIHtAbGluayBFZDI1NTE5S2V5RGVyaXZlci5kZXJpdmVQYXRofVxuICogKGhhcmRlbmVkLW9ubHkgQ0tEUHJpdiBvdmVyIHRoZSBgZWQyNTUxOSBzZWVkYCBITUFDIG1hc3RlciksIHRoZW4gZXhwYW5kcyB0aGUgcmVzdWx0aW5nIDMyLWJ5dGVcbiAqIGNoaWxkIHNlZWQgaW50byBhIGtleXBhaXIgd2l0aCBgbmFjbGAuIFRoZSBjaGlsZCBgcHViYCBpcyBhIGJhcmUgU3RyS2V5IGBH4oCmYDsgdGhlIGBwcnZgIGlzIHRoZVxuICogcmF3IDMyLWJ5dGUgY2hpbGQgc2VlZCBhcyBoZXggKHRoZSBzZWVkIGlucHV0IGEgc2lnbmVyIG5lZWRzKS5cbiAqXG4gKiBVbmxpa2UgdGhlIHNlY3AyNTZrMSBwYXRoLCBlZDI1NTE5IGhhcmRlbmVkIGRlcml2YXRpb24gbmVlZHMgbm8gY2hhaW4gY29kZSDigJQgdGhlIGNvbXBvc2l0ZVxuICogYHB1YuKAlmNoYWluQ29kZWAgZm9ybSBpcyBvbmx5IGZvciBTT0ZUIGNvLXNpZ25lciBkZXJpdmF0aW9uIGFuZCBpcyBub3QgdXNlZCBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKHJvb3RQcnY6IHN0cmluZywgaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IFNhZmVIYXJkZW5lZENoaWxkS2V5IHtcbiAgY29uc3QgaWR4ID0gcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KGluZGV4KTtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGggPSBnZXRTYWZlSGFyZGVuZWREZXJpdmF0aW9uUGF0aChpZHgpO1xuICBjb25zdCByYXdTZWVkSGV4ID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQocm9vdFBydikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBjaGlsZFNlZWQgPSBFZDI1NTE5S2V5RGVyaXZlci5kZXJpdmVQYXRoKGRlcml2YXRpb25QYXRoLCByYXdTZWVkSGV4KS5rZXk7XG4gIGNvbnN0IGtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChVaW50OEFycmF5LmZyb20oY2hpbGRTZWVkKSk7XG4gIGNvbnN0IHB1YiA9IGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoQnVmZmVyLmZyb20oa2V5UGFpci5wdWJsaWNLZXkpKTtcbiAgcmV0dXJuIHtcbiAgICBwcnY6IEJ1ZmZlci5mcm9tKGNoaWxkU2VlZCkudG9TdHJpbmcoJ2hleCcpLFxuICAgIHB1YixcbiAgICBkZXJpdmF0aW9uUGF0aCxcbiAgfTtcbn1cbiJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZURlcml2YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2FmZURlcml2YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLDREQWFDO0FBRUQsc0VBRUM7QUEwQkQsd0ZBT0M7QUFtQkQsMEVBSUM7QUFHRCxrRkFPQztBQWNELHdFQVlDO0FBbElEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx5Q0FBMkI7QUFDM0IsZ0RBQWtDO0FBQ2xDLG1EQUE2RDtBQUM3RCxpREFBc0Q7QUFDdEQsMkRBQXdEO0FBQ3hELHFDQUEyQztBQUMzQyw2Q0FBMkY7QUFFOUUsUUFBQSxzQ0FBc0MsR0FBRyxhQUFhLENBQUM7QUFFcEUsU0FBZ0Isd0JBQXdCLENBQUMsS0FBc0I7SUFDN0QsSUFBSSxHQUFXLENBQUM7SUFDaEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2QsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLG9DQUFvQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLHlCQUFlLEVBQUUsQ0FBQztRQUMvRCxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLG9DQUFvQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQWdCLDZCQUE2QixDQUFDLEtBQXNCO0lBQ2xF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QUM7SUFDMUQsTUFBTSxVQUFVLEdBQUcsSUFBQSwwQ0FBNkIsRUFBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUUsTUFBTSxTQUFTLEdBQUcscUNBQWlCLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDL0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RSxNQUFNLEdBQUcsR0FBRyxJQUFBLHlDQUE0QixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDekUsT0FBTztRQUNMLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDM0MsR0FBRztRQUNILGNBQWM7S0FDZixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogQGV4cGVyaW1lbnRhbCBTaGFyZWQgc2FmZSBjaGlsZCBkZXJpdmF0aW9uIGZvciBtaW50LCBzaWduLCBhbmQgcmVjb3ZlcnkuXG4gKlxuICogVXNlciBjaGlsZDogaGFyZGVuZWQgYG0vPGluZGV4PidgIGZyb20gdGhlIHNlcXVlbnRpYWwgYHNhZmUuZGVyaXZhdGlvbkluZGV4W3Nsb3RdYC5cbiAqIEJhY2t1cCAvIEJpdEdvIGNoaWxkcmVuIGFyZSBzb2Z0LWRlcml2ZWQgYXQgYG0vPGluZGV4PmAgY2xpZW50LXNpZGUgZm9yIHJlY292ZXJ5LlxuICpcbiAqIERvIG5vdCB1c2UgYGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWRgIC8gYGRlcml2ZUtleVdpdGhTZWVkYCAoYG0vOTk5OTk5L2EvYmApIOKAlFxuICogdGhhdCBpcyB0aGUgY3VzdG9keSBoYXNoZWQgcGF0aCBhbmQgY2Fubm90IHJlcHJvZHVjZSBhIHNhZmUgY2hpbGQuXG4gKi9cbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgTUFYX0JJUDMyX0lOREVYIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBFZDI1NTE5S2V5RGVyaXZlciB9IGZyb20gJy4vZWQyNTUxOUtleURlcml2ZXInO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi9jb2RlY3MnO1xuaW1wb3J0IHsgZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQsIGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkgfSBmcm9tICcuL2VkMjU1MTlQdWInO1xuXG5leHBvcnQgY29uc3QgREVSSVZFRF9GUk9NX1BBUkVOVF9XSVRIX0hBUkRFTkVEX1BBVEggPSAvXm1cXC8oXFxkKyknJC87XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBpZHg6IG51bWJlcjtcbiAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICBpZHggPSBpbmRleDtcbiAgfSBlbHNlIGlmICgvXlxcZCskLy50ZXN0KGluZGV4KSkge1xuICAgIGlkeCA9IE51bWJlcihpbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleCAnJHtpbmRleH0nOiBleHBlY3RlZCBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYCk7XG4gIH1cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGlkeCkgfHwgaWR4IDwgMCB8fCBpZHggPiBNQVhfQklQMzJfSU5ERVgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4ICcke2luZGV4fSc6IGV4cGVjdGVkIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgKTtcbiAgfVxuICByZXR1cm4gaWR4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgbS8ke3BhcnNlU2FmZURlcml2YXRpb25JbmRleChpbmRleCl9J2A7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoQnJhbmQge1xuICByZWFkb25seSBEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGg6IHVuaXF1ZSBzeW1ib2w7XG59XG5cbmV4cG9ydCB0eXBlIERlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCA9IHQuQnJhbmRlZDxzdHJpbmcsIERlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aEJyYW5kPjtcblxuZXhwb3J0IGNvbnN0IERlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCA9IHQuYnJhbmQoXG4gIHQuc3RyaW5nLFxuICAocyk6IHMgaXMgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoID0+IHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoSW5kZXgocykgIT09IHVuZGVmaW5lZCxcbiAgJ0Rlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCdcbik7XG5cbmZ1bmN0aW9uIHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoSW5kZXgocGF0aDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSBERVJJVkVEX0ZST01fUEFSRU5UX1dJVEhfSEFSREVORURfUEFUSC5leGVjKHBhdGgpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgobWF0Y2hbMV0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCB2YWxpZGF0ZWQgPSBkZWNvZGVXaXRoQ29kZWMoRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLCBwYXRoLCAnZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoJyk7XG4gIGNvbnN0IGluZGV4ID0gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGhJbmRleCh2YWxpZGF0ZWQpO1xuICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggJyR7cGF0aH0nOiBleHBlY3RlZCBtLzxuPidgKTtcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2FmZUhhcmRlbmVkQ2hpbGRLZXkge1xuICBwcnY6IHN0cmluZztcbiAgcHViOiBzdHJpbmc7XG4gIGRlcml2YXRpb25QYXRoOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNoaWxkRnJvbU5vZGUoY2hpbGQ6IEJJUDMySW50ZXJmYWNlLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nKTogU2FmZUhhcmRlbmVkQ2hpbGRLZXkge1xuICBpZiAoIWNoaWxkLnByaXZhdGVLZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZXJpdmUgaGFyZGVuZWQgc2FmZSBjaGlsZCBhdCAke2Rlcml2YXRpb25QYXRofWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJ2OiBjaGlsZC50b0Jhc2U1OCgpLFxuICAgIHB1YjogY2hpbGQubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIGRlcml2YXRpb25QYXRoLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydihyb290WHBydjogc3RyaW5nLCBpbmRleDogc3RyaW5nIHwgbnVtYmVyKTogU2FmZUhhcmRlbmVkQ2hpbGRLZXkge1xuICBjb25zdCBpZHggPSBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoaW5kZXgpO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9IGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoKGlkeCk7XG4gIHJldHVybiBjaGlsZEZyb21Ob2RlKGJpcDMyLmZyb21CYXNlNTgocm9vdFhwcnYpLmRlcml2ZUhhcmRlbmVkKGlkeCksIGRlcml2YXRpb25QYXRoKTtcbn1cblxuLyoqIFJlLWRlcml2ZSBhbmQgYXNzZXJ0IGJvdGggcmVzdWx0cyBtYXRjaCBiZWZvcmUgdGhlIGNoaWxkIGlzIHJlZ2lzdGVyZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlQW5kU2VsZkNoZWNrU2FmZUNoaWxkSGFyZGVuZWQocm9vdFhwcnY6IHN0cmluZywgaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IFNhZmVIYXJkZW5lZENoaWxkS2V5IHtcbiAgY29uc3QgZmlyc3QgPSBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2KHJvb3RYcHJ2LCBpbmRleCk7XG4gIGNvbnN0IHNlY29uZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYocm9vdFhwcnYsIGluZGV4KTtcbiAgaWYgKGZpcnN0LnB1YiAhPT0gc2Vjb25kLnB1YiB8fCBmaXJzdC5wcnYgIT09IHNlY29uZC5wcnYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmUgY2hpbGQgc2VsZi1jaGVjayBmYWlsZWQgYXQgJHtmaXJzdC5kZXJpdmF0aW9uUGF0aH06IGRlcml2YXRpb24gd2FzIG5vdCBkZXRlcm1pbmlzdGljYCk7XG4gIH1cbiAgcmV0dXJuIGZpcnN0O1xufVxuXG4vKipcbiAqIFNMSVAtMDAxMCBoYXJkZW5lZCBkZXJpdmF0aW9uIG9mIGEgc2FmZSB1c2VyIGNoaWxkIGZyb20gYW4gZWQyNTUxOSByb290IHNlY3JldCBzZWVkLlxuICpcbiAqIGByb290UHJ2YCBpcyBhIFN0ZWxsYXIgU3RyS2V5IGBT4oCmYCBzZWNyZXQgc2VlZCAod2hhdCBzbG90LeKRoyBgZWQyNTUxOU11bHRpc2lnYCB1c2VyIHJvb3RzIHN0b3JlKS5cbiAqIFRoZSBkZXJpdmF0aW9uIHJldXNlcyB0aGUgZXhpc3RpbmcgU0xJUC0wMDEwIGltcGxlbWVudGF0aW9uIHtAbGluayBFZDI1NTE5S2V5RGVyaXZlci5kZXJpdmVQYXRofVxuICogKGhhcmRlbmVkLW9ubHkgQ0tEUHJpdiBvdmVyIHRoZSBgZWQyNTUxOSBzZWVkYCBITUFDIG1hc3RlciksIHRoZW4gZXhwYW5kcyB0aGUgcmVzdWx0aW5nIDMyLWJ5dGVcbiAqIGNoaWxkIHNlZWQgaW50byBhIGtleXBhaXIgd2l0aCBgbmFjbGAuIFRoZSBjaGlsZCBgcHViYCBpcyBhIGJhcmUgU3RyS2V5IGBH4oCmYDsgdGhlIGBwcnZgIGlzIHRoZVxuICogcmF3IDMyLWJ5dGUgY2hpbGQgc2VlZCBhcyBoZXggKHRoZSBzZWVkIGlucHV0IGEgc2lnbmVyIG5lZWRzKS5cbiAqXG4gKiBVbmxpa2UgdGhlIHNlY3AyNTZrMSBwYXRoLCBlZDI1NTE5IGhhcmRlbmVkIGRlcml2YXRpb24gbmVlZHMgbm8gY2hhaW4gY29kZSDigJQgdGhlIGNvbXBvc2l0ZVxuICogYHB1YuKAlmNoYWluQ29kZWAgZm9ybSBpcyBvbmx5IGZvciBTT0ZUIGNvLXNpZ25lciBkZXJpdmF0aW9uIGFuZCBpcyBub3QgdXNlZCBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKHJvb3RQcnY6IHN0cmluZywgaW5kZXg6IHN0cmluZyB8IG51bWJlcik6IFNhZmVIYXJkZW5lZENoaWxkS2V5IHtcbiAgY29uc3QgaWR4ID0gcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KGluZGV4KTtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGggPSBnZXRTYWZlSGFyZGVuZWREZXJpdmF0aW9uUGF0aChpZHgpO1xuICBjb25zdCByYXdTZWVkSGV4ID0gZGVjb2RlRWQyNTUxOVN0cktleVNlY3JldFNlZWQocm9vdFBydikudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBjaGlsZFNlZWQgPSBFZDI1NTE5S2V5RGVyaXZlci5kZXJpdmVQYXRoKGRlcml2YXRpb25QYXRoLCByYXdTZWVkSGV4KS5rZXk7XG4gIGNvbnN0IGtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChVaW50OEFycmF5LmZyb20oY2hpbGRTZWVkKSk7XG4gIGNvbnN0IHB1YiA9IGVuY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoQnVmZmVyLmZyb20oa2V5UGFpci5wdWJsaWNLZXkpKTtcbiAgcmV0dXJuIHtcbiAgICBwcnY6IEJ1ZmZlci5mcm9tKGNoaWxkU2VlZCkudG9TdHJpbmcoJ2hleCcpLFxuICAgIHB1YixcbiAgICBkZXJpdmF0aW9uUGF0aCxcbiAgfTtcbn1cbiJdfQ==
|
package/dist/src/safeSlot.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type { RootKeyType } from '@bitgo/public-types';
|
|
2
2
|
type OnchainSafeRootKeySlot = Extract<RootKeyType, 'secp256k1Multisig' | 'ed25519Multisig'>;
|
|
3
|
-
type TssSafeRootKeySlot = Extract<RootKeyType, 'ecdsaMpc'>;
|
|
3
|
+
type TssSafeRootKeySlot = Extract<RootKeyType, 'ecdsaMpc' | 'eddsaMpc'>;
|
|
4
4
|
export declare function onchainSlotForCoin(chain: string): OnchainSafeRootKeySlot;
|
|
5
5
|
export declare function tssSlotForCoin(chain: string): TssSafeRootKeySlot;
|
|
6
|
+
/**
|
|
7
|
+
* Every safe root slot a coin can be minted under, in deterministic order (onchain first,
|
|
8
|
+
* then tss). Mirrors wallet-platform's mint truth: the onchain slot is included iff the coin
|
|
9
|
+
* carries {@link CoinFeature.MULTISIG}, the tss slot iff it carries {@link CoinFeature.TSS}.
|
|
10
|
+
* A coin that mints under neither (e.g. a Pallas coin) yields `[]`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function safeSlotsForCoin(chain: string): RootKeyType[];
|
|
6
13
|
export {};
|
|
7
14
|
//# sourceMappingURL=safeSlot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeSlot.d.ts","sourceRoot":"","sources":["../../src/safeSlot.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,KAAK,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,mBAAmB,GAAG,iBAAiB,CAAC,CAAC;AAC5F,KAAK,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"safeSlot.d.ts","sourceRoot":"","sources":["../../src/safeSlot.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,KAAK,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,mBAAmB,GAAG,iBAAiB,CAAC,CAAC;AAC5F,KAAK,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;AAYxE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,CAMxE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAMhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAW7D"}
|
package/dist/src/safeSlot.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.onchainSlotForCoin = onchainSlotForCoin;
|
|
4
4
|
exports.tssSlotForCoin = tssSlotForCoin;
|
|
5
|
+
exports.safeSlotsForCoin = safeSlotsForCoin;
|
|
5
6
|
/**
|
|
6
7
|
* @prettier
|
|
7
8
|
*
|
|
@@ -9,30 +10,51 @@ exports.tssSlotForCoin = tssSlotForCoin;
|
|
|
9
10
|
*
|
|
10
11
|
* Maps a coin chain + minting model to the safe root slot that derives it. The slot
|
|
11
12
|
* is a signing scheme, not a coin: slot ① secp256k1Multisig serves UTXO + XRP + TRX + …,
|
|
12
|
-
* slot
|
|
13
|
+
* slot ② ed25519Multisig serves ALGO/XLM/HBAR, and the MPC slots serve TSS coins.
|
|
13
14
|
*
|
|
14
15
|
* The multisigType-vs-coin validation stays in sdk-core (it needs IBaseCoin); these
|
|
15
16
|
* functions take only the chain so this leaf never imports sdk-core.
|
|
16
17
|
*/
|
|
17
18
|
const statics_1 = require("@bitgo-beta/statics");
|
|
19
|
+
/**
|
|
20
|
+
* Exhaustive curve → slot registry. Pallas maps to nothing: a Pallas coin has no safe
|
|
21
|
+
* root slot. The compiler guarantees every {@link KeyCurve} member is present.
|
|
22
|
+
*/
|
|
23
|
+
const CURVE_TO_SLOTS = {
|
|
24
|
+
[statics_1.KeyCurve.Secp256k1]: { onchain: 'secp256k1Multisig', tss: 'ecdsaMpc' },
|
|
25
|
+
[statics_1.KeyCurve.Ed25519]: { onchain: 'ed25519Multisig', tss: 'eddsaMpc' },
|
|
26
|
+
[statics_1.KeyCurve.Pallas]: {},
|
|
27
|
+
};
|
|
18
28
|
function onchainSlotForCoin(chain) {
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
|
|
29
|
+
const slot = CURVE_TO_SLOTS[statics_1.coins.get(chain).primaryKeyCurve].onchain;
|
|
30
|
+
if (!slot) {
|
|
31
|
+
throw new Error(`Coin '${chain}' is not supported for safe wallet minting`);
|
|
22
32
|
}
|
|
23
|
-
|
|
24
|
-
return 'ed25519Multisig';
|
|
25
|
-
}
|
|
26
|
-
throw new Error(`Coin '${chain}' is not supported for safe wallet minting`);
|
|
33
|
+
return slot;
|
|
27
34
|
}
|
|
28
35
|
function tssSlotForCoin(chain) {
|
|
29
|
-
const
|
|
30
|
-
if (
|
|
31
|
-
|
|
36
|
+
const slot = CURVE_TO_SLOTS[statics_1.coins.get(chain).primaryKeyCurve].tss;
|
|
37
|
+
if (!slot) {
|
|
38
|
+
throw new Error(`Coin '${chain}' is not supported for safe wallet minting`);
|
|
39
|
+
}
|
|
40
|
+
return slot;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Every safe root slot a coin can be minted under, in deterministic order (onchain first,
|
|
44
|
+
* then tss). Mirrors wallet-platform's mint truth: the onchain slot is included iff the coin
|
|
45
|
+
* carries {@link CoinFeature.MULTISIG}, the tss slot iff it carries {@link CoinFeature.TSS}.
|
|
46
|
+
* A coin that mints under neither (e.g. a Pallas coin) yields `[]`.
|
|
47
|
+
*/
|
|
48
|
+
function safeSlotsForCoin(chain) {
|
|
49
|
+
const coin = statics_1.coins.get(chain);
|
|
50
|
+
const { onchain, tss } = CURVE_TO_SLOTS[coin.primaryKeyCurve];
|
|
51
|
+
const slots = [];
|
|
52
|
+
if (onchain && coin.features.includes(statics_1.CoinFeature.MULTISIG)) {
|
|
53
|
+
slots.push(onchain);
|
|
32
54
|
}
|
|
33
|
-
if (
|
|
34
|
-
|
|
55
|
+
if (tss && coin.features.includes(statics_1.CoinFeature.TSS)) {
|
|
56
|
+
slots.push(tss);
|
|
35
57
|
}
|
|
36
|
-
|
|
58
|
+
return slots;
|
|
37
59
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZVNsb3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2FmZVNsb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0QkEsZ0RBTUM7QUFFRCx3Q0FNQztBQVFELDRDQVdDO0FBN0REOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsaURBQW1FO0FBTW5FOzs7R0FHRztBQUNILE1BQU0sY0FBYyxHQUFxRjtJQUN2RyxDQUFDLGtCQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtJQUN2RSxDQUFDLGtCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtJQUNuRSxDQUFDLGtCQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTtDQUN0QixDQUFDO0FBRUYsU0FBZ0Isa0JBQWtCLENBQUMsS0FBYTtJQUM5QyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDdEUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssNENBQTRDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLEtBQWE7SUFDMUMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2xFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLDRDQUE0QyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBYTtJQUM1QyxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RCxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQ2hDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM1RCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqXG4gKiBAZXhwZXJpbWVudGFsIFNoYXJlZCBzYWZlIHNsb3QtZm9yLWNvaW4gbWFwcGluZy5cbiAqXG4gKiBNYXBzIGEgY29pbiBjaGFpbiArIG1pbnRpbmcgbW9kZWwgdG8gdGhlIHNhZmUgcm9vdCBzbG90IHRoYXQgZGVyaXZlcyBpdC4gVGhlIHNsb3RcbiAqIGlzIGEgc2lnbmluZyBzY2hlbWUsIG5vdCBhIGNvaW46IHNsb3Qg4pGgIHNlY3AyNTZrMU11bHRpc2lnIHNlcnZlcyBVVFhPICsgWFJQICsgVFJYICsg4oCmLFxuICogc2xvdCDikaEgZWQyNTUxOU11bHRpc2lnIHNlcnZlcyBBTEdPL1hMTS9IQkFSLCBhbmQgdGhlIE1QQyBzbG90cyBzZXJ2ZSBUU1MgY29pbnMuXG4gKlxuICogVGhlIG11bHRpc2lnVHlwZS12cy1jb2luIHZhbGlkYXRpb24gc3RheXMgaW4gc2RrLWNvcmUgKGl0IG5lZWRzIElCYXNlQ29pbik7IHRoZXNlXG4gKiBmdW5jdGlvbnMgdGFrZSBvbmx5IHRoZSBjaGFpbiBzbyB0aGlzIGxlYWYgbmV2ZXIgaW1wb3J0cyBzZGstY29yZS5cbiAqL1xuaW1wb3J0IHsgY29pbnMsIENvaW5GZWF0dXJlLCBLZXlDdXJ2ZSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHR5cGUgeyBSb290S2V5VHlwZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuXG50eXBlIE9uY2hhaW5TYWZlUm9vdEtleVNsb3QgPSBFeHRyYWN0PFJvb3RLZXlUeXBlLCAnc2VjcDI1NmsxTXVsdGlzaWcnIHwgJ2VkMjU1MTlNdWx0aXNpZyc+O1xudHlwZSBUc3NTYWZlUm9vdEtleVNsb3QgPSBFeHRyYWN0PFJvb3RLZXlUeXBlLCAnZWNkc2FNcGMnIHwgJ2VkZHNhTXBjJz47XG5cbi8qKlxuICogRXhoYXVzdGl2ZSBjdXJ2ZSDihpIgc2xvdCByZWdpc3RyeS4gUGFsbGFzIG1hcHMgdG8gbm90aGluZzogYSBQYWxsYXMgY29pbiBoYXMgbm8gc2FmZVxuICogcm9vdCBzbG90LiBUaGUgY29tcGlsZXIgZ3VhcmFudGVlcyBldmVyeSB7QGxpbmsgS2V5Q3VydmV9IG1lbWJlciBpcyBwcmVzZW50LlxuICovXG5jb25zdCBDVVJWRV9UT19TTE9UUzogUmVjb3JkPEtleUN1cnZlLCB7IG9uY2hhaW4/OiBPbmNoYWluU2FmZVJvb3RLZXlTbG90OyB0c3M/OiBUc3NTYWZlUm9vdEtleVNsb3QgfT4gPSB7XG4gIFtLZXlDdXJ2ZS5TZWNwMjU2azFdOiB7IG9uY2hhaW46ICdzZWNwMjU2azFNdWx0aXNpZycsIHRzczogJ2VjZHNhTXBjJyB9LFxuICBbS2V5Q3VydmUuRWQyNTUxOV06IHsgb25jaGFpbjogJ2VkMjU1MTlNdWx0aXNpZycsIHRzczogJ2VkZHNhTXBjJyB9LFxuICBbS2V5Q3VydmUuUGFsbGFzXToge30sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb25jaGFpblNsb3RGb3JDb2luKGNoYWluOiBzdHJpbmcpOiBPbmNoYWluU2FmZVJvb3RLZXlTbG90IHtcbiAgY29uc3Qgc2xvdCA9IENVUlZFX1RPX1NMT1RTW2NvaW5zLmdldChjaGFpbikucHJpbWFyeUtleUN1cnZlXS5vbmNoYWluO1xuICBpZiAoIXNsb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvaW4gJyR7Y2hhaW59JyBpcyBub3Qgc3VwcG9ydGVkIGZvciBzYWZlIHdhbGxldCBtaW50aW5nYCk7XG4gIH1cbiAgcmV0dXJuIHNsb3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0c3NTbG90Rm9yQ29pbihjaGFpbjogc3RyaW5nKTogVHNzU2FmZVJvb3RLZXlTbG90IHtcbiAgY29uc3Qgc2xvdCA9IENVUlZFX1RPX1NMT1RTW2NvaW5zLmdldChjaGFpbikucHJpbWFyeUtleUN1cnZlXS50c3M7XG4gIGlmICghc2xvdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29pbiAnJHtjaGFpbn0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNhZmUgd2FsbGV0IG1pbnRpbmdgKTtcbiAgfVxuICByZXR1cm4gc2xvdDtcbn1cblxuLyoqXG4gKiBFdmVyeSBzYWZlIHJvb3Qgc2xvdCBhIGNvaW4gY2FuIGJlIG1pbnRlZCB1bmRlciwgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlciAob25jaGFpbiBmaXJzdCxcbiAqIHRoZW4gdHNzKS4gTWlycm9ycyB3YWxsZXQtcGxhdGZvcm0ncyBtaW50IHRydXRoOiB0aGUgb25jaGFpbiBzbG90IGlzIGluY2x1ZGVkIGlmZiB0aGUgY29pblxuICogY2FycmllcyB7QGxpbmsgQ29pbkZlYXR1cmUuTVVMVElTSUd9LCB0aGUgdHNzIHNsb3QgaWZmIGl0IGNhcnJpZXMge0BsaW5rIENvaW5GZWF0dXJlLlRTU30uXG4gKiBBIGNvaW4gdGhhdCBtaW50cyB1bmRlciBuZWl0aGVyIChlLmcuIGEgUGFsbGFzIGNvaW4pIHlpZWxkcyBgW11gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZVNsb3RzRm9yQ29pbihjaGFpbjogc3RyaW5nKTogUm9vdEtleVR5cGVbXSB7XG4gIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQoY2hhaW4pO1xuICBjb25zdCB7IG9uY2hhaW4sIHRzcyB9ID0gQ1VSVkVfVE9fU0xPVFNbY29pbi5wcmltYXJ5S2V5Q3VydmVdO1xuICBjb25zdCBzbG90czogUm9vdEtleVR5cGVbXSA9IFtdO1xuICBpZiAob25jaGFpbiAmJiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLk1VTFRJU0lHKSkge1xuICAgIHNsb3RzLnB1c2gob25jaGFpbik7XG4gIH1cbiAgaWYgKHRzcyAmJiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlRTUykpIHtcbiAgICBzbG90cy5wdXNoKHRzcyk7XG4gIH1cbiAgcmV0dXJuIHNsb3RzO1xufVxuIl19
|