@bitgo-beta/passkey-crypto 0.0.1-beta.13 → 0.0.1-beta.131

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.
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const assert = __importStar(require("assert"));
37
37
  const sinon = __importStar(require("sinon"));
38
38
  const attachPasskeyToWallet_1 = require("../../src/attachPasskeyToWallet");
39
+ const derivePassword_1 = require("../../src/derivePassword");
39
40
  describe('attachPasskeyToWallet', function () {
40
41
  const coin = 'tbtc';
41
42
  const walletId = 'wallet-abc123';
@@ -86,15 +87,15 @@ describe('attachPasskeyToWallet', function () {
86
87
  .callsFake((path, version) => `/api/v${version ?? 1}${path}`),
87
88
  coin: sinon.stub().returns(mockBaseCoin),
88
89
  put: sinon.stub(),
89
- decrypt: sinon.stub(),
90
- encrypt: sinon.stub(),
90
+ decryptAsync: sinon.stub(),
91
+ encryptAsync: sinon.stub(),
91
92
  };
92
93
  mockProvider = {
93
94
  create: sinon.stub(),
94
95
  get: sinon.stub(),
95
96
  };
96
- mockBitGo.decrypt.returns(decryptedPrv);
97
- mockBitGo.encrypt.returns(reEncryptedPrv);
97
+ mockBitGo.decryptAsync.resolves(decryptedPrv);
98
+ mockBitGo.encryptAsync.resolves(reEncryptedPrv);
98
99
  const putSendStub = sinon.stub().returns({ result: sinon.stub().resolves(updatedKeychain) });
99
100
  mockBitGo.put.returns({ send: putSendStub });
100
101
  mockProvider.get.resolves(mockAuthResult);
@@ -110,6 +111,7 @@ describe('attachPasskeyToWallet', function () {
110
111
  device,
111
112
  existingPassphrase,
112
113
  provider: mockProvider,
114
+ encryptionVersion: 2,
113
115
  ...overrides,
114
116
  });
115
117
  }
@@ -119,8 +121,8 @@ describe('attachPasskeyToWallet', function () {
119
121
  sinon.assert.calledWith(mockWallets.get, { id: walletId });
120
122
  sinon.assert.calledOnce(mockWallet.type);
121
123
  sinon.assert.calledOnce(mockWallet.getEncryptedUserKeychain);
122
- sinon.assert.calledOnce(mockBitGo.decrypt);
123
- sinon.assert.calledWithExactly(mockBitGo.decrypt, { password: existingPassphrase, input: encryptedPrv });
124
+ sinon.assert.calledOnce(mockBitGo.decryptAsync);
125
+ sinon.assert.calledWithExactly(mockBitGo.decryptAsync, { password: existingPassphrase, input: encryptedPrv });
124
126
  // provider.get called with evalByCredential keyed on device.credentialId
125
127
  sinon.assert.calledOnce(mockProvider.get);
126
128
  const getArgs = mockProvider.get.firstCall.args[0];
@@ -142,8 +144,24 @@ describe('attachPasskeyToWallet', function () {
142
144
  // prfSalt must be base64url (URL-safe, no padding) as required by server validation
143
145
  assert.match(putBody.webauthnInfo.prfSalt, /^[A-Za-z0-9\-_]+$/);
144
146
  assert.strictEqual(typeof putBody.webauthnInfo.encryptedPrv, 'string');
147
+ // encryptAsync must be called with encryptionVersion 2
148
+ sinon.assert.calledOnce(mockBitGo.encryptAsync);
149
+ sinon.assert.calledWithMatch(mockBitGo.encryptAsync, { encryptionVersion: 2 });
145
150
  assert.strictEqual(result.id, keychainId);
146
151
  });
152
+ it('should re-encrypt the private key as a v2 Argon2id envelope', async function () {
153
+ const expectedPrfPassword = (0, derivePassword_1.derivePassword)(prfResultBuffer);
154
+ await callAttach();
155
+ // The PRF-derived password and the decrypted xprv must be passed to encryptAsync
156
+ sinon.assert.calledWithMatch(mockBitGo.encryptAsync, {
157
+ password: expectedPrfPassword,
158
+ input: decryptedPrv,
159
+ encryptionVersion: 2,
160
+ });
161
+ // The v2 blob returned by encryptAsync is what gets stored on the server
162
+ const putBody = mockBitGo.put.firstCall.returnValue.send.firstCall.args[0];
163
+ assert.strictEqual(putBody.webauthnInfo.encryptedPrv, reEncryptedPrv);
164
+ });
147
165
  it('should decode credentialId containing base64url-specific characters (- and _)', async function () {
148
166
  const deviceWithUrlChars = {
149
167
  ...device,
@@ -187,7 +205,7 @@ describe('attachPasskeyToWallet', function () {
187
205
  sinon.assert.notCalled(mockBitGo.put);
188
206
  });
189
207
  it('should propagate decrypt errors', async function () {
190
- mockBitGo.decrypt.throws(new Error('decryption failed'));
208
+ mockBitGo.decryptAsync.rejects(new Error('decryption failed'));
191
209
  await assert.rejects(() => callAttach(), (err) => {
192
210
  assert.ok(err.message.includes('decryption failed'));
193
211
  return true;
@@ -202,4 +220,4 @@ describe('attachPasskeyToWallet', function () {
202
220
  assert.strictEqual(evalKeys[0], device.credentialId);
203
221
  });
204
222
  });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLDJFQUF3RTtBQUd4RSxRQUFRLENBQUMsdUJBQXVCLEVBQUU7SUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDakMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7SUFDdEMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7SUFDNUMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7SUFDdEMsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNoRCxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztJQUUxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFzQjtRQUNoQyxFQUFFLEVBQUUscUJBQXFCO1FBQ3pCLFlBQVksRUFBRSxhQUFhO1FBQzNCLE9BQU8sRUFBRSw2Q0FBNkM7UUFDdEQsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFzQjtRQUN4QyxTQUFTLEVBQUUsZUFBZTtRQUMxQixZQUFZLEVBQUUsYUFBYTtRQUMzQixPQUFPLEVBQUUsUUFBUTtLQUNsQixDQUFDO0lBRUYsTUFBTSxlQUFlLEdBQUc7UUFDdEIsRUFBRSxFQUFFLFVBQVU7UUFDZCxHQUFHLEVBQUUsVUFBVTtRQUNmLElB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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGF0dGFjaFBhc3NrZXlUb1dhbGxldCB9IGZyb20gJy4uLy4uL3NyYy9hdHRhY2hQYXNza2V5VG9XYWxsZXQnO1xuaW1wb3J0IHsgV2ViQXV0aG5PdHBEZXZpY2UsIFBhc3NrZXlBdXRoUmVzdWx0LCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc3JjL3dlYkF1dGhuVHlwZXMnO1xuXG5kZXNjcmliZSgnYXR0YWNoUGFzc2tleVRvV2FsbGV0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gJ3RidGMnO1xuICBjb25zdCB3YWxsZXRJZCA9ICd3YWxsZXQtYWJjMTIzJztcbiAgY29uc3Qga2V5Y2hhaW5JZCA9ICdrZXktdXNlci1pZCc7XG4gIGNvbnN0IGVudGVycHJpc2VJZCA9ICdlbnRlcnByaXNlLXh5eic7XG4gIGNvbnN0IGVuY3J5cHRlZFBydiA9ICdlbmNyeXB0ZWQtcHJ2LXN0cmluZyc7XG4gIGNvbnN0IGRlY3J5cHRlZFBydiA9ICd4cHJ2LWRlY3J5cHRlZCc7XG4gIGNvbnN0IGV4aXN0aW5nUGFzc3BocmFzZSA9ICdjb3JyZWN0LXBhc3NwaHJhc2UnO1xuICBjb25zdCByZUVuY3J5cHRlZFBydiA9ICdyZS1lbmNyeXB0ZWQtcHJ2JztcblxuICBjb25zdCBwcmZSZXN1bHRCdWZmZXIgPSBuZXcgVWludDhBcnJheShbMHgxZSwgMHg1YywgMHhiNCwgMHg3OF0pLmJ1ZmZlcjtcblxuICBjb25zdCBkZXZpY2U6IFdlYkF1dGhuT3RwRGV2aWNlID0ge1xuICAgIGlkOiAnbW9uZ28tb2JqZWN0LWlkLTEyMycsXG4gICAgY3JlZGVudGlhbElkOiAnY3JlZC1pZC00NTYnLFxuICAgIHByZlNhbHQ6ICdacUo2NE0yZEw2NXpuMi1KeGQ1OFNNTjJJTGM5UWpiQ0Z4VVRHSGRfTEM4JyxcbiAgICBpc1Bhc3NrZXk6IHRydWUsXG4gIH07XG5cbiAgY29uc3QgbW9ja0F1dGhSZXN1bHQ6IFBhc3NrZXlBdXRoUmVzdWx0ID0ge1xuICAgIHByZlJlc3VsdDogcHJmUmVzdWx0QnVmZmVyLFxuICAgIGNyZWRlbnRpYWxJZDogJ2NyZWQtaWQtNDU2JyxcbiAgICBvdHBDb2RlOiAnMTIzNDU2JyxcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkS2V5Y2hhaW4gPSB7XG4gICAgaWQ6IGtleWNoYWluSWQsXG4gICAgcHViOiAneHB1Yi0xMjMnLFxuICAgIHR5cGU6ICdpbmRlcGVuZGVudCcgYXMgY29uc3QsXG4gICAgZW5jcnlwdGVkUHJ2LFxuICB9O1xuXG4gIGxldCBtb2NrV2FsbGV0OiB7XG4gICAgdHlwZTogc2lub24uU2lub25TdHViO1xuICAgIHRvSlNPTjogc2lub24uU2lub25TdHViO1xuICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbjogc2lub24uU2lub25TdHViO1xuICB9O1xuXG4gIGxldCBtb2NrV2FsbGV0czoge1xuICAgIGdldDogc2lub24uU2lub25TdHViO1xuICB9O1xuXG4gIGxldCBtb2NrQmFzZUNvaW46IHtcbiAgICB3YWxsZXRzOiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgbGV0IG1vY2tCaXRHbzoge1xuICAgIHVybDogc2lub24uU2lub25TdHViO1xuICAgIGNvaW46IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBwdXQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBkZWNyeXB0OiBzaW5vbi5TaW5vblN0dWI7XG4gICAgZW5jcnlwdDogc2lub24uU2lub25TdHViO1xuICB9O1xuXG4gIGxldCBtb2NrUHJvdmlkZXI6IHtcbiAgICBjcmVhdGU6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBnZXQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrV2FsbGV0ID0ge1xuICAgICAgdHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ2hvdCcpLFxuICAgICAgdG9KU09OOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGVudGVycHJpc2U6IGVudGVycHJpc2VJZCB9KSxcbiAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbjogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6IGtleWNoYWluSWQsIGVuY3J5cHRlZFBydiB9KSxcbiAgICB9O1xuXG4gICAgbW9ja1dhbGxldHMgPSB7XG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrV2FsbGV0KSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgd2FsbGV0czogc2lub24uc3R1YigpLnJldHVybnMobW9ja1dhbGxldHMpLFxuICAgIH07XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uXG4gICAgICAgIC5zdHViPFtwYXRoOiBzdHJpbmcsIHZlcnNpb24/OiBudW1iZXJdLCBzdHJpbmc+KClcbiAgICAgICAgLmNhbGxzRmFrZSgocGF0aCwgdmVyc2lvbikgPT4gYC9hcGkvdiR7dmVyc2lvbiA/PyAxfSR7cGF0aH1gKSxcbiAgICAgIGNvaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tCYXNlQ29pbiksXG4gICAgICBwdXQ6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGRlY3J5cHQ6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGVuY3J5cHQ6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0JpdEdvLmRlY3J5cHQucmV0dXJucyhkZWNyeXB0ZWRQcnYpO1xuICAgIG1vY2tCaXRHby5lbmNyeXB0LnJldHVybnMocmVFbmNyeXB0ZWRQcnYpO1xuXG4gICAgY29uc3QgcHV0U2VuZFN0dWIgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHVwZGF0ZWRLZXljaGFpbikgfSk7XG4gICAgbW9ja0JpdEdvLnB1dC5yZXR1cm5zKHsgc2VuZDogcHV0U2VuZFN0dWIgfSk7XG5cbiAgICBtb2NrUHJvdmlkZXIuZ2V0LnJlc29sdmVzKG1vY2tBdXRoUmVzdWx0KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbGxBdHRhY2gob3ZlcnJpZGVzPzogUGFydGlhbDxQYXJhbWV0ZXJzPHR5cGVvZiBhdHRhY2hQYXNza2V5VG9XYWxsZXQ+WzBdPikge1xuICAgIHJldHVybiBhdHRhY2hQYXNza2V5VG9XYWxsZXQoe1xuICAgICAgYml0Z286IG1vY2tCaXRHbyBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGF0dGFjaFBhc3NrZXlUb1dhbGxldD5bMF1bJ2JpdGdvJ10sXG4gICAgICBjb2luLFxuICAgICAgd2FsbGV0SWQsXG4gICAgICBkZXZpY2UsXG4gICAgICBleGlzdGluZ1Bhc3NwaHJhc2UsXG4gICAgICBwcm92aWRlcjogbW9ja1Byb3ZpZGVyIGFzIHVua25vd24gYXMgV2ViQXV0aG5Qcm92aWRlcixcbiAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICB9KTtcbiAgfVxuXG4gIGl0KCdzaG91bGQgYXR0YWNoIGEgcGFzc2tleSBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCBjb2luKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrV2FsbGV0cy5nZXQsIHsgaWQ6IHdhbGxldElkIH0pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tXYWxsZXQudHlwZSk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja1dhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRHby5kZWNyeXB0KTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aEV4YWN0bHkobW9ja0JpdEdvLmRlY3J5cHQsIHsgcGFzc3dvcmQ6IGV4aXN0aW5nUGFzc3BocmFzZSwgaW5wdXQ6IGVuY3J5cHRlZFBydiB9KTtcblxuICAgIC8vIHByb3ZpZGVyLmdldCBjYWxsZWQgd2l0aCBldmFsQnlDcmVkZW50aWFsIGtleWVkIG9uIGRldmljZS5jcmVkZW50aWFsSWRcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShtb2NrUHJvdmlkZXIuZ2V0KTtcbiAgICBjb25zdCBnZXRBcmdzID0gbW9ja1Byb3ZpZGVyLmdldC5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQub2soZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdldEFyZ3MuZXZhbEJ5Q3JlZGVudGlhbFtkZXZpY2UuY3JlZGVudGlhbElkXSwgJ3N0cmluZycpO1xuXG4gICAgLy8gYWxsb3dDcmVkZW50aWFscyBtdXN0IGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjcmVkZW50aWFsIElEIGFzIGFuIEFycmF5QnVmZmVyXG4gICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoZ2V0QXJncy5wdWJsaWNLZXkuYWxsb3dDcmVkZW50aWFscykpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHNbMF0udHlwZSwgJ3B1YmxpYy1rZXknKTtcbiAgICBhc3NlcnQub2soZ2V0QXJncy5wdWJsaWNLZXkuYWxsb3dDcmVkZW50aWFsc1swXS5pZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcblxuICAgIC8vIFBVVCBjYWxsZWQgd2l0aCBjb3JyZWN0IHNoYXBlXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLnB1dCk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGgobW9ja0JpdEdvLnB1dCwgYC9hcGkvdjIvJHtjb2lufS9rZXkvJHtrZXljaGFpbklkfWApO1xuICAgIGNvbnN0IHNlbmRTdHViID0gbW9ja0JpdEdvLnB1dC5maXJzdENhbGwucmV0dXJuVmFsdWUuc2VuZDtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShzZW5kU3R1Yik7XG4gICAgY29uc3QgcHV0Qm9keSA9IHNlbmRTdHViLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5vayhwdXRCb2R5LndlYmF1dGhuSW5mbyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHB1dEJvZHkud2ViYXV0aG5JbmZvLm90cERldmljZUlkLCBkZXZpY2UuaWQpO1xuICAgIC8vIHByZlNhbHQgbXVzdCBiZSBiYXNlNjR1cmwgKFVSTC1zYWZlLCBubyBwYWRkaW5nKSBhcyByZXF1aXJlZCBieSBzZXJ2ZXIgdmFsaWRhdGlvblxuICAgIGFzc2VydC5tYXRjaChwdXRCb2R5LndlYmF1dGhuSW5mby5wcmZTYWx0LCAvXltBLVphLXowLTlcXC1fXSskLyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwdXRCb2R5LndlYmF1dGhuSW5mby5lbmNyeXB0ZWRQcnYsICdzdHJpbmcnKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaWQsIGtleWNoYWluSWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY29kZSBjcmVkZW50aWFsSWQgY29udGFpbmluZyBiYXNlNjR1cmwtc3BlY2lmaWMgY2hhcmFjdGVycyAoLSBhbmQgXyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZGV2aWNlV2l0aFVybENoYXJzOiBXZWJBdXRobk90cERldmljZSA9IHtcbiAgICAgIC4uLmRldmljZSxcbiAgICAgIGNyZWRlbnRpYWxJZDogJ2FiYy1kZWZfZ2hpK2prbCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxBdHRhY2goeyBkZXZpY2U6IGRldmljZVdpdGhVcmxDaGFycyB9KTtcbiAgICBhc3NlcnQub2socmVzdWx0KTtcblxuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5vayhnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIGRldmljZS5wcmZTYWx0IGlzIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXZpY2VOb1ByZjogV2ViQXV0aG5PdHBEZXZpY2UgPSB7IC4uLmRldmljZSwgcHJmU2FsdDogdW5kZWZpbmVkIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goeyBkZXZpY2U6IGRldmljZU5vUHJmIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5tZXNzYWdlLCAnUFJGIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IHBhc3NrZXkuJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5jb2luKTtcbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5wdXQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldCBpcyBub3QgYSBob3Qgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tXYWxsZXQudHlwZS5yZXR1cm5zKCdjb2xkJyk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goKSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGEgaG90IHdhbGxldCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0IGhhcyBubyBlbnRlcnByaXNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tXYWxsZXQudG9KU09OLnJldHVybnMoeyBlbnRlcnByaXNlOiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goKSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnaGFzIG5vIGVudGVycHJpc2UnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgUFJGIGFzc2VydGlvbiByZXR1cm5zIG5vIHJlc3VsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrUHJvdmlkZXIuZ2V0LnJlc29sdmVzKHsgLi4ubW9ja0F1dGhSZXN1bHQsIHByZlJlc3VsdDogdW5kZWZpbmVkIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiBjYWxsQXR0YWNoKCksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1BSRiBhc3NlcnRpb24gZGlkIG5vdCByZXR1cm4gYSByZXN1bHQnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5wdXQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3BhZ2F0ZSBkZWNyeXB0IGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrQml0R28uZGVjcnlwdC50aHJvd3MobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIGRldmljZS5jcmVkZW50aWFsSWQgYXMgdGhlIGtleSBpbiBldmFsQnlDcmVkZW50aWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGNvbnN0IGV2YWxLZXlzID0gT2JqZWN0LmtleXMoZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXNbMF0sIGRldmljZS5jcmVkZW50aWFsSWQpO1xuICB9KTtcbn0pO1xuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYXR0YWNoUGFzc2tleVRvV2FsbGV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLDJFQUF3RTtBQUN4RSw2REFBMEQ7QUFHMUQsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0lBQzVDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0lBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7SUFDaEQsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7SUFFMUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV4RSxNQUFNLE1BQU0sR0FBc0I7UUFDaEMsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixZQUFZLEVBQUUsYUFBYTtRQUMzQixPQUFPLEVBQUUsNkNBQTZDO1FBQ3RELFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBc0I7UUFDeEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsWUFBWSxFQUFFLGFBQWE7UUFDM0IsT0FBTyxFQUFFLFFBQVE7S0FDbEIsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEVBQUUsRUFBRSxVQUFVO1FBQ2QsR0FBRyxFQUFF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QyxDQUFDLENBQUM7UUFFL0QsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFDbEIsQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztRQUN2RSxNQUFNLFVBQVUsRUFBRSxDQUFDO1FBRW5CLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYXR0YWNoUGFzc2tleVRvV2FsbGV0IH0gZnJvbSAnLi4vLi4vc3JjL2F0dGFjaFBhc3NrZXlUb1dhbGxldCc7XG5pbXBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4uLy4uL3NyYy9kZXJpdmVQYXNzd29yZCc7XG5pbXBvcnQgeyBXZWJBdXRobk90cERldmljZSwgUGFzc2tleUF1dGhSZXN1bHQsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zcmMvd2ViQXV0aG5UeXBlcyc7XG5cbmRlc2NyaWJlKCdhdHRhY2hQYXNza2V5VG9XYWxsZXQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW4gPSAndGJ0Yyc7XG4gIGNvbnN0IHdhbGxldElkID0gJ3dhbGxldC1hYmMxMjMnO1xuICBjb25zdCBrZXljaGFpbklkID0gJ2tleS11c2VyLWlkJztcbiAgY29uc3QgZW50ZXJwcmlzZUlkID0gJ2VudGVycHJpc2UteHl6JztcbiAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gJ2VuY3J5cHRlZC1wcnYtc3RyaW5nJztcbiAgY29uc3QgZGVjcnlwdGVkUHJ2ID0gJ3hwcnYtZGVjcnlwdGVkJztcbiAgY29uc3QgZXhpc3RpbmdQYXNzcGhyYXNlID0gJ2NvcnJlY3QtcGFzc3BocmFzZSc7XG4gIGNvbnN0IHJlRW5jcnlwdGVkUHJ2ID0gJ3JlLWVuY3J5cHRlZC1wcnYnO1xuXG4gIGNvbnN0IHByZlJlc3VsdEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KFsweDFlLCAweDVjLCAweGI0LCAweDc4XSkuYnVmZmVyO1xuXG4gIGNvbnN0IGRldmljZTogV2ViQXV0aG5PdHBEZXZpY2UgPSB7XG4gICAgaWQ6ICdtb25nby1vYmplY3QtaWQtMTIzJyxcbiAgICBjcmVkZW50aWFsSWQ6ICdjcmVkLWlkLTQ1NicsXG4gICAgcHJmU2FsdDogJ1pxSjY0TTJkTDY1em4yLUp4ZDU4U01OMklMYzlRamJDRnhVVEdIZF9MQzgnLFxuICAgIGlzUGFzc2tleTogdHJ1ZSxcbiAgfTtcblxuICBjb25zdCBtb2NrQXV0aFJlc3VsdDogUGFzc2tleUF1dGhSZXN1bHQgPSB7XG4gICAgcHJmUmVzdWx0OiBwcmZSZXN1bHRCdWZmZXIsXG4gICAgY3JlZGVudGlhbElkOiAnY3JlZC1pZC00NTYnLFxuICAgIG90cENvZGU6ICcxMjM0NTYnLFxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRLZXljaGFpbiA9IHtcbiAgICBpZDoga2V5Y2hhaW5JZCxcbiAgICBwdWI6ICd4cHViLTEyMycsXG4gICAgdHlwZTogJ2luZGVwZW5kZW50JyBhcyBjb25zdCxcbiAgICBlbmNyeXB0ZWRQcnYsXG4gIH07XG5cbiAgbGV0IG1vY2tXYWxsZXQ6IHtcbiAgICB0eXBlOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgdG9KU09OOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluOiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgbGV0IG1vY2tXYWxsZXRzOiB7XG4gICAgZ2V0OiBzaW5vbi5TaW5vblN0dWI7XG4gIH07XG5cbiAgbGV0IG1vY2tCYXNlQ29pbjoge1xuICAgIHdhbGxldHM6IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBsZXQgbW9ja0JpdEdvOiB7XG4gICAgdXJsOiBzaW5vbi5TaW5vblN0dWI7XG4gICAgY29pbjogc2lub24uU2lub25TdHViO1xuICAgIHB1dDogc2lub24uU2lub25TdHViO1xuICAgIGRlY3J5cHRBc3luYzogc2lub24uU2lub25TdHViO1xuICAgIGVuY3J5cHRBc3luYzogc2lub24uU2lub25TdHViO1xuICB9O1xuXG4gIGxldCBtb2NrUHJvdmlkZXI6IHtcbiAgICBjcmVhdGU6IHNpbm9uLlNpbm9uU3R1YjtcbiAgICBnZXQ6IHNpbm9uLlNpbm9uU3R1YjtcbiAgfTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrV2FsbGV0ID0ge1xuICAgICAgdHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ2hvdCcpLFxuICAgICAgdG9KU09OOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGVudGVycHJpc2U6IGVudGVycHJpc2VJZCB9KSxcbiAgICAgIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbjogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6IGtleWNoYWluSWQsIGVuY3J5cHRlZFBydiB9KSxcbiAgICB9O1xuXG4gICAgbW9ja1dhbGxldHMgPSB7XG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrV2FsbGV0KSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgd2FsbGV0czogc2lub24uc3R1YigpLnJldHVybnMobW9ja1dhbGxldHMpLFxuICAgIH07XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uXG4gICAgICAgIC5zdHViPFtwYXRoOiBzdHJpbmcsIHZlcnNpb24/OiBudW1iZXJdLCBzdHJpbmc+KClcbiAgICAgICAgLmNhbGxzRmFrZSgocGF0aCwgdmVyc2lvbikgPT4gYC9hcGkvdiR7dmVyc2lvbiA/PyAxfSR7cGF0aH1gKSxcbiAgICAgIGNvaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tCYXNlQ29pbiksXG4gICAgICBwdXQ6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGRlY3J5cHRBc3luYzogc2lub24uc3R1YigpLFxuICAgICAgZW5jcnlwdEFzeW5jOiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tQcm92aWRlciA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLFxuICAgICAgZ2V0OiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tCaXRHby5kZWNyeXB0QXN5bmMucmVzb2x2ZXMoZGVjcnlwdGVkUHJ2KTtcbiAgICBtb2NrQml0R28uZW5jcnlwdEFzeW5jLnJlc29sdmVzKHJlRW5jcnlwdGVkUHJ2KTtcblxuICAgIGNvbnN0IHB1dFNlbmRTdHViID0gc2lub24uc3R1YigpLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh1cGRhdGVkS2V5Y2hhaW4pIH0pO1xuICAgIG1vY2tCaXRHby5wdXQucmV0dXJucyh7IHNlbmQ6IHB1dFNlbmRTdHViIH0pO1xuXG4gICAgbW9ja1Byb3ZpZGVyLmdldC5yZXNvbHZlcyhtb2NrQXV0aFJlc3VsdCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBjYWxsQXR0YWNoKG92ZXJyaWRlcz86IFBhcnRpYWw8UGFyYW1ldGVyczx0eXBlb2YgYXR0YWNoUGFzc2tleVRvV2FsbGV0PlswXT4pIHtcbiAgICByZXR1cm4gYXR0YWNoUGFzc2tleVRvV2FsbGV0KHtcbiAgICAgIGJpdGdvOiBtb2NrQml0R28gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBhdHRhY2hQYXNza2V5VG9XYWxsZXQ+WzBdWydiaXRnbyddLFxuICAgICAgY29pbixcbiAgICAgIHdhbGxldElkLFxuICAgICAgZGV2aWNlLFxuICAgICAgZXhpc3RpbmdQYXNzcGhyYXNlLFxuICAgICAgcHJvdmlkZXI6IG1vY2tQcm92aWRlciBhcyB1bmtub3duIGFzIFdlYkF1dGhuUHJvdmlkZXIsXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogMixcbiAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICB9KTtcbiAgfVxuXG4gIGl0KCdzaG91bGQgYXR0YWNoIGEgcGFzc2tleSBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5jb2luLCBjb2luKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrV2FsbGV0cy5nZXQsIHsgaWQ6IHdhbGxldElkIH0pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tXYWxsZXQudHlwZSk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja1dhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4pO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRHby5kZWNyeXB0QXN5bmMpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoRXhhY3RseShtb2NrQml0R28uZGVjcnlwdEFzeW5jLCB7IHBhc3N3b3JkOiBleGlzdGluZ1Bhc3NwaHJhc2UsIGlucHV0OiBlbmNyeXB0ZWRQcnYgfSk7XG5cbiAgICAvLyBwcm92aWRlci5nZXQgY2FsbGVkIHdpdGggZXZhbEJ5Q3JlZGVudGlhbCBrZXllZCBvbiBkZXZpY2UuY3JlZGVudGlhbElkXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja1Byb3ZpZGVyLmdldCk7XG4gICAgY29uc3QgZ2V0QXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0Lm9rKGdldEFyZ3MuZXZhbEJ5Q3JlZGVudGlhbCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnZXRBcmdzLmV2YWxCeUNyZWRlbnRpYWxbZGV2aWNlLmNyZWRlbnRpYWxJZF0sICdzdHJpbmcnKTtcblxuICAgIC8vIGFsbG93Q3JlZGVudGlhbHMgbXVzdCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgY3JlZGVudGlhbCBJRCBhcyBhbiBBcnJheUJ1ZmZlclxuICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHMpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0QXJncy5wdWJsaWNLZXkuYWxsb3dDcmVkZW50aWFscy5sZW5ndGgsIDEpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzWzBdLnR5cGUsICdwdWJsaWMta2V5Jyk7XG4gICAgYXNzZXJ0Lm9rKGdldEFyZ3MucHVibGljS2V5LmFsbG93Q3JlZGVudGlhbHNbMF0uaWQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG5cbiAgICAvLyBQVVQgY2FsbGVkIHdpdGggY29ycmVjdCBzaGFwZVxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRHby5wdXQpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoKG1vY2tCaXRHby5wdXQsIGAvYXBpL3YyLyR7Y29pbn0va2V5LyR7a2V5Y2hhaW5JZH1gKTtcbiAgICBjb25zdCBzZW5kU3R1YiA9IG1vY2tCaXRHby5wdXQuZmlyc3RDYWxsLnJldHVyblZhbHVlLnNlbmQ7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2VuZFN0dWIpO1xuICAgIGNvbnN0IHB1dEJvZHkgPSBzZW5kU3R1Yi5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQub2socHV0Qm9keS53ZWJhdXRobkluZm8pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwdXRCb2R5LndlYmF1dGhuSW5mby5vdHBEZXZpY2VJZCwgZGV2aWNlLmlkKTtcbiAgICAvLyBwcmZTYWx0IG11c3QgYmUgYmFzZTY0dXJsIChVUkwtc2FmZSwgbm8gcGFkZGluZykgYXMgcmVxdWlyZWQgYnkgc2VydmVyIHZhbGlkYXRpb25cbiAgICBhc3NlcnQubWF0Y2gocHV0Qm9keS53ZWJhdXRobkluZm8ucHJmU2FsdCwgL15bQS1aYS16MC05XFwtX10rJC8pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcHV0Qm9keS53ZWJhdXRobkluZm8uZW5jcnlwdGVkUHJ2LCAnc3RyaW5nJyk7XG5cbiAgICAvLyBlbmNyeXB0QXN5bmMgbXVzdCBiZSBjYWxsZWQgd2l0aCBlbmNyeXB0aW9uVmVyc2lvbiAyXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLmVuY3J5cHRBc3luYyk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhNYXRjaChtb2NrQml0R28uZW5jcnlwdEFzeW5jLCB7IGVuY3J5cHRpb25WZXJzaW9uOiAyIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5pZCwga2V5Y2hhaW5JZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmUtZW5jcnlwdCB0aGUgcHJpdmF0ZSBrZXkgYXMgYSB2MiBBcmdvbjJpZCBlbnZlbG9wZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBleHBlY3RlZFByZlBhc3N3b3JkID0gZGVyaXZlUGFzc3dvcmQocHJmUmVzdWx0QnVmZmVyKTtcblxuICAgIGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIC8vIFRoZSBQUkYtZGVyaXZlZCBwYXNzd29yZCBhbmQgdGhlIGRlY3J5cHRlZCB4cHJ2IG11c3QgYmUgcGFzc2VkIHRvIGVuY3J5cHRBc3luY1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoTWF0Y2gobW9ja0JpdEdvLmVuY3J5cHRBc3luYywge1xuICAgICAgcGFzc3dvcmQ6IGV4cGVjdGVkUHJmUGFzc3dvcmQsXG4gICAgICBpbnB1dDogZGVjcnlwdGVkUHJ2LFxuICAgICAgZW5jcnlwdGlvblZlcnNpb246IDIsXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdjIgYmxvYiByZXR1cm5lZCBieSBlbmNyeXB0QXN5bmMgaXMgd2hhdCBnZXRzIHN0b3JlZCBvbiB0aGUgc2VydmVyXG4gICAgY29uc3QgcHV0Qm9keSA9IG1vY2tCaXRHby5wdXQuZmlyc3RDYWxsLnJldHVyblZhbHVlLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHB1dEJvZHkud2ViYXV0aG5JbmZvLmVuY3J5cHRlZFBydiwgcmVFbmNyeXB0ZWRQcnYpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlY29kZSBjcmVkZW50aWFsSWQgY29udGFpbmluZyBiYXNlNjR1cmwtc3BlY2lmaWMgY2hhcmFjdGVycyAoLSBhbmQgXyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZGV2aWNlV2l0aFVybENoYXJzOiBXZWJBdXRobk90cERldmljZSA9IHtcbiAgICAgIC4uLmRldmljZSxcbiAgICAgIGNyZWRlbnRpYWxJZDogJ2FiYy1kZWZfZ2hpK2prbCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxBdHRhY2goeyBkZXZpY2U6IGRldmljZVdpdGhVcmxDaGFycyB9KTtcbiAgICBhc3NlcnQub2socmVzdWx0KTtcblxuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5vayhnZXRBcmdzLnB1YmxpY0tleS5hbGxvd0NyZWRlbnRpYWxzWzBdLmlkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIGRldmljZS5wcmZTYWx0IGlzIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXZpY2VOb1ByZjogV2ViQXV0aG5PdHBEZXZpY2UgPSB7IC4uLmRldmljZSwgcHJmU2FsdDogdW5kZWZpbmVkIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goeyBkZXZpY2U6IGRldmljZU5vUHJmIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5tZXNzYWdlLCAnUFJGIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IHBhc3NrZXkuJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5jb2luKTtcbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5wdXQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGlmIHdhbGxldCBpcyBub3QgYSBob3Qgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tXYWxsZXQudHlwZS5yZXR1cm5zKCdjb2xkJyk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goKSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGEgaG90IHdhbGxldCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0IGhhcyBubyBlbnRlcnByaXNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tXYWxsZXQudG9KU09OLnJldHVybnMoeyBlbnRlcnByaXNlOiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGNhbGxBdHRhY2goKSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnaGFzIG5vIGVudGVycHJpc2UnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgUFJGIGFzc2VydGlvbiByZXR1cm5zIG5vIHJlc3VsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrUHJvdmlkZXIuZ2V0LnJlc29sdmVzKHsgLi4ubW9ja0F1dGhSZXN1bHQsIHByZlJlc3VsdDogdW5kZWZpbmVkIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiBjYWxsQXR0YWNoKCksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ1BSRiBhc3NlcnRpb24gZGlkIG5vdCByZXR1cm4gYSByZXN1bHQnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5wdXQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3BhZ2F0ZSBkZWNyeXB0IGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrQml0R28uZGVjcnlwdEFzeW5jLnJlamVjdHMobmV3IEVycm9yKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gY2FsbEF0dGFjaCgpLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdkZWNyeXB0aW9uIGZhaWxlZCcpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLnB1dCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdXNlIGRldmljZS5jcmVkZW50aWFsSWQgYXMgdGhlIGtleSBpbiBldmFsQnlDcmVkZW50aWFsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGNhbGxBdHRhY2goKTtcblxuICAgIGNvbnN0IGdldEFyZ3MgPSBtb2NrUHJvdmlkZXIuZ2V0LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGNvbnN0IGV2YWxLZXlzID0gT2JqZWN0LmtleXMoZ2V0QXJncy5ldmFsQnlDcmVkZW50aWFsKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXMubGVuZ3RoLCAxKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXZhbEtleXNbMF0sIGRldmljZS5jcmVkZW50aWFsSWQpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base64url.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64url.test.d.ts","sourceRoot":"","sources":["../../../test/unit/base64url.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const base64url_1 = require("../../src/base64url");
38
+ describe('base64url helpers', function () {
39
+ describe('toBase64Url', function () {
40
+ it('replaces +, / and strips padding', function () {
41
+ assert.strictEqual((0, base64url_1.toBase64Url)('a+b/c=='), 'a-b_c');
42
+ });
43
+ it('is a no-op on already-base64url input', function () {
44
+ assert.strictEqual((0, base64url_1.toBase64Url)('a-b_c'), 'a-b_c');
45
+ });
46
+ it('handles empty string', function () {
47
+ assert.strictEqual((0, base64url_1.toBase64Url)(''), '');
48
+ });
49
+ });
50
+ describe('bufferToBase64Url', function () {
51
+ it('encodes a Buffer to unpadded base64url', function () {
52
+ // bytes that produce + and / in standard base64
53
+ const buf = Buffer.from([0xfb, 0xff, 0xbf]);
54
+ assert.strictEqual(buf.toString('base64'), '+/+/');
55
+ assert.strictEqual((0, base64url_1.bufferToBase64Url)(buf), '-_-_');
56
+ });
57
+ it('encodes an ArrayBuffer to unpadded base64url', function () {
58
+ const ab = new Uint8Array([0xff, 0xfe, 0xfd]).buffer;
59
+ assert.strictEqual((0, base64url_1.bufferToBase64Url)(ab), '__79');
60
+ });
61
+ });
62
+ describe('base64UrlToBuffer', function () {
63
+ it('round-trips through bufferToBase64Url', function () {
64
+ const original = Buffer.from([0x00, 0xff, 0x10, 0x20, 0xab, 0xcd]);
65
+ const encoded = (0, base64url_1.bufferToBase64Url)(original);
66
+ const decoded = (0, base64url_1.base64UrlToBuffer)(encoded);
67
+ assert.deepStrictEqual(decoded, original);
68
+ });
69
+ it('decodes base64url with - and _ chars', function () {
70
+ const decoded = (0, base64url_1.base64UrlToBuffer)('-_-_');
71
+ assert.deepStrictEqual(decoded, Buffer.from([0xfb, 0xff, 0xbf]));
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTY0dXJsLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvYmFzZTY0dXJsLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbURBQXdGO0FBRXhGLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsdUJBQVcsRUFBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsdUJBQVcsRUFBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFBRTtZQUN6QixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsdUJBQVcsRUFBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRTtZQUMzQyxnREFBZ0Q7WUFDaEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDZCQUFpQixFQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFO1lBQ2pELE1BQU0sRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNyRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNkJBQWlCLEVBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFpQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWlCLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBQSw2QkFBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBiYXNlNjRVcmxUb0J1ZmZlciwgYnVmZmVyVG9CYXNlNjRVcmwsIHRvQmFzZTY0VXJsIH0gZnJvbSAnLi4vLi4vc3JjL2Jhc2U2NHVybCc7XG5cbmRlc2NyaWJlKCdiYXNlNjR1cmwgaGVscGVycycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ3RvQmFzZTY0VXJsJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdyZXBsYWNlcyArLCAvIGFuZCBzdHJpcHMgcGFkZGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0Jhc2U2NFVybCgnYStiL2M9PScpLCAnYS1iX2MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBhIG5vLW9wIG9uIGFscmVhZHktYmFzZTY0dXJsIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQmFzZTY0VXJsKCdhLWJfYycpLCAnYS1iX2MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0Jhc2U2NFVybCgnJyksICcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1ZmZlclRvQmFzZTY0VXJsJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdlbmNvZGVzIGEgQnVmZmVyIHRvIHVucGFkZGVkIGJhc2U2NHVybCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGJ5dGVzIHRoYXQgcHJvZHVjZSArIGFuZCAvIGluIHN0YW5kYXJkIGJhc2U2NFxuICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oWzB4ZmIsIDB4ZmYsIDB4YmZdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWYudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnKy8rLycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1ZmZlclRvQmFzZTY0VXJsKGJ1ZiksICctXy1fJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZW5jb2RlcyBhbiBBcnJheUJ1ZmZlciB0byB1bnBhZGRlZCBiYXNlNjR1cmwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhYiA9IG5ldyBVaW50OEFycmF5KFsweGZmLCAweGZlLCAweGZkXSkuYnVmZmVyO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1ZmZlclRvQmFzZTY0VXJsKGFiKSwgJ19fNzknKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Jhc2U2NFVybFRvQnVmZmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdyb3VuZC10cmlwcyB0aHJvdWdoIGJ1ZmZlclRvQmFzZTY0VXJsJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSBCdWZmZXIuZnJvbShbMHgwMCwgMHhmZiwgMHgxMCwgMHgyMCwgMHhhYiwgMHhjZF0pO1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGJ1ZmZlclRvQmFzZTY0VXJsKG9yaWdpbmFsKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBiYXNlNjRVcmxUb0J1ZmZlcihlbmNvZGVkKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVjb2RlZCwgb3JpZ2luYWwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY29kZXMgYmFzZTY0dXJsIHdpdGggLSBhbmQgXyBjaGFycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBiYXNlNjRVcmxUb0J1ZmZlcignLV8tXycpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZWNvZGVkLCBCdWZmZXIuZnJvbShbMHhmYiwgMHhmZiwgMHhiZl0pKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -39,7 +39,10 @@ const src_1 = require("../../src");
39
39
  const REAL_FIXTURE = {
40
40
  basePrfSalt: 'ZqJ64M2dL65zn2-Jxd58SMN2ILc9QjbCFxUTGHd_LC8',
41
41
  enterpriseId: '69c2aea1a3d7bc07f7f775c0ca86b0ec',
42
- expectedDerivedSalt: 'a226ac3aace4bb2b84cfff34e37fb7217620852bb72d5e0dfdad4c2c8473994f',
42
+ // base64url encoding of the HMAC-SHA256(baseSalt_decoded, enterpriseId) digest.
43
+ // Same encoding the server stores and the WebAuthn PRF extension consumes — keeping
44
+ // one encoding everywhere avoids the hex/base64url mismatch that broke browser PRF.
45
+ expectedDerivedSalt: 'oiasOqzkuyuEz_8043-3IXYghSu3LV4N_a1MLIRzmU8',
43
46
  };
44
47
  describe('deriveEnterpriseSalt', function () {
45
48
  it('produces the correct derived salt for real fixture values', function () {
@@ -63,11 +66,12 @@ describe('deriveEnterpriseSalt', function () {
63
66
  const saltB = (0, src_1.deriveEnterpriseSalt)('deadbeefcafebabe0102030405060708', REAL_FIXTURE.enterpriseId);
64
67
  assert.notStrictEqual(saltA, saltB);
65
68
  });
66
- it('returns a non-empty hex string', function () {
69
+ it('returns a non-empty unpadded base64url string', function () {
67
70
  const result = (0, src_1.deriveEnterpriseSalt)(REAL_FIXTURE.basePrfSalt, REAL_FIXTURE.enterpriseId);
68
71
  assert.strictEqual(typeof result, 'string');
69
72
  assert.ok(result.length > 0);
70
- assert.match(result, /^[0-9a-f]{64}$/);
73
+ // Base64url alphabet, no padding. SHA-256 = 32 bytes → 43 base64url chars.
74
+ assert.match(result, /^[A-Za-z0-9_-]{43}$/);
71
75
  });
72
76
  });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlRW50ZXJwcmlzZVNhbHQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9kZXJpdmVFbnRlcnByaXNlU2FsdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLG1DQUFpRDtBQUVqRCwrRUFBK0U7QUFDL0UsTUFBTSxZQUFZLEdBQUc7SUFDbkIsV0FBVyxFQUFFLDZDQUE2QztJQUMxRCxZQUFZLEVBQUUsa0NBQWtDO0lBQ2hELG1CQUFtQixFQUFFLGtFQUFrRTtDQUN4RixDQUFDO0FBRUYsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLEVBQUUsQ0FBQywyREFBMkQsRUFBRTtRQUM5RCwrRUFBK0U7UUFDL0UsbUVBQW1FO1FBQ25FLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQ3pFLFlBQVksQ0FBQyxtQkFBbUIsQ0FDakMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RixNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFO1FBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDeEYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUU7UUFDL0UsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RixNQUFNLEtBQUssR0FBRyxJQUFBLDBCQUFvQixFQUFDLGtDQUFrQyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRTtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFvQixFQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgZGVyaXZlRW50ZXJwcmlzZVNhbHQgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG4vLyBSZWFsIGZpeHR1cmUgdmFsdWVzIGNhcHR1cmVkIGZyb20gYSBsaXZlIGVudmlyb25tZW50IChEQiArIGJyb3dzZXIgZGV2dG9vbHMpXG5jb25zdCBSRUFMX0ZJWFRVUkUgPSB7XG4gIGJhc2VQcmZTYWx0OiAnWnFKNjRNMmRMNjV6bjItSnhkNThTTU4ySUxjOVFqYkNGeFVUR0hkX0xDOCcsXG4gIGVudGVycHJpc2VJZDogJzY5YzJhZWExYTNkN2JjMDdmN2Y3NzVjMGNhODZiMGVjJyxcbiAgZXhwZWN0ZWREZXJpdmVkU2FsdDogJ2EyMjZhYzNhYWNlNGJiMmI4NGNmZmYzNGUzN2ZiNzIxNzYyMDg1MmJiNzJkNWUwZGZkYWQ0YzJjODQ3Mzk5NGYnLFxufTtcblxuZGVzY3JpYmUoJ2Rlcml2ZUVudGVycHJpc2VTYWx0JywgZnVuY3Rpb24gKCkge1xuICBpdCgncHJvZHVjZXMgdGhlIGNvcnJlY3QgZGVyaXZlZCBzYWx0IGZvciByZWFsIGZpeHR1cmUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFZlcmlmaWVzIFNESyBvdXRwdXQgbWF0Y2hlcyB3aGF0IHRoZSByZXRhaWwgVUkgcHJvZHVjZXMgZm9yIHRoZSBzYW1lIGlucHV0cyxcbiAgICAvLyBlbnN1cmluZyBjbGllbnRzIGNhbiBtb3ZlIGJldHdlZW4gU0RLIGFuZCByZXRhaWwgYXBwIHNlYW1sZXNzbHkuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgZGVyaXZlRW50ZXJwcmlzZVNhbHQoUkVBTF9GSVhUVVJFLmJhc2VQcmZTYWx0LCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKSxcbiAgICAgIFJFQUxfRklYVFVSRS5leHBlY3RlZERlcml2ZWRTYWx0XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lzIGRldGVybWluaXN0aWMg4oCUIHNhbWUgaW5wdXRzIGFsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIHNhbHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmlyc3QgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsIFJFQUxfRklYVFVSRS5lbnRlcnByaXNlSWQpO1xuICAgIGNvbnN0IHNlY29uZCA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgYXNzZXJ0Lm9rKGZpcnN0KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZmlyc3QsIHNlY29uZCk7XG4gIH0pO1xuXG4gIGl0KCdwcm9kdWNlcyBkaWZmZXJlbnQgc2FsdHMgZm9yIGRpZmZlcmVudCBlbnRlcnByaXNlSWRzIHdpdGggdGhlIHNhbWUgcHJmU2FsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYWx0QSA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgY29uc3Qgc2FsdEIgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsICdkaWZmZXJlbnQtZW50ZXJwcmlzZS1pZCcpO1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChzYWx0QSwgc2FsdEIpO1xuICB9KTtcblxuICBpdCgncHJvZHVjZXMgZGlmZmVyZW50IHNhbHRzIGZvciBkaWZmZXJlbnQgcHJmU2FsdHMgd2l0aCB0aGUgc2FtZSBlbnRlcnByaXNlSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2FsdEEgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsIFJFQUxfRklYVFVSRS5lbnRlcnByaXNlSWQpO1xuICAgIGNvbnN0IHNhbHRCID0gZGVyaXZlRW50ZXJwcmlzZVNhbHQoJ2RlYWRiZWVmY2FmZWJhYmUwMTAyMDMwNDA1MDYwNzA4JywgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHNhbHRBLCBzYWx0Qik7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGEgbm9uLWVtcHR5IGhleCBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZGVyaXZlRW50ZXJwcmlzZVNhbHQoUkVBTF9GSVhUVVJFLmJhc2VQcmZTYWx0LCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHJlc3VsdCwgJ3N0cmluZycpO1xuICAgIGFzc2VydC5vayhyZXN1bHQubGVuZ3RoID4gMCk7XG4gICAgYXNzZXJ0Lm1hdGNoKHJlc3VsdCwgL15bMC05YS1mXXs2NH0kLyk7XG4gIH0pO1xufSk7XG4iXX0=
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlRW50ZXJwcmlzZVNhbHQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9kZXJpdmVFbnRlcnByaXNlU2FsdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLG1DQUFpRDtBQUVqRCwrRUFBK0U7QUFDL0UsTUFBTSxZQUFZLEdBQUc7SUFDbkIsV0FBVyxFQUFFLDZDQUE2QztJQUMxRCxZQUFZLEVBQUUsa0NBQWtDO0lBQ2hELGdGQUFnRjtJQUNoRixvRkFBb0Y7SUFDcEYsb0ZBQW9GO0lBQ3BGLG1CQUFtQixFQUFFLDZDQUE2QztDQUNuRSxDQUFDO0FBRUYsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLEVBQUUsQ0FBQywyREFBMkQsRUFBRTtRQUM5RCwrRUFBK0U7UUFDL0UsbUVBQW1FO1FBQ25FLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQ3pFLFlBQVksQ0FBQyxtQkFBbUIsQ0FDakMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RixNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFO1FBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDeEYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUU7UUFDL0UsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RixNQUFNLEtBQUssR0FBRyxJQUFBLDBCQUFvQixFQUFDLGtDQUFrQyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFvQixFQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdCLDJFQUEyRTtRQUMzRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlcml2ZUVudGVycHJpc2VTYWx0IH0gZnJvbSAnLi4vLi4vc3JjJztcblxuLy8gUmVhbCBmaXh0dXJlIHZhbHVlcyBjYXB0dXJlZCBmcm9tIGEgbGl2ZSBlbnZpcm9ubWVudCAoREIgKyBicm93c2VyIGRldnRvb2xzKVxuY29uc3QgUkVBTF9GSVhUVVJFID0ge1xuICBiYXNlUHJmU2FsdDogJ1pxSjY0TTJkTDY1em4yLUp4ZDU4U01OMklMYzlRamJDRnhVVEdIZF9MQzgnLFxuICBlbnRlcnByaXNlSWQ6ICc2OWMyYWVhMWEzZDdiYzA3ZjdmNzc1YzBjYTg2YjBlYycsXG4gIC8vIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgSE1BQy1TSEEyNTYoYmFzZVNhbHRfZGVjb2RlZCwgZW50ZXJwcmlzZUlkKSBkaWdlc3QuXG4gIC8vIFNhbWUgZW5jb2RpbmcgdGhlIHNlcnZlciBzdG9yZXMgYW5kIHRoZSBXZWJBdXRobiBQUkYgZXh0ZW5zaW9uIGNvbnN1bWVzIOKAlCBrZWVwaW5nXG4gIC8vIG9uZSBlbmNvZGluZyBldmVyeXdoZXJlIGF2b2lkcyB0aGUgaGV4L2Jhc2U2NHVybCBtaXNtYXRjaCB0aGF0IGJyb2tlIGJyb3dzZXIgUFJGLlxuICBleHBlY3RlZERlcml2ZWRTYWx0OiAnb2lhc09xemt1eXVFel84MDQzLTNJWFlnaFN1M0xWNE5fYTFNTElSem1VOCcsXG59O1xuXG5kZXNjcmliZSgnZGVyaXZlRW50ZXJwcmlzZVNhbHQnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdwcm9kdWNlcyB0aGUgY29ycmVjdCBkZXJpdmVkIHNhbHQgZm9yIHJlYWwgZml4dHVyZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVmVyaWZpZXMgU0RLIG91dHB1dCBtYXRjaGVzIHdoYXQgdGhlIHJldGFpbCBVSSBwcm9kdWNlcyBmb3IgdGhlIHNhbWUgaW5wdXRzLFxuICAgIC8vIGVuc3VyaW5nIGNsaWVudHMgY2FuIG1vdmUgYmV0d2VlbiBTREsgYW5kIHJldGFpbCBhcHAgc2VhbWxlc3NseS5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsIFJFQUxfRklYVFVSRS5lbnRlcnByaXNlSWQpLFxuICAgICAgUkVBTF9GSVhUVVJFLmV4cGVjdGVkRGVyaXZlZFNhbHRcbiAgICApO1xuICB9KTtcblxuICBpdCgnaXMgZGV0ZXJtaW5pc3RpYyDigJQgc2FtZSBpbnB1dHMgYWx3YXlzIHByb2R1Y2UgdGhlIHNhbWUgc2FsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmaXJzdCA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgY29uc3Qgc2Vjb25kID0gZGVyaXZlRW50ZXJwcmlzZVNhbHQoUkVBTF9GSVhUVVJFLmJhc2VQcmZTYWx0LCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBhc3NlcnQub2soZmlyc3QpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaXJzdCwgc2Vjb25kKTtcbiAgfSk7XG5cbiAgaXQoJ3Byb2R1Y2VzIGRpZmZlcmVudCBzYWx0cyBmb3IgZGlmZmVyZW50IGVudGVycHJpc2VJZHMgd2l0aCB0aGUgc2FtZSBwcmZTYWx0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbHRBID0gZGVyaXZlRW50ZXJwcmlzZVNhbHQoUkVBTF9GSVhUVVJFLmJhc2VQcmZTYWx0LCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBjb25zdCBzYWx0QiA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgJ2RpZmZlcmVudC1lbnRlcnByaXNlLWlkJyk7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHNhbHRBLCBzYWx0Qik7XG4gIH0pO1xuXG4gIGl0KCdwcm9kdWNlcyBkaWZmZXJlbnQgc2FsdHMgZm9yIGRpZmZlcmVudCBwcmZTYWx0cyB3aXRoIHRoZSBzYW1lIGVudGVycHJpc2VJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYWx0QSA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgY29uc3Qgc2FsdEIgPSBkZXJpdmVFbnRlcnByaXNlU2FsdCgnZGVhZGJlZWZjYWZlYmFiZTAxMDIwMzA0MDUwNjA3MDgnLCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoc2FsdEEsIHNhbHRCKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgYSBub24tZW1wdHkgdW5wYWRkZWQgYmFzZTY0dXJsIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsIFJFQUxfRklYVFVSRS5lbnRlcnByaXNlSWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LCAnc3RyaW5nJyk7XG4gICAgYXNzZXJ0Lm9rKHJlc3VsdC5sZW5ndGggPiAwKTtcbiAgICAvLyBCYXNlNjR1cmwgYWxwaGFiZXQsIG5vIHBhZGRpbmcuIFNIQS0yNTYgPSAzMiBieXRlcyDihpIgNDMgYmFzZTY0dXJsIGNoYXJzLlxuICAgIGFzc2VydC5tYXRjaChyZXN1bHQsIC9eW0EtWmEtejAtOV8tXXs0M30kLyk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -99,7 +99,7 @@ describe('derivePasskeyPrfKey', function () {
99
99
  assert.strictEqual(getCallArgs.evalByCredential['cred-bbb'], 'salt-bbb');
100
100
  // Verify bitgo was used to fetch the assertion challenge
101
101
  assert.ok(mockBitGo.get.calledOnce);
102
- assert.ok(mockBitGo.url.calledWith('/user/otp/webauthn/assertion', 2));
102
+ assert.ok(mockBitGo.url.calledWith('/user/otp/webauthn/auth', 2));
103
103
  });
104
104
  it("should throw 'No passkey devices available' when no devices", async function () {
105
105
  const wallet = makeWallet(undefined);
@@ -149,4 +149,4 @@ describe('derivePasskeyPrfKey', function () {
149
149
  });
150
150
  });
151
151
  });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Rlcml2ZVBhc3NrZXlQcmZLZXkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsdUVBQW9FO0FBRXBFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixNQUFNLFdBQVcsR0FBRztRQUNsQjtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7UUFDRDtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7S0FDRixDQUFDO0lBRUYsU0FBUyxVQUFVLENBQUMsT0FBdUM7UUFDekQsT0FBTztZQUNMLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixHQUFHLEVBQUUsU0FBUztnQkFDZCxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLGVBQWUsRUFBRSxPQUFPO2FBQ3pCLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsU0FBUyxDQUFDLFNBQVMsR0FBRyxzQkFBc0I7UUFDbkQsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFB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IGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgZGVyaXZlUGFzc2tleVByZktleSB9IGZyb20gJy4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5JztcblxuZGVzY3JpYmUoJ2Rlcml2ZVBhc3NrZXlQcmZLZXknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1vY2tEZXZpY2VzID0gW1xuICAgIHtcbiAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEnLFxuICAgICAgYXV0aGVudGljYXRvckluZm86IHsgY3JlZElEOiAnY3JlZC1hYWEnLCBmbXQ6ICdub25lJyBhcyBjb25zdCwgcHVibGljS2V5OiAncGstMScgfSxcbiAgICAgIHByZlNhbHQ6ICdzYWx0LWFhYScsXG4gICAgICBlbmNyeXB0ZWRQcnY6ICdlbmMtcHJ2LTEnLFxuICAgIH0sXG4gICAge1xuICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMicsXG4gICAgICBhdXRoZW50aWNhdG9ySW5mbzogeyBjcmVkSUQ6ICdjcmVkLWJiYicsIGZtdDogJ25vbmUnIGFzIGNvbnN0LCBwdWJsaWNLZXk6ICdway0yJyB9LFxuICAgICAgcHJmU2FsdDogJ3NhbHQtYmJiJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYy1wcnYtMicsXG4gICAgfSxcbiAgXTtcblxuICBmdW5jdGlvbiBtYWtlV2FsbGV0KGRldmljZXM6IHR5cGVvZiBtb2NrRGV2aWNlcyB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAna2V5Y2hhaW4taWQnLFxuICAgICAgICBwdWI6ICd4cHViMTIzJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogZGV2aWNlcyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlQml0R28oY2hhbGxlbmdlID0gJ2RHVnpkQzFqYUdGc2JHVnVaMlU9Jykge1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gYGh0dHBzOi8vYXBwLmJpdGdvLmNvbS9hcGkvdjIke3BhdGh9YCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBjaGFsbGVuZ2UgfSksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgaGV4IHN0cmluZyBvbiBoYXBweSBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHByZlJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsweGRlLCAweGFkLCAweGJlLCAweGVmXSkuYnVmZmVyO1xuXG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHByZlJlc3VsdCxcbiAgICAgICAgY3JlZGVudGlhbElkOiAnY3JlZC1hYWEnLFxuICAgICAgICBvdHBDb2RlOiAnb3RwLTEyMycsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldChtb2NrRGV2aWNlcyk7XG4gICAgY29uc3QgbW9ja0JpdEdvID0gbWFrZUJpdEdvKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVQYXNza2V5UHJmS2V5KHtcbiAgICAgIGJpdGdvOiBtb2NrQml0R28gYXMgYW55LFxuICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgYW55LFxuICAgICAgcHJvdmlkZXI6IG1vY2tQcm92aWRlcixcbiAgICB9KTtcblxuICAgIC8vIGRlcml2ZVBhc3N3b3JkIGNvbnZlcnRzIEFycmF5QnVmZmVyIHRvIGhleFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsICdkZWFkYmVlZicpO1xuICAgIGFzc2VydC5vayhtb2NrUHJvdmlkZXIuZ2V0LmNhbGxlZE9uY2UpO1xuICAgIC8vIFZlcmlmeSBldmFsQnlDcmVkZW50aWFsIHdhcyBwYXNzZWRcbiAgICBjb25zdCBnZXRDYWxsQXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldENhbGxBcmdzLmV2YWxCeUNyZWRlbnRpYWxbJ2NyZWQtYWFhJ10sICdzYWx0LWFhYScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRDYWxsQXJncy5ldmFsQnlDcmVkZW50aWFsWydjcmVkLWJiYiddLCAnc2FsdC1iYmInKTtcbiAgICAvLyBWZXJpZnkgYml0Z28gd2FzIHVzZWQgdG8gZmV0Y2ggdGhlIGFzc2VydGlvbiBjaGFsbGVuZ2VcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLmdldC5jYWxsZWRPbmNlKTtcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLnVybC5jYWxsZWRXaXRoKCcvdXNlci9vdHAvd2ViYXV0aG4vYXNzZXJ0aW9uJywgMikpO1xuICB9KTtcblxuICBpdChcInNob3VsZCB0aHJvdyAnTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZScgd2hlbiBubyBkZXZpY2VzXCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHVuZGVmaW5lZCk7XG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0geyBjcmVhdGU6IHNpbm9uLnN0dWIoKSwgZ2V0OiBzaW5vbi5zdHViKCkgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gZGVyaXZlUGFzc2tleVByZktleSh7IGJpdGdvOiBtYWtlQml0R28oKSBhcyBhbnksIHdhbGxldDogd2FsbGV0IGFzIGFueSwgcHJvdmlkZXI6IG1vY2tQcm92aWRlciB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIubWVzc2FnZSwgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgdGhyb3cgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnIHdoZW4gZGV2aWNlcyBhcnJheSBpcyBlbXB0eVwiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldChbXSBhcyBhbnkpO1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHsgY3JlYXRlOiBzaW5vbi5zdHViKCksIGdldDogc2lub24uc3R1YigpIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbzogbWFrZUJpdEdvKCkgYXMgYW55LCB3YWxsZXQ6IHdhbGxldCBhcyBhbnksIHByb3ZpZGVyOiBtb2NrUHJvdmlkZXIgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHRocm93ICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlIHdpdGggYSB2YWxpZCBQUkYgc2FsdCcgd2hlbiBubyBkZXZpY2UgaGFzIHByZlNhbHRcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRldmljZXNXaXRob3V0U2FsdCA9IFtcbiAgICAgIHtcbiAgICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMScsXG4gICAgICAgIGF1dGhlbnRpY2F0b3JJbmZvOiB7IGNyZWRJRDogJ2NyZWQtYWFhJywgZm10OiAnbm9uZScgYXMgY29uc3QsIHB1YmxpY0tleTogJ3BrLTEnIH0sXG4gICAgICAgIHByZlNhbHQ6ICcnLCAvLyBlbXB0eSDigJQgYnVpbGRFdmFsQnlDcmVkZW50aWFsIHNraXBzIGZhbHN5IHByZlNhbHRcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jLXBydi0xJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoZGV2aWNlc1dpdGhvdXRTYWx0IGFzIGFueSk7XG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0geyBjcmVhdGU6IHNpbm9uLnN0dWIoKSwgZ2V0OiBzaW5vbi5zdHViKCkgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gZGVyaXZlUGFzc2tleVByZktleSh7IGJpdGdvOiBtYWtlQml0R28oKSBhcyBhbnksIHdhbGxldDogd2FsbGV0IGFzIGFueSwgcHJvdmlkZXI6IG1vY2tQcm92aWRlciB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIubWVzc2FnZSwgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUgd2l0aCBhIHZhbGlkIFBSRiBzYWx0Jyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHRocm93ICdDb3VsZCBub3QgaWRlbnRpZnkgd2hpY2ggcGFzc2tleSBkZXZpY2Ugd2FzIHVzZWQnIHdoZW4gY3JlZGVudGlhbElkIG5vdCBmb3VuZFwiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHByZlJlc3VsdDogbmV3IEFycmF5QnVmZmVyKDMyKSxcbiAgICAgICAgY3JlZGVudGlhbElkOiAndW5rbm93bi1jcmVkLWlkJyxcbiAgICAgICAgb3RwQ29kZTogJ290cC0xMjMnLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQobW9ja0RldmljZXMpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiBkZXJpdmVQYXNza2V5UHJmS2V5KHsgYml0Z286IG1ha2VCaXRHbygpIGFzIGFueSwgd2FsbGV0OiB3YWxsZXQgYXMgYW55LCBwcm92aWRlcjogbW9ja1Byb3ZpZGVyIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5tZXNzYWdlLCAnQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Rlcml2ZVBhc3NrZXlQcmZLZXkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsdUVBQW9FO0FBRXBFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixNQUFNLFdBQVcsR0FBRztRQUNsQjtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7UUFDRDtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7S0FDRixDQUFDO0lBRUYsU0FBUyxVQUFVLENBQUMsT0FBdUM7UUFDekQsT0FBTztZQUNMLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixHQUFHLEVBQUUsU0FBUztnQkFDZCxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLGVBQWUsRUFBRSxPQUFPO2FBQ3pCLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsU0FBUyxDQUFDLFNBQVMsR0FBRyxzQkFBc0I7UUFDbkQsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFB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IGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgZGVyaXZlUGFzc2tleVByZktleSB9IGZyb20gJy4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5JztcblxuZGVzY3JpYmUoJ2Rlcml2ZVBhc3NrZXlQcmZLZXknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1vY2tEZXZpY2VzID0gW1xuICAgIHtcbiAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEnLFxuICAgICAgYXV0aGVudGljYXRvckluZm86IHsgY3JlZElEOiAnY3JlZC1hYWEnLCBmbXQ6ICdub25lJyBhcyBjb25zdCwgcHVibGljS2V5OiAncGstMScgfSxcbiAgICAgIHByZlNhbHQ6ICdzYWx0LWFhYScsXG4gICAgICBlbmNyeXB0ZWRQcnY6ICdlbmMtcHJ2LTEnLFxuICAgIH0sXG4gICAge1xuICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMicsXG4gICAgICBhdXRoZW50aWNhdG9ySW5mbzogeyBjcmVkSUQ6ICdjcmVkLWJiYicsIGZtdDogJ25vbmUnIGFzIGNvbnN0LCBwdWJsaWNLZXk6ICdway0yJyB9LFxuICAgICAgcHJmU2FsdDogJ3NhbHQtYmJiJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYy1wcnYtMicsXG4gICAgfSxcbiAgXTtcblxuICBmdW5jdGlvbiBtYWtlV2FsbGV0KGRldmljZXM6IHR5cGVvZiBtb2NrRGV2aWNlcyB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAna2V5Y2hhaW4taWQnLFxuICAgICAgICBwdWI6ICd4cHViMTIzJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogZGV2aWNlcyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlQml0R28oY2hhbGxlbmdlID0gJ2RHVnpkQzFqYUdGc2JHVnVaMlU9Jykge1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gYGh0dHBzOi8vYXBwLmJpdGdvLmNvbS9hcGkvdjIke3BhdGh9YCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBjaGFsbGVuZ2UgfSksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgaGV4IHN0cmluZyBvbiBoYXBweSBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHByZlJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsweGRlLCAweGFkLCAweGJlLCAweGVmXSkuYnVmZmVyO1xuXG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHByZlJlc3VsdCxcbiAgICAgICAgY3JlZGVudGlhbElkOiAnY3JlZC1hYWEnLFxuICAgICAgICBvdHBDb2RlOiAnb3RwLTEyMycsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldChtb2NrRGV2aWNlcyk7XG4gICAgY29uc3QgbW9ja0JpdEdvID0gbWFrZUJpdEdvKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVQYXNza2V5UHJmS2V5KHtcbiAgICAgIGJpdGdvOiBtb2NrQml0R28gYXMgYW55LFxuICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgYW55LFxuICAgICAgcHJvdmlkZXI6IG1vY2tQcm92aWRlcixcbiAgICB9KTtcblxuICAgIC8vIGRlcml2ZVBhc3N3b3JkIGNvbnZlcnRzIEFycmF5QnVmZmVyIHRvIGhleFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsICdkZWFkYmVlZicpO1xuICAgIGFzc2VydC5vayhtb2NrUHJvdmlkZXIuZ2V0LmNhbGxlZE9uY2UpO1xuICAgIC8vIFZlcmlmeSBldmFsQnlDcmVkZW50aWFsIHdhcyBwYXNzZWRcbiAgICBjb25zdCBnZXRDYWxsQXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldENhbGxBcmdzLmV2YWxCeUNyZWRlbnRpYWxbJ2NyZWQtYWFhJ10sICdzYWx0LWFhYScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRDYWxsQXJncy5ldmFsQnlDcmVkZW50aWFsWydjcmVkLWJiYiddLCAnc2FsdC1iYmInKTtcbiAgICAvLyBWZXJpZnkgYml0Z28gd2FzIHVzZWQgdG8gZmV0Y2ggdGhlIGFzc2VydGlvbiBjaGFsbGVuZ2VcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLmdldC5jYWxsZWRPbmNlKTtcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLnVybC5jYWxsZWRXaXRoKCcvdXNlci9vdHAvd2ViYXV0aG4vYXV0aCcsIDIpKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgdGhyb3cgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnIHdoZW4gbm8gZGV2aWNlc1wiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh1bmRlZmluZWQpO1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHsgY3JlYXRlOiBzaW5vbi5zdHViKCksIGdldDogc2lub24uc3R1YigpIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbzogbWFrZUJpdEdvKCkgYXMgYW55LCB3YWxsZXQ6IHdhbGxldCBhcyBhbnksIHByb3ZpZGVyOiBtb2NrUHJvdmlkZXIgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHRocm93ICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlJyB3aGVuIGRldmljZXMgYXJyYXkgaXMgZW1wdHlcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoW10gYXMgYW55KTtcbiAgICBjb25zdCBtb2NrUHJvdmlkZXIgPSB7IGNyZWF0ZTogc2lub24uc3R1YigpLCBnZXQ6IHNpbm9uLnN0dWIoKSB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiBkZXJpdmVQYXNza2V5UHJmS2V5KHsgYml0Z286IG1ha2VCaXRHbygpIGFzIGFueSwgd2FsbGV0OiB3YWxsZXQgYXMgYW55LCBwcm92aWRlcjogbW9ja1Byb3ZpZGVyIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5tZXNzYWdlLCAnTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZScpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuICBpdChcInNob3VsZCB0aHJvdyAnTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZSB3aXRoIGEgdmFsaWQgUFJGIHNhbHQnIHdoZW4gbm8gZGV2aWNlIGhhcyBwcmZTYWx0XCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXZpY2VzV2l0aG91dFNhbHQgPSBbXG4gICAgICB7XG4gICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEnLFxuICAgICAgICBhdXRoZW50aWNhdG9ySW5mbzogeyBjcmVkSUQ6ICdjcmVkLWFhYScsIGZtdDogJ25vbmUnIGFzIGNvbnN0LCBwdWJsaWNLZXk6ICdway0xJyB9LFxuICAgICAgICBwcmZTYWx0OiAnJywgLy8gZW1wdHkg4oCUIGJ1aWxkRXZhbEJ5Q3JlZGVudGlhbCBza2lwcyBmYWxzeSBwcmZTYWx0XG4gICAgICAgIGVuY3J5cHRlZFBydjogJ2VuYy1wcnYtMScsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KGRldmljZXNXaXRob3V0U2FsdCBhcyBhbnkpO1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHsgY3JlYXRlOiBzaW5vbi5zdHViKCksIGdldDogc2lub24uc3R1YigpIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbzogbWFrZUJpdEdvKCkgYXMgYW55LCB3YWxsZXQ6IHdhbGxldCBhcyBhbnksIHByb3ZpZGVyOiBtb2NrUHJvdmlkZXIgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlIHdpdGggYSB2YWxpZCBQUkYgc2FsdCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuICBpdChcInNob3VsZCB0aHJvdyAnQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyB3aGVuIGNyZWRlbnRpYWxJZCBub3QgZm91bmRcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLFxuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICBwcmZSZXN1bHQ6IG5ldyBBcnJheUJ1ZmZlcigzMiksXG4gICAgICAgIGNyZWRlbnRpYWxJZDogJ3Vua25vd24tY3JlZC1pZCcsXG4gICAgICAgIG90cENvZGU6ICdvdHAtMTIzJyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KG1vY2tEZXZpY2VzKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gZGVyaXZlUGFzc2tleVByZktleSh7IGJpdGdvOiBtYWtlQml0R28oKSBhcyBhbnksIHdhbGxldDogd2FsbGV0IGFzIGFueSwgcHJvdmlkZXI6IG1vY2tQcm92aWRlciB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIubWVzc2FnZSwgJ0NvdWxkIG5vdCBpZGVudGlmeSB3aGljaCBwYXNza2V5IGRldmljZSB3YXMgdXNlZCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
@@ -67,7 +67,7 @@ describe('removePasskeyFromWallet', function () {
67
67
  wallets: sinon.stub().returns(mockWallets),
68
68
  keychains: sinon.stub().returns(mockKeychains),
69
69
  }),
70
- decrypt: sinon.stub().returns('xprv-decrypted'),
70
+ decryptAsync: sinon.stub().resolves('xprv-decrypted'),
71
71
  del: sinon.stub().returns({
72
72
  result: sinon.stub().resolves({}),
73
73
  }),
@@ -96,7 +96,7 @@ describe('removePasskeyFromWallet', function () {
96
96
  sinon.assert.calledWithExactly(mockBitGo.del, `/api/v2/key/${keychainId}/webauthndevice/${device.id}`);
97
97
  });
98
98
  it('should throw and not call DELETE if passphrase is wrong', async function () {
99
- mockBitGo.decrypt = sinon.stub().throws(new Error('decryption failed'));
99
+ mockBitGo.decryptAsync = sinon.stub().resolves(undefined);
100
100
  await assert.rejects(() => (0, src_1.removePasskeyFromWallet)({
101
101
  bitgo: mockBitGo,
102
102
  coin: coinName,
@@ -167,4 +167,4 @@ describe('removePasskeyFromWallet', function () {
167
167
  });
168
168
  });
169
169
  });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlUGFzc2tleUZyb21XYWxsZXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9yZW1vdmVQYXNza2V5RnJvbVdhbGxldC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLDZDQUErQjtBQUMvQixtQ0FBb0Q7QUFFcEQsUUFBUSxDQUFDLHlCQUF5QixFQUFFO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN4QixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQUc7UUFDYixFQUFFLEVBQUUscUJBQXFCO1FBQ3pCLFlBQVksRUFBRSxhQUFhO1FBQzNCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUM7SUFFRixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFVBQWUsQ0FBQztJQUNwQixJQUFJLGFBQWtCLENBQUM7SUFDdkIsSUFBSSxXQUFnQixDQUFDO0lBRXJCLFVBQVUsQ0FBQztRQUNULFVBQVUsR0FBRztZQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM1RSxDQUFDO1FBRUYsV0FBVyxHQUFHO1lBQ1osR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQ3ZDLENBQUM7UUFFRixhQUFhLEdBQUc7WUFDZCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7U0FDN0QsQ0FBQztRQUVGLFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO2dCQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQzFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUMvQyxDQUFDO1lBQ0YsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDL0MsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzthQUNsQyxDQUFDO1lBQ0YsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFZLEVBQUUsT0FBZ0IsRUFBRSxFQUFFLENBQUMsU0FBUyxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1NBQ2hHLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO1FBQ3JELE1BQU0sSUFBQSw2QkFBdUIsRUFBQztZQUM1QixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVE7WUFDUixNQUFNO1lBQ04sZ0JBQWdCO1NBQ2pCLENBQUMsQ0FBQztRQUVILDhCQUE4QjtRQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFekQsNEJBQTRCO1FBQzVCLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLDhDQUE4QztRQUM5QyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUV0RSw2REFBNkQ7UUFDN0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxlQUFlLFVBQVUsbUJBQW1CLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEtBQUs7UUFDakUsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUV4RSxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUNILElBQUEsNkJBQXVCLEVBQUM7WUFDdEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRO1lBQ1IsTUFBTTtZQUNOLGdCQUFnQixFQUFFLGtCQUFrQjtTQUNyQyxDQUFDLEVBQ0osQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSztRQUNwRSxhQUFhLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU5RCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUNILElBQUEsNkJBQXVCLEVBQUM7WUFDdEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRO1lBQ1IsTUFBTTtZQUNOLGdCQUFnQjtTQUNqQixDQUFDLEVBQ0osQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUUsS0FBSztRQUM1QyxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUV6QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUNILElBQUEsNkJBQXVCLEVBQUM7WUFDdEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRO1lBQ1IsTUFBTSxFQUFFLFVBQVU7WUFDbEIsZ0JBQWdCO1NBQ2pCLENBQUMsRUFDSixDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQ0YsQ0FBQztRQUVGLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLO1FBQzlDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRW5FLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FDbEIsR0FBRyxFQUFFLENBQ0gsSUFBQSw2QkFBdUIsRUFBQztZQUN0QixLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVE7WUFDUixNQUFNO1lBQ04sZ0JBQWdCO1NBQ2pCLENBQUMsRUFDSixDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7UUFFRixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztRQUN0RSxTQUFTLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUNyRSxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUNILElBQUEsNkJBQXVCLEVBQUM7WUFDdEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRO1lBQ1IsTUFBTTtZQUNOLGdCQUFnQjtTQUNqQixDQUFDLEVBQ0osQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyByZW1vdmVQYXNza2V5RnJvbVdhbGxldCB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdyZW1vdmVQYXNza2V5RnJvbVdhbGxldCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAndGJ0Yyc7XG4gIGNvbnN0IHdhbGxldElkID0gJ3dhbGxldC1hYmMxMjMnO1xuICBjb25zdCBrZXljaGFpbklkID0gJ2tleS11c2VyLWlkJztcbiAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gJ2VuY3J5cHRlZC1wcnYtc3RyaW5nJztcbiAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICdjb3JyZWN0LXBhc3NwaHJhc2UnO1xuXG4gIGNvbnN0IGRldmljZSA9IHtcbiAgICBpZDogJ21vbmdvLW9iamVjdC1pZC0xMjMnLFxuICAgIGNyZWRlbnRpYWxJZDogJ2NyZWQtaWQtNDU2JyxcbiAgICBwcmZTYWx0OiAnc29tZS1zYWx0JyxcbiAgICBpc1Bhc3NrZXk6IHRydWUsXG4gIH07XG5cbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja1dhbGxldDogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55O1xuICBsZXQgbW9ja1dhbGxldHM6IGFueTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrV2FsbGV0ID0ge1xuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhba2V5Y2hhaW5JZCwgJ2JhY2t1cC1rZXktaWQnLCAnYml0Z28ta2V5LWlkJ10pLFxuICAgIH07XG5cbiAgICBtb2NrV2FsbGV0cyA9IHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tXYWxsZXQpLFxuICAgIH07XG5cbiAgICBtb2NrS2V5Y2hhaW5zID0ge1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDoga2V5Y2hhaW5JZCwgZW5jcnlwdGVkUHJ2IH0pLFxuICAgIH07XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBjb2luOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIHdhbGxldHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tXYWxsZXRzKSxcbiAgICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCkucmV0dXJucyhtb2NrS2V5Y2hhaW5zKSxcbiAgICAgIH0pLFxuICAgICAgZGVjcnlwdDogc2lub24uc3R1YigpLnJldHVybnMoJ3hwcnYtZGVjcnlwdGVkJyksXG4gICAgICBkZWw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe30pLFxuICAgICAgfSksXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gYC9hcGkvdiR7dmVyc2lvbiA/PyAxfSR7cGF0aH1gKSxcbiAgICB9O1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgcmVtb3ZlIGEgcGFzc2tleSBkZXZpY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQoe1xuICAgICAgYml0Z286IG1vY2tCaXRHbyxcbiAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgd2FsbGV0SWQsXG4gICAgICBkZXZpY2UsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgLy8gVmVyaWZ5IGNvaW4gd2FzIGluaXRpYWxpemVkXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhFeGFjdGx5KG1vY2tCaXRHby5jb2luLCBjb2luTmFtZSk7XG5cbiAgICAvLyBWZXJpZnkgd2FsbGV0IHdhcyBmZXRjaGVkXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhFeGFjdGx5KG1vY2tXYWxsZXRzLmdldCwgeyBpZDogd2FsbGV0SWQgfSk7XG5cbiAgICAvLyBWZXJpZnkga2V5Y2hhaW4gd2FzIGZldGNoZWQgd2l0aCBjb3JyZWN0IElEXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhFeGFjdGx5KG1vY2tLZXljaGFpbnMuZ2V0LCB7IGlkOiBrZXljaGFpbklkIH0pO1xuXG4gICAgLy8gVmVyaWZ5IERFTEVURSB3YXMgY2FsbGVkIHdpdGggZGV2aWNlLmlkIChub3QgY3JlZGVudGlhbElkKVxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKG1vY2tCaXRHby5kZWwpO1xuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRXaXRoRXhhY3RseShtb2NrQml0R28uZGVsLCBgL2FwaS92Mi9rZXkvJHtrZXljaGFpbklkfS93ZWJhdXRobmRldmljZS8ke2RldmljZS5pZH1gKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbmQgbm90IGNhbGwgREVMRVRFIGlmIHBhc3NwaHJhc2UgaXMgd3JvbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0JpdEdvLmRlY3J5cHQgPSBzaW5vbi5zdHViKCkudGhyb3dzKG5ldyBFcnJvcignZGVjcnlwdGlvbiBmYWlsZWQnKSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIHJlbW92ZVBhc3NrZXlGcm9tV2FsbGV0KHtcbiAgICAgICAgICBiaXRnbzogbW9ja0JpdEdvLFxuICAgICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgIGRldmljZSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnd3JvbmctcGFzc3BocmFzZScsXG4gICAgICAgIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdJbmNvcnJlY3Qgd2FsbGV0IHBhc3NwaHJhc2UnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5kZWwpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGRlc2NyaXB0aXZlbHkgaWYga2V5Y2hhaW4gaGFzIG5vIGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrS2V5Y2hhaW5zLmdldCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBrZXljaGFpbklkIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICByZW1vdmVQYXNza2V5RnJvbVdhbGxldCh7XG4gICAgICAgICAgYml0Z286IG1vY2tCaXRHbyxcbiAgICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0luY29ycmVjdCB3YWxsZXQgcGFzc3BocmFzZScpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLmRlbCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgZGV2aWNlLmlkIGlzIGVtcHR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRldmljZU5vSWQgPSB7IC4uLmRldmljZSwgaWQ6ICcnIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIHJlbW92ZVBhc3NrZXlGcm9tV2FsbGV0KHtcbiAgICAgICAgICBiaXRnbzogbW9ja0JpdEdvLFxuICAgICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgIGRldmljZTogZGV2aWNlTm9JZCxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnZGV2aWNlLmlkIGlzIHJlcXVpcmVkJykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChtb2NrQml0R28uY29pbik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJvcGFnYXRlIHdhbGxldCBmZXRjaCBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldHMuZ2V0ID0gc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCc0MDQgTm90IEZvdW5kJykpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICByZW1vdmVQYXNza2V5RnJvbVdhbGxldCh7XG4gICAgICAgICAgYml0Z286IG1vY2tCaXRHbyxcbiAgICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJzQwNCBOb3QgRm91bmQnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5kZWwpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3BhZ2F0ZSBERUxFVEUgZXJyb3JzIGFmdGVyIHBhc3NwaHJhc2UgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHby5kZWwgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQoe1xuICAgICAgICAgIGJpdGdvOiBtb2NrQml0R28sXG4gICAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgICAgZGV2aWNlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCc1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yJykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlUGFzc2tleUZyb21XYWxsZXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9yZW1vdmVQYXNza2V5RnJvbVdhbGxldC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLDZDQUErQjtBQUMvQixtQ0FBb0Q7QUFFcEQsUUFBUSxDQUFDLHlCQUF5QixFQUFFO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN4QixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQUc7UUFDYixFQUFFLEVBQUUscUJBQXFCO1FBQ3pCLFlBQVksRUFBRSxhQUFhO1FBQzNCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFNBQVMsRUFBRSxJQUFJO0tBQ2hCLENBQUM7SUFFRixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFVBQWUsQ0FBQztJQUNwQixJQUFJLGFBQWtCLENBQUM7SUFDdkIsSUFBSSxXQUFnQixDQUFDO0lBRXJCLFVBQVUsQ0FBQztRQUNULFVBQVUsR0FBRztZQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM1RSxDQUFDO1FBRUYsV0FBVyxHQUFHO1lBQ1osR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQ3ZDLENBQUM7UUFFRixhQUFhLEdBQUc7WUFDZCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEs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QUFNO1lBQ04sZ0JBQWdCO1NBQ2pCLENBQUMsRUFDSixDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IHJlbW92ZVBhc3NrZXlGcm9tV2FsbGV0IH0gZnJvbSAnLi4vLi4vc3JjJztcblxuZGVzY3JpYmUoJ3JlbW92ZVBhc3NrZXlGcm9tV2FsbGV0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZSA9ICd0YnRjJztcbiAgY29uc3Qgd2FsbGV0SWQgPSAnd2FsbGV0LWFiYzEyMyc7XG4gIGNvbnN0IGtleWNoYWluSWQgPSAna2V5LXVzZXItaWQnO1xuICBjb25zdCBlbmNyeXB0ZWRQcnYgPSAnZW5jcnlwdGVkLXBydi1zdHJpbmcnO1xuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ2NvcnJlY3QtcGFzc3BocmFzZSc7XG5cbiAgY29uc3QgZGV2aWNlID0ge1xuICAgIGlkOiAnbW9uZ28tb2JqZWN0LWlkLTEyMycsXG4gICAgY3JlZGVudGlhbElkOiAnY3JlZC1pZC00NTYnLFxuICAgIHByZlNhbHQ6ICdzb21lLXNhbHQnLFxuICAgIGlzUGFzc2tleTogdHJ1ZSxcbiAgfTtcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0OiBhbnk7XG4gIGxldCBtb2NrS2V5Y2hhaW5zOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0czogYW55O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIG1vY2tXYWxsZXQgPSB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXljaGFpbklkLCAnYmFja3VwLWtleS1pZCcsICdiaXRnby1rZXktaWQnXSksXG4gICAgfTtcblxuICAgIG1vY2tXYWxsZXRzID0ge1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja1dhbGxldCksXG4gICAgfTtcblxuICAgIG1vY2tLZXljaGFpbnMgPSB7XG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBrZXljaGFpbklkLCBlbmNyeXB0ZWRQcnYgfSksXG4gICAgfTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIGNvaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgd2FsbGV0czogc2lub24uc3R1YigpLnJldHVybnMobW9ja1dhbGxldHMpLFxuICAgICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tLZXljaGFpbnMpLFxuICAgICAgfSksXG4gICAgICBkZWNyeXB0QXN5bmM6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygneHBydi1kZWNyeXB0ZWQnKSxcbiAgICAgIGRlbDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7fSksXG4gICAgICB9KSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nLCB2ZXJzaW9uPzogbnVtYmVyKSA9PiBgL2FwaS92JHt2ZXJzaW9uID8/IDF9JHtwYXRofWApLFxuICAgIH07XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSByZW1vdmUgYSBwYXNza2V5IGRldmljZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCByZW1vdmVQYXNza2V5RnJvbVdhbGxldCh7XG4gICAgICBiaXRnbzogbW9ja0JpdEdvLFxuICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICB3YWxsZXRJZCxcbiAgICAgIGRldmljZSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICAvLyBWZXJpZnkgY29pbiB3YXMgaW5pdGlhbGl6ZWRcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aEV4YWN0bHkobW9ja0JpdEdvLmNvaW4sIGNvaW5OYW1lKTtcblxuICAgIC8vIFZlcmlmeSB3YWxsZXQgd2FzIGZldGNoZWRcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aEV4YWN0bHkobW9ja1dhbGxldHMuZ2V0LCB7IGlkOiB3YWxsZXRJZCB9KTtcblxuICAgIC8vIFZlcmlmeSBrZXljaGFpbiB3YXMgZmV0Y2hlZCB3aXRoIGNvcnJlY3QgSURcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aEV4YWN0bHkobW9ja0tleWNoYWlucy5nZXQsIHsgaWQ6IGtleWNoYWluSWQgfSk7XG5cbiAgICAvLyBWZXJpZnkgREVMRVRFIHdhcyBjYWxsZWQgd2l0aCBkZXZpY2UuaWQgKG5vdCBjcmVkZW50aWFsSWQpXG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLmRlbCk7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZFdpdGhFeGFjdGx5KG1vY2tCaXRHby5kZWwsIGAvYXBpL3YyL2tleS8ke2tleWNoYWluSWR9L3dlYmF1dGhuZGV2aWNlLyR7ZGV2aWNlLmlkfWApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGFuZCBub3QgY2FsbCBERUxFVEUgaWYgcGFzc3BocmFzZSBpcyB3cm9uZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrQml0R28uZGVjcnlwdEFzeW5jID0gc2lub24uc3R1YigpLnJlc29sdmVzKHVuZGVmaW5lZCk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIHJlbW92ZVBhc3NrZXlGcm9tV2FsbGV0KHtcbiAgICAgICAgICBiaXRnbzogbW9ja0JpdEdvLFxuICAgICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgIGRldmljZSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAnd3JvbmctcGFzc3BocmFzZScsXG4gICAgICAgIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdJbmNvcnJlY3Qgd2FsbGV0IHBhc3NwaHJhc2UnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5kZWwpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGRlc2NyaXB0aXZlbHkgaWYga2V5Y2hhaW4gaGFzIG5vIGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrS2V5Y2hhaW5zLmdldCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiBrZXljaGFpbklkIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICByZW1vdmVQYXNza2V5RnJvbVdhbGxldCh7XG4gICAgICAgICAgYml0Z286IG1vY2tCaXRHbyxcbiAgICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0luY29ycmVjdCB3YWxsZXQgcGFzc3BocmFzZScpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHNpbm9uLmFzc2VydC5ub3RDYWxsZWQobW9ja0JpdEdvLmRlbCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgaWYgZGV2aWNlLmlkIGlzIGVtcHR5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRldmljZU5vSWQgPSB7IC4uLmRldmljZSwgaWQ6ICcnIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+XG4gICAgICAgIHJlbW92ZVBhc3NrZXlGcm9tV2FsbGV0KHtcbiAgICAgICAgICBiaXRnbzogbW9ja0JpdEdvLFxuICAgICAgICAgIGNvaW46IGNvaW5OYW1lLFxuICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgIGRldmljZTogZGV2aWNlTm9JZCxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmNsdWRlcygnZGV2aWNlLmlkIGlzIHJlcXVpcmVkJykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgc2lub24uYXNzZXJ0Lm5vdENhbGxlZChtb2NrQml0R28uY29pbik7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcHJvcGFnYXRlIHdhbGxldCBmZXRjaCBlcnJvcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbW9ja1dhbGxldHMuZ2V0ID0gc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCc0MDQgTm90IEZvdW5kJykpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PlxuICAgICAgICByZW1vdmVQYXNza2V5RnJvbVdhbGxldCh7XG4gICAgICAgICAgYml0Z286IG1vY2tCaXRHbyxcbiAgICAgICAgICBjb2luOiBjb2luTmFtZSxcbiAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJzQwNCBOb3QgRm91bmQnKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBzaW5vbi5hc3NlcnQubm90Q2FsbGVkKG1vY2tCaXRHby5kZWwpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3BhZ2F0ZSBERUxFVEUgZXJyb3JzIGFmdGVyIHBhc3NwaHJhc2UgdmVyaWZpY2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHby5kZWwgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQoe1xuICAgICAgICAgIGJpdGdvOiBtb2NrQml0R28sXG4gICAgICAgICAgY29pbjogY29pbk5hbWUsXG4gICAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgICAgZGV2aWNlLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluY2x1ZGVzKCc1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yJykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuIl19