@bitgo/sdk-core 38.17.0 → 38.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +3 -3
  2. package/dist/src/account-lib/baseCoin/enum.d.ts +2 -1
  3. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/enum.js +4 -1
  5. package/dist/src/account-lib/index.d.ts +0 -1
  6. package/dist/src/account-lib/index.d.ts.map +1 -1
  7. package/dist/src/account-lib/index.js +1 -2
  8. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +14 -0
  9. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  10. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  11. package/dist/src/bitgo/coinFactory.d.ts +7 -0
  12. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  13. package/dist/src/bitgo/coinFactory.js +10 -1
  14. package/dist/src/bitgo/keychain/keychains.d.ts +4 -0
  15. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  16. package/dist/src/bitgo/keychain/keychains.js +12 -8
  17. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +3 -21
  18. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
  19. package/dist/src/bitgo/safe/derivableEd25519Pub.js +6 -145
  20. package/dist/src/bitgo/safe/iSafe.d.ts +7 -2
  21. package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
  22. package/dist/src/bitgo/safe/iSafe.js +1 -1
  23. package/dist/src/bitgo/safe/index.d.ts +1 -1
  24. package/dist/src/bitgo/safe/index.d.ts.map +1 -1
  25. package/dist/src/bitgo/safe/index.js +2 -2
  26. package/dist/src/bitgo/safe/safe.d.ts +5 -1
  27. package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
  28. package/dist/src/bitgo/safe/safe.js +21 -40
  29. package/dist/src/bitgo/safe/safes.js +4 -4
  30. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -0
  31. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  32. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  33. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +26 -5
  34. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  35. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +35 -24
  36. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +1 -20
  37. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
  38. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +16 -68
  39. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +2 -2
  40. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -1
  41. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +5 -4
  42. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +16 -2
  43. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  44. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +34 -6
  45. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +3 -1
  46. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -1
  47. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +1 -1
  48. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +0 -8
  49. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
  50. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +4 -23
  51. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +3 -0
  52. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  53. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  54. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  55. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  56. package/dist/src/bitgo/utils/tss/index.js +2 -1
  57. package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts +40 -0
  58. package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
  59. package/dist/src/bitgo/utils/tss/keyShareEnvelope.js +103 -0
  60. package/dist/src/bitgo/wallet/safeKeychain.js +3 -3
  61. package/dist/test/unit/bitgo/safe/safe.js +42 -3
  62. package/dist/test/unit/bitgo/safe/safeDerivation.js +5 -1
  63. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +76 -1
  64. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +4 -3
  65. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +66 -1
  66. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts +2 -0
  67. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
  68. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.js +83 -0
  69. package/dist/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +5 -5
  71. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +0 -52
  72. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +0 -1
  73. package/dist/src/account-lib/util/ed25519KeyDeriver.js +0 -91
  74. package/dist/src/bitgo/safe/safeDerivation.d.ts +0 -43
  75. package/dist/src/bitgo/safe/safeDerivation.d.ts.map +0 -1
  76. package/dist/src/bitgo/safe/safeDerivation.js +0 -151
@@ -1,6 +1,8 @@
1
1
  import { MPCv2KeyGenState } from '@bitgo/public-types';
2
2
  import { BitGoBase } from '../../../bitgoBase';
3
3
  import { GenerateEddsaMPCv2KeyRequestBody, GenerateEddsaMPCv2KeyRequestResponse } from './typesEddsaMPCv2';
4
- export type EddsaMPCv2KeyGenSendFn<T extends GenerateEddsaMPCv2KeyRequestResponse> = (round: MPCv2KeyGenState, payload: GenerateEddsaMPCv2KeyRequestBody) => Promise<T>;
4
+ export type EddsaMPCv2KeyGenSendFn<T extends GenerateEddsaMPCv2KeyRequestResponse> = (round: MPCv2KeyGenState, payload: GenerateEddsaMPCv2KeyRequestBody & {
5
+ walletId?: string;
6
+ }) => Promise<T>;
5
7
  export declare function KeyGenSenderForEnterprise<T extends GenerateEddsaMPCv2KeyRequestResponse>(bitgo: BitGoBase, enterprise: string, safeId?: string): EddsaMPCv2KeyGenSendFn<T>;
6
8
  //# sourceMappingURL=eddsaMPCv2KeyGenSender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eddsaMPCv2KeyGenSender.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gCAAgC,EAAE,oCAAoC,EAAE,MAAM,mBAAmB,CAAC;AAE3G,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,oCAAoC,IAAI,CACnF,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,gCAAgC,KACtC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,oCAAoC,EACtF,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAGlB,MAAM,CAAC,EAAE,MAAM,GACd,sBAAsB,CAAC,CAAC,CAAC,CAO3B"}
1
+ {"version":3,"file":"eddsaMPCv2KeyGenSender.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gCAAgC,EAAE,oCAAoC,EAAE,MAAM,mBAAmB,CAAC;AAE3G,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,oCAAoC,IAAI,CACnF,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,gCAAgC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC9D,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,oCAAoC,EACtF,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAGlB,MAAM,CAAC,EAAE,MAAM,GACd,sBAAsB,CAAC,CAAC,CAAC,CAO3B"}
@@ -13,4 +13,4 @@ safeId) {
13
13
  .result();
14
14
  };
15
15
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FNUEN2MktleUdlblNlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2MktleUdlblNlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDhEQWFDO0FBdEJELHNEQUFxRjtBQVNyRixTQUFnQix5QkFBeUIsQ0FDdkMsS0FBZ0IsRUFDaEIsVUFBa0I7QUFDbEIsOEdBQThHO0FBQzlHLGdGQUFnRjtBQUNoRixNQUFlO0lBRWYsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixPQUFPLEtBQUs7YUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSw2QkFBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsMkJBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3ZHLE1BQU0sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleUN1cnZlRW51bSwgS2V5R2VuVHlwZUVudW0sIE1QQ3YyS2V5R2VuU3RhdGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uLy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBHZW5lcmF0ZUVkZHNhTVBDdjJLZXlSZXF1ZXN0Qm9keSwgR2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdFJlc3BvbnNlIH0gZnJvbSAnLi90eXBlc0VkZHNhTVBDdjInO1xuXG5leHBvcnQgdHlwZSBFZGRzYU1QQ3YyS2V5R2VuU2VuZEZuPFQgZXh0ZW5kcyBHZW5lcmF0ZUVkZHNhTVBDdjJLZXlSZXF1ZXN0UmVzcG9uc2U+ID0gKFxuICByb3VuZDogTVBDdjJLZXlHZW5TdGF0ZSxcbiAgcGF5bG9hZDogR2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdEJvZHlcbikgPT4gUHJvbWlzZTxUPjtcblxuZXhwb3J0IGZ1bmN0aW9uIEtleUdlblNlbmRlckZvckVudGVycHJpc2U8VCBleHRlbmRzIEdlbmVyYXRlRWRkc2FNUEN2MktleVJlcXVlc3RSZXNwb25zZT4oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGVudGVycHJpc2U6IHN0cmluZyxcbiAgLy8gV2FsbGV0IFNhZmVzIHYxIChAZXhwZXJpbWVudGFsKTogd2hlbiBzZXQsIHRhZ3MgdGhlIHJlc3VsdGluZyByb290IGtleXMgd2l0aCB0aGlzIHNhZmUuIFdQIG9ubHkgcmVhZHMgaXQgb25cbiAgLy8gcm91bmQgTVBDdjItUjE7IHBhc3NpbmcgaXQgb24gYSBzZW5kZXIgdXNlZCBzb2xlbHkgZm9yIHJvdW5kIDEgaXMgc3VmZmljaWVudC5cbiAgc2FmZUlkPzogc3RyaW5nXG4pOiBFZGRzYU1QQ3YyS2V5R2VuU2VuZEZuPFQ+IHtcbiAgcmV0dXJuIChyb3VuZCwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBiaXRnb1xuICAgICAgLnBvc3QoYml0Z28udXJsKCcvbXBjL2dlbmVyYXRla2V5JywgMikpXG4gICAgICAuc2VuZCh7IGVudGVycHJpc2UsIHNhZmVJZCwgdHlwZTogS2V5R2VuVHlwZUVudW0uTVBDdjIsIGN1cnZlVHlwZTogS2V5Q3VydmVFbnVtLkVkRFNBLCByb3VuZCwgcGF5bG9hZCB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9O1xufVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FNUEN2MktleUdlblNlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2MktleUdlblNlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDhEQWFDO0FBdEJELHNEQUFxRjtBQVNyRixTQUFnQix5QkFBeUIsQ0FDdkMsS0FBZ0IsRUFDaEIsVUFBa0I7QUFDbEIsOEdBQThHO0FBQzlHLGdGQUFnRjtBQUNoRixNQUFlO0lBRWYsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixPQUFPLEtBQUs7YUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSw2QkFBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsMkJBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ3ZHLE1BQU0sRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleUN1cnZlRW51bSwgS2V5R2VuVHlwZUVudW0sIE1QQ3YyS2V5R2VuU3RhdGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uLy4uLy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBHZW5lcmF0ZUVkZHNhTVBDdjJLZXlSZXF1ZXN0Qm9keSwgR2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdFJlc3BvbnNlIH0gZnJvbSAnLi90eXBlc0VkZHNhTVBDdjInO1xuXG5leHBvcnQgdHlwZSBFZGRzYU1QQ3YyS2V5R2VuU2VuZEZuPFQgZXh0ZW5kcyBHZW5lcmF0ZUVkZHNhTVBDdjJLZXlSZXF1ZXN0UmVzcG9uc2U+ID0gKFxuICByb3VuZDogTVBDdjJLZXlHZW5TdGF0ZSxcbiAgcGF5bG9hZDogR2VuZXJhdGVFZGRzYU1QQ3YyS2V5UmVxdWVzdEJvZHkgJiB7IHdhbGxldElkPzogc3RyaW5nIH1cbikgPT4gUHJvbWlzZTxUPjtcblxuZXhwb3J0IGZ1bmN0aW9uIEtleUdlblNlbmRlckZvckVudGVycHJpc2U8VCBleHRlbmRzIEdlbmVyYXRlRWRkc2FNUEN2MktleVJlcXVlc3RSZXNwb25zZT4oXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGVudGVycHJpc2U6IHN0cmluZyxcbiAgLy8gV2FsbGV0IFNhZmVzIHYxIChAZXhwZXJpbWVudGFsKTogd2hlbiBzZXQsIHRhZ3MgdGhlIHJlc3VsdGluZyByb290IGtleXMgd2l0aCB0aGlzIHNhZmUuIFdQIG9ubHkgcmVhZHMgaXQgb25cbiAgLy8gcm91bmQgTVBDdjItUjE7IHBhc3NpbmcgaXQgb24gYSBzZW5kZXIgdXNlZCBzb2xlbHkgZm9yIHJvdW5kIDEgaXMgc3VmZmljaWVudC5cbiAgc2FmZUlkPzogc3RyaW5nXG4pOiBFZGRzYU1QQ3YyS2V5R2VuU2VuZEZuPFQ+IHtcbiAgcmV0dXJuIChyb3VuZCwgcGF5bG9hZCkgPT4ge1xuICAgIHJldHVybiBiaXRnb1xuICAgICAgLnBvc3QoYml0Z28udXJsKCcvbXBjL2dlbmVyYXRla2V5JywgMikpXG4gICAgICAuc2VuZCh7IGVudGVycHJpc2UsIHNhZmVJZCwgdHlwZTogS2V5R2VuVHlwZUVudW0uTVBDdjIsIGN1cnZlVHlwZTogS2V5Q3VydmVFbnVtLkVkRFNBLCByb3VuZCwgcGF5bG9hZCB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9O1xufVxuIl19
@@ -6,14 +6,6 @@ import type { WebauthnKeyEncryptionInfo } from '../../../keychain';
6
6
  import { EddsaMPCv2Utils } from './eddsaMPCv2';
7
7
  export declare function serializeVrfMessages(messages: DklsTypes.DeserializedMessages): string;
8
8
  export declare function deserializeVrfMessages(blob: string, forParty: number): DklsTypes.DeserializedMessages;
9
- /**
10
- * Combines the signing keyshare with the VRF keyshare in the CBOR envelope used
11
- * by safe MPC roots. The reduced envelope is used for reducedEncryptedPrv.
12
- */
13
- export declare function buildVrfKeyEnvelopes(privateMaterial: Buffer, reducedPrivateMaterial: Buffer, vrfKeyShare: Buffer): {
14
- envelope: Buffer;
15
- reducedEnvelope: Buffer;
16
- };
17
9
  /**
18
10
  * EdDSA MPCv2 key generation for safe roots. The two-round MPS VRF DKG rides
19
11
  * the existing MPCv2-R1/R2 payloads and is only selected when safeId is set.
@@ -1 +1 @@
1
- {"version":3,"file":"eddsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmC,MAAM,oBAAoB,CAAC;AAYhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmB/C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,oBAAoB,GAAG,MAAM,CAarF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAyBrG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAY/C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAuM9B"}
1
+ {"version":3,"file":"eddsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmC,MAAM,oBAAoB,CAAC;AAWhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkB/C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,oBAAoB,GAAG,MAAM,CAarF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAyBrG;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAuM9B"}
@@ -39,10 +39,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.EddsaVrfMPCv2Utils = void 0;
40
40
  exports.serializeVrfMessages = serializeVrfMessages;
41
41
  exports.deserializeVrfMessages = deserializeVrfMessages;
42
- exports.buildVrfKeyEnvelopes = buildVrfKeyEnvelopes;
43
42
  const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
44
43
  const public_types_1 = require("@bitgo/public-types");
45
- const cbor_x_1 = require("cbor-x");
46
44
  const assert_1 = __importDefault(require("assert"));
47
45
  const t = __importStar(require("io-ts"));
48
46
  const pgp = __importStar(require("openpgp"));
@@ -53,7 +51,7 @@ const codecs_1 = require("../../codecs");
53
51
  const eddsaMPCv2_1 = require("./eddsaMPCv2");
54
52
  const eddsaMPCv2KeyGenSender_1 = require("./eddsaMPCv2KeyGenSender");
55
53
  const typesMPCv2_1 = require("../ecdsa/typesMPCv2");
56
- const VRF_KEY_ENVELOPE_VERSION = 1;
54
+ const keyShareEnvelope_1 = require("../keyShareEnvelope");
57
55
  const VrfPartyId = (0, codecs_1.boundedInt)(0, 2, 'VrfPartyId');
58
56
  const VrfMessageTransferCodec = t.intersection([
59
57
  t.type({
@@ -103,23 +101,6 @@ function deserializeVrfMessages(blob, forParty) {
103
101
  })),
104
102
  };
105
103
  }
106
- /**
107
- * Combines the signing keyshare with the VRF keyshare in the CBOR envelope used
108
- * by safe MPC roots. The reduced envelope is used for reducedEncryptedPrv.
109
- */
110
- function buildVrfKeyEnvelopes(privateMaterial, reducedPrivateMaterial, vrfKeyShare) {
111
- const envelope = (0, cbor_x_1.encode)({
112
- version: VRF_KEY_ENVELOPE_VERSION,
113
- prvKeyShare: new Uint8Array(privateMaterial),
114
- vrf: new Uint8Array(vrfKeyShare),
115
- });
116
- const reducedEnvelope = (0, cbor_x_1.encode)({
117
- version: VRF_KEY_ENVELOPE_VERSION,
118
- prvKeyShare: new Uint8Array(reducedPrivateMaterial),
119
- vrf: new Uint8Array(vrfKeyShare),
120
- });
121
- return { envelope: Buffer.from(envelope), reducedEnvelope: Buffer.from(reducedEnvelope) };
122
- }
123
104
  /**
124
105
  * EdDSA MPCv2 key generation for safe roots. The two-round MPS VRF DKG rides
125
106
  * the existing MPCv2-R1/R2 payloads and is only selected when safeId is set.
@@ -242,8 +223,8 @@ class EddsaVrfMPCv2Utils extends eddsaMPCv2_1.EddsaMPCv2Utils {
242
223
  const backupCommonKeychain = backupDkg.getCommonKeychain();
243
224
  assert_1.default.equal(userCommonKeychain, commonPublicKeychain, 'User computed keychain does not match BitGo common keychain');
244
225
  assert_1.default.equal(backupCommonKeychain, commonPublicKeychain, 'Backup computed keychain does not match BitGo common keychain');
245
- const { envelope: userEnvelope, reducedEnvelope: userReducedEnvelope } = buildVrfKeyEnvelopes(userDkg.getKeyShare(), userDkg.getReducedKeyShare(), userVrfSession.getKeyShare());
246
- const { envelope: backupEnvelope, reducedEnvelope: backupReducedEnvelope } = buildVrfKeyEnvelopes(backupDkg.getKeyShare(), backupDkg.getReducedKeyShare(), backupVrfSession.getKeyShare());
226
+ const { envelope: userEnvelope, reducedEnvelope: userReducedEnvelope } = (0, keyShareEnvelope_1.buildSafeMpcKeyEnvelopes)(userDkg.getKeyShare(), userDkg.getReducedKeyShare(), userVrfSession.getKeyShare());
227
+ const { envelope: backupEnvelope, reducedEnvelope: backupReducedEnvelope } = (0, keyShareEnvelope_1.buildSafeMpcKeyEnvelopes)(backupDkg.getKeyShare(), backupDkg.getReducedKeyShare(), backupVrfSession.getKeyShare());
247
228
  const userKeychainPromise = this.addUserKeychain(userCommonKeychain, userEnvelope, userReducedEnvelope, params.passphrase, params.originalPasscodeEncryptionCode, params.webauthnInfo, params.encryptionVersion, params.enterprise, params.safeId);
248
229
  const backupKeychainPromise = this.addBackupKeychain(backupCommonKeychain, backupEnvelope, backupReducedEnvelope, params.passphrase, params.originalPasscodeEncryptionCode, params.encryptionVersion, params.enterprise, params.safeId);
249
230
  const bitgoKeychainPromise = this.addBitgoKeychain(commonPublicKeychain, params.safeId);
@@ -257,4 +238,4 @@ class EddsaVrfMPCv2Utils extends eddsaMPCv2_1.EddsaMPCv2Utils {
257
238
  }
258
239
  }
259
240
  exports.EddsaVrfMPCv2Utils = EddsaVrfMPCv2Utils;
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0Esb0RBYUM7QUFFRCx3REF5QkM7QUFNRCxvREFnQkM7QUFwR0Qsb0RBQWdGO0FBQ2hGLHNEQUk2QjtBQUM3QixtQ0FBZ0M7QUFDaEMsb0RBQTRCO0FBQzVCLHlDQUEyQjtBQUMzQiw2Q0FBK0I7QUFDL0IsNkNBQTZDO0FBSzdDLHFEQUF3RDtBQUV4RCw0REFBcUc7QUFDckcseUNBQXlFO0FBQ3pFLDZDQUErQztBQUMvQyxxRUFBcUU7QUFFckUsb0RBQXVEO0FBRXZELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DLE1BQU0sVUFBVSxHQUFHLElBQUEsbUJBQVUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLHFCQUFZO0tBQ3RCLENBQUM7SUFDRixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQzlCLENBQUMsQ0FBQztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBSWxFLFNBQWdCLG9CQUFvQixDQUFDLFFBQXdDO0lBQzNFLE1BQU0sU0FBUyxHQUF5QjtRQUN0QyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxFQUFFLE9BQU8s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QUM7Q0FDRjtBQWpORCxnREFpTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEa2xzVHlwZXMsIE1QU0NvbW1zLCBNcHNWcmYsIHR5cGUgTVBTVHlwZXMgfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHtcbiAgTVBDdjJLZXlHZW5TdGF0ZUVudW0sXG4gIHR5cGUgRWRkc2FNUEN2MktleUdlblJvdW5kMVJlc3BvbnNlLFxuICB0eXBlIEVkZHNhTVBDdjJLZXlHZW5Sb3VuZDJSZXNwb25zZSxcbn0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBlbmNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgKiBhcyBwZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBOb25FbXB0eVN0cmluZyB9IGZyb20gJ2lvLXRzLXR5cGVzJztcblxuaW1wb3J0IHR5cGUgeyBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbi9pS2V5Y2hhaW5zJztcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGlvblZlcnNpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hcGknO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vb3BlbmdwZ1V0aWxzJztcbmltcG9ydCB0eXBlIHsgV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbyB9IGZyb20gJy4uLy4uLy4uL2tleWNoYWluJztcbmltcG9ydCB7IGVudlJlcXVpcmVzQml0Z29QdWJHcGdLZXlDb25maWcsIGlzQml0Z29FZGRzYU1wY3YyUHViS2V5IH0gZnJvbSAnLi4vLi4vLi4vdHNzL2JpdGdvUHViS2V5cyc7XG5pbXBvcnQgeyBiYXNlNjRTdHJpbmcsIGJvdW5kZWRJbnQsIGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uL2NvZGVjcyc7XG5pbXBvcnQgeyBFZGRzYU1QQ3YyVXRpbHMgfSBmcm9tICcuL2VkZHNhTVBDdjInO1xuaW1wb3J0IHsgS2V5R2VuU2VuZGVyRm9yRW50ZXJwcmlzZSB9IGZyb20gJy4vZWRkc2FNUEN2MktleUdlblNlbmRlcic7XG5pbXBvcnQgdHlwZSB7IEVkZHNhTVBDdjJWcmZLZXlHZW5SZXNwb25zZUZpZWxkcyB9IGZyb20gJy4vdHlwZXNFZGRzYU1QQ3YyJztcbmltcG9ydCB7IE1QQ3YyUGFydGllc0VudW0gfSBmcm9tICcuLi9lY2RzYS90eXBlc01QQ3YyJztcblxuY29uc3QgVlJGX0tFWV9FTlZFTE9QRV9WRVJTSU9OID0gMTtcblxuY29uc3QgVnJmUGFydHlJZCA9IGJvdW5kZWRJbnQoMCwgMiwgJ1ZyZlBhcnR5SWQnKTtcbmNvbnN0IFZyZk1lc3NhZ2VUcmFuc2ZlckNvZGVjID0gdC5pbnRlcnNlY3Rpb24oW1xuICB0LnR5cGUoe1xuICAgIGZyb206IFZyZlBhcnR5SWQsXG4gICAgcGF5bG9hZDogYmFzZTY0U3RyaW5nLFxuICB9KSxcbiAgdC5wYXJ0aWFsKHsgdG86IFZyZlBhcnR5SWQgfSksXG5dKTtcbmNvbnN0IFZyZk1lc3NhZ2VUcmFuc2ZlcnNDb2RlYyA9IHQuYXJyYXkoVnJmTWVzc2FnZVRyYW5zZmVyQ29kZWMpO1xuXG50eXBlIFZyZk1lc3NhZ2VUcmFuc2ZlciA9IHQuVHlwZU9mPHR5cGVvZiBWcmZNZXNzYWdlVHJhbnNmZXJDb2RlYz47XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWcmZNZXNzYWdlcyhtZXNzYWdlczogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzKTogc3RyaW5nIHtcbiAgY29uc3QgdHJhbnNmZXJzOiBWcmZNZXNzYWdlVHJhbnNmZXJbXSA9IFtcbiAgICAuLi5tZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9KSksXG4gICAgLi4ubWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiAoe1xuICAgICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgdG86IG1lc3NhZ2UudG8sXG4gICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9KSksXG4gIF07XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0cmFuc2ZlcnMpKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJsb2I6IHN0cmluZywgZm9yUGFydHk6IG51bWJlcik6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShibG9iLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnbWFsZm9ybWVkIEpTT04nO1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBWUkYgREtHIG1lc3NhZ2UgYmxvYjogJHtyZWFzb259YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc2ZlcnMgPSBkZWNvZGVXaXRoQ29kZWMoVnJmTWVzc2FnZVRyYW5zZmVyc0NvZGVjLCBwYXJzZWQsICdWUkYgREtHIG1lc3NhZ2UgYmxvYicpO1xuICByZXR1cm4ge1xuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8gPT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICAgIGZyb206IG1lc3NhZ2UuZnJvbSxcbiAgICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkLCAnYmFzZTY0JykpLFxuICAgICAgfSkpLFxuICAgIHAycE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIFZyZk1lc3NhZ2VUcmFuc2ZlciAmIHsgdG86IG51bWJlciB9ID0+IG1lc3NhZ2UudG8gPT09IGZvclBhcnR5KVxuICAgICAgLm1hcCgobWVzc2FnZSkgPT4gKHtcbiAgICAgICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkLCAnYmFzZTY0JykpLFxuICAgICAgfSkpLFxuICB9O1xufVxuXG4vKipcbiAqIENvbWJpbmVzIHRoZSBzaWduaW5nIGtleXNoYXJlIHdpdGggdGhlIFZSRiBrZXlzaGFyZSBpbiB0aGUgQ0JPUiBlbnZlbG9wZSB1c2VkXG4gKiBieSBzYWZlIE1QQyByb290cy4gVGhlIHJlZHVjZWQgZW52ZWxvcGUgaXMgdXNlZCBmb3IgcmVkdWNlZEVuY3J5cHRlZFBydi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVnJmS2V5RW52ZWxvcGVzKFxuICBwcml2YXRlTWF0ZXJpYWw6IEJ1ZmZlcixcbiAgcmVkdWNlZFByaXZhdGVNYXRlcmlhbDogQnVmZmVyLFxuICB2cmZLZXlTaGFyZTogQnVmZmVyXG4pOiB7IGVudmVsb3BlOiBCdWZmZXI7IHJlZHVjZWRFbnZlbG9wZTogQnVmZmVyIH0ge1xuICBjb25zdCBlbnZlbG9wZSA9IGVuY29kZSh7XG4gICAgdmVyc2lvbjogVlJGX0tFWV9FTlZFTE9QRV9WRVJTSU9OLFxuICAgIHBydktleVNoYXJlOiBuZXcgVWludDhBcnJheShwcml2YXRlTWF0ZXJpYWwpLFxuICAgIHZyZjogbmV3IFVpbnQ4QXJyYXkodnJmS2V5U2hhcmUpLFxuICB9KTtcbiAgY29uc3QgcmVkdWNlZEVudmVsb3BlID0gZW5jb2RlKHtcbiAgICB2ZXJzaW9uOiBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04sXG4gICAgcHJ2S2V5U2hhcmU6IG5ldyBVaW50OEFycmF5KHJlZHVjZWRQcml2YXRlTWF0ZXJpYWwpLFxuICAgIHZyZjogbmV3IFVpbnQ4QXJyYXkodnJmS2V5U2hhcmUpLFxuICB9KTtcbiAgcmV0dXJuIHsgZW52ZWxvcGU6IEJ1ZmZlci5mcm9tKGVudmVsb3BlKSwgcmVkdWNlZEVudmVsb3BlOiBCdWZmZXIuZnJvbShyZWR1Y2VkRW52ZWxvcGUpIH07XG59XG5cbi8qKlxuICogRWREU0EgTVBDdjIga2V5IGdlbmVyYXRpb24gZm9yIHNhZmUgcm9vdHMuIFRoZSB0d28tcm91bmQgTVBTIFZSRiBES0cgcmlkZXNcbiAqIHRoZSBleGlzdGluZyBNUEN2Mi1SMS9SMiBwYXlsb2FkcyBhbmQgaXMgb25seSBzZWxlY3RlZCB3aGVuIHNhZmVJZCBpcyBzZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFZGRzYVZyZk1QQ3YyVXRpbHMgZXh0ZW5kcyBFZGRzYU1QQ3YyVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlOiBzdHJpbmc7XG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nO1xuICAgIHJldHJvZml0PzogRGVjcnlwdGVkUmV0cm9maXRQYXlsb2FkO1xuICAgIHdlYmF1dGhuSW5mbz86IFdlYmF1dGhuS2V5RW5jcnlwdGlvbkluZm87XG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbiAgICBzYWZlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGNvbnN0IHsgdXNlckRrZywgYmFja3VwRGtnIH0gPSBhd2FpdCB0aGlzLmdldFVzZXJBbmRCYWNrdXBTZXNzaW9uKHBhcmFtcy5yZXRyb2ZpdCk7XG4gICAgY29uc3QgdXNlclZyZlNlc3Npb24gPSBuZXcgTXBzVnJmLlZyZkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGNvbnN0IGJhY2t1cFZyZlNlc3Npb24gPSBuZXcgTXBzVnJmLlZyZkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCk7XG5cbiAgICBjb25zdCB1c2VyS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiB1c2VyS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGNvbnN0IHVzZXJHcGdQdWJsaWNLZXkgPSB1c2VyS2V5UGFpci5wdWJsaWNLZXk7XG4gICAgY29uc3QgW3VzZXJQaywgdXNlclNrXSA9IGF3YWl0IE1QU0NvbW1zLmV4dHJhY3RFZDI1NTE5S2V5UGFpcih1c2VyR3BnS2V5KTtcblxuICAgIGNvbnN0IGJhY2t1cEtleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiYWNrdXBHcGdLZXkgPSBhd2FpdCBwZ3AucmVhZFByaXZhdGVLZXkoeyBhcm1vcmVkS2V5OiBiYWNrdXBLZXlQYWlyLnByaXZhdGVLZXkgfSk7XG4gICAgY29uc3QgYmFja3VwR3BnUHVibGljS2V5ID0gYmFja3VwS2V5UGFpci5wdWJsaWNLZXk7XG4gICAgY29uc3QgW2JhY2t1cFBrLCBiYWNrdXBTa10gPSBhd2FpdCBNUFNDb21tcy5leHRyYWN0RWQyNTUxOUtleVBhaXIoYmFja3VwR3BnS2V5KTtcblxuICAgIGNvbnN0IHsgZWRkc2FNcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdGhpcy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MocGFyYW1zLmVudGVycHJpc2UsIHRydWUpO1xuICAgIGNvbnN0IGJpdGdvUHVibGljR3BnS2V5ID0gZWRkc2FNcGN2MlB1YmxpY0tleSA/PyB0aGlzLmJpdGdvRWRkc2FNcGN2MlB1YmxpY0dwZ0tleTtcbiAgICBhc3NlcnQoYml0Z29QdWJsaWNHcGdLZXksICdGYWlsZWQgdG8gZ2V0IEJpdEdvIEVkRFNBIE1QQ3YyIEdQRyBwdWJsaWMga2V5Jyk7XG4gICAgY29uc3QgYml0Z29QdWJsaWNHcGdLZXlBcm1vcmVkID0gYml0Z29QdWJsaWNHcGdLZXkuYXJtb3IoKTtcblxuICAgIGlmIChlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICBhc3NlcnQoaXNCaXRnb0VkZHNhTXBjdjJQdWJLZXkoYml0Z29QdWJsaWNHcGdLZXlBcm1vcmVkKSwgJ0ludmFsaWQgQml0R28gRWREU0EgTVBDdjIgR1BHIHB1YmxpYyBrZXknKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRnb0tleU9iaiA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29QdWJsaWNHcGdLZXlBcm1vcmVkIH0pO1xuICAgIGNvbnN0IGJpdGdvUGsgPSBhd2FpdCBNUFNDb21tcy5leHRyYWN0RWQyNTUxOVB1YmxpY0tleShiaXRnb0tleU9iaik7XG5cbiAgICAvLyAjcmVnaW9uIHJvdW5kIDFcbiAgICBhd2FpdCB1c2VyRGtnLmluaXREa2codXNlclNrLCBbYmFja3VwUGssIGJpdGdvUGtdKTtcbiAgICBhd2FpdCBiYWNrdXBEa2cuaW5pdERrZyhiYWNrdXBTaywgW3VzZXJQaywgYml0Z29Qa10pO1xuXG4gICAgY29uc3QgdXNlck1zZzEgPSB1c2VyRGtnLmdldEZpcnN0TWVzc2FnZSgpO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBiYWNrdXBEa2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gICAgY29uc3QgdXNlclZyZk1zZzEgPSBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5pbml0RGtnKCk7XG4gICAgY29uc3QgYmFja3VwVnJmTXNnMSA9IGF3YWl0IGJhY2t1cFZyZlNlc3Npb24uaW5pdERrZygpO1xuXG4gICAgY29uc3QgdXNlclNpZ25lZE1zZzEgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbSh1c2VyTXNnMS5wYXlsb2FkKSwgdXNlckdwZ0tleSk7XG4gICAgY29uc3QgYmFja3VwU2lnbmVkTXNnMSA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJhY2t1cE1zZzEucGF5bG9hZCksIGJhY2t1cEdwZ0tleSk7XG5cbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXModXNlckdwZ1B1YmxpY0tleSksICdVc2VyIEdQRyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKGJhY2t1cEdwZ1B1YmxpY0tleSksICdCYWNrdXAgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcblxuICAgIGNvbnN0IHJvdW5kMVNlbmRlciA9IEtleUdlblNlbmRlckZvckVudGVycHJpc2U8RWRkc2FNUEN2MktleUdlblJvdW5kMVJlc3BvbnNlICYgRWRkc2FNUEN2MlZyZktleUdlblJlc3BvbnNlRmllbGRzPihcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICApO1xuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBiaXRnb01zZzEsIGJpdGdvVnJmTXNnMSB9ID0gYXdhaXQgcm91bmQxU2VuZGVyKE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMSddLCB7XG4gICAgICB1c2VyR3BnUHVibGljS2V5LFxuICAgICAgYmFja3VwR3BnUHVibGljS2V5LFxuICAgICAgdXNlck1zZzE6IHVzZXJTaWduZWRNc2cxLFxuICAgICAgYmFja3VwTXNnMTogYmFja3VwU2lnbmVkTXNnMSxcbiAgICAgIHVzZXJWcmZNc2cxOiBzZXJpYWxpemVWcmZNZXNzYWdlcyh1c2VyVnJmTXNnMSksXG4gICAgICBiYWNrdXBWcmZNc2cxOiBzZXJpYWxpemVWcmZNZXNzYWdlcyhiYWNrdXBWcmZNc2cxKSxcbiAgICAgIC4uLihwYXJhbXMucmV0cm9maXQ/LndhbGxldElkID8geyB3YWxsZXRJZDogcGFyYW1zLnJldHJvZml0LndhbGxldElkIH0gOiB7fSksXG4gICAgfSk7XG4gICAgYXNzZXJ0KGJpdGdvVnJmTXNnMSwgJ0JpdEdvIFZSRiBtZXNzYWdlIDEgbm90IGZvdW5kIGluIHJvdW5kIDEgcmVzcG9uc2UnKTtcbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyAjcmVnaW9uIHJvdW5kIDJcbiAgICBjb25zdCBiaXRnb1Jhd01zZzFCeXRlcyA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UoYml0Z29Nc2cxLCBiaXRnb0tleU9iaik7XG4gICAgY29uc3QgYml0Z29EZXNlcmlhbGl6ZWRNc2cxOiBNUFNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlID0ge1xuICAgICAgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KGJpdGdvUmF3TXNnMUJ5dGVzKSxcbiAgICB9O1xuICAgIGNvbnN0IHJvdW5kMU1lc3NhZ2VzOiBNUFNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IFt1c2VyTXNnMSwgYmFja3VwTXNnMSwgYml0Z29EZXNlcmlhbGl6ZWRNc2cxXTtcblxuICAgIGNvbnN0IHVzZXJSb3VuZDJNc2dzID0gdXNlckRrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHJvdW5kMU1lc3NhZ2VzKTtcbiAgICBjb25zdCBiYWNrdXBSb3VuZDJNc2dzID0gYmFja3VwRGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMocm91bmQxTWVzc2FnZXMpO1xuICAgIGFzc2VydCh1c2VyUm91bmQyTXNncy5sZW5ndGggPT09IDEsICdVc2VyIHJvdW5kIDEgc2hvdWxkIHByb2R1Y2UgZXhhY3RseSBvbmUgcm91bmQgMiBtZXNzYWdlJyk7XG4gICAgYXNzZXJ0KGJhY2t1cFJvdW5kMk1zZ3MubGVuZ3RoID09PSAxLCAnQmFja3VwIHJvdW5kIDEgc2hvdWxkIHByb2R1Y2UgZXhhY3RseSBvbmUgcm91bmQgMiBtZXNzYWdlJyk7XG5cbiAgICBjb25zdCB1c2VyTXNnMiA9IHVzZXJSb3VuZDJNc2dzWzBdO1xuICAgIGNvbnN0IGJhY2t1cE1zZzIgPSBiYWNrdXBSb3VuZDJNc2dzWzBdO1xuICAgIGNvbnN0IHVzZXJTaWduZWRNc2cyID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20odXNlck1zZzIucGF5bG9hZCksIHVzZXJHcGdLZXkpO1xuICAgIGNvbnN0IGJhY2t1cFNpZ25lZE1zZzIgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiYWNrdXBNc2cyLnBheWxvYWQpLCBiYWNrdXBHcGdLZXkpO1xuXG4gICAgY29uc3QgdXNlclZyZk1zZzIgPSBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLmJhY2t1cFZyZk1zZzEuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cxLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrdXBWcmZNc2cyID0gYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZNc2cxLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMSwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvdW5kMlNlbmRlciA9IEtleUdlblNlbmRlckZvckVudGVycHJpc2U8RWRkc2FNUEN2MktleUdlblJvdW5kMlJlc3BvbnNlICYgRWRkc2FNUEN2MlZyZktleUdlblJlc3BvbnNlRmllbGRzPihcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZVxuICAgICk7XG4gICAgY29uc3Qge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRSb3VuZDIsXG4gICAgICBjb21tb25QdWJsaWNLZXljaGFpbixcbiAgICAgIGJpdGdvTXNnMixcbiAgICAgIGJpdGdvVnJmTXNnMixcbiAgICB9ID0gYXdhaXQgcm91bmQyU2VuZGVyKE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMiddLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB1c2VyTXNnMjogdXNlclNpZ25lZE1zZzIsXG4gICAgICBiYWNrdXBNc2cyOiBiYWNrdXBTaWduZWRNc2cyLFxuICAgICAgdXNlclZyZk1zZzI6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKHVzZXJWcmZNc2cyKSxcbiAgICAgIGJhY2t1cFZyZk1zZzI6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJhY2t1cFZyZk1zZzIpLFxuICAgIH0pO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMiwgJ1JvdW5kIDEgYW5kIHJvdW5kIDIgc2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG4gICAgYXNzZXJ0KGJpdGdvVnJmTXNnMiwgJ0JpdEdvIFZSRiBtZXNzYWdlIDIgbm90IGZvdW5kIGluIHJvdW5kIDIgcmVzcG9uc2UnKTtcblxuICAgIC8vIFZSRiBmaW5hbGl6ZXMgbG9jYWxseSBhZnRlciB0aGUgc2Vjb25kIGV4aXN0aW5nIE1QQ3YyIHJvdW5kLlxuICAgIGF3YWl0IHVzZXJWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZk1zZzIucDJwTWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLFxuICAgICAgICAuLi5iYWNrdXBWcmZNc2cyLnAycE1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzIsIE1QQ3YyUGFydGllc0VudW0uVVNFUikucDJwTWVzc2FnZXMsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGF3YWl0IGJhY2t1cFZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmTXNnMi5wMnBNZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKSxcbiAgICAgICAgLi4uYmFja3VwVnJmTXNnMi5wMnBNZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKS5wMnBNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiBrZXljaGFpbiBjcmVhdGlvblxuICAgIGNvbnN0IGJpdGdvUmF3TXNnMkJ5dGVzID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShiaXRnb01zZzIsIGJpdGdvS2V5T2JqKTtcbiAgICBjb25zdCBiaXRnb0Rlc2VyaWFsaXplZE1zZzI6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UgPSB7XG4gICAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoYml0Z29SYXdNc2cyQnl0ZXMpLFxuICAgIH07XG4gICAgY29uc3Qgcm91bmQyTWVzc2FnZXM6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzID0gW3VzZXJNc2cyLCBiYWNrdXBNc2cyLCBiaXRnb0Rlc2VyaWFsaXplZE1zZzJdO1xuXG4gICAgY29uc3QgdXNlckZpbmFsTXNncyA9IHVzZXJEa2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyb3VuZDJNZXNzYWdlcyk7XG4gICAgY29uc3QgYmFja3VwRmluYWxNc2dzID0gYmFja3VwRGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMocm91bmQyTWVzc2FnZXMpO1xuICAgIGFzc2VydCh1c2VyRmluYWxNc2dzLmxlbmd0aCA9PT0gMCwgJ1dBU00gcm91bmQgMiBzaG91bGQgcHJvZHVjZSBubyBvdXRwdXQgbWVzc2FnZXMgZm9yIHVzZXInKTtcbiAgICBhc3NlcnQoYmFja3VwRmluYWxNc2dzLmxlbmd0aCA9PT0gMCwgJ1dBU00gcm91bmQgMiBzaG91bGQgcHJvZHVjZSBubyBvdXRwdXQgbWVzc2FnZXMgZm9yIGJhY2t1cCcpO1xuXG4gICAgY29uc3QgdXNlckNvbW1vbktleWNoYWluID0gdXNlckRrZy5nZXRDb21tb25LZXljaGFpbigpO1xuICAgIGNvbnN0IGJhY2t1cENvbW1vbktleWNoYWluID0gYmFja3VwRGtnLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgdXNlckNvbW1vbktleWNoYWluLFxuICAgICAgY29tbW9uUHVibGljS2V5Y2hhaW4sXG4gICAgICAnVXNlciBjb21wdXRlZCBrZXljaGFpbiBkb2VzIG5vdCBtYXRjaCBCaXRHbyBjb21tb24ga2V5Y2hhaW4nXG4gICAgKTtcbiAgICBhc3NlcnQuZXF1YWwoXG4gICAgICBiYWNrdXBDb21tb25LZXljaGFpbixcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluLFxuICAgICAgJ0JhY2t1cCBjb21wdXRlZCBrZXljaGFpbiBkb2VzIG5vdCBtYXRjaCBCaXRHbyBjb21tb24ga2V5Y2hhaW4nXG4gICAgKTtcblxuICAgIGNvbnN0IHsgZW52ZWxvcGU6IHVzZXJFbnZlbG9wZSwgcmVkdWNlZEVudmVsb3BlOiB1c2VyUmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgICAgIHVzZXJEa2cuZ2V0S2V5U2hhcmUoKSxcbiAgICAgIHVzZXJEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksXG4gICAgICB1c2VyVnJmU2Vzc2lvbi5nZXRLZXlTaGFyZSgpXG4gICAgKTtcbiAgICBjb25zdCB7IGVudmVsb3BlOiBiYWNrdXBFbnZlbG9wZSwgcmVkdWNlZEVudmVsb3BlOiBiYWNrdXBSZWR1Y2VkRW52ZWxvcGUgfSA9IGJ1aWxkVnJmS2V5RW52ZWxvcGVzKFxuICAgICAgYmFja3VwRGtnLmdldEtleVNoYXJlKCksXG4gICAgICBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksXG4gICAgICBiYWNrdXBWcmZTZXNzaW9uLmdldEtleVNoYXJlKClcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkVXNlcktleWNoYWluKFxuICAgICAgdXNlckNvbW1vbktleWNoYWluLFxuICAgICAgdXNlckVudmVsb3BlLFxuICAgICAgdXNlclJlZHVjZWRFbnZlbG9wZSxcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICApO1xuICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkQmFja3VwS2V5Y2hhaW4oXG4gICAgICBiYWNrdXBDb21tb25LZXljaGFpbixcbiAgICAgIGJhY2t1cEVudmVsb3BlLFxuICAgICAgYmFja3VwUmVkdWNlZEVudmVsb3BlLFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICBwYXJhbXMuc2FmZUlkXG4gICAgKTtcbiAgICBjb25zdCBiaXRnb0tleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkQml0Z29LZXljaGFpbihjb21tb25QdWJsaWNLZXljaGFpbiwgcGFyYW1zLnNhZmVJZCk7XG5cbiAgICBjb25zdCBbdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB1c2VyS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgYmFja3VwS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgYml0Z29LZXljaGFpblByb21pc2UsXG4gICAgXSk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgcmV0dXJuIHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbiB9O1xuICB9XG59XG4iXX0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQ0Esb0RBYUM7QUFFRCx3REF5QkM7QUE1RUQsb0RBQWdGO0FBQ2hGLHNEQUk2QjtBQUM3QixvREFBNEI7QUFDNUIseUNBQTJCO0FBQzNCLDZDQUErQjtBQUMvQiw2Q0FBNkM7QUFLN0MscURBQXdEO0FBRXhELDREQUFxRztBQUNyRyx5Q0FBeUU7QUFDekUsNkNBQStDO0FBQy9DLHFFQUFxRTtBQUVyRSxvREFBdUQ7QUFDdkQsMERBQStEO0FBRS9ELE1BQU0sVUFBVSxHQUFHLElBQUEsbUJBQVUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsT0FBTyxFQUFFLHFCQUFZO0tBQ3RCLENBQUM7SUFDRixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQzlCLENBQUMsQ0FBQztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBSWxFLFNBQWdCLG9CQUFvQixDQUFDLFFBQXdDO0lBQzNFLE1BQU0sU0FBUyxHQUF5QjtRQUN0QyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFD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OEJBQThCLEVBQ3JDLE1BQU0sQ0FBQyxpQkFBaUIsRUFDeEIsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO1FBQ0YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhGLE1BQU0sQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN0RSxtQkFBbUI7WUFDbkIscUJBQXFCO1lBQ3JCLG9CQUFvQjtTQUNyQixDQUFDLENBQUM7UUFDSCxhQUFhO1FBRWIsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBak5ELGdEQWlOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERrbHNUeXBlcywgTVBTQ29tbXMsIE1wc1ZyZiwgdHlwZSBNUFNUeXBlcyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBNUEN2MktleUdlblN0YXRlRW51bSxcbiAgdHlwZSBFZGRzYU1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UsXG4gIHR5cGUgRWRkc2FNUEN2MktleUdlblJvdW5kMlJlc3BvbnNlLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgTm9uRW1wdHlTdHJpbmcgfSBmcm9tICdpby10cy10eXBlcyc7XG5cbmltcG9ydCB0eXBlIHsgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uLy4uLy4uL2Jhc2VDb2luJztcbmltcG9ydCB0eXBlIHsgRGVjcnlwdGVkUmV0cm9maXRQYXlsb2FkIH0gZnJvbSAnLi4vLi4vLi4va2V5Y2hhaW4vaUtleWNoYWlucyc7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRpb25WZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcbmltcG9ydCB7IGdlbmVyYXRlR1BHS2V5UGFpciB9IGZyb20gJy4uLy4uL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgdHlwZSB7IFdlYmF1dGhuS2V5RW5jcnlwdGlvbkluZm8gfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgeyBlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnLCBpc0JpdGdvRWRkc2FNcGN2MlB1YktleSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9iaXRnb1B1YktleXMnO1xuaW1wb3J0IHsgYmFzZTY0U3RyaW5nLCBib3VuZGVkSW50LCBkZWNvZGVXaXRoQ29kZWMgfSBmcm9tICcuLi8uLi9jb2RlY3MnO1xuaW1wb3J0IHsgRWRkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi9lZGRzYU1QQ3YyJztcbmltcG9ydCB7IEtleUdlblNlbmRlckZvckVudGVycHJpc2UgfSBmcm9tICcuL2VkZHNhTVBDdjJLZXlHZW5TZW5kZXInO1xuaW1wb3J0IHR5cGUgeyBFZGRzYU1QQ3YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHMgfSBmcm9tICcuL3R5cGVzRWRkc2FNUEN2Mic7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vZWNkc2EvdHlwZXNNUEN2Mic7XG5pbXBvcnQgeyBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi9rZXlTaGFyZUVudmVsb3BlJztcblxuY29uc3QgVnJmUGFydHlJZCA9IGJvdW5kZWRJbnQoMCwgMiwgJ1ZyZlBhcnR5SWQnKTtcbmNvbnN0IFZyZk1lc3NhZ2VUcmFuc2ZlckNvZGVjID0gdC5pbnRlcnNlY3Rpb24oW1xuICB0LnR5cGUoe1xuICAgIGZyb206IFZyZlBhcnR5SWQsXG4gICAgcGF5bG9hZDogYmFzZTY0U3RyaW5nLFxuICB9KSxcbiAgdC5wYXJ0aWFsKHsgdG86IFZyZlBhcnR5SWQgfSksXG5dKTtcbmNvbnN0IFZyZk1lc3NhZ2VUcmFuc2ZlcnNDb2RlYyA9IHQuYXJyYXkoVnJmTWVzc2FnZVRyYW5zZmVyQ29kZWMpO1xuXG50eXBlIFZyZk1lc3NhZ2VUcmFuc2ZlciA9IHQuVHlwZU9mPHR5cGVvZiBWcmZNZXNzYWdlVHJhbnNmZXJDb2RlYz47XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWcmZNZXNzYWdlcyhtZXNzYWdlczogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzKTogc3RyaW5nIHtcbiAgY29uc3QgdHJhbnNmZXJzOiBWcmZNZXNzYWdlVHJhbnNmZXJbXSA9IFtcbiAgICAuLi5tZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9KSksXG4gICAgLi4ubWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiAoe1xuICAgICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgdG86IG1lc3NhZ2UudG8sXG4gICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9KSksXG4gIF07XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0cmFuc2ZlcnMpKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJsb2I6IHN0cmluZywgZm9yUGFydHk6IG51bWJlcik6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShibG9iLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgcmVhc29uID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnbWFsZm9ybWVkIEpTT04nO1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBWUkYgREtHIG1lc3NhZ2UgYmxvYjogJHtyZWFzb259YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc2ZlcnMgPSBkZWNvZGVXaXRoQ29kZWMoVnJmTWVzc2FnZVRyYW5zZmVyc0NvZGVjLCBwYXJzZWQsICdWUkYgREtHIG1lc3NhZ2UgYmxvYicpO1xuICByZXR1cm4ge1xuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8gPT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICAgIGZyb206IG1lc3NhZ2UuZnJvbSxcbiAgICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkLCAnYmFzZTY0JykpLFxuICAgICAgfSkpLFxuICAgIHAycE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIFZyZk1lc3NhZ2VUcmFuc2ZlciAmIHsgdG86IG51bWJlciB9ID0+IG1lc3NhZ2UudG8gPT09IGZvclBhcnR5KVxuICAgICAgLm1hcCgobWVzc2FnZSkgPT4gKHtcbiAgICAgICAgZnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkLCAnYmFzZTY0JykpLFxuICAgICAgfSkpLFxuICB9O1xufVxuXG4vKipcbiAqIEVkRFNBIE1QQ3YyIGtleSBnZW5lcmF0aW9uIGZvciBzYWZlIHJvb3RzLiBUaGUgdHdvLXJvdW5kIE1QUyBWUkYgREtHIHJpZGVzXG4gKiB0aGUgZXhpc3RpbmcgTVBDdjItUjEvUjIgcGF5bG9hZHMgYW5kIGlzIG9ubHkgc2VsZWN0ZWQgd2hlbiBzYWZlSWQgaXMgc2V0LlxuICovXG5leHBvcnQgY2xhc3MgRWRkc2FWcmZNUEN2MlV0aWxzIGV4dGVuZHMgRWRkc2FNUEN2MlV0aWxzIHtcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgICByZXRyb2ZpdD86IERlY3J5cHRlZFJldHJvZml0UGF5bG9hZDtcbiAgICB3ZWJhdXRobkluZm8/OiBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gICAgc2FmZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCB7IHVzZXJEa2csIGJhY2t1cERrZyB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyQW5kQmFja3VwU2Vzc2lvbihwYXJhbXMucmV0cm9maXQpO1xuICAgIGNvbnN0IHVzZXJWcmZTZXNzaW9uID0gbmV3IE1wc1ZyZi5WcmZEa2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICBjb25zdCBiYWNrdXBWcmZTZXNzaW9uID0gbmV3IE1wc1ZyZi5WcmZEa2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuXG4gICAgY29uc3QgdXNlcktleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlcktleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBjb25zdCB1c2VyR3BnUHVibGljS2V5ID0gdXNlcktleVBhaXIucHVibGljS2V5O1xuICAgIGNvbnN0IFt1c2VyUGssIHVzZXJTa10gPSBhd2FpdCBNUFNDb21tcy5leHRyYWN0RWQyNTUxOUtleVBhaXIodXNlckdwZ0tleSk7XG5cbiAgICBjb25zdCBiYWNrdXBLZXlQYWlyID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYmFja3VwS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGNvbnN0IGJhY2t1cEdwZ1B1YmxpY0tleSA9IGJhY2t1cEtleVBhaXIucHVibGljS2V5O1xuICAgIGNvbnN0IFtiYWNrdXBQaywgYmFja3VwU2tdID0gYXdhaXQgTVBTQ29tbXMuZXh0cmFjdEVkMjU1MTlLZXlQYWlyKGJhY2t1cEdwZ0tleSk7XG5cbiAgICBjb25zdCB7IGVkZHNhTXBjdjJQdWJsaWNLZXkgfSA9IGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKHBhcmFtcy5lbnRlcnByaXNlLCB0cnVlKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IGVkZHNhTXBjdjJQdWJsaWNLZXkgPz8gdGhpcy5iaXRnb0VkZHNhTXBjdjJQdWJsaWNHcGdLZXk7XG4gICAgYXNzZXJ0KGJpdGdvUHVibGljR3BnS2V5LCAnRmFpbGVkIHRvIGdldCBCaXRHbyBFZERTQSBNUEN2MiBHUEcgcHVibGljIGtleScpO1xuICAgIGNvbnN0IGJpdGdvUHVibGljR3BnS2V5QXJtb3JlZCA9IGJpdGdvUHVibGljR3BnS2V5LmFybW9yKCk7XG5cbiAgICBpZiAoZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZyh0aGlzLmJpdGdvLmdldEVudigpKSkge1xuICAgICAgYXNzZXJ0KGlzQml0Z29FZGRzYU1wY3YyUHViS2V5KGJpdGdvUHVibGljR3BnS2V5QXJtb3JlZCksICdJbnZhbGlkIEJpdEdvIEVkRFNBIE1QQ3YyIEdQRyBwdWJsaWMga2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0Z29LZXlPYmogPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGJpdGdvUHVibGljR3BnS2V5QXJtb3JlZCB9KTtcbiAgICBjb25zdCBiaXRnb1BrID0gYXdhaXQgTVBTQ29tbXMuZXh0cmFjdEVkMjU1MTlQdWJsaWNLZXkoYml0Z29LZXlPYmopO1xuXG4gICAgLy8gI3JlZ2lvbiByb3VuZCAxXG4gICAgYXdhaXQgdXNlckRrZy5pbml0RGtnKHVzZXJTaywgW2JhY2t1cFBrLCBiaXRnb1BrXSk7XG4gICAgYXdhaXQgYmFja3VwRGtnLmluaXREa2coYmFja3VwU2ssIFt1c2VyUGssIGJpdGdvUGtdKTtcblxuICAgIGNvbnN0IHVzZXJNc2cxID0gdXNlckRrZy5nZXRGaXJzdE1lc3NhZ2UoKTtcbiAgICBjb25zdCBiYWNrdXBNc2cxID0gYmFja3VwRGtnLmdldEZpcnN0TWVzc2FnZSgpO1xuICAgIGNvbnN0IHVzZXJWcmZNc2cxID0gYXdhaXQgdXNlclZyZlNlc3Npb24uaW5pdERrZygpO1xuICAgIGNvbnN0IGJhY2t1cFZyZk1zZzEgPSBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmluaXREa2coKTtcblxuICAgIGNvbnN0IHVzZXJTaWduZWRNc2cxID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20odXNlck1zZzEucGF5bG9hZCksIHVzZXJHcGdLZXkpO1xuICAgIGNvbnN0IGJhY2t1cFNpZ25lZE1zZzEgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiYWNrdXBNc2cxLnBheWxvYWQpLCBiYWNrdXBHcGdLZXkpO1xuXG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdQdWJsaWNLZXkpLCAnVXNlciBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhiYWNrdXBHcGdQdWJsaWNLZXkpLCAnQmFja3VwIEdQRyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJyk7XG5cbiAgICBjb25zdCByb3VuZDFTZW5kZXIgPSBLZXlHZW5TZW5kZXJGb3JFbnRlcnByaXNlPEVkZHNhTVBDdjJLZXlHZW5Sb3VuZDFSZXNwb25zZSAmIEVkZHNhTVBDdjJWcmZLZXlHZW5SZXNwb25zZUZpZWxkcz4oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICBwYXJhbXMuc2FmZUlkXG4gICAgKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZCwgYml0Z29Nc2cxLCBiaXRnb1ZyZk1zZzEgfSA9IGF3YWl0IHJvdW5kMVNlbmRlcihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjEnXSwge1xuICAgICAgdXNlckdwZ1B1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdwZ1B1YmxpY0tleSxcbiAgICAgIHVzZXJNc2cxOiB1c2VyU2lnbmVkTXNnMSxcbiAgICAgIGJhY2t1cE1zZzE6IGJhY2t1cFNpZ25lZE1zZzEsXG4gICAgICB1c2VyVnJmTXNnMTogc2VyaWFsaXplVnJmTWVzc2FnZXModXNlclZyZk1zZzEpLFxuICAgICAgYmFja3VwVnJmTXNnMTogc2VyaWFsaXplVnJmTWVzc2FnZXMoYmFja3VwVnJmTXNnMSksXG4gICAgICAuLi4ocGFyYW1zLnJldHJvZml0Py53YWxsZXRJZCA/IHsgd2FsbGV0SWQ6IHBhcmFtcy5yZXRyb2ZpdC53YWxsZXRJZCB9IDoge30pLFxuICAgIH0pO1xuICAgIGFzc2VydChiaXRnb1ZyZk1zZzEsICdCaXRHbyBWUkYgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiByb3VuZCAxIHJlc3BvbnNlJyk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiByb3VuZCAyXG4gICAgY29uc3QgYml0Z29SYXdNc2cxQnl0ZXMgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKGJpdGdvTXNnMSwgYml0Z29LZXlPYmopO1xuICAgIGNvbnN0IGJpdGdvRGVzZXJpYWxpemVkTXNnMTogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9IHtcbiAgICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShiaXRnb1Jhd01zZzFCeXRlcyksXG4gICAgfTtcbiAgICBjb25zdCByb3VuZDFNZXNzYWdlczogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMgPSBbdXNlck1zZzEsIGJhY2t1cE1zZzEsIGJpdGdvRGVzZXJpYWxpemVkTXNnMV07XG5cbiAgICBjb25zdCB1c2VyUm91bmQyTXNncyA9IHVzZXJEa2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyb3VuZDFNZXNzYWdlcyk7XG4gICAgY29uc3QgYmFja3VwUm91bmQyTXNncyA9IGJhY2t1cERrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHJvdW5kMU1lc3NhZ2VzKTtcbiAgICBhc3NlcnQodXNlclJvdW5kMk1zZ3MubGVuZ3RoID09PSAxLCAnVXNlciByb3VuZCAxIHNob3VsZCBwcm9kdWNlIGV4YWN0bHkgb25lIHJvdW5kIDIgbWVzc2FnZScpO1xuICAgIGFzc2VydChiYWNrdXBSb3VuZDJNc2dzLmxlbmd0aCA9PT0gMSwgJ0JhY2t1cCByb3VuZCAxIHNob3VsZCBwcm9kdWNlIGV4YWN0bHkgb25lIHJvdW5kIDIgbWVzc2FnZScpO1xuXG4gICAgY29uc3QgdXNlck1zZzIgPSB1c2VyUm91bmQyTXNnc1swXTtcbiAgICBjb25zdCBiYWNrdXBNc2cyID0gYmFja3VwUm91bmQyTXNnc1swXTtcbiAgICBjb25zdCB1c2VyU2lnbmVkTXNnMiA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKHVzZXJNc2cyLnBheWxvYWQpLCB1c2VyR3BnS2V5KTtcbiAgICBjb25zdCBiYWNrdXBTaWduZWRNc2cyID0gYXdhaXQgTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoQnVmZmVyLmZyb20oYmFja3VwTXNnMi5wYXlsb2FkKSwgYmFja3VwR3BnS2V5KTtcblxuICAgIGNvbnN0IHVzZXJWcmZNc2cyID0gYXdhaXQgdXNlclZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICAuLi5iYWNrdXBWcmZNc2cxLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMSwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKS5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwVnJmTXNnMiA9IGF3YWl0IGJhY2t1cFZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmTXNnMS5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzEsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKS5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgfSk7XG5cbiAgICBjb25zdCByb3VuZDJTZW5kZXIgPSBLZXlHZW5TZW5kZXJGb3JFbnRlcnByaXNlPEVkZHNhTVBDdjJLZXlHZW5Sb3VuZDJSZXNwb25zZSAmIEVkZHNhTVBDdjJWcmZLZXlHZW5SZXNwb25zZUZpZWxkcz4oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgcGFyYW1zLmVudGVycHJpc2VcbiAgICApO1xuICAgIGNvbnN0IHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkUm91bmQyLFxuICAgICAgY29tbW9uUHVibGljS2V5Y2hhaW4sXG4gICAgICBiaXRnb01zZzIsXG4gICAgICBiaXRnb1ZyZk1zZzIsXG4gICAgfSA9IGF3YWl0IHJvdW5kMlNlbmRlcihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjInXSwge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgdXNlck1zZzI6IHVzZXJTaWduZWRNc2cyLFxuICAgICAgYmFja3VwTXNnMjogYmFja3VwU2lnbmVkTXNnMixcbiAgICAgIHVzZXJWcmZNc2cyOiBzZXJpYWxpemVWcmZNZXNzYWdlcyh1c2VyVnJmTXNnMiksXG4gICAgICBiYWNrdXBWcmZNc2cyOiBzZXJpYWxpemVWcmZNZXNzYWdlcyhiYWNrdXBWcmZNc2cyKSxcbiAgICB9KTtcbiAgICBhc3NlcnQuZXF1YWwoc2Vzc2lvbklkLCBzZXNzaW9uSWRSb3VuZDIsICdSb3VuZCAxIGFuZCByb3VuZCAyIHNlc3Npb24gSURzIGRvIG5vdCBtYXRjaCcpO1xuICAgIGFzc2VydChiaXRnb1ZyZk1zZzIsICdCaXRHbyBWUkYgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiByb3VuZCAyIHJlc3BvbnNlJyk7XG5cbiAgICAvLyBWUkYgZmluYWxpemVzIGxvY2FsbHkgYWZ0ZXIgdGhlIHNlY29uZCBleGlzdGluZyBNUEN2MiByb3VuZC5cbiAgICBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZNc2cyLnAycE1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKSxcbiAgICAgICAgLi4uYmFja3VwVnJmTXNnMi5wMnBNZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLnAycE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZk1zZzIucDJwTWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCksXG4gICAgICAgIC4uLmJhY2t1cFZyZk1zZzIucDJwTWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCkucDJwTWVzc2FnZXMsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24ga2V5Y2hhaW4gY3JlYXRpb25cbiAgICBjb25zdCBiaXRnb1Jhd01zZzJCeXRlcyA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UoYml0Z29Nc2cyLCBiaXRnb0tleU9iaik7XG4gICAgY29uc3QgYml0Z29EZXNlcmlhbGl6ZWRNc2cyOiBNUFNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlID0ge1xuICAgICAgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KGJpdGdvUmF3TXNnMkJ5dGVzKSxcbiAgICB9O1xuICAgIGNvbnN0IHJvdW5kMk1lc3NhZ2VzOiBNUFNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IFt1c2VyTXNnMiwgYmFja3VwTXNnMiwgYml0Z29EZXNlcmlhbGl6ZWRNc2cyXTtcblxuICAgIGNvbnN0IHVzZXJGaW5hbE1zZ3MgPSB1c2VyRGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMocm91bmQyTWVzc2FnZXMpO1xuICAgIGNvbnN0IGJhY2t1cEZpbmFsTXNncyA9IGJhY2t1cERrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHJvdW5kMk1lc3NhZ2VzKTtcbiAgICBhc3NlcnQodXNlckZpbmFsTXNncy5sZW5ndGggPT09IDAsICdXQVNNIHJvdW5kIDIgc2hvdWxkIHByb2R1Y2Ugbm8gb3V0cHV0IG1lc3NhZ2VzIGZvciB1c2VyJyk7XG4gICAgYXNzZXJ0KGJhY2t1cEZpbmFsTXNncy5sZW5ndGggPT09IDAsICdXQVNNIHJvdW5kIDIgc2hvdWxkIHByb2R1Y2Ugbm8gb3V0cHV0IG1lc3NhZ2VzIGZvciBiYWNrdXAnKTtcblxuICAgIGNvbnN0IHVzZXJDb21tb25LZXljaGFpbiA9IHVzZXJEa2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICBjb25zdCBiYWNrdXBDb21tb25LZXljaGFpbiA9IGJhY2t1cERrZy5nZXRDb21tb25LZXljaGFpbigpO1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHVzZXJDb21tb25LZXljaGFpbixcbiAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluLFxuICAgICAgJ1VzZXIgY29tcHV0ZWQga2V5Y2hhaW4gZG9lcyBub3QgbWF0Y2ggQml0R28gY29tbW9uIGtleWNoYWluJ1xuICAgICk7XG4gICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgYmFja3VwQ29tbW9uS2V5Y2hhaW4sXG4gICAgICBjb21tb25QdWJsaWNLZXljaGFpbixcbiAgICAgICdCYWNrdXAgY29tcHV0ZWQga2V5Y2hhaW4gZG9lcyBub3QgbWF0Y2ggQml0R28gY29tbW9uIGtleWNoYWluJ1xuICAgICk7XG5cbiAgICBjb25zdCB7IGVudmVsb3BlOiB1c2VyRW52ZWxvcGUsIHJlZHVjZWRFbnZlbG9wZTogdXNlclJlZHVjZWRFbnZlbG9wZSB9ID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgdXNlckRrZy5nZXRLZXlTaGFyZSgpLFxuICAgICAgdXNlckRrZy5nZXRSZWR1Y2VkS2V5U2hhcmUoKSxcbiAgICAgIHVzZXJWcmZTZXNzaW9uLmdldEtleVNoYXJlKClcbiAgICApO1xuICAgIGNvbnN0IHsgZW52ZWxvcGU6IGJhY2t1cEVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGU6IGJhY2t1cFJlZHVjZWRFbnZlbG9wZSB9ID0gYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzKFxuICAgICAgYmFja3VwRGtnLmdldEtleVNoYXJlKCksXG4gICAgICBiYWNrdXBEa2cuZ2V0UmVkdWNlZEtleVNoYXJlKCksXG4gICAgICBiYWNrdXBWcmZTZXNzaW9uLmdldEtleVNoYXJlKClcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkVXNlcktleWNoYWluKFxuICAgICAgdXNlckNvbW1vbktleWNoYWluLFxuICAgICAgdXNlckVudmVsb3BlLFxuICAgICAgdXNlclJlZHVjZWRFbnZlbG9wZSxcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICApO1xuICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkQmFja3VwS2V5Y2hhaW4oXG4gICAgICBiYWNrdXBDb21tb25LZXljaGFpbixcbiAgICAgIGJhY2t1cEVudmVsb3BlLFxuICAgICAgYmFja3VwUmVkdWNlZEVudmVsb3BlLFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICBwYXJhbXMuc2FmZUlkXG4gICAgKTtcbiAgICBjb25zdCBiaXRnb0tleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkQml0Z29LZXljaGFpbihjb21tb25QdWJsaWNLZXljaGFpbiwgcGFyYW1zLnNhZmVJZCk7XG5cbiAgICBjb25zdCBbdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB1c2VyS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgYmFja3VwS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgYml0Z29LZXljaGFpblByb21pc2UsXG4gICAgXSk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgcmV0dXJuIHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiwgYml0Z29LZXljaGFpbiB9O1xuICB9XG59XG4iXX0=
@@ -18,6 +18,9 @@ export interface EddsaMPCv2RecoveryKeyShares {
18
18
  userKeyShare: Buffer;
19
19
  backupKeyShare: Buffer;
20
20
  commonKeyChain: string;
21
+ /** Serialized VRF keyshares from safe-root envelopes, when present. */
22
+ userVrfKeyShare?: Buffer;
23
+ backupVrfKeyShare?: Buffer;
21
24
  }
22
25
  export type CreateEddsaBitGoKeychainParams = Omit<CreateEddsaKeychainParams, 'bitgoKeychain'>;
23
26
  export { PrebuildTransactionWithIntentOptions, TxRequestVersion, TxRequestState, TransactionState, SignatureShareRecord, SignatureShareType, } from '../baseTypes';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,2DAA2D;AAC3D,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AACjD,kCAAkC;AAClC,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;AAEpC,MAAM,MAAM,yBAAyB,GAAG,wBAAwB,GAAG;IACjE,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC7B,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;AAG9F,OAAO,EACL,oCAAoC,EACpC,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/eddsa/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtC,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,2DAA2D;AAC3D,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AACjD,kCAAkC;AAClC,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;AAEpC,MAAM,MAAM,yBAAyB,GAAG,wBAAwB,GAAG;IACjE,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC7B,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;AAG9F,OAAO,EACL,oCAAoC,EACpC,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
@@ -4,4 +4,4 @@ exports.SignatureShareType = void 0;
4
4
  // For backward compatibility
5
5
  var baseTypes_1 = require("../baseTypes");
6
6
  Object.defineProperty(exports, "SignatureShareType", { enumerable: true, get: function () { return baseTypes_1.SignatureShareType; } });
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VkZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRCQSw2QkFBNkI7QUFDN0IsMENBT3NCO0FBRHBCLCtHQUFBLGtCQUFrQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRUREU0EgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCBCYXNlVFNTVXRpbHMgZnJvbSAnLi4vYmFzZVRTU1V0aWxzJztcbmltcG9ydCB7IENyZWF0ZUtleWNoYWluUGFyYW1zQmFzZSwgVW5zaWduZWRUcmFuc2FjdGlvblRzcyB9IGZyb20gJy4uL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuXG5leHBvcnQgdHlwZSBLZXlTaGFyZSA9IEVERFNBLktleVNoYXJlO1xuZXhwb3J0IHR5cGUgWVNoYXJlID0gRUREU0EuWVNoYXJlO1xuLyoqIEBkZXByZWN0ZWQgdXNlIFVuc2lnbmVkVHJhbnNhY3Rpb25Uc3MgZnJvbSBiYXNlVHlwZXMgKi9cbmV4cG9ydCB0eXBlIEVkZHNhVW5zaWduZWRUcmFuc2FjdGlvbiA9IFVuc2lnbmVkVHJhbnNhY3Rpb25Uc3M7XG5cbmV4cG9ydCB0eXBlIElFZGRzYVV0aWxzID0gQmFzZVRTU1V0aWxzPEtleVNoYXJlPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgSUVkZHNhVXRpbHMgKi9cbmV4cG9ydCB0eXBlIElUc3NVdGlscyA9IElFZGRzYVV0aWxzO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVFZGRzYUtleWNoYWluUGFyYW1zID0gQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlICYge1xuICB1c2VyS2V5U2hhcmU6IEVERFNBLktleVNoYXJlO1xuICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gIGJhY2t1cEtleVNoYXJlOiBFRERTQS5LZXlTaGFyZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRkc2FNUEN2MlJlY292ZXJ5S2V5U2hhcmVzIHtcbiAgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGJhY2t1cEtleVNoYXJlOiBCdWZmZXI7XG4gIGNvbW1vbktleUNoYWluOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUVkZHNhQml0R29LZXljaGFpblBhcmFtcyA9IE9taXQ8Q3JlYXRlRWRkc2FLZXljaGFpblBhcmFtcywgJ2JpdGdvS2V5Y2hhaW4nPjtcblxuLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB7XG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgVHhSZXF1ZXN0U3RhdGUsXG4gIFRyYW5zYWN0aW9uU3RhdGUsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBTaWduYXR1cmVTaGFyZVR5cGUsXG59IGZyb20gJy4uL2Jhc2VUeXBlcyc7XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VkZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStCQSw2QkFBNkI7QUFDN0IsMENBT3NCO0FBRHBCLCtHQUFBLGtCQUFrQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRUREU0EgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCBCYXNlVFNTVXRpbHMgZnJvbSAnLi4vYmFzZVRTU1V0aWxzJztcbmltcG9ydCB7IENyZWF0ZUtleWNoYWluUGFyYW1zQmFzZSwgVW5zaWduZWRUcmFuc2FjdGlvblRzcyB9IGZyb20gJy4uL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuXG5leHBvcnQgdHlwZSBLZXlTaGFyZSA9IEVERFNBLktleVNoYXJlO1xuZXhwb3J0IHR5cGUgWVNoYXJlID0gRUREU0EuWVNoYXJlO1xuLyoqIEBkZXByZWN0ZWQgdXNlIFVuc2lnbmVkVHJhbnNhY3Rpb25Uc3MgZnJvbSBiYXNlVHlwZXMgKi9cbmV4cG9ydCB0eXBlIEVkZHNhVW5zaWduZWRUcmFuc2FjdGlvbiA9IFVuc2lnbmVkVHJhbnNhY3Rpb25Uc3M7XG5cbmV4cG9ydCB0eXBlIElFZGRzYVV0aWxzID0gQmFzZVRTU1V0aWxzPEtleVNoYXJlPjtcbi8qKiBAZGVwcmVjYXRlZCBVc2UgSUVkZHNhVXRpbHMgKi9cbmV4cG9ydCB0eXBlIElUc3NVdGlscyA9IElFZGRzYVV0aWxzO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVFZGRzYUtleWNoYWluUGFyYW1zID0gQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlICYge1xuICB1c2VyS2V5U2hhcmU6IEVERFNBLktleVNoYXJlO1xuICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gIGJhY2t1cEtleVNoYXJlOiBFRERTQS5LZXlTaGFyZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRkc2FNUEN2MlJlY292ZXJ5S2V5U2hhcmVzIHtcbiAgdXNlcktleVNoYXJlOiBCdWZmZXI7XG4gIGJhY2t1cEtleVNoYXJlOiBCdWZmZXI7XG4gIGNvbW1vbktleUNoYWluOiBzdHJpbmc7XG4gIC8qKiBTZXJpYWxpemVkIFZSRiBrZXlzaGFyZXMgZnJvbSBzYWZlLXJvb3QgZW52ZWxvcGVzLCB3aGVuIHByZXNlbnQuICovXG4gIHVzZXJWcmZLZXlTaGFyZT86IEJ1ZmZlcjtcbiAgYmFja3VwVnJmS2V5U2hhcmU/OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUVkZHNhQml0R29LZXljaGFpblBhcmFtcyA9IE9taXQ8Q3JlYXRlRWRkc2FLZXljaGFpblBhcmFtcywgJ2JpdGdvS2V5Y2hhaW4nPjtcblxuLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB7XG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgVHhSZXF1ZXN0U3RhdGUsXG4gIFRyYW5zYWN0aW9uU3RhdGUsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBTaWduYXR1cmVTaGFyZVR5cGUsXG59IGZyb20gJy4uL2Jhc2VUeXBlcyc7XG4iXX0=
@@ -14,5 +14,6 @@ export * from './baseTypes';
14
14
  export * from './addressVerification';
15
15
  export * from './preHashedSignable';
16
16
  export * from './recipientUtils';
17
+ export * from './keyShareEnvelope';
17
18
  export * from './signableConsistency';
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,aAAa,CAAC;AAE9C,iCAAiC;AACjC,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,CAAC;AAG3B,+CAA+C;AAC/C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,aAAa,CAAC;AAE9C,iCAAiC;AACjC,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,CAAC;AAG3B,+CAA+C;AAC/C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -49,5 +49,6 @@ __exportStar(require("./baseTypes"), exports);
49
49
  __exportStar(require("./addressVerification"), exports);
50
50
  __exportStar(require("./preHashedSignable"), exports);
51
51
  __exportStar(require("./recipientUtils"), exports);
52
+ __exportStar(require("./keyShareEnvelope"), exports);
52
53
  __exportStar(require("./signableConsistency"), exports);
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtRTtBQU0xRCxtQkFORixlQUFRLENBTUU7QUFFUiw4RkFSVSxxQkFBYSxPQVFWO0FBQ2IsZ0dBVHlCLHVCQUFlLE9BU3pCO0FBUnhCLHNEQUFzQztBQUN0QyxzREFBc0M7QUFDdEMsOERBQThDO0FBWTlDLCtEQUErQztBQUMvQyw4Q0FBNEI7QUFDNUIsd0RBQXNDO0FBQ3RDLHNEQUFvQztBQUNwQyxtREFBaUM7QUFDakMsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRzc1V0aWxzLCB7IFRzc1V0aWxzVHlwZXMsIEVkZHNhVXRpbHNUeXBlcyB9IGZyb20gJy4vZWRkc2EnO1xuZXhwb3J0ICogYXMgRUNEU0FVdGlscyBmcm9tICcuL2VjZHNhJztcbmV4cG9ydCAqIGFzIEVERFNBVXRpbHMgZnJvbSAnLi9lZGRzYSc7XG5leHBvcnQgKiBhcyBSZWRwYWxsYXNVdGlscyBmcm9tICcuL3JlZHBhbGxhcyc7XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgRUREU0FVdGlscyAqL1xuZXhwb3J0IHsgVHNzVXRpbHMgfTtcbi8qKiBAZGVwcmVjYXRlZCB1c2UgRUREU0FVdGlsc1R5cGVzICovXG5leHBvcnQgeyBUc3NVdGlsc1R5cGVzIH07XG5leHBvcnQgeyBFZGRzYVV0aWxzVHlwZXMgfTtcblxuLy8gZXhwb3J0aW5nIHRoaXMgdHlwZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4vKiogQGRlcHJlY2F0ZWQgdXNlIEVERFNBVXRpbHMuPHR5cGUvbWV0aG9kPiAqL1xuZXhwb3J0IHsgSVRzc1V0aWxzLCBJRWRkc2FVdGlscywgVHhSZXF1ZXN0LCBFZGRzYVVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICcuL2VkZHNhJztcblxuZXhwb3J0ICogYXMgQmFzZVRzc1V0aWxzIGZyb20gJy4vYmFzZVRTU1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZVR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc1ZlcmlmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3ByZUhhc2hlZFNpZ25hYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVjaXBpZW50VXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWduYWJsZUNvbnNpc3RlbmN5JztcbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtRTtBQU0xRCxtQkFORixlQUFRLENBTUU7QUFFUiw4RkFSVSxxQkFBYSxPQVFWO0FBQ2IsZ0dBVHlCLHVCQUFlLE9BU3pCO0FBUnhCLHNEQUFzQztBQUN0QyxzREFBc0M7QUFDdEMsOERBQThDO0FBWTlDLCtEQUErQztBQUMvQyw4Q0FBNEI7QUFDNUIsd0RBQXNDO0FBQ3RDLHNEQUFvQztBQUNwQyxtREFBaUM7QUFDakMscURBQW1DO0FBQ25DLHdEQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUc3NVdGlscywgeyBUc3NVdGlsc1R5cGVzLCBFZGRzYVV0aWxzVHlwZXMgfSBmcm9tICcuL2VkZHNhJztcbmV4cG9ydCAqIGFzIEVDRFNBVXRpbHMgZnJvbSAnLi9lY2RzYSc7XG5leHBvcnQgKiBhcyBFRERTQVV0aWxzIGZyb20gJy4vZWRkc2EnO1xuZXhwb3J0ICogYXMgUmVkcGFsbGFzVXRpbHMgZnJvbSAnLi9yZWRwYWxsYXMnO1xuXG4vKiogQGRlcHJlY2F0ZWQgdXNlIEVERFNBVXRpbHMgKi9cbmV4cG9ydCB7IFRzc1V0aWxzIH07XG4vKiogQGRlcHJlY2F0ZWQgdXNlIEVERFNBVXRpbHNUeXBlcyAqL1xuZXhwb3J0IHsgVHNzVXRpbHNUeXBlcyB9O1xuZXhwb3J0IHsgRWRkc2FVdGlsc1R5cGVzIH07XG5cbi8vIGV4cG9ydGluZyB0aGlzIHR5cGVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuLyoqIEBkZXByZWNhdGVkIHVzZSBFRERTQVV0aWxzLjx0eXBlL21ldGhvZD4gKi9cbmV4cG9ydCB7IElUc3NVdGlscywgSUVkZHNhVXRpbHMsIFR4UmVxdWVzdCwgRWRkc2FVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi9lZGRzYSc7XG5cbmV4cG9ydCAqIGFzIEJhc2VUc3NVdGlscyBmcm9tICcuL2Jhc2VUU1NVdGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2Jhc2VUeXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2FkZHJlc3NWZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcmVIYXNoZWRTaWduYWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlY2lwaWVudFV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4va2V5U2hhcmVFbnZlbG9wZSc7XG5leHBvcnQgKiBmcm9tICcuL3NpZ25hYmxlQ29uc2lzdGVuY3knO1xuIl19
@@ -0,0 +1,40 @@
1
+ import { Buffer } from 'buffer';
2
+ /** Version of the Safe MPC keyshare envelope that carries VRF material. */
3
+ export declare const SAFE_MPC_KEY_ENVELOPE_VERSION = 1;
4
+ export interface ParsedMpcV2KeyShare {
5
+ /** Serialized MPC signing keyshare (DKLS or MPS) or reduced signing keyshare. */
6
+ signingKeyShare: Buffer;
7
+ /** Serialized VRF keyshare, present in Safe-root envelopes. */
8
+ vrfKeyShare?: Buffer;
9
+ }
10
+ /**
11
+ * Combines a signing keyshare with a VRF keyshare into the Safe MPC CBOR envelope
12
+ * (`{ version, prvKeyShare, vrf }`). `envelope` wraps the full signing share for
13
+ * `encryptedPrv`. `reducedEnvelope` wraps the reduced signing share for
14
+ * `reducedEncryptedPrv`, which is what Safe keycards store.
15
+ */
16
+ export declare function buildSafeMpcKeyEnvelopes(privateMaterial: Buffer, reducedPrivateMaterial: Buffer, vrfKeyShare: Buffer): {
17
+ envelope: Buffer;
18
+ reducedEnvelope: Buffer;
19
+ };
20
+ /**
21
+ * Parses a decrypted Safe MPC root blob produced by {@link buildSafeMpcKeyEnvelopes}.
22
+ * Throws if the blob is not a versioned envelope with both shares. Wallet-card recovery
23
+ * uses {@link parseMpcV2KeyShareEnvelope} instead, because legacy cards have no VRF share.
24
+ */
25
+ export declare function parseSafeMpcKeyEnvelopes(decryptedBlob: string): {
26
+ signing: Buffer;
27
+ vrf: Buffer;
28
+ };
29
+ /**
30
+ * Parses decrypted MPCv2 key material from a wallet or Safe keycard.
31
+ *
32
+ * Legacy MPCv2 cards contain base64(CBOR ReducedKeyShare). Safe-root cards contain
33
+ * base64(CBOR({ version: 1, prvKeyShare, vrf })); the signing share remains reduced,
34
+ * while `vrf` is the complete serialized VrfKeyshare required by the VRF wasm API.
35
+ *
36
+ * The legacy path is intentionally retained because existing wallet cards do not have
37
+ * VRF material and must continue to recover as before.
38
+ */
39
+ export declare function parseMpcV2KeyShareEnvelope(decryptedKeyShare: string): ParsedMpcV2KeyShare;
40
+ //# sourceMappingURL=keyShareEnvelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyShareEnvelope.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/keyShareEnvelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,2EAA2E;AAC3E,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkCD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAY/C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAoBhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,iBAAiB,EAAE,MAAM,GAAG,mBAAmB,CAkBzF"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SAFE_MPC_KEY_ENVELOPE_VERSION = void 0;
4
+ exports.buildSafeMpcKeyEnvelopes = buildSafeMpcKeyEnvelopes;
5
+ exports.parseSafeMpcKeyEnvelopes = parseSafeMpcKeyEnvelopes;
6
+ exports.parseMpcV2KeyShareEnvelope = parseMpcV2KeyShareEnvelope;
7
+ const cbor_x_1 = require("cbor-x");
8
+ const buffer_1 = require("buffer");
9
+ /** Version of the Safe MPC keyshare envelope that carries VRF material. */
10
+ exports.SAFE_MPC_KEY_ENVELOPE_VERSION = 1;
11
+ function isRecord(value) {
12
+ return typeof value === 'object' && value !== null;
13
+ }
14
+ function isSafeMpcKeyEnvelope(value) {
15
+ return isRecord(value) && 'version' in value && 'prvKeyShare' in value && 'vrf' in value;
16
+ }
17
+ function asBuffer(value, field) {
18
+ if (!(value instanceof Uint8Array)) {
19
+ throw new Error(`Invalid MPC keyshare envelope: ${field} must be a byte string`);
20
+ }
21
+ return buffer_1.Buffer.from(value);
22
+ }
23
+ function tryDecodeCbor(decryptedKeyShare) {
24
+ const encoded = buffer_1.Buffer.from(decryptedKeyShare, 'base64');
25
+ try {
26
+ return { encoded, decoded: (0, cbor_x_1.decode)(encoded) };
27
+ }
28
+ catch (error) {
29
+ return { encoded, error };
30
+ }
31
+ }
32
+ /**
33
+ * Combines a signing keyshare with a VRF keyshare into the Safe MPC CBOR envelope
34
+ * (`{ version, prvKeyShare, vrf }`). `envelope` wraps the full signing share for
35
+ * `encryptedPrv`. `reducedEnvelope` wraps the reduced signing share for
36
+ * `reducedEncryptedPrv`, which is what Safe keycards store.
37
+ */
38
+ function buildSafeMpcKeyEnvelopes(privateMaterial, reducedPrivateMaterial, vrfKeyShare) {
39
+ const envelope = (0, cbor_x_1.encode)({
40
+ version: exports.SAFE_MPC_KEY_ENVELOPE_VERSION,
41
+ prvKeyShare: new Uint8Array(privateMaterial),
42
+ vrf: new Uint8Array(vrfKeyShare),
43
+ });
44
+ const reducedEnvelope = (0, cbor_x_1.encode)({
45
+ version: exports.SAFE_MPC_KEY_ENVELOPE_VERSION,
46
+ prvKeyShare: new Uint8Array(reducedPrivateMaterial),
47
+ vrf: new Uint8Array(vrfKeyShare),
48
+ });
49
+ return { envelope: buffer_1.Buffer.from(envelope), reducedEnvelope: buffer_1.Buffer.from(reducedEnvelope) };
50
+ }
51
+ /**
52
+ * Parses a decrypted Safe MPC root blob produced by {@link buildSafeMpcKeyEnvelopes}.
53
+ * Throws if the blob is not a versioned envelope with both shares. Wallet-card recovery
54
+ * uses {@link parseMpcV2KeyShareEnvelope} instead, because legacy cards have no VRF share.
55
+ */
56
+ function parseSafeMpcKeyEnvelopes(decryptedBlob) {
57
+ const decoded = tryDecodeCbor(decryptedBlob);
58
+ if ('error' in decoded) {
59
+ const message = decoded.error instanceof Error ? decoded.error.message : String(decoded.error);
60
+ throw new Error(`Failed to decode safe MPC root key envelope: ${message}`);
61
+ }
62
+ if (!isSafeMpcKeyEnvelope(decoded.decoded)) {
63
+ throw new Error('Invalid safe MPC root key envelope: expected version, signing keyshare, and VRF keyshare');
64
+ }
65
+ const { version, prvKeyShare, vrf } = decoded.decoded;
66
+ if (version !== exports.SAFE_MPC_KEY_ENVELOPE_VERSION) {
67
+ throw new Error(`Unsupported safe MPC root key envelope version: ${String(version)}`);
68
+ }
69
+ if (!(prvKeyShare instanceof Uint8Array) || prvKeyShare.length === 0) {
70
+ throw new Error('Safe MPC root key envelope is missing a signing keyshare');
71
+ }
72
+ if (!(vrf instanceof Uint8Array) || vrf.length === 0) {
73
+ throw new Error('Safe MPC root key envelope is missing a VRF keyshare');
74
+ }
75
+ return { signing: buffer_1.Buffer.from(prvKeyShare), vrf: buffer_1.Buffer.from(vrf) };
76
+ }
77
+ /**
78
+ * Parses decrypted MPCv2 key material from a wallet or Safe keycard.
79
+ *
80
+ * Legacy MPCv2 cards contain base64(CBOR ReducedKeyShare). Safe-root cards contain
81
+ * base64(CBOR({ version: 1, prvKeyShare, vrf })); the signing share remains reduced,
82
+ * while `vrf` is the complete serialized VrfKeyshare required by the VRF wasm API.
83
+ *
84
+ * The legacy path is intentionally retained because existing wallet cards do not have
85
+ * VRF material and must continue to recover as before.
86
+ */
87
+ function parseMpcV2KeyShareEnvelope(decryptedKeyShare) {
88
+ const decoded = tryDecodeCbor(decryptedKeyShare);
89
+ if ('error' in decoded) {
90
+ return { signingKeyShare: decoded.encoded };
91
+ }
92
+ if (!isRecord(decoded.decoded) || !('version' in decoded.decoded)) {
93
+ return { signingKeyShare: decoded.encoded };
94
+ }
95
+ if (decoded.decoded.version !== exports.SAFE_MPC_KEY_ENVELOPE_VERSION) {
96
+ throw new Error(`Unsupported MPC keyshare envelope version: ${String(decoded.decoded.version)}`);
97
+ }
98
+ return {
99
+ signingKeyShare: asBuffer(decoded.decoded.prvKeyShare, 'prvKeyShare'),
100
+ vrfKeyShare: asBuffer(decoded.decoded.vrf, 'vrf'),
101
+ };
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5U2hhcmVFbnZlbG9wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3Mva2V5U2hhcmVFbnZlbG9wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtREEsNERBZ0JDO0FBT0QsNERBb0JDO0FBWUQsZ0VBa0JDO0FBNUhELG1DQUF3QztBQUN4QyxtQ0FBZ0M7QUFFaEMsMkVBQTJFO0FBQzlELFFBQUEsNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO0FBZS9DLFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksYUFBYSxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDO0FBQzNGLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjLEVBQUUsS0FBYTtJQUM3QyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLHdCQUF3QixDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELE9BQU8sZUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLGlCQUF5QjtJQUV6QixNQUFNLE9BQU8sR0FBRyxlQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUFDLE9BQU8s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LFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxxQ0FBNkIsRUFBRSxDQUFDO1FBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsT0FBTztRQUNMLGVBQWUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO1FBQ3JFLFdBQVcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO0tBQ2xELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuLyoqIFZlcnNpb24gb2YgdGhlIFNhZmUgTVBDIGtleXNoYXJlIGVudmVsb3BlIHRoYXQgY2FycmllcyBWUkYgbWF0ZXJpYWwuICovXG5leHBvcnQgY29uc3QgU0FGRV9NUENfS0VZX0VOVkVMT1BFX1ZFUlNJT04gPSAxO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZE1wY1YyS2V5U2hhcmUge1xuICAvKiogU2VyaWFsaXplZCBNUEMgc2lnbmluZyBrZXlzaGFyZSAoREtMUyBvciBNUFMpIG9yIHJlZHVjZWQgc2lnbmluZyBrZXlzaGFyZS4gKi9cbiAgc2lnbmluZ0tleVNoYXJlOiBCdWZmZXI7XG4gIC8qKiBTZXJpYWxpemVkIFZSRiBrZXlzaGFyZSwgcHJlc2VudCBpbiBTYWZlLXJvb3QgZW52ZWxvcGVzLiAqL1xuICB2cmZLZXlTaGFyZT86IEJ1ZmZlcjtcbn1cblxudHlwZSBTYWZlTXBjS2V5RW52ZWxvcGUgPSB7XG4gIHZlcnNpb246IHVua25vd247XG4gIHBydktleVNoYXJlOiB1bmtub3duO1xuICB2cmY6IHVua25vd247XG59O1xuXG5mdW5jdGlvbiBpc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU2FmZU1wY0tleUVudmVsb3BlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2FmZU1wY0tleUVudmVsb3BlIHtcbiAgcmV0dXJuIGlzUmVjb3JkKHZhbHVlKSAmJiAndmVyc2lvbicgaW4gdmFsdWUgJiYgJ3BydktleVNoYXJlJyBpbiB2YWx1ZSAmJiAndnJmJyBpbiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYXNCdWZmZXIodmFsdWU6IHVua25vd24sIGZpZWxkOiBzdHJpbmcpOiBCdWZmZXIge1xuICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIE1QQyBrZXlzaGFyZSBlbnZlbG9wZTogJHtmaWVsZH0gbXVzdCBiZSBhIGJ5dGUgc3RyaW5nYCk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdHJ5RGVjb2RlQ2JvcihcbiAgZGVjcnlwdGVkS2V5U2hhcmU6IHN0cmluZ1xuKTogeyBlbmNvZGVkOiBCdWZmZXI7IGRlY29kZWQ6IHVua25vd24gfSB8IHsgZW5jb2RlZDogQnVmZmVyOyBlcnJvcjogdW5rbm93biB9IHtcbiAgY29uc3QgZW5jb2RlZCA9IEJ1ZmZlci5mcm9tKGRlY3J5cHRlZEtleVNoYXJlLCAnYmFzZTY0Jyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZW5jb2RlZCwgZGVjb2RlZDogZGVjb2RlKGVuY29kZWQpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZW5jb2RlZCwgZXJyb3IgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbWJpbmVzIGEgc2lnbmluZyBrZXlzaGFyZSB3aXRoIGEgVlJGIGtleXNoYXJlIGludG8gdGhlIFNhZmUgTVBDIENCT1IgZW52ZWxvcGVcbiAqIChgeyB2ZXJzaW9uLCBwcnZLZXlTaGFyZSwgdnJmIH1gKS4gYGVudmVsb3BlYCB3cmFwcyB0aGUgZnVsbCBzaWduaW5nIHNoYXJlIGZvclxuICogYGVuY3J5cHRlZFBydmAuIGByZWR1Y2VkRW52ZWxvcGVgIHdyYXBzIHRoZSByZWR1Y2VkIHNpZ25pbmcgc2hhcmUgZm9yXG4gKiBgcmVkdWNlZEVuY3J5cHRlZFBydmAsIHdoaWNoIGlzIHdoYXQgU2FmZSBrZXljYXJkcyBzdG9yZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgcHJpdmF0ZU1hdGVyaWFsOiBCdWZmZXIsXG4gIHJlZHVjZWRQcml2YXRlTWF0ZXJpYWw6IEJ1ZmZlcixcbiAgdnJmS2V5U2hhcmU6IEJ1ZmZlclxuKTogeyBlbnZlbG9wZTogQnVmZmVyOyByZWR1Y2VkRW52ZWxvcGU6IEJ1ZmZlciB9IHtcbiAgY29uc3QgZW52ZWxvcGUgPSBlbmNvZGUoe1xuICAgIHZlcnNpb246IFNBRkVfTVBDX0tFWV9FTlZFTE9QRV9WRVJTSU9OLFxuICAgIHBydktleVNoYXJlOiBuZXcgVWludDhBcnJheShwcml2YXRlTWF0ZXJpYWwpLFxuICAgIHZyZjogbmV3IFVpbnQ4QXJyYXkodnJmS2V5U2hhcmUpLFxuICB9KTtcbiAgY29uc3QgcmVkdWNlZEVudmVsb3BlID0gZW5jb2RlKHtcbiAgICB2ZXJzaW9uOiBTQUZFX01QQ19LRVlfRU5WRUxPUEVfVkVSU0lPTixcbiAgICBwcnZLZXlTaGFyZTogbmV3IFVpbnQ4QXJyYXkocmVkdWNlZFByaXZhdGVNYXRlcmlhbCksXG4gICAgdnJmOiBuZXcgVWludDhBcnJheSh2cmZLZXlTaGFyZSksXG4gIH0pO1xuICByZXR1cm4geyBlbnZlbG9wZTogQnVmZmVyLmZyb20oZW52ZWxvcGUpLCByZWR1Y2VkRW52ZWxvcGU6IEJ1ZmZlci5mcm9tKHJlZHVjZWRFbnZlbG9wZSkgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBkZWNyeXB0ZWQgU2FmZSBNUEMgcm9vdCBibG9iIHByb2R1Y2VkIGJ5IHtAbGluayBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXN9LlxuICogVGhyb3dzIGlmIHRoZSBibG9iIGlzIG5vdCBhIHZlcnNpb25lZCBlbnZlbG9wZSB3aXRoIGJvdGggc2hhcmVzLiBXYWxsZXQtY2FyZCByZWNvdmVyeVxuICogdXNlcyB7QGxpbmsgcGFyc2VNcGNWMktleVNoYXJlRW52ZWxvcGV9IGluc3RlYWQsIGJlY2F1c2UgbGVnYWN5IGNhcmRzIGhhdmUgbm8gVlJGIHNoYXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTYWZlTXBjS2V5RW52ZWxvcGVzKGRlY3J5cHRlZEJsb2I6IHN0cmluZyk6IHsgc2lnbmluZzogQnVmZmVyOyB2cmY6IEJ1ZmZlciB9IHtcbiAgY29uc3QgZGVjb2RlZCA9IHRyeURlY29kZUNib3IoZGVjcnlwdGVkQmxvYik7XG4gIGlmICgnZXJyb3InIGluIGRlY29kZWQpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZGVjb2RlZC5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGVjb2RlZC5lcnJvci5tZXNzYWdlIDogU3RyaW5nKGRlY29kZWQuZXJyb3IpO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBzYWZlIE1QQyByb290IGtleSBlbnZlbG9wZTogJHttZXNzYWdlfWApO1xuICB9XG4gIGlmICghaXNTYWZlTXBjS2V5RW52ZWxvcGUoZGVjb2RlZC5kZWNvZGVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzYWZlIE1QQyByb290IGtleSBlbnZlbG9wZTogZXhwZWN0ZWQgdmVyc2lvbiwgc2lnbmluZyBrZXlzaGFyZSwgYW5kIFZSRiBrZXlzaGFyZScpO1xuICB9XG4gIGNvbnN0IHsgdmVyc2lvbiwgcHJ2S2V5U2hhcmUsIHZyZiB9ID0gZGVjb2RlZC5kZWNvZGVkO1xuICBpZiAodmVyc2lvbiAhPT0gU0FGRV9NUENfS0VZX0VOVkVMT1BFX1ZFUlNJT04pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlIHZlcnNpb246ICR7U3RyaW5nKHZlcnNpb24pfWApO1xuICB9XG4gIGlmICghKHBydktleVNoYXJlIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgcHJ2S2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlIE1QQyByb290IGtleSBlbnZlbG9wZSBpcyBtaXNzaW5nIGEgc2lnbmluZyBrZXlzaGFyZScpO1xuICB9XG4gIGlmICghKHZyZiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IHZyZi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlIGlzIG1pc3NpbmcgYSBWUkYga2V5c2hhcmUnKTtcbiAgfVxuICByZXR1cm4geyBzaWduaW5nOiBCdWZmZXIuZnJvbShwcnZLZXlTaGFyZSksIHZyZjogQnVmZmVyLmZyb20odnJmKSB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBkZWNyeXB0ZWQgTVBDdjIga2V5IG1hdGVyaWFsIGZyb20gYSB3YWxsZXQgb3IgU2FmZSBrZXljYXJkLlxuICpcbiAqIExlZ2FjeSBNUEN2MiBjYXJkcyBjb250YWluIGJhc2U2NChDQk9SIFJlZHVjZWRLZXlTaGFyZSkuIFNhZmUtcm9vdCBjYXJkcyBjb250YWluXG4gKiBiYXNlNjQoQ0JPUih7IHZlcnNpb246IDEsIHBydktleVNoYXJlLCB2cmYgfSkpOyB0aGUgc2lnbmluZyBzaGFyZSByZW1haW5zIHJlZHVjZWQsXG4gKiB3aGlsZSBgdnJmYCBpcyB0aGUgY29tcGxldGUgc2VyaWFsaXplZCBWcmZLZXlzaGFyZSByZXF1aXJlZCBieSB0aGUgVlJGIHdhc20gQVBJLlxuICpcbiAqIFRoZSBsZWdhY3kgcGF0aCBpcyBpbnRlbnRpb25hbGx5IHJldGFpbmVkIGJlY2F1c2UgZXhpc3Rpbmcgd2FsbGV0IGNhcmRzIGRvIG5vdCBoYXZlXG4gKiBWUkYgbWF0ZXJpYWwgYW5kIG11c3QgY29udGludWUgdG8gcmVjb3ZlciBhcyBiZWZvcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1wY1YyS2V5U2hhcmVFbnZlbG9wZShkZWNyeXB0ZWRLZXlTaGFyZTogc3RyaW5nKTogUGFyc2VkTXBjVjJLZXlTaGFyZSB7XG4gIGNvbnN0IGRlY29kZWQgPSB0cnlEZWNvZGVDYm9yKGRlY3J5cHRlZEtleVNoYXJlKTtcbiAgaWYgKCdlcnJvcicgaW4gZGVjb2RlZCkge1xuICAgIHJldHVybiB7IHNpZ25pbmdLZXlTaGFyZTogZGVjb2RlZC5lbmNvZGVkIH07XG4gIH1cblxuICBpZiAoIWlzUmVjb3JkKGRlY29kZWQuZGVjb2RlZCkgfHwgISgndmVyc2lvbicgaW4gZGVjb2RlZC5kZWNvZGVkKSkge1xuICAgIHJldHVybiB7IHNpZ25pbmdLZXlTaGFyZTogZGVjb2RlZC5lbmNvZGVkIH07XG4gIH1cblxuICBpZiAoZGVjb2RlZC5kZWNvZGVkLnZlcnNpb24gIT09IFNBRkVfTVBDX0tFWV9FTlZFTE9QRV9WRVJTSU9OKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBNUEMga2V5c2hhcmUgZW52ZWxvcGUgdmVyc2lvbjogJHtTdHJpbmcoZGVjb2RlZC5kZWNvZGVkLnZlcnNpb24pfWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduaW5nS2V5U2hhcmU6IGFzQnVmZmVyKGRlY29kZWQuZGVjb2RlZC5wcnZLZXlTaGFyZSwgJ3BydktleVNoYXJlJyksXG4gICAgdnJmS2V5U2hhcmU6IGFzQnVmZmVyKGRlY29kZWQuZGVjb2RlZC52cmYsICd2cmYnKSxcbiAgfTtcbn1cbiJdfQ==
@@ -6,7 +6,7 @@ exports.fetchRootKeychainForSafeChild = fetchRootKeychainForSafeChild;
6
6
  exports.resolveSafeOwnerSigningPrv = resolveSafeOwnerSigningPrv;
7
7
  exports.resolveSafeChildPrvForSharing = resolveSafeChildPrvForSharing;
8
8
  const keychain_1 = require("../keychain");
9
- const safeDerivation_1 = require("../safe/safeDerivation");
9
+ const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
10
10
  const errors_1 = require("../errors");
11
11
  class InvalidRootKeychainSourceError extends Error {
12
12
  constructor(id, source) {
@@ -95,7 +95,7 @@ async function resolveSafeKeyMaterial(params) {
95
95
  if (childKeychain.derivedFromParentWithPath === undefined) {
96
96
  throw new Error(`Safe wallet ${walletId}: child keychain is missing derivedFromParentWithPath`);
97
97
  }
98
- const derived = (0, safeDerivation_1.deriveSafeChildHardenedFromXprv)(rootPrv, (0, safeDerivation_1.parseDerivedFromParentWithHardenedPath)(childKeychain.derivedFromParentWithPath));
98
+ const derived = (0, sdk_lib_safes_1.deriveSafeChildHardenedFromXprv)(rootPrv, (0, sdk_lib_safes_1.parseDerivedFromParentWithHardenedPath)(childKeychain.derivedFromParentWithPath));
99
99
  if (derived.pub !== childKeychain.pub) {
100
100
  throw new SafeDerivedPublicKeyMismatchError(walletId, childKeychain.pub, derived.pub);
101
101
  }
@@ -148,4 +148,4 @@ async function resolveSafeChildPrvForSharing(params) {
148
148
  makeNotImplementedError: (slot, walletId) => new SafeShareNotImplementedError(walletId, safeShareSlotDetail(slot, params)),
149
149
  });
150
150
  }
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUtleWNoYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9zYWZlS2V5Y2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcURBLHNFQUtDO0FBTUQsc0VBZUM7QUE2RkQsZ0VBZ0JDO0FBeUJELHNFQVFDO0FBek5ELDBDQUF3RztBQUN4RywyREFBaUg7QUFDakgsc0NBQW1EO0FBR25ELE1BQWEsOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUFZLEVBQVUsRUFBRSxNQUEwQjtRQUNoRCxLQUFLLENBQ0gsaUJBQWlCLEVBQUUsZ0JBQWdCLE1BQU0sSUFBSSxTQUFTLHNCQUFzQjtZQUMxRSxxREFBcUQsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0NBQWdDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBUkQsd0VBUUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBYSxpQ0FBa0MsU0FBUSxLQUFLO0lBQzFELFlBQVksUUFBZ0IsRUFBRSxXQUFtQixFQUFFLFVBQWtCO1FBQ25FLEtBQUssQ0FDSCxlQUFlLFFBQVEscUVBQXFFO1lBQzFGLFlBQVksV0FBVyxTQUFTLFVBQVUsR0FBRyxDQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFSRCw4RUFRQztBQUVELGtHQUFrRztBQUNsRyxNQUFhLG1DQUFvQyxTQUFRLEtBQUs7SUFDNUQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxxQ0FBcUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFMRCxrRkFLQztBQUVELG1HQUFtRztBQUNuRyxNQUFhLDRCQUE2QixTQUFRLEtBQUs7SUFDckQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMs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TUFBTSxDQUFDLFlBQVksS0FBSyxPQUFPO1FBQ3BDLENBQUMsQ0FBQyw2RUFBNkU7UUFDL0UsQ0FBQyxDQUFDLDRFQUE0RSxDQUFDO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsTUFBMkM7SUFFM0MsT0FBTyxzQkFBc0IsQ0FBQztRQUM1QixHQUFHLE1BQU07UUFDVCx1QkFBdUIsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUMxQyxJQUFJLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDaEYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5LCBJS2V5Y2hhaW5zLCBLZXljaGFpbiwgS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2IH0gZnJvbSAnLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydiwgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggfSBmcm9tICcuLi9zYWZlL3NhZmVEZXJpdmF0aW9uJztcbmltcG9ydCB7IEluY29ycmVjdFBhc3N3b3JkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0ZWRLZXljaGFpbkRhdGEgfSBmcm9tICcuL2lXYWxsZXQnO1xuXG5leHBvcnQgY2xhc3MgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyKFxuICAgICAgYFJvb3Qga2V5Y2hhaW4gJHtpZH0gaGFzIHNvdXJjZSAnJHtzb3VyY2UgPz8gJ3Vua25vd24nfSc7IGV4cGVjdGVkICd1c2VyJy4gYCArXG4gICAgICAgIGBVc2luZyBhIGJhY2t1cCBvciBCaXRHbyByb290IHdvdWxkIGZhaWwgYXQgc2lnbmluZy5gXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yJztcbiAgfVxufVxuXG4vKiogVGhyb3duIHdoZW4gaGFyZGVuZWQgZGVyaXZhdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnaXN0ZXJlZCBjaGlsZCBwdWJsaWMga2V5LiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iod2FsbGV0SWQ6IHN0cmluZywgZXhwZWN0ZWRQdWI6IHN0cmluZywgZGVyaXZlZFB1Yjogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGRlcml2ZWQgY2hpbGQgcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnaXN0ZXJlZCB1c2VyIGtleS4gYCArXG4gICAgICAgIGBFeHBlY3RlZCAke2V4cGVjdGVkUHVifSwgZ290ICR7ZGVyaXZlZFB1Yn0uYFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ1NhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRocm93biB3aGVuIG93bmVyIHNpZ25pbmcgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHNhZmUgc2xvdCAoVFNTLCBlZDI1NTE5IG11bHRpc2lnLCDigKYpLiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih3YWxsZXRJZDogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgIHN1cGVyKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogJHtkZXRhaWx9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1NhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yJztcbiAgfVxufVxuXG4vKiogVGhyb3duIHdoZW4gd2FsbGV0IHNoYXJpbmcgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHNhZmUgc2xvdCAoVFNTLCBlZDI1NTE5IG11bHRpc2lnLCDigKYpLiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHdhbGxldElkOiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFNhZmUgd2FsbGV0ICR7d2FsbGV0SWR9OiAke2RldGFpbH1gKTtcbiAgICB0aGlzLm5hbWUgPSAnU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqIGVkMjU1MTkgb25jaGFpbiBtdWx0aXNpZyAoc2xvdCDikaMpLiBOZWVkcyBTTElQLTAwMTAsIG5vdCBzZWNwMjU2azEgQklQMzIuICovXG5jb25zdCBFRDI1NTE5X09OQ0hBSU5fRkFNSUxJRVMgPSBuZXcgU2V0KFsnYWxnbycsICd4bG0nLCAnaGJhciddKTtcblxuLyoqXG4gKiBUcnVlIHdoZW4gdGhpcyBpcyB0aGUgc2FmZSBtaW50ZXIncyB1c2VyIGtleTogd2FsbGV0IGlzIGluIGEgc2FmZSwgdGhlIGtleVxuICogaGFzIGEgcGFyZW50IHJvb3QsIGFuZCB0aGVyZSBpcyBubyBjaGlsZC1sZXZlbCBlbmNyeXB0ZWRQcnYgKHNoYXJlZXMgaGF2ZSBvbmUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlQ2hpbGRQdWJsaWNPbmx5S2V5Y2hhaW4oXG4gIHdhbGxldFNhZmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBrZXljaGFpbjogS2V5Y2hhaW4gfCB1bmRlZmluZWRcbik6IGtleWNoYWluIGlzIEtleWNoYWluICYgeyBwYXJlbnQ6IHN0cmluZyB9IHtcbiAgcmV0dXJuICEhKHdhbGxldFNhZmVJZCAmJiBrZXljaGFpbj8ucGFyZW50ICYmICFrZXljaGFpbi5lbmNyeXB0ZWRQcnYpO1xufVxuXG4vKipcbiAqIEZldGNoIHRoZSByb290IHVzZXIga2V5Y2hhaW4gZm9yIGEgc2FmZSBjaGlsZCBrZXkuXG4gKiBSZXF1aXJlcyBgc291cmNlID09PSAndXNlcidgIHNvIGEgbWlzY29uZmlndXJlZCBwYXJlbnQgZmFpbHMgZWFybHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChcbiAga2V5Y2hhaW5zOiBJS2V5Y2hhaW5zLFxuICBjaGlsZEtleWNoYWluOiBLZXljaGFpblxuKTogUHJvbWlzZTxLZXljaGFpbldpdGhFbmNyeXB0ZWRQcnY+IHtcbiAgaWYgKCFjaGlsZEtleWNoYWluLnBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2hpbGRLZXljaGFpbi5wYXJlbnQgaXMgcmVxdWlyZWQgdG8gZmV0Y2ggdGhlIHJvb3Qga2V5Y2hhaW4nKTtcbiAgfVxuICBjb25zdCByb290ID0gYXdhaXQga2V5Y2hhaW5zLmdldCh7IGlkOiBjaGlsZEtleWNoYWluLnBhcmVudCB9KTtcbiAgaWYgKHJvb3Quc291cmNlICE9PSAndXNlcicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yKHJvb3QuaWQsIHJvb3Quc291cmNlKTtcbiAgfVxuICBpZiAoIXJvb3QuZW5jcnlwdGVkUHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByb290IGtleWNoYWluICR7cm9vdC5pZH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnZgKTtcbiAgfVxuICByZXR1cm4gcm9vdCBhcyBLZXljaGFpbldpdGhFbmNyeXB0ZWRQcnY7XG59XG5cbi8qKlxuICogU2hhcmVkIHBhcmFtcyBmb3IgcmVzb2x2aW5nIHNhZmUtb3duZXIga2V5IG1hdGVyaWFsIChvd25lciBzaWduaW5nIGFuZCB3YWxsZXQgc2hhcmluZykuXG4gKiBCb3RoIHJlc29sdmVycyBleHRlbmQgdGhpcyBzbyB0aGUgcHJlY29uZGl0aW9uL2Rlcml2YXRpb24gcGF0aCBjYW5ub3QgZGl2ZXJnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zIHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAga2V5Y2hhaW5zOiBJS2V5Y2hhaW5zO1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICAvKiogT25jaGFpbiBzZWNwMjU2azE6IGhhcmRlbmVkLWRlcml2ZSBhbmQgdmVyaWZ5IHB1Yi4gT3RoZXIgc2xvdHMgdGhyb3cuICovXG4gIG11bHRpc2lnVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb2luRmFtaWx5OiBzdHJpbmc7XG4gIGNoaWxkS2V5Y2hhaW46IEtleWNoYWluO1xuICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIC8qKiBXaGVuIGFscmVhZHkgZmV0Y2hlZCAocGFzc3BocmFzZSBwcmVmbGlnaHQpLCBza2lwIGEgc2Vjb25kIEdFVC4gKi9cbiAgcm9vdEtleWNoYWluPzogS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2O1xufVxuXG5leHBvcnQgdHlwZSBSZXNvbHZlU2FmZU93bmVyU2lnbmluZ1BydlBhcmFtcyA9IFNhZmVLZXlNYXRlcmlhbEJhc2VQYXJhbXM7XG5cbnR5cGUgU2FmZUtleU1hdGVyaWFsU2xvdCA9ICd0c3MnIHwgJ2VkMjU1MTknO1xuXG50eXBlIFJlc29sdmVTYWZlS2V5TWF0ZXJpYWxQYXJhbXMgPSBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zICYge1xuICAvKiogQ29uc3RydWN0cyB0aGUgbm90LWltcGxlbWVudGVkIGVycm9yIGZvciB0aGUgY3VycmVudCByZXNvbHZlciAoc2lnbmluZyB2cyBzaGFyaW5nKS4gKi9cbiAgbWFrZU5vdEltcGxlbWVudGVkRXJyb3I6IChzbG90OiBTYWZlS2V5TWF0ZXJpYWxTbG90LCB3YWxsZXRJZDogc3RyaW5nKSA9PiBFcnJvcjtcbn07XG5cbi8qKlxuICogU2hhcmVkIGNvcmUgdGhhdCByZXNvbHZlcyBzYWZlIGtleSBtYXRlcmlhbCBmb3IgYSBwdWItb25seSBzYWZlIGNoaWxkLiBSZXR1cm5zIHRoZSBDSElMRFxuICogYHtwcnYsIHB1Yn1gIG9ubHkg4oCUIG5ldmVyIHRoZSByb290IOKAlCBzbyB0aGUgcm9vdCBjYW4gbmV2ZXIgbGVhayBpbnRvIGEgc2hhcmUgZG9jdW1lbnQuXG4gKlxuICogT25jaGFpbiBzZWNwMjU2azE6IGRlY3J5cHQgcm9vdCwgaGFyZGVuZWQtZGVyaXZlIGF0IGBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoYFxuICogKGBtLzxuPidgKSwgYW5kIHZlcmlmeSB0aGUgcmVnaXN0ZXJlZCBwdWIuIFRTUyBhbmQgZWQyNTUxOSBvbmNoYWluIHRocm93IHZpYVxuICogYG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yYCDigJQgdGhlIGNhbGxlciBjb25zdHJ1Y3RzIGl0cyBvd24gZXJyb3IgY2xhc3MgKyBtZXNzYWdlLCBzbyB0aGVcbiAqIGd1YXJkIHNldCBzdGF5cyBzaGFyZWQgd2hpbGUgc2lnbmluZy9zaGFyaW5nIHJlcG9ydCB0aGVpciBvd24gZXJyb3JzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZUtleU1hdGVyaWFsKHBhcmFtczogUmVzb2x2ZVNhZmVLZXlNYXRlcmlhbFBhcmFtcyk6IFByb21pc2U8eyBwcnY6IHN0cmluZzsgcHViOiBzdHJpbmcgfT4ge1xuICBjb25zdCB7XG4gICAgYml0Z28sXG4gICAga2V5Y2hhaW5zLFxuICAgIHdhbGxldElkLFxuICAgIG11bHRpc2lnVHlwZSxcbiAgICBjb2luRmFtaWx5LFxuICAgIGNoaWxkS2V5Y2hhaW4sXG4gICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgfSA9IHBhcmFtcztcblxuICBpZiAobXVsdGlzaWdUeXBlICE9PSAnb25jaGFpbicpIHtcbiAgICB0aHJvdyBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcigndHNzJywgd2FsbGV0SWQpO1xuICB9XG4gIGlmIChFRDI1NTE5X09OQ0hBSU5fRkFNSUxJRVMuaGFzKGNvaW5GYW1pbHkpKSB7XG4gICAgdGhyb3cgbWFrZU5vdEltcGxlbWVudGVkRXJyb3IoJ2VkMjU1MTknLCB3YWxsZXRJZCk7XG4gIH1cblxuICBjb25zdCByb290S2V5Y2hhaW4gPSBwYXJhbXMucm9vdEtleWNoYWluID8/IChhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChrZXljaGFpbnMsIGNoaWxkS2V5Y2hhaW4pKTtcbiAgY29uc3Qgcm9vdFBydiA9IGF3YWl0IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIHJvb3RLZXljaGFpbiwgd2FsbGV0UGFzc3BocmFzZSk7XG4gIGlmICghcm9vdFBydikge1xuICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCk7XG4gIH1cblxuICBpZiAoIWNoaWxkS2V5Y2hhaW4ucHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogY2hpbGQga2V5Y2hhaW4gaXMgbWlzc2luZyBwdWIgZm9yIHByZS1zaWduIHZlcmlmaWNhdGlvbmApO1xuICB9XG4gIGlmIChjaGlsZEtleWNoYWluLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGNoaWxkIGtleWNoYWluIGlzIG1pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aGApO1xuICB9XG5cbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYoXG4gICAgcm9vdFBydixcbiAgICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChjaGlsZEtleWNoYWluLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGgpXG4gICk7XG4gIGlmIChkZXJpdmVkLnB1YiAhPT0gY2hpbGRLZXljaGFpbi5wdWIpIHtcbiAgICB0aHJvdyBuZXcgU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yKHdhbGxldElkLCBjaGlsZEtleWNoYWluLnB1YiwgZGVyaXZlZC5wdWIpO1xuICB9XG5cbiAgaWYgKGRlcml2ZWQucHViID09PSByb290S2V5Y2hhaW4ucHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogZGVyaXZlZCBjaGlsZCBwdWIgdW5leHBlY3RlZGx5IGVxdWFscyB0aGUgcm9vdCBwdWJgKTtcbiAgfVxuICByZXR1cm4geyBwcnY6IGRlcml2ZWQucHJ2LCBwdWI6IGRlcml2ZWQucHViIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzaWduaW5nIG1hdGVyaWFsIGZvciBhIHNhZmUgb3duZXIgKGNoaWxkIGtleSBoYXMgbm8gZW5jcnlwdGVkUHJ2KS5cbiAqXG4gKiBPbmNoYWluIHNlY3AyNTZrMTogZGVjcnlwdCByb290LCBoYXJkZW5lZC1kZXJpdmUgYXQgYGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGhgXG4gKiAoYG0vPG4+J2ApLCBhbmQgdmVyaWZ5IHRoZSByZWdpc3RlcmVkIHB1Yi5cbiAqIFRTUyBhbmQgZWQyNTUxOSBvbmNoYWluOiB0aHJvdyDigJQgZG8gbm90IHJldHVybiByb290IG1hdGVyaWFsIG9yIEJJUDMyLWRlcml2ZSB0aGUgd3JvbmcgY3VydmUuXG4gKlxuICogRG8gbm90IHVzZSBmb3Igd2FsbGV0IHNoYXJpbmcg4oCUIHRoYXQgbXVzdCBub3QgcmVjZWl2ZSByb290IGtleSBtYXRlcmlhbC5cbiAqIENhbGwgb25seSB3aGVuIGBpc1NhZmVDaGlsZFB1YmxpY09ubHlLZXljaGFpbmAgaXMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTYWZlT3duZXJTaWduaW5nUHJ2KHBhcmFtczogUmVzb2x2ZVNhZmVPd25lclNpZ25pbmdQcnZQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBydiB9ID0gYXdhaXQgcmVzb2x2ZVNhZmVLZXlNYXRlcmlhbCh7XG4gICAgLi4ucGFyYW1zLFxuICAgIG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yOiAoc2xvdCwgd2FsbGV0SWQpID0+XG4gICAgICBzbG90ID09PSAnZWQyNTUxOSdcbiAgICAgICAgPyBuZXcgU2FmZU93bmVyU2lnbmluZ05vdEltcGxlbWVudGVkRXJyb3IoXG4gICAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICAgIGBlZDI1NTE5IG11bHRpc2lnIG93bmVyIGRlcml2YXRpb24gKCR7cGFyYW1zLmNvaW5GYW1pbHl9KSBpcyBub3QgaW1wbGVtZW50ZWQ7IEJJUDMyIHdvdWxkIHByb2R1Y2UgdGhlIHdyb25nIGNoaWxkIGtleS5gXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcihcbiAgICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgICAgJ1RTUyBvd25lciBzaWduaW5nIGZyb20gdGhlIHJvb3Qga2V5c2hhcmUgaXMgbm90IGltcGxlbWVudGVkLiAnICtcbiAgICAgICAgICAgICAgJ1JldHVybmluZyB0aGUgcm9vdCBwcml2YXRlIGtleSB3b3VsZCBleHBvc2UgbWF0ZXJpYWwgdGhhdCBjYW4gZGVyaXZlIGV2ZXJ5IGNoaWxkIGluIHRoaXMgc2xvdC4nXG4gICAgICAgICAgKSxcbiAgfSk7XG4gIHJldHVybiBwcnY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVNhZmVDaGlsZFBydkZvclNoYXJpbmdQYXJhbXMgZXh0ZW5kcyBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zIHtcbiAgbXBjQWxnb3JpdGhtPzogJ2VjZHNhJyB8ICdlZGRzYSc7XG59XG5cbi8qKiBTbG90LW5hbWVkIG5vdC1pbXBsZW1lbnRlZCBkZXRhaWwgZm9yIHdhbGxldCBzaGFyaW5nLiAqL1xuZnVuY3Rpb24gc2FmZVNoYXJlU2xvdERldGFpbChzbG90OiBTYWZlS2V5TWF0ZXJpYWxTbG90LCBwYXJhbXM6IFJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nUGFyYW1zKTogc3RyaW5nIHtcbiAgaWYgKHNsb3QgPT09ICdlZDI1NTE5Jykge1xuICAgIHJldHVybiBgZWQyNTUxOSBtdWx0aXNpZyBzYWZlIHNoYXJpbmcgKCR7cGFyYW1zLmNvaW5GYW1pbHl9KSBpcyBub3QgaW1wbGVtZW50ZWQ7IEJJUDMyIHdvdWxkIGRlcml2ZSB0aGUgd3JvbmcgY2hpbGQuYDtcbiAgfVxuICByZXR1cm4gcGFyYW1zLm1wY0FsZ29yaXRobSA9PT0gJ2VkZHNhJ1xuICAgID8gJ2VkZHNhTXBjIHNhZmUgc2hhcmluZyBpcyBub3QgaW1wbGVtZW50ZWQgKG5lZWRzIHRoZSBFZERTQSBkZXJpdmUgY2VyZW1vbnkpLidcbiAgICA6ICdlY2RzYU1wYyBzYWZlIHNoYXJpbmcgaXMgbm90IGltcGxlbWVudGVkIChuZWVkcyB0aGUgREtMUyBkZXJpdmUgY2VyZW1vbnkpLic7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzaGFyaW5nIG1hdGVyaWFsIGZvciBhIHNhZmUgb3duZXIgKGNoaWxkIGtleSBoYXMgbm8gZW5jcnlwdGVkUHJ2KS5cbiAqXG4gKiBPbmNoYWluIHNlY3AyNTZrMTogZGVjcnlwdCByb290LCBoYXJkZW5lZC1kZXJpdmUgYXQgYGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGhgXG4gKiAoYG0vPG4+J2ApLCB2ZXJpZnkgdGhlIHJlZ2lzdGVyZWQgcHViLCBhbmQgcmV0dXJuIHRoZSBDSElMRCBge3BydiwgcHVifWAg4oCUIG5ldmVyIHRoZSByb290LlxuICogVFNTIGFuZCBlZDI1NTE5IG9uY2hhaW46IHRocm93IGBTYWZlU2hhcmVOb3RJbXBsZW1lbnRlZEVycm9yYCBuYW1pbmcgdGhlIHNsb3QgKyBibG9ja2VyLlxuICpcbiAqIENhbGwgb25seSB3aGVuIGBpc1NhZmVDaGlsZFB1YmxpY09ubHlLZXljaGFpbmAgaXMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nKFxuICBwYXJhbXM6IFJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nUGFyYW1zXG4pOiBQcm9taXNlPERlY3J5cHRlZEtleWNoYWluRGF0YT4ge1xuICByZXR1cm4gcmVzb2x2ZVNhZmVLZXlNYXRlcmlhbCh7XG4gICAgLi4ucGFyYW1zLFxuICAgIG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yOiAoc2xvdCwgd2FsbGV0SWQpID0+XG4gICAgICBuZXcgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcih3YWxsZXRJZCwgc2FmZVNoYXJlU2xvdERldGFpbChzbG90LCBwYXJhbXMpKSxcbiAgfSk7XG59XG4iXX0=
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUtleWNoYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9zYWZlS2V5Y2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcURBLHNFQUtDO0FBTUQsc0VBZUM7QUE2RkQsZ0VBZ0JDO0FBeUJELHNFQVFDO0FBek5ELDBDQUF3RztBQUN4Ryx3REFBK0c7QUFDL0csc0NBQW1EO0FBR25ELE1BQWEsOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUFZLEVBQVUsRUFBRSxNQUEwQjtRQUNoRCxLQUFLLENBQ0gsaUJBQWlCLEVBQUUsZ0JBQWdCLE1BQU0sSUFBSSxTQUFTLHNCQUFzQjtZQUMxRSxxREFBcUQsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0NBQWdDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBUkQsd0VBUUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBYSxpQ0FBa0MsU0FBUSxLQUFLO0lBQzFELFlBQVksUUFBZ0IsRUFBRSxXQUFtQixFQUFFLFVBQWtCO1FBQ25FLEtBQUssQ0FDSCxlQUFlLFFBQVEscUVBQXFFO1lBQzFGLFlBQVksV0FBVyxTQUFTLFVBQVUsR0FBRyxDQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFSRCw4RUFRQztBQUVELGtHQUFrRztBQUNsRyxNQUFhLG1DQUFvQyxTQUFRLEtBQUs7SUFDNUQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxxQ0FBcUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFMRCxrRkFLQztBQUVELG1HQUFtRztBQUNuRyxNQUFhLDRCQUE2QixTQUFRLEtBQUs7SUFDckQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyw4QkFBOEIsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFMRCxvRUFLQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRWxFOzs7R0FHRztBQUNILFNBQWdCLDZCQUE2QixDQUMzQyxZQUFnQyxFQUNoQyxRQUE4QjtJQUU5QixPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsNkJBQTZCLENBQ2pELFNBQXFCLEVBQ3JCLGFBQXVCO0lBRXZCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxPQUFPLElBQWdDLENBQUM7QUFDMUMsQ0FBQztBQTRCRDs7Ozs7Ozs7R0FRRztBQUNILEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxNQUFvQztJQUN4RSxNQUFNLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsRUFDVixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHVCQUF1QixHQUN4QixHQUFHLE1BQU0sQ0FBQztJQUVYLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sdUJBQXVCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sdUJBQXVCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLENBQUMsTUFBTSw2QkFBNkIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUM1RyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsb0NBQXlCLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSwrQkFBc0IsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxRQUFRLDJEQUEyRCxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLHlCQUF5QixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxRQUFRLHVEQUF1RCxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUEsK0NBQStCLEVBQzdDLE9BQU8sRUFDUCxJQUFBLHNEQUFzQyxFQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUNoRixDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksaUNBQWlDLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxRQUFRLHNEQUFzRCxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hELENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSSxLQUFLLFVBQVUsMEJBQTBCLENBQUMsTUFBd0M7SUFDdkYsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sc0JBQXNCLENBQUM7UUFDM0MsR0FBRyxNQUFNO1FBQ1QsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDMUMsSUFBSSxLQUFLLFNBQVM7WUFDaEIsQ0FBQyxDQUFDLElBQUksbUNBQW1DLENBQ3JDLFFBQVEsRUFDUixzQ0FBc0MsTUFBTSxDQUFDLFVBQVUsZ0VBQWdFLENBQ3hIO1lBQ0gsQ0FBQyxDQUFDLElBQUksbUNBQW1DLENBQ3JDLFFBQVEsRUFDUiwrREFBK0Q7Z0JBQzdELGdHQUFnRyxDQUNuRztLQUNSLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQU1ELDREQUE0RDtBQUM1RCxTQUFTLG1CQUFtQixDQUFDLElBQXlCLEVBQUUsTUFBMkM7SUFDakcsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkIsT0FBTyxrQ0FBa0MsTUFBTSxDQUFDLFVBQVUsMkRBQTJELENBQUM7SUFDeEgsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLFlBQVksS0FBSyxPQUFPO1FBQ3BDLENBQUMsQ0FBQyw2RUFBNkU7UUFDL0UsQ0FBQyxDQUFDLDRFQUE0RSxDQUFDO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsTUFBMkM7SUFFM0MsT0FBTyxzQkFBc0IsQ0FBQztRQUM1QixHQUFHLE1BQU07UUFDVCx1QkFBdUIsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUMxQyxJQUFJLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDaEYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5LCBJS2V5Y2hhaW5zLCBLZXljaGFpbiwgS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2IH0gZnJvbSAnLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydiwgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1zYWZlcyc7XG5pbXBvcnQgeyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgRGVjcnlwdGVkS2V5Y2hhaW5EYXRhIH0gZnJvbSAnLi9pV2FsbGV0JztcblxuZXhwb3J0IGNsYXNzIEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSb290IGtleWNoYWluICR7aWR9IGhhcyBzb3VyY2UgJyR7c291cmNlID8/ICd1bmtub3duJ30nOyBleHBlY3RlZCAndXNlcicuIGAgK1xuICAgICAgICBgVXNpbmcgYSBiYWNrdXAgb3IgQml0R28gcm9vdCB3b3VsZCBmYWlsIGF0IHNpZ25pbmcuYFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRocm93biB3aGVuIGhhcmRlbmVkIGRlcml2YXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgY2hpbGQgcHVibGljIGtleS4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHdhbGxldElkOiBzdHJpbmcsIGV4cGVjdGVkUHViOiBzdHJpbmcsIGRlcml2ZWRQdWI6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYFNhZmUgd2FsbGV0ICR7d2FsbGV0SWR9OiBkZXJpdmVkIGNoaWxkIHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgdXNlciBrZXkuIGAgK1xuICAgICAgICBgRXhwZWN0ZWQgJHtleHBlY3RlZFB1Yn0sIGdvdCAke2Rlcml2ZWRQdWJ9LmBcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3InO1xuICB9XG59XG5cbi8qKiBUaHJvd24gd2hlbiBvd25lciBzaWduaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBzYWZlIHNsb3QgKFRTUywgZWQyNTUxOSBtdWx0aXNpZywg4oCmKS4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iod2FsbGV0SWQ6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06ICR7ZGV0YWlsfWApO1xuICAgIHRoaXMubmFtZSA9ICdTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRocm93biB3aGVuIHdhbGxldCBzaGFyaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBzYWZlIHNsb3QgKFRTUywgZWQyNTUxOSBtdWx0aXNpZywg4oCmKS4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlU2hhcmVOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih3YWxsZXRJZDogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgIHN1cGVyKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogJHtkZXRhaWx9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1NhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBlZDI1NTE5IG9uY2hhaW4gbXVsdGlzaWcgKHNsb3Qg4pGjKS4gTmVlZHMgU0xJUC0wMDEwLCBub3Qgc2VjcDI1NmsxIEJJUDMyLiAqL1xuY29uc3QgRUQyNTUxOV9PTkNIQUlOX0ZBTUlMSUVTID0gbmV3IFNldChbJ2FsZ28nLCAneGxtJywgJ2hiYXInXSk7XG5cbi8qKlxuICogVHJ1ZSB3aGVuIHRoaXMgaXMgdGhlIHNhZmUgbWludGVyJ3MgdXNlciBrZXk6IHdhbGxldCBpcyBpbiBhIHNhZmUsIHRoZSBrZXlcbiAqIGhhcyBhIHBhcmVudCByb290LCBhbmQgdGhlcmUgaXMgbm8gY2hpbGQtbGV2ZWwgZW5jcnlwdGVkUHJ2IChzaGFyZWVzIGhhdmUgb25lKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZUNoaWxkUHVibGljT25seUtleWNoYWluKFxuICB3YWxsZXRTYWZlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAga2V5Y2hhaW46IEtleWNoYWluIHwgdW5kZWZpbmVkXG4pOiBrZXljaGFpbiBpcyBLZXljaGFpbiAmIHsgcGFyZW50OiBzdHJpbmcgfSB7XG4gIHJldHVybiAhISh3YWxsZXRTYWZlSWQgJiYga2V5Y2hhaW4/LnBhcmVudCAmJiAha2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KTtcbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgcm9vdCB1c2VyIGtleWNoYWluIGZvciBhIHNhZmUgY2hpbGQga2V5LlxuICogUmVxdWlyZXMgYHNvdXJjZSA9PT0gJ3VzZXInYCBzbyBhIG1pc2NvbmZpZ3VyZWQgcGFyZW50IGZhaWxzIGVhcmx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQoXG4gIGtleWNoYWluczogSUtleWNoYWlucyxcbiAgY2hpbGRLZXljaGFpbjogS2V5Y2hhaW5cbik6IFByb21pc2U8S2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2PiB7XG4gIGlmICghY2hpbGRLZXljaGFpbi5wYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkS2V5Y2hhaW4ucGFyZW50IGlzIHJlcXVpcmVkIHRvIGZldGNoIHRoZSByb290IGtleWNoYWluJyk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGtleWNoYWlucy5nZXQoeyBpZDogY2hpbGRLZXljaGFpbi5wYXJlbnQgfSk7XG4gIGlmIChyb290LnNvdXJjZSAhPT0gJ3VzZXInKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcihyb290LmlkLCByb290LnNvdXJjZSk7XG4gIH1cbiAgaWYgKCFyb290LmVuY3J5cHRlZFBydikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcm9vdCBrZXljaGFpbiAke3Jvb3QuaWR9IGRvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2YCk7XG4gIH1cbiAgcmV0dXJuIHJvb3QgYXMgS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2O1xufVxuXG4vKipcbiAqIFNoYXJlZCBwYXJhbXMgZm9yIHJlc29sdmluZyBzYWZlLW93bmVyIGtleSBtYXRlcmlhbCAob3duZXIgc2lnbmluZyBhbmQgd2FsbGV0IHNoYXJpbmcpLlxuICogQm90aCByZXNvbHZlcnMgZXh0ZW5kIHRoaXMgc28gdGhlIHByZWNvbmRpdGlvbi9kZXJpdmF0aW9uIHBhdGggY2Fubm90IGRpdmVyZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FmZUtleU1hdGVyaWFsQmFzZVBhcmFtcyB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIGtleWNoYWluczogSUtleWNoYWlucztcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgLyoqIE9uY2hhaW4gc2VjcDI1NmsxOiBoYXJkZW5lZC1kZXJpdmUgYW5kIHZlcmlmeSBwdWIuIE90aGVyIHNsb3RzIHRocm93LiAqL1xuICBtdWx0aXNpZ1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29pbkZhbWlseTogc3RyaW5nO1xuICBjaGlsZEtleWNoYWluOiBLZXljaGFpbjtcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAvKiogV2hlbiBhbHJlYWR5IGZldGNoZWQgKHBhc3NwaHJhc2UgcHJlZmxpZ2h0KSwgc2tpcCBhIHNlY29uZCBHRVQuICovXG4gIHJvb3RLZXljaGFpbj86IEtleWNoYWluV2l0aEVuY3J5cHRlZFBydjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZVNhZmVPd25lclNpZ25pbmdQcnZQYXJhbXMgPSBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zO1xuXG50eXBlIFNhZmVLZXlNYXRlcmlhbFNsb3QgPSAndHNzJyB8ICdlZDI1NTE5JztcblxudHlwZSBSZXNvbHZlU2FmZUtleU1hdGVyaWFsUGFyYW1zID0gU2FmZUtleU1hdGVyaWFsQmFzZVBhcmFtcyAmIHtcbiAgLyoqIENvbnN0cnVjdHMgdGhlIG5vdC1pbXBsZW1lbnRlZCBlcnJvciBmb3IgdGhlIGN1cnJlbnQgcmVzb2x2ZXIgKHNpZ25pbmcgdnMgc2hhcmluZykuICovXG4gIG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yOiAoc2xvdDogU2FmZUtleU1hdGVyaWFsU2xvdCwgd2FsbGV0SWQ6IHN0cmluZykgPT4gRXJyb3I7XG59O1xuXG4vKipcbiAqIFNoYXJlZCBjb3JlIHRoYXQgcmVzb2x2ZXMgc2FmZSBrZXkgbWF0ZXJpYWwgZm9yIGEgcHViLW9ubHkgc2FmZSBjaGlsZC4gUmV0dXJucyB0aGUgQ0hJTERcbiAqIGB7cHJ2LCBwdWJ9YCBvbmx5IOKAlCBuZXZlciB0aGUgcm9vdCDigJQgc28gdGhlIHJvb3QgY2FuIG5ldmVyIGxlYWsgaW50byBhIHNoYXJlIGRvY3VtZW50LlxuICpcbiAqIE9uY2hhaW4gc2VjcDI1NmsxOiBkZWNyeXB0IHJvb3QsIGhhcmRlbmVkLWRlcml2ZSBhdCBgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aGBcbiAqIChgbS88bj4nYCksIGFuZCB2ZXJpZnkgdGhlIHJlZ2lzdGVyZWQgcHViLiBUU1MgYW5kIGVkMjU1MTkgb25jaGFpbiB0aHJvdyB2aWFcbiAqIGBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcmAg4oCUIHRoZSBjYWxsZXIgY29uc3RydWN0cyBpdHMgb3duIGVycm9yIGNsYXNzICsgbWVzc2FnZSwgc28gdGhlXG4gKiBndWFyZCBzZXQgc3RheXMgc2hhcmVkIHdoaWxlIHNpZ25pbmcvc2hhcmluZyByZXBvcnQgdGhlaXIgb3duIGVycm9ycy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNhZmVLZXlNYXRlcmlhbChwYXJhbXM6IFJlc29sdmVTYWZlS2V5TWF0ZXJpYWxQYXJhbXMpOiBQcm9taXNlPHsgcHJ2OiBzdHJpbmc7IHB1Yjogc3RyaW5nIH0+IHtcbiAgY29uc3Qge1xuICAgIGJpdGdvLFxuICAgIGtleWNoYWlucyxcbiAgICB3YWxsZXRJZCxcbiAgICBtdWx0aXNpZ1R5cGUsXG4gICAgY29pbkZhbWlseSxcbiAgICBjaGlsZEtleWNoYWluLFxuICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgbWFrZU5vdEltcGxlbWVudGVkRXJyb3IsXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKG11bHRpc2lnVHlwZSAhPT0gJ29uY2hhaW4nKSB7XG4gICAgdGhyb3cgbWFrZU5vdEltcGxlbWVudGVkRXJyb3IoJ3RzcycsIHdhbGxldElkKTtcbiAgfVxuICBpZiAoRUQyNTUxOV9PTkNIQUlOX0ZBTUlMSUVTLmhhcyhjb2luRmFtaWx5KSkge1xuICAgIHRocm93IG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yKCdlZDI1NTE5Jywgd2FsbGV0SWQpO1xuICB9XG5cbiAgY29uc3Qgcm9vdEtleWNoYWluID0gcGFyYW1zLnJvb3RLZXljaGFpbiA/PyAoYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQoa2V5Y2hhaW5zLCBjaGlsZEtleWNoYWluKSk7XG4gIGNvbnN0IHJvb3RQcnYgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5KGJpdGdvLCByb290S2V5Y2hhaW4sIHdhbGxldFBhc3NwaHJhc2UpO1xuICBpZiAoIXJvb3RQcnYpIHtcbiAgICB0aHJvdyBuZXcgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcigpO1xuICB9XG5cbiAgaWYgKCFjaGlsZEtleWNoYWluLnB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGNoaWxkIGtleWNoYWluIGlzIG1pc3NpbmcgcHViIGZvciBwcmUtc2lnbiB2ZXJpZmljYXRpb25gKTtcbiAgfVxuICBpZiAoY2hpbGRLZXljaGFpbi5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmUgd2FsbGV0ICR7d2FsbGV0SWR9OiBjaGlsZCBrZXljaGFpbiBpcyBtaXNzaW5nIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGhgKTtcbiAgfVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2KFxuICAgIHJvb3RQcnYsXG4gICAgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoY2hpbGRLZXljaGFpbi5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoKVxuICApO1xuICBpZiAoZGVyaXZlZC5wdWIgIT09IGNoaWxkS2V5Y2hhaW4ucHViKSB7XG4gICAgdGhyb3cgbmV3IFNhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvcih3YWxsZXRJZCwgY2hpbGRLZXljaGFpbi5wdWIsIGRlcml2ZWQucHViKTtcbiAgfVxuXG4gIGlmIChkZXJpdmVkLnB1YiA9PT0gcm9vdEtleWNoYWluLnB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGRlcml2ZWQgY2hpbGQgcHViIHVuZXhwZWN0ZWRseSBlcXVhbHMgdGhlIHJvb3QgcHViYCk7XG4gIH1cbiAgcmV0dXJuIHsgcHJ2OiBkZXJpdmVkLnBydiwgcHViOiBkZXJpdmVkLnB1YiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgc2lnbmluZyBtYXRlcmlhbCBmb3IgYSBzYWZlIG93bmVyIChjaGlsZCBrZXkgaGFzIG5vIGVuY3J5cHRlZFBydikuXG4gKlxuICogT25jaGFpbiBzZWNwMjU2azE6IGRlY3J5cHQgcm9vdCwgaGFyZGVuZWQtZGVyaXZlIGF0IGBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoYFxuICogKGBtLzxuPidgKSwgYW5kIHZlcmlmeSB0aGUgcmVnaXN0ZXJlZCBwdWIuXG4gKiBUU1MgYW5kIGVkMjU1MTkgb25jaGFpbjogdGhyb3cg4oCUIGRvIG5vdCByZXR1cm4gcm9vdCBtYXRlcmlhbCBvciBCSVAzMi1kZXJpdmUgdGhlIHdyb25nIGN1cnZlLlxuICpcbiAqIERvIG5vdCB1c2UgZm9yIHdhbGxldCBzaGFyaW5nIOKAlCB0aGF0IG11c3Qgbm90IHJlY2VpdmUgcm9vdCBrZXkgbWF0ZXJpYWwuXG4gKiBDYWxsIG9ubHkgd2hlbiBgaXNTYWZlQ2hpbGRQdWJsaWNPbmx5S2V5Y2hhaW5gIGlzIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZU93bmVyU2lnbmluZ1BydihwYXJhbXM6IFJlc29sdmVTYWZlT3duZXJTaWduaW5nUHJ2UGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwcnYgfSA9IGF3YWl0IHJlc29sdmVTYWZlS2V5TWF0ZXJpYWwoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcjogKHNsb3QsIHdhbGxldElkKSA9PlxuICAgICAgc2xvdCA9PT0gJ2VkMjU1MTknXG4gICAgICAgID8gbmV3IFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yKFxuICAgICAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgICAgICBgZWQyNTUxOSBtdWx0aXNpZyBvd25lciBkZXJpdmF0aW9uICgke3BhcmFtcy5jb2luRmFtaWx5fSkgaXMgbm90IGltcGxlbWVudGVkOyBCSVAzMiB3b3VsZCBwcm9kdWNlIHRoZSB3cm9uZyBjaGlsZCBrZXkuYFxuICAgICAgICAgIClcbiAgICAgICAgOiBuZXcgU2FmZU93bmVyU2lnbmluZ05vdEltcGxlbWVudGVkRXJyb3IoXG4gICAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICAgICdUU1Mgb3duZXIgc2lnbmluZyBmcm9tIHRoZSByb290IGtleXNoYXJlIGlzIG5vdCBpbXBsZW1lbnRlZC4gJyArXG4gICAgICAgICAgICAgICdSZXR1cm5pbmcgdGhlIHJvb3QgcHJpdmF0ZSBrZXkgd291bGQgZXhwb3NlIG1hdGVyaWFsIHRoYXQgY2FuIGRlcml2ZSBldmVyeSBjaGlsZCBpbiB0aGlzIHNsb3QuJ1xuICAgICAgICAgICksXG4gIH0pO1xuICByZXR1cm4gcHJ2O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nUGFyYW1zIGV4dGVuZHMgU2FmZUtleU1hdGVyaWFsQmFzZVBhcmFtcyB7XG4gIG1wY0FsZ29yaXRobT86ICdlY2RzYScgfCAnZWRkc2EnO1xufVxuXG4vKiogU2xvdC1uYW1lZCBub3QtaW1wbGVtZW50ZWQgZGV0YWlsIGZvciB3YWxsZXQgc2hhcmluZy4gKi9cbmZ1bmN0aW9uIHNhZmVTaGFyZVNsb3REZXRhaWwoc2xvdDogU2FmZUtleU1hdGVyaWFsU2xvdCwgcGFyYW1zOiBSZXNvbHZlU2FmZUNoaWxkUHJ2Rm9yU2hhcmluZ1BhcmFtcyk6IHN0cmluZyB7XG4gIGlmIChzbG90ID09PSAnZWQyNTUxOScpIHtcbiAgICByZXR1cm4gYGVkMjU1MTkgbXVsdGlzaWcgc2FmZSBzaGFyaW5nICgke3BhcmFtcy5jb2luRmFtaWx5fSkgaXMgbm90IGltcGxlbWVudGVkOyBCSVAzMiB3b3VsZCBkZXJpdmUgdGhlIHdyb25nIGNoaWxkLmA7XG4gIH1cbiAgcmV0dXJuIHBhcmFtcy5tcGNBbGdvcml0aG0gPT09ICdlZGRzYSdcbiAgICA/ICdlZGRzYU1wYyBzYWZlIHNoYXJpbmcgaXMgbm90IGltcGxlbWVudGVkIChuZWVkcyB0aGUgRWREU0EgZGVyaXZlIGNlcmVtb255KS4nXG4gICAgOiAnZWNkc2FNcGMgc2FmZSBzaGFyaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCAobmVlZHMgdGhlIERLTFMgZGVyaXZlIGNlcmVtb255KS4nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgc2hhcmluZyBtYXRlcmlhbCBmb3IgYSBzYWZlIG93bmVyIChjaGlsZCBrZXkgaGFzIG5vIGVuY3J5cHRlZFBydikuXG4gKlxuICogT25jaGFpbiBzZWNwMjU2azE6IGRlY3J5cHQgcm9vdCwgaGFyZGVuZWQtZGVyaXZlIGF0IGBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoYFxuICogKGBtLzxuPidgKSwgdmVyaWZ5IHRoZSByZWdpc3RlcmVkIHB1YiwgYW5kIHJldHVybiB0aGUgQ0hJTEQgYHtwcnYsIHB1Yn1gIOKAlCBuZXZlciB0aGUgcm9vdC5cbiAqIFRTUyBhbmQgZWQyNTUxOSBvbmNoYWluOiB0aHJvdyBgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcmAgbmFtaW5nIHRoZSBzbG90ICsgYmxvY2tlci5cbiAqXG4gKiBDYWxsIG9ubHkgd2hlbiBgaXNTYWZlQ2hpbGRQdWJsaWNPbmx5S2V5Y2hhaW5gIGlzIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZUNoaWxkUHJ2Rm9yU2hhcmluZyhcbiAgcGFyYW1zOiBSZXNvbHZlU2FmZUNoaWxkUHJ2Rm9yU2hhcmluZ1BhcmFtc1xuKTogUHJvbWlzZTxEZWNyeXB0ZWRLZXljaGFpbkRhdGE+IHtcbiAgcmV0dXJuIHJlc29sdmVTYWZlS2V5TWF0ZXJpYWwoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcjogKHNsb3QsIHdhbGxldElkKSA9PlxuICAgICAgbmV3IFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3Iod2FsbGV0SWQsIHNhZmVTaGFyZVNsb3REZXRhaWwoc2xvdCwgcGFyYW1zKSksXG4gIH0pO1xufVxuIl19