@cubist-labs/cubesigner-sdk-key-import 0.4.263 → 0.4.266
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/import.d.ts +1 -1
- package/dist/import.d.ts.map +1 -1
- package/dist/import.js +10 -14
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -8
- package/dist/mnemonic.js +8 -35
- package/dist/policy_secret.js +6 -9
- package/dist/raw.js +4 -7
- package/dist/util.js +4 -9
- package/dist/wrapped_import_key.d.ts +1 -1
- package/dist/wrapped_import_key.d.ts.map +1 -1
- package/dist/wrapped_import_key.js +42 -47
- package/package.json +11 -4
- package/src/import.ts +4 -4
- package/src/index.ts +3 -3
- package/src/policy_secret.ts +1 -1
- package/src/wrapped_import_key.ts +1 -1
- package/tsconfig.json +12 -0
package/dist/import.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Key, KeyType, Org, ImportDeriveKeyProperties } from "@cubist-labs/cubesigner-sdk";
|
|
2
|
-
import type { MnemonicToImport } from "./mnemonic";
|
|
2
|
+
import type { MnemonicToImport } from "./mnemonic.ts";
|
|
3
3
|
/**
|
|
4
4
|
* An import encryption key and the corresponding attestation document
|
|
5
5
|
*/
|
package/dist/import.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,GAAG,EACH,OAAO,EACP,GAAG,EACH,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,GAAG,EACH,OAAO,EACP,GAAG,EACH,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAQtD;;GAEG;AACH,qBAAa,WAAW;;IAItB;;;;OAIG;gBACS,EAAE,EAAE,GAAG;IAmBnB;;;;;;;OAOG;IACU,eAAe,CAC1B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,gBAAgB,EAAE,EACxB,KAAK,CAAC,EAAE,yBAAyB,GAChC,OAAO,CAAC,GAAG,EAAE,CAAC;IAQjB;;;;;;;OAOG;IACU,mBAAmB,CAC9B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,UAAU,EAAE,EACrB,KAAK,CAAC,EAAE,yBAAyB,GAChC,OAAO,CAAC,GAAG,EAAE,CAAC;CAgElB"}
|
package/dist/import.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
2
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
3
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
@@ -11,18 +10,16 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
11
|
};
|
|
13
12
|
var _KeyImporter_instances, _KeyImporter_wrappedImportKey, _KeyImporter_cs, _KeyImporter_getWrappedImportKey, _KeyImporter_importPackages;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const raw_1 = require("./raw");
|
|
19
|
-
const wrapped_import_key_1 = require("./wrapped_import_key");
|
|
13
|
+
import { loadSubtleCrypto } from "@cubist-labs/cubesigner-sdk";
|
|
14
|
+
import { newMnemonicKeyPackage } from "./mnemonic.js";
|
|
15
|
+
import { newRawKeyPackage } from "./raw.js";
|
|
16
|
+
import { WrappedImportKey } from "./wrapped_import_key.js";
|
|
20
17
|
// Maximum number of keys to import in a single API call
|
|
21
18
|
const MAX_IMPORTS_PER_API_CALL = 32n;
|
|
22
19
|
/**
|
|
23
20
|
* An import encryption key and the corresponding attestation document
|
|
24
21
|
*/
|
|
25
|
-
class KeyImporter {
|
|
22
|
+
export class KeyImporter {
|
|
26
23
|
/**
|
|
27
24
|
* Construct from a CubeSigner `Org` instance
|
|
28
25
|
*
|
|
@@ -43,7 +40,7 @@ class KeyImporter {
|
|
|
43
40
|
* @returns `Key` objects for each imported key.
|
|
44
41
|
*/
|
|
45
42
|
async importMnemonics(keyType, mnes, props) {
|
|
46
|
-
return await __classPrivateFieldGet(this, _KeyImporter_instances, "m", _KeyImporter_importPackages).call(this, keyType, mnes.map((mne) =>
|
|
43
|
+
return await __classPrivateFieldGet(this, _KeyImporter_instances, "m", _KeyImporter_importPackages).call(this, keyType, mnes.map((mne) => newMnemonicKeyPackage(mne)), props);
|
|
47
44
|
}
|
|
48
45
|
/**
|
|
49
46
|
* Encrypts a set of raw keys and imports them.
|
|
@@ -54,10 +51,9 @@ class KeyImporter {
|
|
|
54
51
|
* @returns `Key` objects for each imported key.
|
|
55
52
|
*/
|
|
56
53
|
async importRawSecretKeys(keyType, secrets, props) {
|
|
57
|
-
return await __classPrivateFieldGet(this, _KeyImporter_instances, "m", _KeyImporter_importPackages).call(this, keyType, secrets.map((sec) =>
|
|
54
|
+
return await __classPrivateFieldGet(this, _KeyImporter_instances, "m", _KeyImporter_importPackages).call(this, keyType, secrets.map((sec) => newRawKeyPackage(sec)), props);
|
|
58
55
|
}
|
|
59
56
|
}
|
|
60
|
-
exports.KeyImporter = KeyImporter;
|
|
61
57
|
_KeyImporter_wrappedImportKey = new WeakMap(), _KeyImporter_cs = new WeakMap(), _KeyImporter_instances = new WeakSet(), _KeyImporter_getWrappedImportKey =
|
|
62
58
|
/**
|
|
63
59
|
* Check that the wrapped import key is unexpired and verified. Otherwise,
|
|
@@ -68,8 +64,8 @@ _KeyImporter_wrappedImportKey = new WeakMap(), _KeyImporter_cs = new WeakMap(),
|
|
|
68
64
|
async function _KeyImporter_getWrappedImportKey() {
|
|
69
65
|
if (!__classPrivateFieldGet(this, _KeyImporter_wrappedImportKey, "f") || __classPrivateFieldGet(this, _KeyImporter_wrappedImportKey, "f").needsRefresh()) {
|
|
70
66
|
const resp = await __classPrivateFieldGet(this, _KeyImporter_cs, "f").createKeyImportKey();
|
|
71
|
-
const subtle = await
|
|
72
|
-
__classPrivateFieldSet(this, _KeyImporter_wrappedImportKey, await
|
|
67
|
+
const subtle = await loadSubtleCrypto();
|
|
68
|
+
__classPrivateFieldSet(this, _KeyImporter_wrappedImportKey, await WrappedImportKey.createAndVerify(resp, subtle), "f");
|
|
73
69
|
}
|
|
74
70
|
return __classPrivateFieldGet(this, _KeyImporter_wrappedImportKey, "f");
|
|
75
71
|
}, _KeyImporter_importPackages =
|
|
@@ -118,4 +114,4 @@ async function _KeyImporter_importPackages(keyType, packages, props) {
|
|
|
118
114
|
}
|
|
119
115
|
return keys;
|
|
120
116
|
};
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUc5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTNELHdEQUF3RDtBQUN4RCxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUVyQzs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBSXRCOzs7O09BSUc7SUFDSCxZQUFZLEVBQU87O1FBUm5CLHdDQUE2QyxJQUFJLEVBQUM7UUFDekMsa0NBQVM7UUFRaEIsdUJBQUEsSUFBSSxtQkFBTyxFQUFFLE1BQUEsQ0FBQztJQUNoQixDQUFDO0lBaUJEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUMxQixPQUFnQixFQUNoQixJQUF3QixFQUN4QixLQUFpQztRQUVqQyxPQUFPLE1BQU0sdUJBQUEsSUFBSSwyREFBZ0IsTUFBcEIsSUFBSSxFQUNmLE9BQU8sRUFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM3QyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUM5QixPQUFnQixFQUNoQixPQUFxQixFQUNyQixLQUFpQztRQUVqQyxPQUFPLE1BQU0sdUJBQUEsSUFBSSwyREFBZ0IsTUFBcEIsSUFBSSxFQUNmLE9BQU8sRUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUMzQyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7Q0EwREY7O0FBL0dDOzs7OztHQUtHO0FBQ0gsS0FBSztJQUNILElBQUksQ0FBQyx1QkFBQSxJQUFJLHFDQUFrQixJQUFJLHVCQUFBLElBQUkscUNBQWtCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLHVCQUFBLElBQUksdUJBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztRQUN4Qyx1QkFBQSxJQUFJLGlDQUFxQixNQUFNLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQUEsQ0FBQztJQUNoRixDQUFDO0lBQ0QsT0FBTyx1QkFBQSxJQUFJLHFDQUFrQixDQUFDO0FBQ2hDLENBQUM7QUEwQ0Q7Ozs7Ozs7R0FPRztBQUNILEtBQUssc0NBQ0gsT0FBZ0IsRUFDaEIsUUFBc0IsRUFDdEIsS0FBaUM7SUFFakMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUNwQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLEdBQUcsd0JBQXdCLENBQ3JGLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pDLG9FQUFvRTtRQUNwRSxtRUFBbUU7UUFDbkUsd0JBQXdCO1FBQ3hCLEVBQUU7UUFDRix5RUFBeUU7UUFDekUsRUFBRTtRQUNGLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsTUFBTSxHQUFHLEdBQUcsTUFBTSx1QkFBQSxJQUFJLGdFQUFxQixNQUF6QixJQUFJLENBQXVCLENBQUM7UUFFOUMsdUNBQXVDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQStCLEVBQUUsQ0FBQztRQUNwRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsd0ZBQXdGO1lBQ3hGLG9EQUFvRDtZQUNwRCxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBcUI7WUFDNUIsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFO1lBQ3BCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFlBQVk7WUFDWixHQUFHLEtBQUs7WUFDUixNQUFNO1NBQ1AsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sdUJBQUEsSUFBSSx1QkFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgSW1wb3J0S2V5UmVxdWVzdCxcbiAgSW1wb3J0S2V5UmVxdWVzdE1hdGVyaWFsLFxuICBLZXksXG4gIEtleVR5cGUsXG4gIE9yZyxcbiAgSW1wb3J0RGVyaXZlS2V5UHJvcGVydGllcyxcbn0gZnJvbSBcIkBjdWJpc3QtZGV2L2N1YmVzaWduZXItc2RrXCI7XG5pbXBvcnQgeyBsb2FkU3VidGxlQ3J5cHRvIH0gZnJvbSBcIkBjdWJpc3QtZGV2L2N1YmVzaWduZXItc2RrXCI7XG5cbmltcG9ydCB0eXBlIHsgTW5lbW9uaWNUb0ltcG9ydCB9IGZyb20gXCIuL21uZW1vbmljLnRzXCI7XG5pbXBvcnQgeyBuZXdNbmVtb25pY0tleVBhY2thZ2UgfSBmcm9tIFwiLi9tbmVtb25pYy50c1wiO1xuaW1wb3J0IHsgbmV3UmF3S2V5UGFja2FnZSB9IGZyb20gXCIuL3Jhdy50c1wiO1xuaW1wb3J0IHsgV3JhcHBlZEltcG9ydEtleSB9IGZyb20gXCIuL3dyYXBwZWRfaW1wb3J0X2tleS50c1wiO1xuXG4vLyBNYXhpbXVtIG51bWJlciBvZiBrZXlzIHRvIGltcG9ydCBpbiBhIHNpbmdsZSBBUEkgY2FsbFxuY29uc3QgTUFYX0lNUE9SVFNfUEVSX0FQSV9DQUxMID0gMzJuO1xuXG4vKipcbiAqIEFuIGltcG9ydCBlbmNyeXB0aW9uIGtleSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXR0ZXN0YXRpb24gZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEtleUltcG9ydGVyIHtcbiAgI3dyYXBwZWRJbXBvcnRLZXk6IG51bGwgfCBXcmFwcGVkSW1wb3J0S2V5ID0gbnVsbDtcbiAgcmVhZG9ubHkgI2NzOiBPcmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBmcm9tIGEgQ3ViZVNpZ25lciBgT3JnYCBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0gY3MgQSBDdWJlU2lnbmVyIGBPcmdgIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjczogT3JnKSB7XG4gICAgdGhpcy4jY3MgPSBjcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IHRoZSB3cmFwcGVkIGltcG9ydCBrZXkgaXMgdW5leHBpcmVkIGFuZCB2ZXJpZmllZC4gT3RoZXJ3aXNlLFxuICAgKiByZXF1ZXN0IGEgbmV3IG9uZSBhbmQgdmVyaWZ5IGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB2ZXJpZmllZCB3cmFwcGVkIGltcG9ydCBrZXkuXG4gICAqL1xuICBhc3luYyAjZ2V0V3JhcHBlZEltcG9ydEtleSgpOiBQcm9taXNlPFdyYXBwZWRJbXBvcnRLZXk+IHtcbiAgICBpZiAoIXRoaXMuI3dyYXBwZWRJbXBvcnRLZXkgfHwgdGhpcy4jd3JhcHBlZEltcG9ydEtleS5uZWVkc1JlZnJlc2goKSkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuI2NzLmNyZWF0ZUtleUltcG9ydEtleSgpO1xuICAgICAgY29uc3Qgc3VidGxlID0gYXdhaXQgbG9hZFN1YnRsZUNyeXB0bygpO1xuICAgICAgdGhpcy4jd3JhcHBlZEltcG9ydEtleSA9IGF3YWl0IFdyYXBwZWRJbXBvcnRLZXkuY3JlYXRlQW5kVmVyaWZ5KHJlc3AsIHN1YnRsZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiN3cmFwcGVkSW1wb3J0S2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHRzIGEgc2V0IG9mIG1uZW1vbmljcyBhbmQgaW1wb3J0cyB0aGVtLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5VHlwZSBUaGUgdHlwZSBvZiBrZXkgdG8gaW1wb3J0XG4gICAqIEBwYXJhbSBtbmVzIFRoZSBtbmVtb25pY3MgdG8gaW1wb3J0LCB3aXRoIG9wdGlvbmFsIGRlcml2YXRpb24gcGF0aHMgYW5kIHBhc3N3b3Jkc1xuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBvcHRpb25zIGZvciBpbXBvcnRcbiAgICogQHJldHVybnMgYEtleWAgb2JqZWN0cyBmb3IgZWFjaCBpbXBvcnRlZCBrZXkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0TW5lbW9uaWNzKFxuICAgIGtleVR5cGU6IEtleVR5cGUsXG4gICAgbW5lczogTW5lbW9uaWNUb0ltcG9ydFtdLFxuICAgIHByb3BzPzogSW1wb3J0RGVyaXZlS2V5UHJvcGVydGllcyxcbiAgKTogUHJvbWlzZTxLZXlbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLiNpbXBvcnRQYWNrYWdlcyhcbiAgICAgIGtleVR5cGUsXG4gICAgICBtbmVzLm1hcCgobW5lKSA9PiBuZXdNbmVtb25pY0tleVBhY2thZ2UobW5lKSksXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHRzIGEgc2V0IG9mIHJhdyBrZXlzIGFuZCBpbXBvcnRzIHRoZW0uXG4gICAqXG4gICAqIEBwYXJhbSBrZXlUeXBlIFRoZSB0eXBlIG9mIGtleSB0byBpbXBvcnRcbiAgICogQHBhcmFtIHNlY3JldHMgVGhlIHNlY3JldCBrZXlzIHRvIGltcG9ydC5cbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgaW1wb3J0XG4gICAqIEByZXR1cm5zIGBLZXlgIG9iamVjdHMgZm9yIGVhY2ggaW1wb3J0ZWQga2V5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGltcG9ydFJhd1NlY3JldEtleXMoXG4gICAga2V5VHlwZTogS2V5VHlwZSxcbiAgICBzZWNyZXRzOiBVaW50OEFycmF5W10sXG4gICAgcHJvcHM/OiBJbXBvcnREZXJpdmVLZXlQcm9wZXJ0aWVzLFxuICApOiBQcm9taXNlPEtleVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuI2ltcG9ydFBhY2thZ2VzKFxuICAgICAga2V5VHlwZSxcbiAgICAgIHNlY3JldHMubWFwKChzZWMpID0+IG5ld1Jhd0tleVBhY2thZ2Uoc2VjKSksXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHRzIGEgc2V0IG9mIHByZXBhcmVkIGtleSBwYWNrYWdlcywgYW5kIGltcG9ydHMgdGhlbS5cbiAgICpcbiAgICogQHBhcmFtIGtleVR5cGUgVGhlIHR5cGUgb2Yga2V5IHRvIGltcG9ydFxuICAgKiBAcGFyYW0gcGFja2FnZXMgVGhlIGtleSBwYWNrYWdlcyB0byBpbXBvcnQuXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGltcG9ydFxuICAgKiBAcmV0dXJucyBgS2V5YCBvYmplY3RzIGZvciBlYWNoIGltcG9ydGVkIGtleS5cbiAgICovXG4gIGFzeW5jICNpbXBvcnRQYWNrYWdlcyhcbiAgICBrZXlUeXBlOiBLZXlUeXBlLFxuICAgIHBhY2thZ2VzOiBVaW50OEFycmF5W10sXG4gICAgcHJvcHM/OiBJbXBvcnREZXJpdmVLZXlQcm9wZXJ0aWVzLFxuICApOiBQcm9taXNlPEtleVtdPiB7XG4gICAgY29uc3QgbkNodW5rcyA9IE51bWJlcihcbiAgICAgIChCaWdJbnQocGFja2FnZXMubGVuZ3RoKSArIE1BWF9JTVBPUlRTX1BFUl9BUElfQ0FMTCAtIDFuKSAvIE1BWF9JTVBPUlRTX1BFUl9BUElfQ0FMTCxcbiAgICApO1xuICAgIGNvbnN0IGtleXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkNodW5rczsgKytpKSB7XG4gICAgICAvLyBmaXJzdCwgbWFrZSBzdXJlIHRoYXQgdGhlIHdyYXBwZWQgaW1wb3J0IGtleSBpcyB2YWxpZCwgaS5lLiwgdGhhdFxuICAgICAgLy8gd2UgaGF2ZSByZXRyaWV2ZWQgaXQgYW5kIHRoYXQgaXQgaGFzbid0IGV4cGlyZWQuIFdlIGRvIHRoaXMgaGVyZVxuICAgICAgLy8gZm9yIGEgY291cGxlIHJlYXNvbnM6XG4gICAgICAvL1xuICAgICAgLy8gLSBhbGwgZW5jcnlwdGlvbnMgaW4gYSBnaXZlbiByZXF1ZXN0IG11c3QgdXNlIHRoZSBzYW1lIGltcG9ydCBrZXksIGFuZFxuICAgICAgLy9cbiAgICAgIC8vIC0gd2hlbiBpbXBvcnRpbmcgYSBodWdlIG51bWJlciBvZiBrZXlzIHRoZSBpbXBvcnQgcHVia2V5IG1pZ2h0IGV4cGlyZVxuICAgICAgLy8gICBkdXJpbmcgdGhlIGltcG9ydCwgc28gd2UgY2hlY2sgZm9yIGV4cGlyYXRpb24gYmVmb3JlIGVhY2ggcmVxdWVzdFxuICAgICAgY29uc3Qgd2lrID0gYXdhaXQgdGhpcy4jZ2V0V3JhcHBlZEltcG9ydEtleSgpO1xuXG4gICAgICAvLyBuZXh0LCBlbmNyeXB0IHRoaXMgY2h1bmsgb2YgcGFja2FnZXNcbiAgICAgIGNvbnN0IHN0YXJ0ID0gTnVtYmVyKE1BWF9JTVBPUlRTX1BFUl9BUElfQ0FMTCkgKiBpO1xuICAgICAgY29uc3QgZW5kID0gTnVtYmVyKE1BWF9JTVBPUlRTX1BFUl9BUElfQ0FMTCkgKyBzdGFydDtcbiAgICAgIGNvbnN0IGtleV9tYXRlcmlhbDogSW1wb3J0S2V5UmVxdWVzdE1hdGVyaWFsW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qga2V5UGtnIG9mIHBhY2thZ2VzLnNsaWNlKHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgIGNvbnN0IHsgZW5jLCBjaXBoZXJ0ZXh0IH0gPSBhd2FpdCB3aWsuZW5jcnlwdChrZXlQa2cpO1xuICAgICAgICAvLyBXZSB1c2UgYW4gZXh0ZW5zaW9uIG9mIEhQS0UgdGhhdCBhbGxvd3MgYSBzYWx0IHZhbHVlIHRvIGJlIHNwZWNpZmllZCwgYnV0IGl0IGlzIG9rIHRvXG4gICAgICAgIC8vIHVzZSBhbiBlbXB0eSBzYWx0IGlmIHRoZSBpbXBvcnQga2V5IGlzIG5vdCByZXVzZWRcbiAgICAgICAga2V5X21hdGVyaWFsLnB1c2goeyBzYWx0OiBcIlwiLCBjbGllbnRfcHVibGljX2tleTogZW5jLCBpa21fZW5jOiBjaXBoZXJ0ZXh0IH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjb25zdHJ1Y3QgdGhlIHJlcXVlc3QgYW5kIHNlbmQgaXRcbiAgICAgIGNvbnN0IHBvbGljeSA9IHByb3BzPy5wb2xpY3kgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHJlcTogSW1wb3J0S2V5UmVxdWVzdCA9IHtcbiAgICAgICAgLi4ud2lrLnRvSW1wb3J0S2V5KCksXG4gICAgICAgIGtleV90eXBlOiBrZXlUeXBlLFxuICAgICAgICBrZXlfbWF0ZXJpYWwsXG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBwb2xpY3ksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy4jY3MuaW1wb3J0S2V5cyhyZXEpO1xuICAgICAga2V5cy5wdXNoKC4uLnJlc3ApO1xuICAgIH1cblxuICAgIHJldHVybiBrZXlzO1xuICB9XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { KeyImporter } from "./import";
|
|
2
|
-
export { MnemonicToImport } from "./mnemonic";
|
|
3
|
-
export { encryptPolicySecret, EncryptedPolicySecret } from "./policy_secret";
|
|
1
|
+
export { KeyImporter } from "./import.ts";
|
|
2
|
+
export { MnemonicToImport } from "./mnemonic.ts";
|
|
3
|
+
export { encryptPolicySecret, EncryptedPolicySecret } from "./policy_secret.ts";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var import_1 = require("./import");
|
|
5
|
-
Object.defineProperty(exports, "KeyImporter", { enumerable: true, get: function () { return import_1.KeyImporter; } });
|
|
6
|
-
var policy_secret_1 = require("./policy_secret");
|
|
7
|
-
Object.defineProperty(exports, "encryptPolicySecret", { enumerable: true, get: function () { return policy_secret_1.encryptPolicySecret; } });
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXVDO0FBQTlCLHFHQUFBLFdBQVcsT0FBQTtBQUVwQixpREFBNkU7QUFBcEUsb0hBQUEsbUJBQW1CLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBLZXlJbXBvcnRlciB9IGZyb20gXCIuL2ltcG9ydFwiO1xuZXhwb3J0IHsgTW5lbW9uaWNUb0ltcG9ydCB9IGZyb20gXCIuL21uZW1vbmljXCI7XG5leHBvcnQgeyBlbmNyeXB0UG9saWN5U2VjcmV0LCBFbmNyeXB0ZWRQb2xpY3lTZWNyZXQgfSBmcm9tIFwiLi9wb2xpY3lfc2VjcmV0XCI7XG4iXX0=
|
|
1
|
+
export { KeyImporter } from "./import.js";
|
|
2
|
+
export { encryptPolicySecret } from "./policy_secret.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQXlCLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBLZXlJbXBvcnRlciB9IGZyb20gXCIuL2ltcG9ydC50c1wiO1xuZXhwb3J0IHsgTW5lbW9uaWNUb0ltcG9ydCB9IGZyb20gXCIuL21uZW1vbmljLnRzXCI7XG5leHBvcnQgeyBlbmNyeXB0UG9saWN5U2VjcmV0LCBFbmNyeXB0ZWRQb2xpY3lTZWNyZXQgfSBmcm9tIFwiLi9wb2xpY3lfc2VjcmV0LnRzXCI7XG4iXX0=
|
package/dist/mnemonic.js
CHANGED
|
@@ -1,41 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.newMnemonicKeyPackage = newMnemonicKeyPackage;
|
|
27
|
-
exports.parseDerivationPath = parseDerivationPath;
|
|
28
|
-
const msgpackr_1 = require("msgpackr");
|
|
29
|
-
const english_1 = require("@scure/bip39/wordlists/english");
|
|
30
|
-
const bip39 = __importStar(require("@scure/bip39"));
|
|
1
|
+
import { encode as mpEncode } from "msgpackr";
|
|
2
|
+
import { wordlist } from "@scure/bip39/wordlists/english";
|
|
3
|
+
import * as bip39 from "@scure/bip39";
|
|
31
4
|
/**
|
|
32
5
|
* Create a new MnemonicKeyPackage value
|
|
33
6
|
*
|
|
34
7
|
* @param mne A BIP39 mnemonic and optional BIP39 password and BIP32 derivation path
|
|
35
8
|
* @returns A serialized key package for import to CubeSigner
|
|
36
9
|
*/
|
|
37
|
-
function newMnemonicKeyPackage(mne) {
|
|
38
|
-
const entropy = bip39.mnemonicToEntropy(mne.mnemonic,
|
|
10
|
+
export function newMnemonicKeyPackage(mne) {
|
|
11
|
+
const entropy = bip39.mnemonicToEntropy(mne.mnemonic, wordlist);
|
|
39
12
|
const path = !mne.derivationPath ? [] : parseDerivationPath(mne.derivationPath);
|
|
40
13
|
const password = mne.password ?? "";
|
|
41
14
|
const mnePkg = {
|
|
@@ -49,7 +22,7 @@ function newMnemonicKeyPackage(mne) {
|
|
|
49
22
|
password,
|
|
50
23
|
},
|
|
51
24
|
};
|
|
52
|
-
return (
|
|
25
|
+
return mpEncode(mnePkg);
|
|
53
26
|
}
|
|
54
27
|
// constants for derivation path parsing
|
|
55
28
|
const DER_HARDENED = 1n << 31n;
|
|
@@ -60,7 +33,7 @@ const DER_MAX = 1n << 32n;
|
|
|
60
33
|
* @param derp The derivation path to parse; must start with 'm/'
|
|
61
34
|
* @returns The parsed path
|
|
62
35
|
*/
|
|
63
|
-
function parseDerivationPath(derp) {
|
|
36
|
+
export function parseDerivationPath(derp) {
|
|
64
37
|
derp = derp.toLowerCase();
|
|
65
38
|
if (derp === "m") {
|
|
66
39
|
return [];
|
|
@@ -90,4 +63,4 @@ function parseDerivationPath(derp) {
|
|
|
90
63
|
}
|
|
91
64
|
return ret;
|
|
92
65
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5lbW9uaWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW5lbW9uaWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBeUJ0Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFxQjtJQUN6RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUF1QjtRQUNqQyxlQUFlLEVBQUU7WUFDZixRQUFRLEVBQUU7Z0JBQ1IsT0FBTzthQUNSO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLElBQUk7YUFDTDtZQUNELFFBQVE7U0FDVDtLQUNGLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sWUFBWSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDL0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUUxQjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNmLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsS0FBSyxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUM7UUFDL0IsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuY29kZSBhcyBtcEVuY29kZSB9IGZyb20gXCJtc2dwYWNrclwiO1xuaW1wb3J0IHsgd29yZGxpc3QgfSBmcm9tIFwiQHNjdXJlL2JpcDM5L3dvcmRsaXN0cy9lbmdsaXNoXCI7XG5pbXBvcnQgKiBhcyBiaXAzOSBmcm9tIFwiQHNjdXJlL2JpcDM5XCI7XG5cbi8vIFRoZSBLZXlQYWNrYWdlIHR5cGUgZnJvbSBDdWJlU2lnbmVyIChtbmVtb25pYyB2YXJpYW50KVxuZXhwb3J0IHR5cGUgTW5lbW9uaWNLZXlQYWNrYWdlID0ge1xuICBFbmdsaXNoTW5lbW9uaWM6IHtcbiAgICBtbmVtb25pYzoge1xuICAgICAgZW50cm9weTogVWludDhBcnJheTtcbiAgICB9O1xuICAgIGRlcl9wYXRoOiB7XG4gICAgICBwYXRoOiBudW1iZXJbXTtcbiAgICB9O1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gIH07XG59O1xuXG4vKipcbiAqIEEgQklQMzkgbW5lbW9uaWMgdG8gYmUgaW1wb3J0ZWQsIHBsdXMgb3B0aW9uYWwgQklQMzkgcGFzc3dvcmRcbiAqIGFuZCBCSVAzMiBkZXJpdmF0aW9uIHBhdGguXG4gKi9cbmV4cG9ydCB0eXBlIE1uZW1vbmljVG9JbXBvcnQgPSB7XG4gIG1uZW1vbmljOiBzdHJpbmc7XG4gIGRlcml2YXRpb25QYXRoPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IE1uZW1vbmljS2V5UGFja2FnZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSBtbmUgQSBCSVAzOSBtbmVtb25pYyBhbmQgb3B0aW9uYWwgQklQMzkgcGFzc3dvcmQgYW5kIEJJUDMyIGRlcml2YXRpb24gcGF0aFxuICogQHJldHVybnMgQSBzZXJpYWxpemVkIGtleSBwYWNrYWdlIGZvciBpbXBvcnQgdG8gQ3ViZVNpZ25lclxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3TW5lbW9uaWNLZXlQYWNrYWdlKG1uZTogTW5lbW9uaWNUb0ltcG9ydCk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBlbnRyb3B5ID0gYmlwMzkubW5lbW9uaWNUb0VudHJvcHkobW5lLm1uZW1vbmljLCB3b3JkbGlzdCk7XG4gIGNvbnN0IHBhdGggPSAhbW5lLmRlcml2YXRpb25QYXRoID8gW10gOiBwYXJzZURlcml2YXRpb25QYXRoKG1uZS5kZXJpdmF0aW9uUGF0aCk7XG4gIGNvbnN0IHBhc3N3b3JkID0gbW5lLnBhc3N3b3JkID8/IFwiXCI7XG4gIGNvbnN0IG1uZVBrZzogTW5lbW9uaWNLZXlQYWNrYWdlID0ge1xuICAgIEVuZ2xpc2hNbmVtb25pYzoge1xuICAgICAgbW5lbW9uaWM6IHtcbiAgICAgICAgZW50cm9weSxcbiAgICAgIH0sXG4gICAgICBkZXJfcGF0aDoge1xuICAgICAgICBwYXRoLFxuICAgICAgfSxcbiAgICAgIHBhc3N3b3JkLFxuICAgIH0sXG4gIH07XG4gIHJldHVybiBtcEVuY29kZShtbmVQa2cpO1xufVxuXG4vLyBjb25zdGFudHMgZm9yIGRlcml2YXRpb24gcGF0aCBwYXJzaW5nXG5jb25zdCBERVJfSEFSREVORUQgPSAxbiA8PCAzMW47XG5jb25zdCBERVJfTUFYID0gMW4gPDwgMzJuO1xuXG4vKipcbiAqIFBhcnNlIGEgZGVyaXZhdGlvbiBwYXRoIGludG8gYSBzZXF1ZW5jZSBvZiAzMi1iaXQgaW50ZWdlcnNcbiAqXG4gKiBAcGFyYW0gZGVycCBUaGUgZGVyaXZhdGlvbiBwYXRoIHRvIHBhcnNlOyBtdXN0IHN0YXJ0IHdpdGggJ20vJ1xuICogQHJldHVybnMgVGhlIHBhcnNlZCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlcml2YXRpb25QYXRoKGRlcnA6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgZGVycCA9IGRlcnAudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGRlcnAgPT09IFwibVwiKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmICghZGVycC5zdGFydHNXaXRoKFwibS9cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlcml2YXRpb24gcGF0aCBtdXN0IHN0YXJ0IHdpdGggXCJtL1wiJyk7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBkZXJwLnNsaWNlKDIpLnNwbGl0KFwiL1wiKTtcbiAgY29uc3QgcmV0ID0gW107XG4gIGZvciAobGV0IHBhcnQgb2YgcGFydHMpIHtcbiAgICBsZXQgaGFyZGVuZWQgPSBmYWxzZTtcbiAgICBpZiAocGFydC5lbmRzV2l0aChcIidcIikgfHwgcGFydC5lbmRzV2l0aChcImhcIikpIHtcbiAgICAgIGhhcmRlbmVkID0gdHJ1ZTtcbiAgICAgIHBhcnQgPSBwYXJ0LnNsaWNlKDAsIHBhcnQubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGlmIChwYXJ0ID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRlcml2YXRpb24gcGF0aDogZW1wdHkgZWxlbWVudFwiKTtcbiAgICB9XG4gICAgbGV0IHZhbHVlID0gQmlnSW50KHBhcnQpO1xuICAgIGlmICh2YWx1ZSA+PSBERVJfTUFYKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZXJpdmF0aW9uIHBhdGggZWxlbWVudCBncmVhdGVyIHRoYW4gMl4zMiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cbiAgICBpZiAoaGFyZGVuZWQpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgfCBERVJfSEFSREVORUQ7XG4gICAgfVxuICAgIHJldC5wdXNoKE51bWJlcih2YWx1ZSkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
|
package/dist/policy_secret.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.encryptPolicySecret = encryptPolicySecret;
|
|
4
|
-
const cubesigner_sdk_1 = require("@cubist-labs/cubesigner-sdk");
|
|
5
|
-
const wrapped_import_key_1 = require("./wrapped_import_key");
|
|
1
|
+
import { loadSubtleCrypto } from "@cubist-labs/cubesigner-sdk";
|
|
2
|
+
import { WrappedImportKey } from "./wrapped_import_key.js";
|
|
6
3
|
/**
|
|
7
4
|
* Encrypt a policy secret value using a fresh policy import key.
|
|
8
5
|
*
|
|
@@ -10,10 +7,10 @@ const wrapped_import_key_1 = require("./wrapped_import_key");
|
|
|
10
7
|
* @param plaintext The plaintext secret value to encrypt.
|
|
11
8
|
* @returns The encrypted secret value and the import key to include in the request.
|
|
12
9
|
*/
|
|
13
|
-
async function encryptPolicySecret(client, plaintext) {
|
|
10
|
+
export async function encryptPolicySecret(client, plaintext) {
|
|
14
11
|
const resp = await client.policyImportKeyCreate();
|
|
15
|
-
const subtle = await
|
|
16
|
-
const wik = await
|
|
12
|
+
const subtle = await loadSubtleCrypto();
|
|
13
|
+
const wik = await WrappedImportKey.createAndVerify(resp, subtle, null);
|
|
17
14
|
const { enc, ciphertext } = await wik.encrypt(new TextEncoder().encode(plaintext));
|
|
18
15
|
return {
|
|
19
16
|
// We use an extension of HPKE that allows a salt value to be specified, but it is ok to
|
|
@@ -22,4 +19,4 @@ async function encryptPolicySecret(client, plaintext) {
|
|
|
22
19
|
importKey: wik.toImportKey(),
|
|
23
20
|
};
|
|
24
21
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5X3NlY3JldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wb2xpY3lfc2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBWTNEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLE1BQWlCLEVBQ2pCLFNBQWlCO0lBRWpCLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdkUsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRixPQUFPO1FBQ0wsd0ZBQXdGO1FBQ3hGLG9EQUFvRDtRQUNwRCxLQUFLLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQ3hFLFNBQVMsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFO0tBQzdCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcGlDbGllbnQsIEtleUltcG9ydEtleSwgU2VjcmV0VmFsdWUgfSBmcm9tIFwiQGN1YmlzdC1kZXYvY3ViZXNpZ25lci1zZGtcIjtcbmltcG9ydCB7IGxvYWRTdWJ0bGVDcnlwdG8gfSBmcm9tIFwiQGN1YmlzdC1kZXYvY3ViZXNpZ25lci1zZGtcIjtcbmltcG9ydCB7IFdyYXBwZWRJbXBvcnRLZXkgfSBmcm9tIFwiLi93cmFwcGVkX2ltcG9ydF9rZXkudHNcIjtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGVuY3J5cHRpbmcgYSBwb2xpY3kgc2VjcmV0IHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBFbmNyeXB0ZWRQb2xpY3lTZWNyZXQgPSB7XG4gIC8qKiBUaGUgZW5jcnlwdGVkIHNlY3JldCB2YWx1ZSwgZm9yIHVzZSBpbiBgU2V0UG9saWN5U2VjcmV0UmVxdWVzdC52YWx1ZWAuICovXG4gIHZhbHVlOiBTZWNyZXRWYWx1ZTtcbiAgLyoqIFRoZSBpbXBvcnQga2V5LCBmb3IgdXNlIGluIGBTZXRQb2xpY3lTZWNyZXRSZXF1ZXN0LmltcG9ydF9rZXlgLiAqL1xuICBpbXBvcnRLZXk6IEtleUltcG9ydEtleTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhIHBvbGljeSBzZWNyZXQgdmFsdWUgdXNpbmcgYSBmcmVzaCBwb2xpY3kgaW1wb3J0IGtleS5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IFRoZSBBUEkgY2xpZW50LlxuICogQHBhcmFtIHBsYWludGV4dCBUaGUgcGxhaW50ZXh0IHNlY3JldCB2YWx1ZSB0byBlbmNyeXB0LlxuICogQHJldHVybnMgVGhlIGVuY3J5cHRlZCBzZWNyZXQgdmFsdWUgYW5kIHRoZSBpbXBvcnQga2V5IHRvIGluY2x1ZGUgaW4gdGhlIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0UG9saWN5U2VjcmV0KFxuICBjbGllbnQ6IEFwaUNsaWVudCxcbiAgcGxhaW50ZXh0OiBzdHJpbmcsXG4pOiBQcm9taXNlPEVuY3J5cHRlZFBvbGljeVNlY3JldD4ge1xuICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnBvbGljeUltcG9ydEtleUNyZWF0ZSgpO1xuXG4gIGNvbnN0IHN1YnRsZSA9IGF3YWl0IGxvYWRTdWJ0bGVDcnlwdG8oKTtcbiAgY29uc3Qgd2lrID0gYXdhaXQgV3JhcHBlZEltcG9ydEtleS5jcmVhdGVBbmRWZXJpZnkocmVzcCwgc3VidGxlLCBudWxsKTtcblxuICBjb25zdCB7IGVuYywgY2lwaGVydGV4dCB9ID0gYXdhaXQgd2lrLmVuY3J5cHQobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBsYWludGV4dCkpO1xuICByZXR1cm4ge1xuICAgIC8vIFdlIHVzZSBhbiBleHRlbnNpb24gb2YgSFBLRSB0aGF0IGFsbG93cyBhIHNhbHQgdmFsdWUgdG8gYmUgc3BlY2lmaWVkLCBidXQgaXQgaXMgb2sgdG9cbiAgICAvLyB1c2UgYW4gZW1wdHkgc2FsdCBpZiB0aGUgaW1wb3J0IGtleSBpcyBub3QgcmV1c2VkXG4gICAgdmFsdWU6IHsgY2xpZW50X3B1YmxpY19rZXk6IGVuYywgZW5jcnlwdGVkX3ZhbHVlOiBjaXBoZXJ0ZXh0LCBzYWx0OiBcIlwiIH0sXG4gICAgaW1wb3J0S2V5OiB3aWsudG9JbXBvcnRLZXkoKSxcbiAgfTtcbn1cbiJdfQ==
|
package/dist/raw.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.newRawKeyPackage = newRawKeyPackage;
|
|
4
|
-
const msgpackr_1 = require("msgpackr");
|
|
1
|
+
import { encode as mpEncode } from "msgpackr";
|
|
5
2
|
/**
|
|
6
3
|
* Create a new RawKeyPackage value
|
|
7
4
|
*
|
|
8
5
|
* @param secret The raw secret key to import
|
|
9
6
|
* @returns A serialized key package for import to CubeSigner
|
|
10
7
|
*/
|
|
11
|
-
function newRawKeyPackage(secret) {
|
|
8
|
+
export function newRawKeyPackage(secret) {
|
|
12
9
|
const rawPkg = {
|
|
13
10
|
Secret: secret,
|
|
14
11
|
};
|
|
15
|
-
return (
|
|
12
|
+
return mpEncode(rawPkg);
|
|
16
13
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQU85Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFrQjtJQUNqRCxNQUFNLE1BQU0sR0FBa0I7UUFDNUIsTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDO0lBQ0YsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVuY29kZSBhcyBtcEVuY29kZSB9IGZyb20gXCJtc2dwYWNrclwiO1xuXG4vLyBUaGUgS2V5UGFja2FnZSB0eXBlIGZyb20gQ3ViZVNpZ25lciAocmF3IHNlY3JldCB2YXJpYW50KVxuZXhwb3J0IHR5cGUgUmF3S2V5UGFja2FnZSA9IHtcbiAgU2VjcmV0OiBVaW50OEFycmF5O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgUmF3S2V5UGFja2FnZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSBzZWNyZXQgVGhlIHJhdyBzZWNyZXQga2V5IHRvIGltcG9ydFxuICogQHJldHVybnMgQSBzZXJpYWxpemVkIGtleSBwYWNrYWdlIGZvciBpbXBvcnQgdG8gQ3ViZVNpZ25lclxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3UmF3S2V5UGFja2FnZShzZWNyZXQ6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgY29uc3QgcmF3UGtnOiBSYXdLZXlQYWNrYWdlID0ge1xuICAgIFNlY3JldDogc2VjcmV0LFxuICB9O1xuICByZXR1cm4gbXBFbmNvZGUocmF3UGtnKTtcbn1cbiJdfQ==
|
package/dist/util.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toBigEndian = toBigEndian;
|
|
4
|
-
exports.concatArrays = concatArrays;
|
|
5
|
-
exports.nowEpochMillis = nowEpochMillis;
|
|
6
1
|
/**
|
|
7
2
|
* Converts a bigint to a big-endian Uint8Array of a specified length
|
|
8
3
|
*
|
|
@@ -10,7 +5,7 @@ exports.nowEpochMillis = nowEpochMillis;
|
|
|
10
5
|
* @param l The length in bytes
|
|
11
6
|
* @returns The big-endian bytes
|
|
12
7
|
*/
|
|
13
|
-
function toBigEndian(n, l) {
|
|
8
|
+
export function toBigEndian(n, l) {
|
|
14
9
|
if (n >= 1n << (8n * BigInt(l))) {
|
|
15
10
|
throw new Error(`Cannot convert ${n} to ${l} big-endian bytes (overflow)`);
|
|
16
11
|
}
|
|
@@ -28,7 +23,7 @@ function toBigEndian(n, l) {
|
|
|
28
23
|
* @param parts The parts to be concatenated
|
|
29
24
|
* @returns The concatenated array
|
|
30
25
|
*/
|
|
31
|
-
function concatArrays(parts) {
|
|
26
|
+
export function concatArrays(parts) {
|
|
32
27
|
const totalLen = parts.reduce((len, part) => len + part.length, 0);
|
|
33
28
|
let lenSoFar = 0;
|
|
34
29
|
const ret = new Uint8Array(totalLen);
|
|
@@ -43,7 +38,7 @@ function concatArrays(parts) {
|
|
|
43
38
|
*
|
|
44
39
|
* @returns Seconds since UNIX epoch
|
|
45
40
|
*/
|
|
46
|
-
function nowEpochMillis() {
|
|
41
|
+
export function nowEpochMillis() {
|
|
47
42
|
return BigInt(Date.now());
|
|
48
43
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMzQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQW1CO0lBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3JCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hCLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjO0lBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnRzIGEgYmlnaW50IHRvIGEgYmlnLWVuZGlhbiBVaW50OEFycmF5IG9mIGEgc3BlY2lmaWVkIGxlbmd0aFxuICpcbiAqIEBwYXJhbSBuIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0gbCBUaGUgbGVuZ3RoIGluIGJ5dGVzXG4gKiBAcmV0dXJucyBUaGUgYmlnLWVuZGlhbiBieXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9CaWdFbmRpYW4objogYmlnaW50LCBsOiBudW1iZXIpOiBVaW50OEFycmF5IHtcbiAgaWYgKG4gPj0gMW4gPDwgKDhuICogQmlnSW50KGwpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJHtufSB0byAke2x9IGJpZy1lbmRpYW4gYnl0ZXMgKG92ZXJmbG93KWApO1xuICB9XG4gIGxldCBubiA9IG47XG4gIGNvbnN0IHJldCA9IG5ldyBVaW50OEFycmF5KGwpO1xuICBmb3IgKGxldCBpID0gbCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgcmV0W2ldID0gTnVtYmVyKG5uICUgMjU2bik7XG4gICAgbm4gPSBubiA+PiA4bjtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIENvbmNhdGVuYXRlcyBhbiBhcnJheSBvZiBVaW50OEFycmF5cyBpbnRvIGEgc2luZ2xlIGFycmF5XG4gKlxuICogQHBhcmFtIHBhcnRzIFRoZSBwYXJ0cyB0byBiZSBjb25jYXRlbmF0ZWRcbiAqIEByZXR1cm5zIFRoZSBjb25jYXRlbmF0ZWQgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdEFycmF5cyhwYXJ0czogVWludDhBcnJheVtdKTogVWludDhBcnJheSB7XG4gIGNvbnN0IHRvdGFsTGVuID0gcGFydHMucmVkdWNlKChsZW4sIHBhcnQpID0+IGxlbiArIHBhcnQubGVuZ3RoLCAwKTtcblxuICBsZXQgbGVuU29GYXIgPSAwO1xuICBjb25zdCByZXQgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbik7XG4gIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICByZXQuc2V0KHBhcnQsIGxlblNvRmFyKTtcbiAgICBsZW5Tb0ZhciArPSBwYXJ0Lmxlbmd0aDtcbiAgfSk7XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcbiAqXG4gKiBAcmV0dXJucyBTZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vd0Vwb2NoTWlsbGlzKCk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoRGF0ZS5ub3coKSk7XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CreateKeyImportKeyResponse, type CreatePolicyImportKeyResponse, type KeyImportKey as ImportKey } from "@cubist-labs/cubesigner-sdk";
|
|
2
|
-
export declare const IMPORT_KEY_SIGNING_DST: Uint8Array
|
|
2
|
+
export declare const IMPORT_KEY_SIGNING_DST: Uint8Array<ArrayBufferLike>;
|
|
3
3
|
export declare const WIK_REFRESH_EARLY_MILLIS = 60000n;
|
|
4
4
|
/**
|
|
5
5
|
* An import-key response with enclave attestation, compatible with both
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapped_import_key.d.ts","sourceRoot":"","sources":["../src/wrapped_import_key.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,YAAY,IAAI,SAAS,EAC/B,MAAM,4BAA4B,CAAC;AAYpC,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"wrapped_import_key.d.ts","sourceRoot":"","sources":["../src/wrapped_import_key.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,YAAY,IAAI,SAAS,EAC/B,MAAM,4BAA4B,CAAC;AAYpC,eAAO,MAAM,sBAAsB,6BAA+D,CAAC;AAGnG,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAuBhD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,0BAA0B,GAAG,6BAA6B,CAAC;AAE3F;;GAEG;AACH,qBAAa,gBAAgB;;IAU3B;;;;;OAKG;IACH,OAAO;IAUP;;;;;;;;OAQG;WACiB,eAAe,CACjC,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,MAAM,GAAG,IAA4B,GAChD,OAAO,CAAC,gBAAgB,CAAC;IA6C5B;;;;OAIG;IACI,YAAY,IAAI,OAAO;IAmC9B;;;;;OAKG;IACU,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAWpF;;;;OAIG;IACI,WAAW,IAAI,SAAS;CAQhC;AAmBD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,UAAU,CAAC,CAkErB"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
2
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
3
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
@@ -11,19 +10,16 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
11
|
};
|
|
13
12
|
var _WrappedImportKey_instances, _WrappedImportKey_publicKey, _WrappedImportKey_skEnc, _WrappedImportKey_dkEnc, _WrappedImportKey_expEpochSeconds, _WrappedImportKey_enclaveAttestation, _WrappedImportKey_enclaveSignature, _WrappedImportKey_suite, _WrappedImportKey_senderContextParams, _WrappedImportKey_verifyImportKey, _WrappedImportKey_signedData;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const asn1_schema_1 = require("@peculiar/asn1-schema");
|
|
21
|
-
const x509_1 = require("@peculiar/x509");
|
|
22
|
-
const util_1 = require("./util");
|
|
13
|
+
import { decodeBase64, encodeToBase64, encodeToHex, loadCrypto, } from "@cubist-labs/cubesigner-sdk";
|
|
14
|
+
import { CipherSuite, Aes256Gcm, HkdfSha384, DhkemP384HkdfSha384 } from "@hpke/core";
|
|
15
|
+
import { ECParameters } from "@peculiar/asn1-ecc";
|
|
16
|
+
import { AsnParser } from "@peculiar/asn1-schema";
|
|
17
|
+
import { AlgorithmProvider, X509Certificate, cryptoProvider as x509CryptoProvider, } from "@peculiar/x509";
|
|
18
|
+
import { toBigEndian, concatArrays, nowEpochMillis } from "./util.js";
|
|
23
19
|
// domain-separation tag used when generating signing hash for import key
|
|
24
|
-
|
|
20
|
+
export const IMPORT_KEY_SIGNING_DST = new TextEncoder().encode("CUBESIGNER_EPHEMERAL_IMPORT_P384");
|
|
25
21
|
// how early to refresh a wrapped import key before it expires
|
|
26
|
-
|
|
22
|
+
export const WIK_REFRESH_EARLY_MILLIS = 60000n;
|
|
27
23
|
// attestation document slack times
|
|
28
24
|
const MAX_ATTESTATION_AGE_MINUTES = 15n;
|
|
29
25
|
const MAX_ATTESTATION_FUTURE_MINUTES = 5n;
|
|
@@ -42,7 +38,7 @@ const CUBIST_EIF_SIGNING_PK = "2e6d0430c8b0b78316236d03cda2996449e24096b3f5b5240
|
|
|
42
38
|
/**
|
|
43
39
|
* A verified import key, usable for HPKE encryption.
|
|
44
40
|
*/
|
|
45
|
-
class WrappedImportKey {
|
|
41
|
+
export class WrappedImportKey {
|
|
46
42
|
/**
|
|
47
43
|
* Private constructor.
|
|
48
44
|
*
|
|
@@ -59,12 +55,12 @@ class WrappedImportKey {
|
|
|
59
55
|
_WrappedImportKey_enclaveSignature.set(this, void 0);
|
|
60
56
|
_WrappedImportKey_suite.set(this, void 0);
|
|
61
57
|
_WrappedImportKey_senderContextParams.set(this, void 0);
|
|
62
|
-
__classPrivateFieldSet(this, _WrappedImportKey_publicKey,
|
|
63
|
-
__classPrivateFieldSet(this, _WrappedImportKey_skEnc,
|
|
64
|
-
__classPrivateFieldSet(this, _WrappedImportKey_dkEnc,
|
|
58
|
+
__classPrivateFieldSet(this, _WrappedImportKey_publicKey, decodeBase64(resp.public_key), "f");
|
|
59
|
+
__classPrivateFieldSet(this, _WrappedImportKey_skEnc, decodeBase64(resp.sk_enc), "f");
|
|
60
|
+
__classPrivateFieldSet(this, _WrappedImportKey_dkEnc, decodeBase64(resp.dk_enc), "f");
|
|
65
61
|
__classPrivateFieldSet(this, _WrappedImportKey_expEpochSeconds, BigInt(resp.expires), "f");
|
|
66
|
-
__classPrivateFieldSet(this, _WrappedImportKey_enclaveAttestation,
|
|
67
|
-
__classPrivateFieldSet(this, _WrappedImportKey_enclaveSignature,
|
|
62
|
+
__classPrivateFieldSet(this, _WrappedImportKey_enclaveAttestation, decodeBase64(resp.enclave_attestation), "f");
|
|
63
|
+
__classPrivateFieldSet(this, _WrappedImportKey_enclaveSignature, decodeBase64(resp.enclave_signature), "f");
|
|
68
64
|
__classPrivateFieldSet(this, _WrappedImportKey_suite, suite, "f");
|
|
69
65
|
}
|
|
70
66
|
/**
|
|
@@ -77,10 +73,10 @@ class WrappedImportKey {
|
|
|
77
73
|
* @returns A newly constructed, verified instance.
|
|
78
74
|
*/
|
|
79
75
|
static async createAndVerify(resp, subtle, pcr8Expect = CUBIST_EIF_SIGNING_PK) {
|
|
80
|
-
const suite = new
|
|
81
|
-
kem: new
|
|
82
|
-
kdf: new
|
|
83
|
-
aead: new
|
|
76
|
+
const suite = new CipherSuite({
|
|
77
|
+
kem: new DhkemP384HkdfSha384(),
|
|
78
|
+
kdf: new HkdfSha384(),
|
|
79
|
+
aead: new Aes256Gcm(),
|
|
84
80
|
});
|
|
85
81
|
const wik = new WrappedImportKey(resp, suite);
|
|
86
82
|
const info = await __classPrivateFieldGet(wik, _WrappedImportKey_instances, "m", _WrappedImportKey_verifyImportKey).call(wik, subtle, pcr8Expect);
|
|
@@ -95,7 +91,7 @@ class WrappedImportKey {
|
|
|
95
91
|
*/
|
|
96
92
|
needsRefresh() {
|
|
97
93
|
// force refresh if we're within WIK_REFRESH_EARLY_MILLIS of the expiration
|
|
98
|
-
return
|
|
94
|
+
return nowEpochMillis() + WIK_REFRESH_EARLY_MILLIS > __classPrivateFieldGet(this, _WrappedImportKey_expEpochSeconds, "f") * 1000n;
|
|
99
95
|
}
|
|
100
96
|
/**
|
|
101
97
|
* Encrypt `data` using HPKE to this import key.
|
|
@@ -109,8 +105,8 @@ class WrappedImportKey {
|
|
|
109
105
|
const params = __classPrivateFieldGet(this, _WrappedImportKey_senderContextParams, "f");
|
|
110
106
|
const sender = await __classPrivateFieldGet(this, _WrappedImportKey_suite, "f").createSenderContext(params);
|
|
111
107
|
return {
|
|
112
|
-
enc:
|
|
113
|
-
ciphertext:
|
|
108
|
+
enc: encodeToBase64(sender.enc),
|
|
109
|
+
ciphertext: encodeToBase64(await sender.seal(data)),
|
|
114
110
|
};
|
|
115
111
|
}
|
|
116
112
|
/**
|
|
@@ -120,14 +116,13 @@ class WrappedImportKey {
|
|
|
120
116
|
*/
|
|
121
117
|
toImportKey() {
|
|
122
118
|
return {
|
|
123
|
-
public_key:
|
|
124
|
-
sk_enc:
|
|
125
|
-
dk_enc:
|
|
119
|
+
public_key: encodeToBase64(__classPrivateFieldGet(this, _WrappedImportKey_publicKey, "f")),
|
|
120
|
+
sk_enc: encodeToBase64(__classPrivateFieldGet(this, _WrappedImportKey_skEnc, "f")),
|
|
121
|
+
dk_enc: encodeToBase64(__classPrivateFieldGet(this, _WrappedImportKey_dkEnc, "f")),
|
|
126
122
|
expires: Number(__classPrivateFieldGet(this, _WrappedImportKey_expEpochSeconds, "f")),
|
|
127
123
|
};
|
|
128
124
|
}
|
|
129
125
|
}
|
|
130
|
-
exports.WrappedImportKey = WrappedImportKey;
|
|
131
126
|
_WrappedImportKey_publicKey = new WeakMap(), _WrappedImportKey_skEnc = new WeakMap(), _WrappedImportKey_dkEnc = new WeakMap(), _WrappedImportKey_expEpochSeconds = new WeakMap(), _WrappedImportKey_enclaveAttestation = new WeakMap(), _WrappedImportKey_enclaveSignature = new WeakMap(), _WrappedImportKey_suite = new WeakMap(), _WrappedImportKey_senderContextParams = new WeakMap(), _WrappedImportKey_instances = new WeakSet(), _WrappedImportKey_verifyImportKey =
|
|
132
127
|
/**
|
|
133
128
|
* Verify this wrapped import key.
|
|
@@ -138,7 +133,7 @@ _WrappedImportKey_publicKey = new WeakMap(), _WrappedImportKey_skEnc = new WeakM
|
|
|
138
133
|
*/
|
|
139
134
|
async function _WrappedImportKey_verifyImportKey(subtle, pcr8Expect) {
|
|
140
135
|
// check expiration date
|
|
141
|
-
if (
|
|
136
|
+
if (nowEpochMillis() >= __classPrivateFieldGet(this, _WrappedImportKey_expEpochSeconds, "f") * 1000n) {
|
|
142
137
|
throw new Error("Import key is expired");
|
|
143
138
|
}
|
|
144
139
|
const signingKey = await verifyAttestationKey(__classPrivateFieldGet(this, _WrappedImportKey_enclaveAttestation, "f"), pcr8Expect);
|
|
@@ -157,21 +152,21 @@ async function _WrappedImportKey_verifyImportKey(subtle, pcr8Expect) {
|
|
|
157
152
|
}, _WrappedImportKey_signedData = function _WrappedImportKey_signedData() {
|
|
158
153
|
const parts = [
|
|
159
154
|
// domain separation tag
|
|
160
|
-
|
|
161
|
-
|
|
155
|
+
toBigEndian(BigInt(IMPORT_KEY_SIGNING_DST.length), 2),
|
|
156
|
+
IMPORT_KEY_SIGNING_DST,
|
|
162
157
|
// public key
|
|
163
|
-
|
|
158
|
+
toBigEndian(BigInt(__classPrivateFieldGet(this, _WrappedImportKey_publicKey, "f").length), 2),
|
|
164
159
|
__classPrivateFieldGet(this, _WrappedImportKey_publicKey, "f"),
|
|
165
160
|
// sk_enc
|
|
166
|
-
|
|
161
|
+
toBigEndian(BigInt(__classPrivateFieldGet(this, _WrappedImportKey_skEnc, "f").length), 2),
|
|
167
162
|
__classPrivateFieldGet(this, _WrappedImportKey_skEnc, "f"),
|
|
168
163
|
// dk_enc
|
|
169
|
-
|
|
164
|
+
toBigEndian(BigInt(__classPrivateFieldGet(this, _WrappedImportKey_dkEnc, "f").length), 2),
|
|
170
165
|
__classPrivateFieldGet(this, _WrappedImportKey_dkEnc, "f"),
|
|
171
166
|
// 8-byte big-endian expiration time in seconds since UNIX epoch
|
|
172
|
-
|
|
167
|
+
toBigEndian(__classPrivateFieldGet(this, _WrappedImportKey_expEpochSeconds, "f"), 8),
|
|
173
168
|
];
|
|
174
|
-
return
|
|
169
|
+
return concatArrays(parts);
|
|
175
170
|
};
|
|
176
171
|
/**
|
|
177
172
|
* Verifies the attestation key against the AWS Nitro Enclaves signing
|
|
@@ -181,12 +176,12 @@ async function _WrappedImportKey_verifyImportKey(subtle, pcr8Expect) {
|
|
|
181
176
|
* @param pcr8Expect If non-null, the expected value of PCR8 in the attestation.
|
|
182
177
|
* @returns The signing key that was attested.
|
|
183
178
|
*/
|
|
184
|
-
async function verifyAttestationKey(attBytes, pcr8Expect) {
|
|
179
|
+
export async function verifyAttestationKey(attBytes, pcr8Expect) {
|
|
185
180
|
// cbor-x is being imported as ESM, so we must asynchronously import it here.
|
|
186
181
|
// Because we only use that and auth0/cose here, we import both this way.
|
|
187
182
|
const { Sign1 } = await import("@auth0/cose");
|
|
188
183
|
const { decode: cborDecode } = await import("cbor-x");
|
|
189
|
-
|
|
184
|
+
x509CryptoProvider.set(await loadCrypto());
|
|
190
185
|
const att = Sign1.decode(attBytes);
|
|
191
186
|
const attDoc = cborDecode(att.payload);
|
|
192
187
|
// if there's no public key in this attestation, reject
|
|
@@ -197,38 +192,38 @@ async function verifyAttestationKey(attBytes, pcr8Expect) {
|
|
|
197
192
|
if (pcr8Expect !== null) {
|
|
198
193
|
const pcr8Data = attDoc.pcrs["8"];
|
|
199
194
|
// slice(2) strips "0x" prefix; pcr8Expect is bare hex
|
|
200
|
-
if (!pcr8Data || pcr8Expect !==
|
|
195
|
+
if (!pcr8Data || pcr8Expect !== encodeToHex(pcr8Data).slice(2)) {
|
|
201
196
|
throw new Error("Attestation was not from an authorized enclave");
|
|
202
197
|
}
|
|
203
198
|
}
|
|
204
199
|
// check expiration date of attestation
|
|
205
|
-
const nowMs =
|
|
200
|
+
const nowMs = nowEpochMillis();
|
|
206
201
|
const latest = nowMs + MAX_ATTESTATION_FUTURE_MINUTES * 60n * 1000n;
|
|
207
202
|
const earliest = latest - (MAX_ATTESTATION_FUTURE_MINUTES + MAX_ATTESTATION_AGE_MINUTES) * 60n * 1000n;
|
|
208
203
|
if (attDoc.timestamp < earliest || attDoc.timestamp > latest) {
|
|
209
204
|
throw new Error("Attestation is expired");
|
|
210
205
|
}
|
|
211
206
|
// Verify certificate chain starting with AWS Nitro CA cert
|
|
212
|
-
let parent = new
|
|
207
|
+
let parent = new X509Certificate(AWS_CA_CERT);
|
|
213
208
|
for (let i = 0; i < attDoc.cabundle.length; ++i) {
|
|
214
|
-
const cert = new
|
|
209
|
+
const cert = new X509Certificate(attDoc.cabundle[i]);
|
|
215
210
|
if (!(await cert.verify(parent))) {
|
|
216
211
|
throw new Error(`Attestation certificate chain failed at index ${i}`);
|
|
217
212
|
}
|
|
218
213
|
parent = cert;
|
|
219
214
|
}
|
|
220
|
-
const cert = new
|
|
215
|
+
const cert = new X509Certificate(attDoc.certificate);
|
|
221
216
|
if (!(await cert.verify(parent))) {
|
|
222
217
|
throw new Error("Attestation certificate chain failed at leaf");
|
|
223
218
|
}
|
|
224
219
|
const pubkey = cert.publicKey;
|
|
225
220
|
// make sure that we got the expected public key type
|
|
226
|
-
const alg = new
|
|
221
|
+
const alg = new AlgorithmProvider().toAsnAlgorithm(pubkey.algorithm);
|
|
227
222
|
if (alg.algorithm != EC_PUBLIC_KEY) {
|
|
228
223
|
// not the expected algorithm, i.e., elliptic curve signing
|
|
229
224
|
throw new Error("Attestation contained unexpected signature algorithm");
|
|
230
225
|
}
|
|
231
|
-
const params =
|
|
226
|
+
const params = AsnParser.parse(alg.parameters, ECParameters);
|
|
232
227
|
if (!params.namedCurve || params.namedCurve !== NIST_P384) {
|
|
233
228
|
// not the expected params, i.e., NIST P384
|
|
234
229
|
throw new Error("Attestation contained unexpected signature algorithm");
|
|
@@ -238,4 +233,4 @@ async function verifyAttestationKey(attBytes, pcr8Expect) {
|
|
|
238
233
|
await att.verify(await pubkey.export());
|
|
239
234
|
return attDoc.public_key;
|
|
240
235
|
}
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZF9pbXBvcnRfa2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyYXBwZWRfaW1wb3J0X2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUE0T0Esb0RBcUVDO0FBalRELCtEQVFvQztBQUNwQyxxQ0FBcUY7QUFDckYsaURBQWtEO0FBQ2xELHVEQUFrRDtBQUNsRCx5Q0FJd0I7QUFDeEIsaUNBQW1FO0FBRW5FLHlFQUF5RTtBQUM1RCxRQUFBLHNCQUFzQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFFbkcsOERBQThEO0FBQ2pELFFBQUEsd0JBQXdCLEdBQUcsTUFBTyxDQUFDO0FBRWhELG1DQUFtQztBQUNuQyxNQUFNLDJCQUEyQixHQUFHLEdBQUcsQ0FBQztBQUN4QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyxxQ0FBcUM7QUFDckMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUM7QUFDMUMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDO0FBRWpDLHlDQUF5QztBQUN6Qyx5RUFBeUU7QUFDekUsRUFBRTtBQUNGLCtEQUErRDtBQUMvRCxvRUFBb0U7QUFDcEUsTUFBTSxXQUFXLEdBQ2YsMHNCQUEwc0IsQ0FBQztBQUU3c0Isb0VBQW9FO0FBQ3BFLHNCQUFzQjtBQUN0QixNQUFNLHFCQUFxQixHQUN6QixrR0FBa0csQ0FBQztBQVFyRzs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBVTNCOzs7OztPQUtHO0lBQ0gsWUFBb0IsSUFBdUIsRUFBRSxLQUFrQjs7UUFmdEQsOENBQXVCO1FBQ3ZCLDBDQUFtQjtRQUNuQiwwQ0FBbUI7UUFDbkIsb0RBQXlCO1FBQ3pCLHVEQUFnQztRQUNoQyxxREFBOEI7UUFDOUIsMENBQW9CO1FBQzdCLHdEQUE0RTtRQVMxRSx1QkFBQSxJQUFJLCtCQUFjLElBQUEsNkJBQVksRUFBQyxJQUFJLENB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LEVBQUUsQ0FBQztRQUMxRCwyQ0FBMkM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUscUNBQXFDO0lBQ3JDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZGVjb2RlQmFzZTY0LFxuICBlbmNvZGVUb0Jhc2U2NCxcbiAgZW5jb2RlVG9IZXgsXG4gIGxvYWRDcnlwdG8sXG4gIHR5cGUgQ3JlYXRlS2V5SW1wb3J0S2V5UmVzcG9uc2UsXG4gIHR5cGUgQ3JlYXRlUG9saWN5SW1wb3J0S2V5UmVzcG9uc2UsXG4gIHR5cGUgS2V5SW1wb3J0S2V5IGFzIEltcG9ydEtleSxcbn0gZnJvbSBcIkBjdWJpc3QtZGV2L2N1YmVzaWduZXItc2RrXCI7XG5pbXBvcnQgeyBDaXBoZXJTdWl0ZSwgQWVzMjU2R2NtLCBIa2RmU2hhMzg0LCBEaGtlbVAzODRIa2RmU2hhMzg0IH0gZnJvbSBcIkBocGtlL2NvcmVcIjtcbmltcG9ydCB7IEVDUGFyYW1ldGVycyB9IGZyb20gXCJAcGVjdWxpYXIvYXNuMS1lY2NcIjtcbmltcG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCJAcGVjdWxpYXIvYXNuMS1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIEFsZ29yaXRobVByb3ZpZGVyLFxuICBYNTA5Q2VydGlmaWNhdGUsXG4gIGNyeXB0b1Byb3ZpZGVyIGFzIHg1MDlDcnlwdG9Qcm92aWRlcixcbn0gZnJvbSBcIkBwZWN1bGlhci94NTA5XCI7XG5pbXBvcnQgeyB0b0JpZ0VuZGlhbiwgY29uY2F0QXJyYXlzLCBub3dFcG9jaE1pbGxpcyB9IGZyb20gXCIuL3V0aWxcIjtcblxuLy8gZG9tYWluLXNlcGFyYXRpb24gdGFnIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHNpZ25pbmcgaGFzaCBmb3IgaW1wb3J0IGtleVxuZXhwb3J0IGNvbnN0IElNUE9SVF9LRVlfU0lHTklOR19EU1QgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJDVUJFU0lHTkVSX0VQSEVNRVJBTF9JTVBPUlRfUDM4NFwiKTtcblxuLy8gaG93IGVhcmx5IHRvIHJlZnJlc2ggYSB3cmFwcGVkIGltcG9ydCBrZXkgYmVmb3JlIGl0IGV4cGlyZXNcbmV4cG9ydCBjb25zdCBXSUtfUkVGUkVTSF9FQVJMWV9NSUxMSVMgPSA2MF8wMDBuO1xuXG4vLyBhdHRlc3RhdGlvbiBkb2N1bWVudCBzbGFjayB0aW1lc1xuY29uc3QgTUFYX0FUVEVTVEFUSU9OX0FHRV9NSU5VVEVTID0gMTVuO1xuY29uc3QgTUFYX0FUVEVTVEFUSU9OX0ZVVFVSRV9NSU5VVEVTID0gNW47XG5cbi8vIE9JRHMgZm9yIGVsbGlwdGljIGN1cnZlIFg1MDkgY2VydHNcbmNvbnN0IEVDX1BVQkxJQ19LRVkgPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG5jb25zdCBOSVNUX1AzODQgPSBcIjEuMy4xMzIuMC4zNFwiO1xuXG4vLyBBV1MgTml0cm8gRW5jbGF2ZXMgcm9vdCBDQSBjZXJ0aWZpY2F0ZVxuLy8gaHR0cHM6Ly9hd3Mtbml0cm8tZW5jbGF2ZXMuYW1hem9uYXdzLmNvbS9BV1NfTml0cm9FbmNsYXZlc19Sb290LUcxLnppcFxuLy9cbi8vIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBhYm91dCBBV1MgTml0cm8gRW5jbGF2ZXMgdmVyaWZpY2F0aW9uOlxuLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VuY2xhdmVzL2xhdGVzdC91c2VyL3ZlcmlmeS1yb290Lmh0bWxcbmNvbnN0IEFXU19DQV9DRVJUID1cbiAgXCJNSUlDRVRDQ0FaYWdBd0lCQWdJUkFQa3hkV2dia0svaEhVYk10T1RuK0ZZd0NnWUlLb1pJemowRUF3TXdTVEVMTUFrR0ExVUVCaE1DVlZNeER6QU5CZ05WQkFvTUJrRnRZWHB2YmpFTU1Bb0dBMVVFQ3d3RFFWZFRNUnN3R1FZRFZRUUREQkpoZDNNdWJtbDBjbTh0Wlc1amJHRjJaWE13SGhjTk1Ua3hNREk0TVRNeU9EQTFXaGNOTkRreE1ESTRNVFF5T0RBMVdqQkpNUXN3Q1FZRFZRUUdFd0pWVXpFUE1BMEdBMVVFQ2d3R1FXMWhlbTl1TVF3d0NnWURWUVFMREFOQlYxTXhHekFaQmdOVkJBTU1FbUYzY3k1dWFYUnlieTFsYm1Oc1lYWmxjekIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJQd0NWT3VtQ01IemFIRGltdHFRdmtZNE1wSnpib2xMLy9aeTJZbEVTMUJSNVRTa3NmYmI0OEM4V0JveXQ3RjJCdzdlRXRhYVArb2hHMmJuVXM5OTBkMEpYMjhUY1BRWENFUFozQkFCSWVUUFl3RW9DV1pFaDhsNVlvUXdUY1UvOUtOQ01FQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVrQ1cxRGRrRlIrZVd3NWI2Y3AzUG1hbmZTNVl3RGdZRFZSMFBBUUgvQkFRREFnR0dNQW9HQ0NxR1NNNDlCQU1EQTJrQU1HWUNNUUNqZnkrUm9jbTlYdWU0WW53V21OSlZBNDRmQTBQNVcyT3BZb3c5T1lDVlJhRWV2TDh1TzFYWXJ1NXh0TVBXcmZNQ01RQ2k4NXNXQmJKd0tLWGRTNkJwdFFGdVpiVDczby9nQmgxcVV4bC9uTnIxMlVPOFlmd3I2d1BMYis2Tkl3THozL1k9XCI7XG5cbi8vIEN1YmlzdCBlbmNsYXZlLXNpZ25pbmcga2V5LiBBbGwgdmFsaWQgYXR0ZXN0YXRpb25zIHdpbGwgaGF2ZSB0aGlzXG4vLyBwdWJsaWMga2V5IGluIFBDUjguXG5jb25zdCBDVUJJU1RfRUlGX1NJR05JTkdfUEsgPVxuICBcIjJlNmQwNDMwYzhiMGI3ODMxNjIzNmQwM2NkYTI5OTY0NDllMjQwOTZiM2Y1YjUyNDAzMWYxMmVlYjVmYzE5YTE5ZGI1MjJhODQ2ZTYyNDBhNWYzNmYyNjU5MTg5MGFjNFwiO1xuXG4vKipcbiAqIEFuIGltcG9ydC1rZXkgcmVzcG9uc2Ugd2l0aCBlbmNsYXZlIGF0dGVzdGF0aW9uLCBjb21wYXRpYmxlIHdpdGggYm90aFxuICogYENyZWF0ZUtleUltcG9ydEtleVJlc3BvbnNlYCBhbmQgYENyZWF0ZVBvbGljeUltcG9ydEtleVJlc3BvbnNlYC5cbiAqL1xuZXhwb3J0IHR5cGUgSW1wb3J0S2V5UmVzcG9uc2UgPSBDcmVhdGVLZXlJbXBvcnRLZXlSZXNwb25zZSAmIENyZWF0ZVBvbGljeUltcG9ydEtleVJlc3BvbnNlO1xuXG4vKipcbiAqIEEgdmVyaWZpZWQgaW1wb3J0IGtleSwgdXNhYmxlIGZvciBIUEtFIGVuY3J5cHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBXcmFwcGVkSW1wb3J0S2V5IHtcbiAgcmVhZG9ubHkgI3B1YmxpY0tleTogVWludDhBcnJheTtcbiAgcmVhZG9ubHkgI3NrRW5jOiBVaW50OEFycmF5O1xuICByZWFkb25seSAjZGtFbmM6IFVpbnQ4QXJyYXk7XG4gIHJlYWRvbmx5ICNleHBFcG9jaFNlY29uZHM6IGJpZ2ludDtcbiAgcmVhZG9ubHkgI2VuY2xhdmVBdHRlc3RhdGlvbjogVWludDhBcnJheTtcbiAgcmVhZG9ubHkgI2VuY2xhdmVTaWduYXR1cmU6IFVpbnQ4QXJyYXk7XG4gIHJlYWRvbmx5ICNzdWl0ZTogQ2lwaGVyU3VpdGU7XG4gICNzZW5kZXJDb250ZXh0UGFyYW1zPzogeyByZWNpcGllbnRQdWJsaWNLZXk6IENyeXB0b0tleTsgaW5mbzogQXJyYXlCdWZmZXIgfTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHJlc3AgVGhlIGltcG9ydCBrZXkgcmVzcG9uc2UgZnJvbSBDdWJlU2lnbmVyLlxuICAgKiBAcGFyYW0gc3VpdGUgVGhlIEhQS0UgY2lwaGVyc3VpdGUgdG8gdXNlIGZvciBlbmNyeXB0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihyZXNwOiBJbXBvcnRLZXlSZXNwb25zZSwgc3VpdGU6IENpcGhlclN1aXRlKSB7XG4gICAgdGhpcy4jcHVibGljS2V5ID0gZGVjb2RlQmFzZTY0KHJlc3AucHVibGljX2tleSk7XG4gICAgdGhpcy4jc2tFbmMgPSBkZWNvZGVCYXNlNjQocmVzcC5za19lbmMpO1xuICAgIHRoaXMuI2RrRW5jID0gZGVjb2RlQmFzZTY0KHJlc3AuZGtfZW5jKTtcbiAgICB0aGlzLiNleHBFcG9jaFNlY29uZHMgPSBCaWdJbnQocmVzcC5leHBpcmVzKTtcbiAgICB0aGlzLiNlbmNsYXZlQXR0ZXN0YXRpb24gPSBkZWNvZGVCYXNlNjQocmVzcC5lbmNsYXZlX2F0dGVzdGF0aW9uKTtcbiAgICB0aGlzLiNlbmNsYXZlU2lnbmF0dXJlID0gZGVjb2RlQmFzZTY0KHJlc3AuZW5jbGF2ZV9zaWduYXR1cmUpO1xuICAgIHRoaXMuI3N1aXRlID0gc3VpdGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuZCB2ZXJpZnkgYSBgV3JhcHBlZEltcG9ydEtleWAgZnJvbSBhbiBpbXBvcnQta2V5IHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcCBUaGUgcmVzcG9uc2UgZnJvbSBDdWJlU2lnbmVyIChrZXkgaW1wb3J0IG9yIHBvbGljeSBpbXBvcnQpLlxuICAgKiBAcGFyYW0gc3VidGxlIEEgU3VidGxlQ3J5cHRvIGluc3RhbmNlIHVzZWQgZm9yIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHBjcjhFeHBlY3QgVGhlIGV4cGVjdGVkIFBDUjggdmFsdWUgKGJhcmUgaGV4KS4gSWYgYG51bGxgLCB0aGUgUENSOCBjaGVjayBpcyBza2lwcGVkLlxuICAgKiAgIERlZmF1bHRzIHRvIHRoZSBDdWJpc3QgZW5jbGF2ZSBzaWduaW5nIGtleSwgd2hpY2ggaXMgY29ycmVjdCBmb3Iga2V5IGltcG9ydHMuXG4gICAqIEByZXR1cm5zIEEgbmV3bHkgY29uc3RydWN0ZWQsIHZlcmlmaWVkIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRWZXJpZnkoXG4gICAgcmVzcDogSW1wb3J0S2V5UmVzcG9uc2UsXG4gICAgc3VidGxlOiBTdWJ0bGVDcnlwdG8sXG4gICAgcGNyOEV4cGVjdDogc3RyaW5nIHwgbnVsbCA9IENVQklTVF9FSUZfU0lHTklOR19QSyxcbiAgKTogUHJvbWlzZTxXcmFwcGVkSW1wb3J0S2V5PiB7XG4gICAgY29uc3Qgc3VpdGUgPSBuZXcgQ2lwaGVyU3VpdGUoe1xuICAgICAga2VtOiBuZXcgRGhrZW1QMzg0SGtkZlNoYTM4NCgpLFxuICAgICAga2RmOiBuZXcgSGtkZlNoYTM4NCgpLFxuICAgICAgYWVhZDogbmV3IEFlczI1NkdjbSgpLFxuICAgIH0pO1xuICAgIGNvbnN0IHdpayA9IG5ldyBXcmFwcGVkSW1wb3J0S2V5KHJlc3AsIHN1aXRlKTtcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgd2lrLiN2ZXJpZnlJbXBvcnRLZXkoc3VidGxlLCBwY3I4RXhwZWN0KTtcbiAgICBjb25zdCByZWNpcGllbnRQdWJsaWNLZXkgPSBhd2FpdCBzdWl0ZS5rZW0uaW1wb3J0S2V5KFwicmF3XCIsIHdpay4jcHVibGljS2V5LCB0cnVlKTtcbiAgICB3aWsuI3NlbmRlckNvbnRleHRQYXJhbXMgPSB7IHJlY2lwaWVudFB1YmxpY0tleSwgaW5mbyB9O1xuICAgIHJldHVybiB3aWs7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoaXMgd3JhcHBlZCBpbXBvcnQga2V5LlxuICAgKlxuICAgKiBAcGFyYW0gc3VidGxlIEFuIGluc3RhbmNlIG9mIFN1YnRsZUNyeXB0byB1c2VkIGZvciB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSBwY3I4RXhwZWN0IFRoZSBleHBlY3RlZCBQQ1I4IHZhbHVlLCBvciBgbnVsbGAgdG8gc2tpcCB0aGUgY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIHNpZ25lZCBkYXRhLCBmb3IgdXNlIGFzIHRoZSBIUEtFIGBpbmZvYCBwYXJhbWV0ZXIuXG4gICAqL1xuICBhc3luYyAjdmVyaWZ5SW1wb3J0S2V5KHN1YnRsZTogU3VidGxlQ3J5cHRvLCBwY3I4RXhwZWN0OiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIC8vIGNoZWNrIGV4cGlyYXRpb24gZGF0ZVxuICAgIGlmIChub3dFcG9jaE1pbGxpcygpID49IHRoaXMuI2V4cEVwb2NoU2Vjb25kcyAqIDEwMDBuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvcnQga2V5IGlzIGV4cGlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmluZ0tleSA9IGF3YWl0IHZlcmlmeUF0dGVzdGF0aW9uS2V5KHRoaXMuI2VuY2xhdmVBdHRlc3RhdGlvbiwgcGNyOEV4cGVjdCk7XG5cbiAgICAvLyB3ZSB1c2Ugc3VidGxlY3J5cHRvJ3MgaW1wbCBvZiBSU0EtUFNTIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IHJzYVBzc0tleVBhcmFtcyA9IHsgbmFtZTogXCJSU0EtUFNTXCIsIGhhc2g6IFwiU0hBLTI1NlwiIH07XG4gICAgY29uc3QgcHVia2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcInNwa2lcIiwgc2lnbmluZ0tleSwgcnNhUHNzS2V5UGFyYW1zLCB0cnVlLCBbXCJ2ZXJpZnlcIl0pO1xuICAgIGNvbnN0IHB1YmtleUFsZyA9IHB1YmtleS5hbGdvcml0aG0gYXMgdW5rbm93biBhcyB7IG1vZHVsdXNMZW5ndGg6IG51bWJlciB9O1xuXG4gICAgLy8gY29tcHV0ZSB0aGUgc2lnbmluZyBoYXNoIGFuZCB2ZXJpZnkgdGhlIHNpZ25hdHVyZVxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLiNzaWduZWREYXRhKCk7XG4gICAgY29uc3QgbWxlbiA9IE51bWJlcihCaWdJbnQocHVia2V5QWxnLm1vZHVsdXNMZW5ndGgpIC8gOG4pO1xuICAgIGNvbnN0IHJzYVBzc1BhcmFtcyA9IHsgbmFtZTogXCJSU0EtUFNTXCIsIHNhbHRMZW5ndGg6IG1sZW4gLSAyIC0gMzIgfTtcblxuICAgIGlmICghKGF3YWl0IHN1YnRsZS52ZXJpZnkocnNhUHNzUGFyYW1zLCBwdWJrZXksIHRoaXMuI2VuY2xhdmVTaWduYXR1cmUsIG1lc3NhZ2UpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW1wb3J0IGtleSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VidGxlLmRpZ2VzdChcIlNIQS0yNTZcIiwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBXcmFwcGVkSW1wb3J0S2V5IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cbiAgICpcbiAgICogQHJldHVybnMgVHJ1ZSBqdXN0IGlmIHRoaXMga2V5IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cbiAgICovXG4gIHB1YmxpYyBuZWVkc1JlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgLy8gZm9yY2UgcmVmcmVzaCBpZiB3ZSdyZSB3aXRoaW4gV0lLX1JFRlJFU0hfRUFSTFlfTUlMTElTIG9mIHRoZSBleHBpcmF0aW9uXG4gICAgcmV0dXJuIG5vd0Vwb2NoTWlsbGlzKCkgKyBXSUtfUkVGUkVTSF9FQVJMWV9NSUxMSVMgPiB0aGlzLiNleHBFcG9jaFNlY29uZHMgKiAxMDAwbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgc2lnbmluZyBoYXNoIGZvciB0aGlzIGltcG9ydCBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBieXRlcyBvdmVyIHdoaWNoIHRoZSBlbmNsYXZlIHNpZ25hdHVyZSB3YXMgY29tcHV0ZWQuXG4gICAqL1xuICAjc2lnbmVkRGF0YSgpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgIC8vIGRvbWFpbiBzZXBhcmF0aW9uIHRhZ1xuICAgICAgdG9CaWdFbmRpYW4oQmlnSW50KElNUE9SVF9LRVlfU0lHTklOR19EU1QubGVuZ3RoKSwgMiksXG4gICAgICBJTVBPUlRfS0VZX1NJR05JTkdfRFNULFxuXG4gICAgICAvLyBwdWJsaWMga2V5XG4gICAgICB0b0JpZ0VuZGlhbihCaWdJbnQodGhpcy4jcHVibGljS2V5Lmxlbmd0aCksIDIpLFxuICAgICAgdGhpcy4jcHVibGljS2V5LFxuXG4gICAgICAvLyBza19lbmNcbiAgICAgIHRvQmlnRW5kaWFuKEJpZ0ludCh0aGlzLiNza0VuYy5sZW5ndGgpLCAyKSxcbiAgICAgIHRoaXMuI3NrRW5jLFxuXG4gICAgICAvLyBka19lbmNcbiAgICAgIHRvQmlnRW5kaWFuKEJpZ0ludCh0aGlzLiNka0VuYy5sZW5ndGgpLCAyKSxcbiAgICAgIHRoaXMuI2RrRW5jLFxuXG4gICAgICAvLyA4LWJ5dGUgYmlnLWVuZGlhbiBleHBpcmF0aW9uIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoXG4gICAgICB0b0JpZ0VuZGlhbih0aGlzLiNleHBFcG9jaFNlY29uZHMsIDgpLFxuICAgIF07XG5cbiAgICByZXR1cm4gY29uY2F0QXJyYXlzKHBhcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNyeXB0IGBkYXRhYCB1c2luZyBIUEtFIHRvIHRoaXMgaW1wb3J0IGtleS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIHBsYWludGV4dCB0byBlbmNyeXB0LlxuICAgKiBAcmV0dXJucyBUaGUgYmFzZTY0LWVuY29kZWQgSFBLRSBlbmNhcHN1bGF0ZWQga2V5IChgZW5jYCkgYW5kIGNpcGhlcnRleHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW5jcnlwdChkYXRhOiBVaW50OEFycmF5KTogUHJvbWlzZTx7IGVuYzogc3RyaW5nOyBjaXBoZXJ0ZXh0OiBzdHJpbmcgfT4ge1xuICAgIC8vIFNhZmU6IGBXcmFwcGVkSW1wb3J0S2V5YCBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB0aHJvdWdoIGBjcmVhdGVBbmRWZXJpZnlgLCB3aGljaCBhbHdheXNcbiAgICAvLyBzZXRzIGAjc2VuZGVyQ29udGV4dFBhcmFtc2BcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLiNzZW5kZXJDb250ZXh0UGFyYW1zITtcbiAgICBjb25zdCBzZW5kZXIgPSBhd2FpdCB0aGlzLiNzdWl0ZS5jcmVhdGVTZW5kZXJDb250ZXh0KHBhcmFtcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuYzogZW5jb2RlVG9CYXNlNjQoc2VuZGVyLmVuYyksXG4gICAgICBjaXBoZXJ0ZXh0OiBlbmNvZGVUb0Jhc2U2NChhd2FpdCBzZW5kZXIuc2VhbChkYXRhKSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltcG9ydCBrZXkgZmllbGRzLCBmb3IgdXNlIGluIGltcG9ydCByZXF1ZXN0cy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGltcG9ydCBrZXkgZmllbGRzLlxuICAgKi9cbiAgcHVibGljIHRvSW1wb3J0S2V5KCk6IEltcG9ydEtleSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY19rZXk6IGVuY29kZVRvQmFzZTY0KHRoaXMuI3B1YmxpY0tleSksXG4gICAgICBza19lbmM6IGVuY29kZVRvQmFzZTY0KHRoaXMuI3NrRW5jKSxcbiAgICAgIGRrX2VuYzogZW5jb2RlVG9CYXNlNjQodGhpcy4jZGtFbmMpLFxuICAgICAgZXhwaXJlczogTnVtYmVyKHRoaXMuI2V4cEVwb2NoU2Vjb25kcyksXG4gICAgfTtcbiAgfVxufVxuXG4vKlxuICogQW4gQVdTIE5pdHJvIGF0dGVzdGF0aW9uIGRvY3VtZW50XG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtbml0cm8tZW5jbGF2ZXMtbnNtLWFwaS9ibG9iLzRiODUxZjMwMDZjNmZhOThmMjNkY2ZmYjJjYmEwM2IzOWRlOWI4YWYvc3JjL2FwaS9tb2QucnMjTDIwOFxuICovXG50eXBlIEF0dGVzdGF0aW9uRG9jID0ge1xuICBtb2R1bGVfaWQ6IHN0cmluZztcbiAgZGlnZXN0OiBcIlNIQTI1NlwiIHwgXCJTSEEzODRcIiB8IFwiU0hBNTEyXCI7XG4gIHRpbWVzdGFtcDogYmlnaW50O1xuICBwY3JzOiB7IFtwY3I6IHN0cmluZ106IFVpbnQ4QXJyYXkgfTtcbiAgY2VydGlmaWNhdGU6IFVpbnQ4QXJyYXk7XG4gIGNhYnVuZGxlOiBVaW50OEFycmF5W107XG4gIHB1YmxpY19rZXk/OiBVaW50OEFycmF5O1xuICB1c2VyX2RhdGE/OiBVaW50OEFycmF5O1xuICBub25jZT86IFVpbnQ4QXJyYXk7XG59O1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBhdHRlc3RhdGlvbiBrZXkgYWdhaW5zdCB0aGUgQVdTIE5pdHJvIEVuY2xhdmVzIHNpZ25pbmdcbiAqIGtleSBhbmQgcmV0dXJucyB0aGUgYXR0ZXN0ZWQgc2lnbmluZyBrZXkuXG4gKlxuICogQHBhcmFtIGF0dEJ5dGVzIEFuIGF0dGVzdGF0aW9uIGZyb20gYW4gQVdTIG5pdHJvIGVuY2xhdmUuXG4gKiBAcGFyYW0gcGNyOEV4cGVjdCBJZiBub24tbnVsbCwgdGhlIGV4cGVjdGVkIHZhbHVlIG9mIFBDUjggaW4gdGhlIGF0dGVzdGF0aW9uLlxuICogQHJldHVybnMgVGhlIHNpZ25pbmcga2V5IHRoYXQgd2FzIGF0dGVzdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5QXR0ZXN0YXRpb25LZXkoXG4gIGF0dEJ5dGVzOiBVaW50OEFycmF5LFxuICBwY3I4RXhwZWN0OiBzdHJpbmcgfCBudWxsLFxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIC8vIGNib3IteCBpcyBiZWluZyBpbXBvcnRlZCBhcyBFU00sIHNvIHdlIG11c3QgYXN5bmNocm9ub3VzbHkgaW1wb3J0IGl0IGhlcmUuXG4gIC8vIEJlY2F1c2Ugd2Ugb25seSB1c2UgdGhhdCBhbmQgYXV0aDAvY29zZSBoZXJlLCB3ZSBpbXBvcnQgYm90aCB0aGlzIHdheS5cbiAgY29uc3QgeyBTaWduMSB9ID0gYXdhaXQgaW1wb3J0KFwiQGF1dGgwL2Nvc2VcIik7XG4gIGNvbnN0IHsgZGVjb2RlOiBjYm9yRGVjb2RlIH0gPSBhd2FpdCBpbXBvcnQoXCJjYm9yLXhcIik7XG5cbiAgeDUwOUNyeXB0b1Byb3ZpZGVyLnNldChhd2FpdCBsb2FkQ3J5cHRvKCkpO1xuXG4gIGNvbnN0IGF0dCA9IFNpZ24xLmRlY29kZShhdHRCeXRlcyk7XG4gIGNvbnN0IGF0dERvYyA9IGNib3JEZWNvZGUoYXR0LnBheWxvYWQpIGFzIEF0dGVzdGF0aW9uRG9jO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gcHVibGljIGtleSBpbiB0aGlzIGF0dGVzdGF0aW9uLCByZWplY3RcbiAgaWYgKCFhdHREb2MucHVibGljX2tleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVzdGF0aW9uIGRpZCBub3QgaW5jbHVkZSBhIHNpZ25pbmcgcHVibGljIGtleVwiKTtcbiAgfVxuXG4gIC8vIGlmIGEgUENSOCB2YWx1ZSBpcyBleHBlY3RlZCwgdmVyaWZ5IGl0IG1hdGNoZXNcbiAgaWYgKHBjcjhFeHBlY3QgIT09IG51bGwpIHtcbiAgICBjb25zdCBwY3I4RGF0YSA9IGF0dERvYy5wY3JzW1wiOFwiXTtcbiAgICAvLyBzbGljZSgyKSBzdHJpcHMgXCIweFwiIHByZWZpeDsgcGNyOEV4cGVjdCBpcyBiYXJlIGhleFxuICAgIGlmICghcGNyOERhdGEgfHwgcGNyOEV4cGVjdCAhPT0gZW5jb2RlVG9IZXgocGNyOERhdGEpLnNsaWNlKDIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiB3YXMgbm90IGZyb20gYW4gYXV0aG9yaXplZCBlbmNsYXZlXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIGV4cGlyYXRpb24gZGF0ZSBvZiBhdHRlc3RhdGlvblxuICBjb25zdCBub3dNcyA9IG5vd0Vwb2NoTWlsbGlzKCk7XG4gIGNvbnN0IGxhdGVzdCA9IG5vd01zICsgTUFYX0FUVEVTVEFUSU9OX0ZVVFVSRV9NSU5VVEVTICogNjBuICogMTAwMG47XG4gIGNvbnN0IGVhcmxpZXN0ID1cbiAgICBsYXRlc3QgLSAoTUFYX0FUVEVTVEFUSU9OX0ZVVFVSRV9NSU5VVEVTICsgTUFYX0FUVEVTVEFUSU9OX0FHRV9NSU5VVEVTKSAqIDYwbiAqIDEwMDBuO1xuICBpZiAoYXR0RG9jLnRpbWVzdGFtcCA8IGVhcmxpZXN0IHx8IGF0dERvYy50aW1lc3RhbXAgPiBsYXRlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiBpcyBleHBpcmVkXCIpO1xuICB9XG5cbiAgLy8gVmVyaWZ5IGNlcnRpZmljYXRlIGNoYWluIHN0YXJ0aW5nIHdpdGggQVdTIE5pdHJvIENBIGNlcnRcbiAgbGV0IHBhcmVudCA9IG5ldyBYNTA5Q2VydGlmaWNhdGUoQVdTX0NBX0NFUlQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dERvYy5jYWJ1bmRsZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNlcnQgPSBuZXcgWDUwOUNlcnRpZmljYXRlKGF0dERvYy5jYWJ1bmRsZVtpXSk7XG4gICAgaWYgKCEoYXdhaXQgY2VydC52ZXJpZnkocGFyZW50KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZXN0YXRpb24gY2VydGlmaWNhdGUgY2hhaW4gZmFpbGVkIGF0IGluZGV4ICR7aX1gKTtcbiAgICB9XG4gICAgcGFyZW50ID0gY2VydDtcbiAgfVxuICBjb25zdCBjZXJ0ID0gbmV3IFg1MDlDZXJ0aWZpY2F0ZShhdHREb2MuY2VydGlmaWNhdGUpO1xuICBpZiAoIShhd2FpdCBjZXJ0LnZlcmlmeShwYXJlbnQpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGNoYWluIGZhaWxlZCBhdCBsZWFmXCIpO1xuICB9XG4gIGNvbnN0IHB1YmtleSA9IGNlcnQucHVibGljS2V5O1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIGdvdCB0aGUgZXhwZWN0ZWQgcHVibGljIGtleSB0eXBlXG4gIGNvbnN0IGFsZyA9IG5ldyBBbGdvcml0aG1Qcm92aWRlcigpLnRvQXNuQWxnb3JpdGhtKHB1YmtleS5hbGdvcml0aG0pO1xuICBpZiAoYWxnLmFsZ29yaXRobSAhPSBFQ19QVUJMSUNfS0VZKSB7XG4gICAgLy8gbm90IHRoZSBleHBlY3RlZCBhbGdvcml0aG0sIGkuZS4sIGVsbGlwdGljIGN1cnZlIHNpZ25pbmdcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiBjb250YWluZWQgdW5leHBlY3RlZCBzaWduYXR1cmUgYWxnb3JpdGhtXCIpO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IEFzblBhcnNlci5wYXJzZShhbGcucGFyYW1ldGVycyEsIEVDUGFyYW1ldGVycyk7XG4gIGlmICghcGFyYW1zLm5hbWVkQ3VydmUgfHwgcGFyYW1zLm5hbWVkQ3VydmUgIT09IE5JU1RfUDM4NCkge1xuICAgIC8vIG5vdCB0aGUgZXhwZWN0ZWQgcGFyYW1zLCBpLmUuLCBOSVNUIFAzODRcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiBjb250YWluZWQgdW5leHBlY3RlZCBzaWduYXR1cmUgYWxnb3JpdGhtXCIpO1xuICB9XG5cbiAgLy8gdmVyaWZ5IHRoZSBjb3NlIHNpZ25hdHVyZSB3aXRoIHRoZSBrZXksIHdoaWNoIHdlIHZlcmlmaWVkIGFnYWluc3RcbiAgLy8gdGhlIEFXUyBOaXRybyBDQSBjZXJ0aWZpY2F0ZSBhYm92ZVxuICBhd2FpdCBhdHQudmVyaWZ5KGF3YWl0IHB1YmtleS5leHBvcnQoKSk7XG5cbiAgcmV0dXJuIGF0dERvYy5wdWJsaWNfa2V5O1xufVxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcHBlZF9pbXBvcnRfa2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyYXBwZWRfaW1wb3J0X2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEVBQ1gsVUFBVSxHQUlYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsY0FBYyxJQUFJLGtCQUFrQixHQUNyQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0RSx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUVuRyw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTyxDQUFDO0FBRWhELG1DQUFtQztBQUNuQyxNQUFNLDJCQUEyQixHQUFHLEdBQUcsQ0FBQztBQUN4QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyxxQ0FBcUM7QUFDckMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUM7QUFDMUMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDO0FBRWpDLHlDQUF5QztBQUN6Qyx5RUFBeUU7QUFDekUsRUFBRTtBQUNGLCtEQUErRDtBQUMvRCxvRUFBb0U7QUFDcEUsTUFBTSxXQUFXLEdBQ2YsMHNC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QyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxRCwyQ0FBMkM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUscUNBQXFDO0lBQ3JDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZGVjb2RlQmFzZTY0LFxuICBlbmNvZGVUb0Jhc2U2NCxcbiAgZW5jb2RlVG9IZXgsXG4gIGxvYWRDcnlwdG8sXG4gIHR5cGUgQ3JlYXRlS2V5SW1wb3J0S2V5UmVzcG9uc2UsXG4gIHR5cGUgQ3JlYXRlUG9saWN5SW1wb3J0S2V5UmVzcG9uc2UsXG4gIHR5cGUgS2V5SW1wb3J0S2V5IGFzIEltcG9ydEtleSxcbn0gZnJvbSBcIkBjdWJpc3QtZGV2L2N1YmVzaWduZXItc2RrXCI7XG5pbXBvcnQgeyBDaXBoZXJTdWl0ZSwgQWVzMjU2R2NtLCBIa2RmU2hhMzg0LCBEaGtlbVAzODRIa2RmU2hhMzg0IH0gZnJvbSBcIkBocGtlL2NvcmVcIjtcbmltcG9ydCB7IEVDUGFyYW1ldGVycyB9IGZyb20gXCJAcGVjdWxpYXIvYXNuMS1lY2NcIjtcbmltcG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCJAcGVjdWxpYXIvYXNuMS1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIEFsZ29yaXRobVByb3ZpZGVyLFxuICBYNTA5Q2VydGlmaWNhdGUsXG4gIGNyeXB0b1Byb3ZpZGVyIGFzIHg1MDlDcnlwdG9Qcm92aWRlcixcbn0gZnJvbSBcIkBwZWN1bGlhci94NTA5XCI7XG5pbXBvcnQgeyB0b0JpZ0VuZGlhbiwgY29uY2F0QXJyYXlzLCBub3dFcG9jaE1pbGxpcyB9IGZyb20gXCIuL3V0aWwudHNcIjtcblxuLy8gZG9tYWluLXNlcGFyYXRpb24gdGFnIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHNpZ25pbmcgaGFzaCBmb3IgaW1wb3J0IGtleVxuZXhwb3J0IGNvbnN0IElNUE9SVF9LRVlfU0lHTklOR19EU1QgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJDVUJFU0lHTkVSX0VQSEVNRVJBTF9JTVBPUlRfUDM4NFwiKTtcblxuLy8gaG93IGVhcmx5IHRvIHJlZnJlc2ggYSB3cmFwcGVkIGltcG9ydCBrZXkgYmVmb3JlIGl0IGV4cGlyZXNcbmV4cG9ydCBjb25zdCBXSUtfUkVGUkVTSF9FQVJMWV9NSUxMSVMgPSA2MF8wMDBuO1xuXG4vLyBhdHRlc3RhdGlvbiBkb2N1bWVudCBzbGFjayB0aW1lc1xuY29uc3QgTUFYX0FUVEVTVEFUSU9OX0FHRV9NSU5VVEVTID0gMTVuO1xuY29uc3QgTUFYX0FUVEVTVEFUSU9OX0ZVVFVSRV9NSU5VVEVTID0gNW47XG5cbi8vIE9JRHMgZm9yIGVsbGlwdGljIGN1cnZlIFg1MDkgY2VydHNcbmNvbnN0IEVDX1BVQkxJQ19LRVkgPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG5jb25zdCBOSVNUX1AzODQgPSBcIjEuMy4xMzIuMC4zNFwiO1xuXG4vLyBBV1MgTml0cm8gRW5jbGF2ZXMgcm9vdCBDQSBjZXJ0aWZpY2F0ZVxuLy8gaHR0cHM6Ly9hd3Mtbml0cm8tZW5jbGF2ZXMuYW1hem9uYXdzLmNvbS9BV1NfTml0cm9FbmNsYXZlc19Sb290LUcxLnppcFxuLy9cbi8vIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBhYm91dCBBV1MgTml0cm8gRW5jbGF2ZXMgdmVyaWZpY2F0aW9uOlxuLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VuY2xhdmVzL2xhdGVzdC91c2VyL3ZlcmlmeS1yb290Lmh0bWxcbmNvbnN0IEFXU19DQV9DRVJUID1cbiAgXCJNSUlDRVRDQ0FaYWdBd0lCQWdJUkFQa3hkV2dia0svaEhVYk10T1RuK0ZZd0NnWUlLb1pJemowRUF3TXdTVEVMTUFrR0ExVUVCaE1DVlZNeER6QU5CZ05WQkFvTUJrRnRZWHB2YmpFTU1Bb0dBMVVFQ3d3RFFWZFRNUnN3R1FZRFZRUUREQkpoZDNNdWJtbDBjbTh0Wlc1amJHRjJaWE13SGhjTk1Ua3hNREk0TVRNeU9EQTFXaGNOTkRreE1ESTRNVFF5T0RBMVdqQkpNUXN3Q1FZRFZRUUdFd0pWVXpFUE1BMEdBMVVFQ2d3R1FXMWhlbTl1TVF3d0NnWURWUVFMREFOQlYxTXhHekFaQmdOVkJBTU1FbUYzY3k1dWFYUnlieTFsYm1Oc1lYWmxjekIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJQd0NWT3VtQ01IemFIRGltdHFRdmtZNE1wSnpib2xMLy9aeTJZbEVTMUJSNVRTa3NmYmI0OEM4V0JveXQ3RjJCdzdlRXRhYVArb2hHMmJuVXM5OTBkMEpYMjhUY1BRWENFUFozQkFCSWVUUFl3RW9DV1pFaDhsNVlvUXdUY1UvOUtOQ01FQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVrQ1cxRGRrRlIrZVd3NWI2Y3AzUG1hbmZTNVl3RGdZRFZSMFBBUUgvQkFRREFnR0dNQW9HQ0NxR1NNNDlCQU1EQTJrQU1HWUNNUUNqZnkrUm9jbTlYdWU0WW53V21OSlZBNDRmQTBQNVcyT3BZb3c5T1lDVlJhRWV2TDh1TzFYWXJ1NXh0TVBXcmZNQ01RQ2k4NXNXQmJKd0tLWGRTNkJwdFFGdVpiVDczby9nQmgxcVV4bC9uTnIxMlVPOFlmd3I2d1BMYis2Tkl3THozL1k9XCI7XG5cbi8vIEN1YmlzdCBlbmNsYXZlLXNpZ25pbmcga2V5LiBBbGwgdmFsaWQgYXR0ZXN0YXRpb25zIHdpbGwgaGF2ZSB0aGlzXG4vLyBwdWJsaWMga2V5IGluIFBDUjguXG5jb25zdCBDVUJJU1RfRUlGX1NJR05JTkdfUEsgPVxuICBcIjJlNmQwNDMwYzhiMGI3ODMxNjIzNmQwM2NkYTI5OTY0NDllMjQwOTZiM2Y1YjUyNDAzMWYxMmVlYjVmYzE5YTE5ZGI1MjJhODQ2ZTYyNDBhNWYzNmYyNjU5MTg5MGFjNFwiO1xuXG4vKipcbiAqIEFuIGltcG9ydC1rZXkgcmVzcG9uc2Ugd2l0aCBlbmNsYXZlIGF0dGVzdGF0aW9uLCBjb21wYXRpYmxlIHdpdGggYm90aFxuICogYENyZWF0ZUtleUltcG9ydEtleVJlc3BvbnNlYCBhbmQgYENyZWF0ZVBvbGljeUltcG9ydEtleVJlc3BvbnNlYC5cbiAqL1xuZXhwb3J0IHR5cGUgSW1wb3J0S2V5UmVzcG9uc2UgPSBDcmVhdGVLZXlJbXBvcnRLZXlSZXNwb25zZSAmIENyZWF0ZVBvbGljeUltcG9ydEtleVJlc3BvbnNlO1xuXG4vKipcbiAqIEEgdmVyaWZpZWQgaW1wb3J0IGtleSwgdXNhYmxlIGZvciBIUEtFIGVuY3J5cHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBXcmFwcGVkSW1wb3J0S2V5IHtcbiAgcmVhZG9ubHkgI3B1YmxpY0tleTogVWludDhBcnJheTtcbiAgcmVhZG9ubHkgI3NrRW5jOiBVaW50OEFycmF5O1xuICByZWFkb25seSAjZGtFbmM6IFVpbnQ4QXJyYXk7XG4gIHJlYWRvbmx5ICNleHBFcG9jaFNlY29uZHM6IGJpZ2ludDtcbiAgcmVhZG9ubHkgI2VuY2xhdmVBdHRlc3RhdGlvbjogVWludDhBcnJheTtcbiAgcmVhZG9ubHkgI2VuY2xhdmVTaWduYXR1cmU6IFVpbnQ4QXJyYXk7XG4gIHJlYWRvbmx5ICNzdWl0ZTogQ2lwaGVyU3VpdGU7XG4gICNzZW5kZXJDb250ZXh0UGFyYW1zPzogeyByZWNpcGllbnRQdWJsaWNLZXk6IENyeXB0b0tleTsgaW5mbzogQXJyYXlCdWZmZXIgfTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHJlc3AgVGhlIGltcG9ydCBrZXkgcmVzcG9uc2UgZnJvbSBDdWJlU2lnbmVyLlxuICAgKiBAcGFyYW0gc3VpdGUgVGhlIEhQS0UgY2lwaGVyc3VpdGUgdG8gdXNlIGZvciBlbmNyeXB0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihyZXNwOiBJbXBvcnRLZXlSZXNwb25zZSwgc3VpdGU6IENpcGhlclN1aXRlKSB7XG4gICAgdGhpcy4jcHVibGljS2V5ID0gZGVjb2RlQmFzZTY0KHJlc3AucHVibGljX2tleSk7XG4gICAgdGhpcy4jc2tFbmMgPSBkZWNvZGVCYXNlNjQocmVzcC5za19lbmMpO1xuICAgIHRoaXMuI2RrRW5jID0gZGVjb2RlQmFzZTY0KHJlc3AuZGtfZW5jKTtcbiAgICB0aGlzLiNleHBFcG9jaFNlY29uZHMgPSBCaWdJbnQocmVzcC5leHBpcmVzKTtcbiAgICB0aGlzLiNlbmNsYXZlQXR0ZXN0YXRpb24gPSBkZWNvZGVCYXNlNjQocmVzcC5lbmNsYXZlX2F0dGVzdGF0aW9uKTtcbiAgICB0aGlzLiNlbmNsYXZlU2lnbmF0dXJlID0gZGVjb2RlQmFzZTY0KHJlc3AuZW5jbGF2ZV9zaWduYXR1cmUpO1xuICAgIHRoaXMuI3N1aXRlID0gc3VpdGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuZCB2ZXJpZnkgYSBgV3JhcHBlZEltcG9ydEtleWAgZnJvbSBhbiBpbXBvcnQta2V5IHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcCBUaGUgcmVzcG9uc2UgZnJvbSBDdWJlU2lnbmVyIChrZXkgaW1wb3J0IG9yIHBvbGljeSBpbXBvcnQpLlxuICAgKiBAcGFyYW0gc3VidGxlIEEgU3VidGxlQ3J5cHRvIGluc3RhbmNlIHVzZWQgZm9yIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHBjcjhFeHBlY3QgVGhlIGV4cGVjdGVkIFBDUjggdmFsdWUgKGJhcmUgaGV4KS4gSWYgYG51bGxgLCB0aGUgUENSOCBjaGVjayBpcyBza2lwcGVkLlxuICAgKiAgIERlZmF1bHRzIHRvIHRoZSBDdWJpc3QgZW5jbGF2ZSBzaWduaW5nIGtleSwgd2hpY2ggaXMgY29ycmVjdCBmb3Iga2V5IGltcG9ydHMuXG4gICAqIEByZXR1cm5zIEEgbmV3bHkgY29uc3RydWN0ZWQsIHZlcmlmaWVkIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRWZXJpZnkoXG4gICAgcmVzcDogSW1wb3J0S2V5UmVzcG9uc2UsXG4gICAgc3VidGxlOiBTdWJ0bGVDcnlwdG8sXG4gICAgcGNyOEV4cGVjdDogc3RyaW5nIHwgbnVsbCA9IENVQklTVF9FSUZfU0lHTklOR19QSyxcbiAgKTogUHJvbWlzZTxXcmFwcGVkSW1wb3J0S2V5PiB7XG4gICAgY29uc3Qgc3VpdGUgPSBuZXcgQ2lwaGVyU3VpdGUoe1xuICAgICAga2VtOiBuZXcgRGhrZW1QMzg0SGtkZlNoYTM4NCgpLFxuICAgICAga2RmOiBuZXcgSGtkZlNoYTM4NCgpLFxuICAgICAgYWVhZDogbmV3IEFlczI1NkdjbSgpLFxuICAgIH0pO1xuICAgIGNvbnN0IHdpayA9IG5ldyBXcmFwcGVkSW1wb3J0S2V5KHJlc3AsIHN1aXRlKTtcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgd2lrLiN2ZXJpZnlJbXBvcnRLZXkoc3VidGxlLCBwY3I4RXhwZWN0KTtcbiAgICBjb25zdCByZWNpcGllbnRQdWJsaWNLZXkgPSBhd2FpdCBzdWl0ZS5rZW0uaW1wb3J0S2V5KFwicmF3XCIsIHdpay4jcHVibGljS2V5LCB0cnVlKTtcbiAgICB3aWsuI3NlbmRlckNvbnRleHRQYXJhbXMgPSB7IHJlY2lwaWVudFB1YmxpY0tleSwgaW5mbyB9O1xuICAgIHJldHVybiB3aWs7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoaXMgd3JhcHBlZCBpbXBvcnQga2V5LlxuICAgKlxuICAgKiBAcGFyYW0gc3VidGxlIEFuIGluc3RhbmNlIG9mIFN1YnRsZUNyeXB0byB1c2VkIGZvciB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSBwY3I4RXhwZWN0IFRoZSBleHBlY3RlZCBQQ1I4IHZhbHVlLCBvciBgbnVsbGAgdG8gc2tpcCB0aGUgY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIHNpZ25lZCBkYXRhLCBmb3IgdXNlIGFzIHRoZSBIUEtFIGBpbmZvYCBwYXJhbWV0ZXIuXG4gICAqL1xuICBhc3luYyAjdmVyaWZ5SW1wb3J0S2V5KHN1YnRsZTogU3VidGxlQ3J5cHRvLCBwY3I4RXhwZWN0OiBzdHJpbmcgfCBudWxsKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIC8vIGNoZWNrIGV4cGlyYXRpb24gZGF0ZVxuICAgIGlmIChub3dFcG9jaE1pbGxpcygpID49IHRoaXMuI2V4cEVwb2NoU2Vjb25kcyAqIDEwMDBuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBvcnQga2V5IGlzIGV4cGlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmluZ0tleSA9IGF3YWl0IHZlcmlmeUF0dGVzdGF0aW9uS2V5KHRoaXMuI2VuY2xhdmVBdHRlc3RhdGlvbiwgcGNyOEV4cGVjdCk7XG5cbiAgICAvLyB3ZSB1c2Ugc3VidGxlY3J5cHRvJ3MgaW1wbCBvZiBSU0EtUFNTIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IHJzYVBzc0tleVBhcmFtcyA9IHsgbmFtZTogXCJSU0EtUFNTXCIsIGhhc2g6IFwiU0hBLTI1NlwiIH07XG4gICAgY29uc3QgcHVia2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcInNwa2lcIiwgc2lnbmluZ0tleSwgcnNhUHNzS2V5UGFyYW1zLCB0cnVlLCBbXCJ2ZXJpZnlcIl0pO1xuICAgIGNvbnN0IHB1YmtleUFsZyA9IHB1YmtleS5hbGdvcml0aG0gYXMgdW5rbm93biBhcyB7IG1vZHVsdXNMZW5ndGg6IG51bWJlciB9O1xuXG4gICAgLy8gY29tcHV0ZSB0aGUgc2lnbmluZyBoYXNoIGFuZCB2ZXJpZnkgdGhlIHNpZ25hdHVyZVxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLiNzaWduZWREYXRhKCk7XG4gICAgY29uc3QgbWxlbiA9IE51bWJlcihCaWdJbnQocHVia2V5QWxnLm1vZHVsdXNMZW5ndGgpIC8gOG4pO1xuICAgIGNvbnN0IHJzYVBzc1BhcmFtcyA9IHsgbmFtZTogXCJSU0EtUFNTXCIsIHNhbHRMZW5ndGg6IG1sZW4gLSAyIC0gMzIgfTtcblxuICAgIGlmICghKGF3YWl0IHN1YnRsZS52ZXJpZnkocnNhUHNzUGFyYW1zLCBwdWJrZXksIHRoaXMuI2VuY2xhdmVTaWduYXR1cmUsIG1lc3NhZ2UpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW1wb3J0IGtleSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VidGxlLmRpZ2VzdChcIlNIQS0yNTZcIiwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBXcmFwcGVkSW1wb3J0S2V5IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cbiAgICpcbiAgICogQHJldHVybnMgVHJ1ZSBqdXN0IGlmIHRoaXMga2V5IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cbiAgICovXG4gIHB1YmxpYyBuZWVkc1JlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgLy8gZm9yY2UgcmVmcmVzaCBpZiB3ZSdyZSB3aXRoaW4gV0lLX1JFRlJFU0hfRUFSTFlfTUlMTElTIG9mIHRoZSBleHBpcmF0aW9uXG4gICAgcmV0dXJuIG5vd0Vwb2NoTWlsbGlzKCkgKyBXSUtfUkVGUkVTSF9FQVJMWV9NSUxMSVMgPiB0aGlzLiNleHBFcG9jaFNlY29uZHMgKiAxMDAwbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgc2lnbmluZyBoYXNoIGZvciB0aGlzIGltcG9ydCBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBieXRlcyBvdmVyIHdoaWNoIHRoZSBlbmNsYXZlIHNpZ25hdHVyZSB3YXMgY29tcHV0ZWQuXG4gICAqL1xuICAjc2lnbmVkRGF0YSgpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgIC8vIGRvbWFpbiBzZXBhcmF0aW9uIHRhZ1xuICAgICAgdG9CaWdFbmRpYW4oQmlnSW50KElNUE9SVF9LRVlfU0lHTklOR19EU1QubGVuZ3RoKSwgMiksXG4gICAgICBJTVBPUlRfS0VZX1NJR05JTkdfRFNULFxuXG4gICAgICAvLyBwdWJsaWMga2V5XG4gICAgICB0b0JpZ0VuZGlhbihCaWdJbnQodGhpcy4jcHVibGljS2V5Lmxlbmd0aCksIDIpLFxuICAgICAgdGhpcy4jcHVibGljS2V5LFxuXG4gICAgICAvLyBza19lbmNcbiAgICAgIHRvQmlnRW5kaWFuKEJpZ0ludCh0aGlzLiNza0VuYy5sZW5ndGgpLCAyKSxcbiAgICAgIHRoaXMuI3NrRW5jLFxuXG4gICAgICAvLyBka19lbmNcbiAgICAgIHRvQmlnRW5kaWFuKEJpZ0ludCh0aGlzLiNka0VuYy5sZW5ndGgpLCAyKSxcbiAgICAgIHRoaXMuI2RrRW5jLFxuXG4gICAgICAvLyA4LWJ5dGUgYmlnLWVuZGlhbiBleHBpcmF0aW9uIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoXG4gICAgICB0b0JpZ0VuZGlhbih0aGlzLiNleHBFcG9jaFNlY29uZHMsIDgpLFxuICAgIF07XG5cbiAgICByZXR1cm4gY29uY2F0QXJyYXlzKHBhcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNyeXB0IGBkYXRhYCB1c2luZyBIUEtFIHRvIHRoaXMgaW1wb3J0IGtleS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIHBsYWludGV4dCB0byBlbmNyeXB0LlxuICAgKiBAcmV0dXJucyBUaGUgYmFzZTY0LWVuY29kZWQgSFBLRSBlbmNhcHN1bGF0ZWQga2V5IChgZW5jYCkgYW5kIGNpcGhlcnRleHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW5jcnlwdChkYXRhOiBVaW50OEFycmF5KTogUHJvbWlzZTx7IGVuYzogc3RyaW5nOyBjaXBoZXJ0ZXh0OiBzdHJpbmcgfT4ge1xuICAgIC8vIFNhZmU6IGBXcmFwcGVkSW1wb3J0S2V5YCBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB0aHJvdWdoIGBjcmVhdGVBbmRWZXJpZnlgLCB3aGljaCBhbHdheXNcbiAgICAvLyBzZXRzIGAjc2VuZGVyQ29udGV4dFBhcmFtc2BcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLiNzZW5kZXJDb250ZXh0UGFyYW1zITtcbiAgICBjb25zdCBzZW5kZXIgPSBhd2FpdCB0aGlzLiNzdWl0ZS5jcmVhdGVTZW5kZXJDb250ZXh0KHBhcmFtcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuYzogZW5jb2RlVG9CYXNlNjQoc2VuZGVyLmVuYyksXG4gICAgICBjaXBoZXJ0ZXh0OiBlbmNvZGVUb0Jhc2U2NChhd2FpdCBzZW5kZXIuc2VhbChkYXRhKSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGltcG9ydCBrZXkgZmllbGRzLCBmb3IgdXNlIGluIGltcG9ydCByZXF1ZXN0cy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGltcG9ydCBrZXkgZmllbGRzLlxuICAgKi9cbiAgcHVibGljIHRvSW1wb3J0S2V5KCk6IEltcG9ydEtleSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY19rZXk6IGVuY29kZVRvQmFzZTY0KHRoaXMuI3B1YmxpY0tleSksXG4gICAgICBza19lbmM6IGVuY29kZVRvQmFzZTY0KHRoaXMuI3NrRW5jKSxcbiAgICAgIGRrX2VuYzogZW5jb2RlVG9CYXNlNjQodGhpcy4jZGtFbmMpLFxuICAgICAgZXhwaXJlczogTnVtYmVyKHRoaXMuI2V4cEVwb2NoU2Vjb25kcyksXG4gICAgfTtcbiAgfVxufVxuXG4vKlxuICogQW4gQVdTIE5pdHJvIGF0dGVzdGF0aW9uIGRvY3VtZW50XG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtbml0cm8tZW5jbGF2ZXMtbnNtLWFwaS9ibG9iLzRiODUxZjMwMDZjNmZhOThmMjNkY2ZmYjJjYmEwM2IzOWRlOWI4YWYvc3JjL2FwaS9tb2QucnMjTDIwOFxuICovXG50eXBlIEF0dGVzdGF0aW9uRG9jID0ge1xuICBtb2R1bGVfaWQ6IHN0cmluZztcbiAgZGlnZXN0OiBcIlNIQTI1NlwiIHwgXCJTSEEzODRcIiB8IFwiU0hBNTEyXCI7XG4gIHRpbWVzdGFtcDogYmlnaW50O1xuICBwY3JzOiB7IFtwY3I6IHN0cmluZ106IFVpbnQ4QXJyYXkgfTtcbiAgY2VydGlmaWNhdGU6IFVpbnQ4QXJyYXk7XG4gIGNhYnVuZGxlOiBVaW50OEFycmF5W107XG4gIHB1YmxpY19rZXk/OiBVaW50OEFycmF5O1xuICB1c2VyX2RhdGE/OiBVaW50OEFycmF5O1xuICBub25jZT86IFVpbnQ4QXJyYXk7XG59O1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBhdHRlc3RhdGlvbiBrZXkgYWdhaW5zdCB0aGUgQVdTIE5pdHJvIEVuY2xhdmVzIHNpZ25pbmdcbiAqIGtleSBhbmQgcmV0dXJucyB0aGUgYXR0ZXN0ZWQgc2lnbmluZyBrZXkuXG4gKlxuICogQHBhcmFtIGF0dEJ5dGVzIEFuIGF0dGVzdGF0aW9uIGZyb20gYW4gQVdTIG5pdHJvIGVuY2xhdmUuXG4gKiBAcGFyYW0gcGNyOEV4cGVjdCBJZiBub24tbnVsbCwgdGhlIGV4cGVjdGVkIHZhbHVlIG9mIFBDUjggaW4gdGhlIGF0dGVzdGF0aW9uLlxuICogQHJldHVybnMgVGhlIHNpZ25pbmcga2V5IHRoYXQgd2FzIGF0dGVzdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5QXR0ZXN0YXRpb25LZXkoXG4gIGF0dEJ5dGVzOiBVaW50OEFycmF5LFxuICBwY3I4RXhwZWN0OiBzdHJpbmcgfCBudWxsLFxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIC8vIGNib3IteCBpcyBiZWluZyBpbXBvcnRlZCBhcyBFU00sIHNvIHdlIG11c3QgYXN5bmNocm9ub3VzbHkgaW1wb3J0IGl0IGhlcmUuXG4gIC8vIEJlY2F1c2Ugd2Ugb25seSB1c2UgdGhhdCBhbmQgYXV0aDAvY29zZSBoZXJlLCB3ZSBpbXBvcnQgYm90aCB0aGlzIHdheS5cbiAgY29uc3QgeyBTaWduMSB9ID0gYXdhaXQgaW1wb3J0KFwiQGF1dGgwL2Nvc2VcIik7XG4gIGNvbnN0IHsgZGVjb2RlOiBjYm9yRGVjb2RlIH0gPSBhd2FpdCBpbXBvcnQoXCJjYm9yLXhcIik7XG5cbiAgeDUwOUNyeXB0b1Byb3ZpZGVyLnNldChhd2FpdCBsb2FkQ3J5cHRvKCkpO1xuXG4gIGNvbnN0IGF0dCA9IFNpZ24xLmRlY29kZShhdHRCeXRlcyk7XG4gIGNvbnN0IGF0dERvYyA9IGNib3JEZWNvZGUoYXR0LnBheWxvYWQpIGFzIEF0dGVzdGF0aW9uRG9jO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm8gcHVibGljIGtleSBpbiB0aGlzIGF0dGVzdGF0aW9uLCByZWplY3RcbiAgaWYgKCFhdHREb2MucHVibGljX2tleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVzdGF0aW9uIGRpZCBub3QgaW5jbHVkZSBhIHNpZ25pbmcgcHVibGljIGtleVwiKTtcbiAgfVxuXG4gIC8vIGlmIGEgUENSOCB2YWx1ZSBpcyBleHBlY3RlZCwgdmVyaWZ5IGl0IG1hdGNoZXNcbiAgaWYgKHBjcjhFeHBlY3QgIT09IG51bGwpIHtcbiAgICBjb25zdCBwY3I4RGF0YSA9IGF0dERvYy5wY3JzW1wiOFwiXTtcbiAgICAvLyBzbGljZSgyKSBzdHJpcHMgXCIweFwiIHByZWZpeDsgcGNyOEV4cGVjdCBpcyBiYXJlIGhleFxuICAgIGlmICghcGNyOERhdGEgfHwgcGNyOEV4cGVjdCAhPT0gZW5jb2RlVG9IZXgocGNyOERhdGEpLnNsaWNlKDIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiB3YXMgbm90IGZyb20gYW4gYXV0aG9yaXplZCBlbmNsYXZlXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIGV4cGlyYXRpb24gZGF0ZSBvZiBhdHRlc3RhdGlvblxuICBjb25zdCBub3dNcyA9IG5vd0Vwb2NoTWlsbGlzKCk7XG4gIGNvbnN0IGxhdGVzdCA9IG5vd01zICsgTUFYX0FUVEVTVEFUSU9OX0ZVVFVSRV9NSU5VVEVTICogNjBuICogMTAwMG47XG4gIGNvbnN0IGVhcmxpZXN0ID1cbiAgICBsYXRlc3QgLSAoTUFYX0FUVEVTVEFUSU9OX0ZVVFVSRV9NSU5VVEVTICsgTUFYX0FUVEVTVEFUSU9OX0FHRV9NSU5VVEVTKSAqIDYwbiAqIDEwMDBuO1xuICBpZiAoYXR0RG9jLnRpbWVzdGFtcCA8IGVhcmxpZXN0IHx8IGF0dERvYy50aW1lc3RhbXAgPiBsYXRlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiBpcyBleHBpcmVkXCIpO1xuICB9XG5cbiAgLy8gVmVyaWZ5IGNlcnRpZmljYXRlIGNoYWluIHN0YXJ0aW5nIHdpdGggQVdTIE5pdHJvIENBIGNlcnRcbiAgbGV0IHBhcmVudCA9IG5ldyBYNTA5Q2VydGlmaWNhdGUoQVdTX0NBX0NFUlQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dERvYy5jYWJ1bmRsZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNlcnQgPSBuZXcgWDUwOUNlcnRpZmljYXRlKGF0dERvYy5jYWJ1bmRsZVtpXSk7XG4gICAgaWYgKCEoYXdhaXQgY2VydC52ZXJpZnkocGFyZW50KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZXN0YXRpb24gY2VydGlmaWNhdGUgY2hhaW4gZmFpbGVkIGF0IGluZGV4ICR7aX1gKTtcbiAgICB9XG4gICAgcGFyZW50ID0gY2VydDtcbiAgfVxuICBjb25zdCBjZXJ0ID0gbmV3IFg1MDlDZXJ0aWZpY2F0ZShhdHREb2MuY2VydGlmaWNhdGUpO1xuICBpZiAoIShhd2FpdCBjZXJ0LnZlcmlmeShwYXJlbnQpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVzdGF0aW9uIGNlcnRpZmljYXRlIGNoYWluIGZhaWxlZCBhdCBsZWFmXCIpO1xuICB9XG4gIGNvbnN0IHB1YmtleSA9IGNlcnQucHVibGljS2V5O1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIGdvdCB0aGUgZXhwZWN0ZWQgcHVibGljIGtleSB0eXBlXG4gIGNvbnN0IGFsZyA9IG5ldyBBbGdvcml0aG1Qcm92aWRlcigpLnRvQXNuQWxnb3JpdGhtKHB1YmtleS5hbGdvcml0aG0pO1xuICBpZiAoYWxnLmFsZ29yaXRobSAhPSBFQ19QVUJMSUNfS0VZKSB7XG4gICAgLy8gbm90IHRoZSBleHBlY3RlZCBhbGdvcml0aG0sIGkuZS4sIGVsbGlwdGljIGN1cnZlIHNpZ25pbmdcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiBjb250YWluZWQgdW5leHBlY3RlZCBzaWduYXR1cmUgYWxnb3JpdGhtXCIpO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IEFzblBhcnNlci5wYXJzZShhbGcucGFyYW1ldGVycyEsIEVDUGFyYW1ldGVycyk7XG4gIGlmICghcGFyYW1zLm5hbWVkQ3VydmUgfHwgcGFyYW1zLm5hbWVkQ3VydmUgIT09IE5JU1RfUDM4NCkge1xuICAgIC8vIG5vdCB0aGUgZXhwZWN0ZWQgcGFyYW1zLCBpLmUuLCBOSVNUIFAzODRcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdHRlc3RhdGlvbiBjb250YWluZWQgdW5leHBlY3RlZCBzaWduYXR1cmUgYWxnb3JpdGhtXCIpO1xuICB9XG5cbiAgLy8gdmVyaWZ5IHRoZSBjb3NlIHNpZ25hdHVyZSB3aXRoIHRoZSBrZXksIHdoaWNoIHdlIHZlcmlmaWVkIGFnYWluc3RcbiAgLy8gdGhlIEFXUyBOaXRybyBDQSBjZXJ0aWZpY2F0ZSBhYm92ZVxuICBhd2FpdCBhdHQudmVyaWZ5KGF3YWl0IHB1YmtleS5leHBvcnQoKSk7XG5cbiAgcmV0dXJuIGF0dERvYy5wdWJsaWNfa2V5O1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -5,28 +5,35 @@
|
|
|
5
5
|
"url": "git+https://github.com/cubist-labs/CubeSigner-TypeScript-SDK.git",
|
|
6
6
|
"directory": "packages/key-import"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.4.
|
|
8
|
+
"version": "0.4.266",
|
|
9
9
|
"description": "Client-side key-import machinery for CubeSigner",
|
|
10
10
|
"license": "MIT OR Apache-2.0",
|
|
11
11
|
"author": "Cubist, Inc.",
|
|
12
|
+
"type": "module",
|
|
12
13
|
"main": "dist/index.js",
|
|
13
14
|
"types": "dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
14
21
|
"files": [
|
|
15
22
|
"tsconfig.json",
|
|
16
23
|
"src/**",
|
|
17
24
|
"dist/**",
|
|
18
25
|
"../../NOTICE",
|
|
19
26
|
"../../LICENSE-APACHE",
|
|
20
|
-
"../../
|
|
27
|
+
"../../LICENSE-MIT"
|
|
21
28
|
],
|
|
22
29
|
"scripts": {
|
|
23
30
|
"build": "tsc",
|
|
24
31
|
"prepack": "tsc",
|
|
25
32
|
"repl": "npx node --import tsx",
|
|
26
|
-
"test": "
|
|
33
|
+
"test": "vitest run"
|
|
27
34
|
},
|
|
28
35
|
"peerDependencies": {
|
|
29
|
-
"@cubist-labs/cubesigner-sdk": "^0.4.
|
|
36
|
+
"@cubist-labs/cubesigner-sdk": "^0.4.266"
|
|
30
37
|
},
|
|
31
38
|
"devDependencies": {
|
|
32
39
|
"tsx": "^4.19.0"
|
package/src/import.ts
CHANGED
|
@@ -8,10 +8,10 @@ import type {
|
|
|
8
8
|
} from "@cubist-labs/cubesigner-sdk";
|
|
9
9
|
import { loadSubtleCrypto } from "@cubist-labs/cubesigner-sdk";
|
|
10
10
|
|
|
11
|
-
import type { MnemonicToImport } from "./mnemonic";
|
|
12
|
-
import { newMnemonicKeyPackage } from "./mnemonic";
|
|
13
|
-
import { newRawKeyPackage } from "./raw";
|
|
14
|
-
import { WrappedImportKey } from "./wrapped_import_key";
|
|
11
|
+
import type { MnemonicToImport } from "./mnemonic.ts";
|
|
12
|
+
import { newMnemonicKeyPackage } from "./mnemonic.ts";
|
|
13
|
+
import { newRawKeyPackage } from "./raw.ts";
|
|
14
|
+
import { WrappedImportKey } from "./wrapped_import_key.ts";
|
|
15
15
|
|
|
16
16
|
// Maximum number of keys to import in a single API call
|
|
17
17
|
const MAX_IMPORTS_PER_API_CALL = 32n;
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { KeyImporter } from "./import";
|
|
2
|
-
export { MnemonicToImport } from "./mnemonic";
|
|
3
|
-
export { encryptPolicySecret, EncryptedPolicySecret } from "./policy_secret";
|
|
1
|
+
export { KeyImporter } from "./import.ts";
|
|
2
|
+
export { MnemonicToImport } from "./mnemonic.ts";
|
|
3
|
+
export { encryptPolicySecret, EncryptedPolicySecret } from "./policy_secret.ts";
|
package/src/policy_secret.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ApiClient, KeyImportKey, SecretValue } from "@cubist-labs/cubesigner-sdk";
|
|
2
2
|
import { loadSubtleCrypto } from "@cubist-labs/cubesigner-sdk";
|
|
3
|
-
import { WrappedImportKey } from "./wrapped_import_key";
|
|
3
|
+
import { WrappedImportKey } from "./wrapped_import_key.ts";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* The result of encrypting a policy secret value.
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
X509Certificate,
|
|
16
16
|
cryptoProvider as x509CryptoProvider,
|
|
17
17
|
} from "@peculiar/x509";
|
|
18
|
-
import { toBigEndian, concatArrays, nowEpochMillis } from "./util";
|
|
18
|
+
import { toBigEndian, concatArrays, nowEpochMillis } from "./util.ts";
|
|
19
19
|
|
|
20
20
|
// domain-separation tag used when generating signing hash for import key
|
|
21
21
|
export const IMPORT_KEY_SIGNING_DST = new TextEncoder().encode("CUBESIGNER_EPHEMERAL_IMPORT_P384");
|
package/tsconfig.json
ADDED