@bitgo-beta/passkey-crypto 0.0.1-beta.9 → 0.0.1-beta.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/attachPasskeyToWallet.d.ts +2 -1
- package/dist/src/attachPasskeyToWallet.d.ts.map +1 -1
- package/dist/src/attachPasskeyToWallet.js +15 -19
- package/dist/src/base64url.d.ts +16 -0
- package/dist/src/base64url.d.ts.map +1 -0
- package/dist/src/base64url.js +27 -0
- package/dist/src/deriveEnterpriseSalt.d.ts +7 -1
- package/dist/src/deriveEnterpriseSalt.d.ts.map +1 -1
- package/dist/src/deriveEnterpriseSalt.js +11 -4
- package/dist/src/derivePasskeyPrfKey.d.ts.map +1 -1
- package/dist/src/derivePasskeyPrfKey.js +37 -14
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -2
- package/dist/src/prfHelpers.d.ts.map +1 -1
- package/dist/src/prfHelpers.js +19 -4
- package/dist/src/registerPasskey.d.ts.map +1 -1
- package/dist/src/registerPasskey.js +4 -7
- package/dist/src/removePasskeyFromWallet.d.ts.map +1 -1
- package/dist/src/removePasskeyFromWallet.js +2 -2
- package/dist/test/integration/helpers/fixtures.d.ts +12 -0
- package/dist/test/integration/helpers/fixtures.d.ts.map +1 -0
- package/dist/test/integration/helpers/fixtures.js +15 -0
- package/dist/test/integration/helpers/mockBitGo.d.ts +27 -0
- package/dist/test/integration/helpers/mockBitGo.d.ts.map +1 -0
- package/dist/test/integration/helpers/mockBitGo.js +148 -0
- package/dist/test/integration/helpers/mockProvider.d.ts +5 -0
- package/dist/test/integration/helpers/mockProvider.d.ts.map +1 -0
- package/dist/test/integration/helpers/mockProvider.js +37 -0
- package/dist/test/integration/passkeyLifecycle.test.d.ts +2 -0
- package/dist/test/integration/passkeyLifecycle.test.d.ts.map +1 -0
- package/dist/test/integration/passkeyLifecycle.test.js +153 -0
- package/dist/test/unit/attachPasskeyToWallet.test.js +26 -8
- package/dist/test/unit/base64url.test.d.ts +2 -0
- package/dist/test/unit/base64url.test.d.ts.map +1 -0
- package/dist/test/unit/base64url.test.js +75 -0
- package/dist/test/unit/deriveEnterpriseSalt.test.js +8 -4
- package/dist/test/unit/derivePasskeyPrfKey.test.js +2 -2
- package/dist/test/unit/removePasskeyFromWallet.test.js +3 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BitGoBase, Keychain } from '@bitgo-beta/sdk-core';
|
|
1
|
+
import { BitGoBase, EncryptionVersion, Keychain } from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { WebAuthnOtpDevice, WebAuthnProvider } from './webAuthnTypes';
|
|
3
3
|
export declare function attachPasskeyToWallet(params: {
|
|
4
4
|
bitgo: BitGoBase;
|
|
@@ -7,5 +7,6 @@ export declare function attachPasskeyToWallet(params: {
|
|
|
7
7
|
device: WebAuthnOtpDevice;
|
|
8
8
|
existingPassphrase: string;
|
|
9
9
|
provider: WebAuthnProvider;
|
|
10
|
+
encryptionVersion?: EncryptionVersion;
|
|
10
11
|
}): Promise<Keychain>;
|
|
11
12
|
//# sourceMappingURL=attachPasskeyToWallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachPasskeyToWallet.d.ts","sourceRoot":"","sources":["../../src/attachPasskeyToWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"attachPasskeyToWallet.d.ts","sourceRoot":"","sources":["../../src/attachPasskeyToWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAI9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqEpB"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.attachPasskeyToWallet = attachPasskeyToWallet;
|
|
4
|
+
const base64url_1 = require("./base64url");
|
|
4
5
|
const deriveEnterpriseSalt_1 = require("./deriveEnterpriseSalt");
|
|
5
6
|
const derivePassword_1 = require("./derivePassword");
|
|
6
7
|
async function attachPasskeyToWallet(params) {
|
|
7
|
-
const { bitgo, coin, walletId, device, existingPassphrase, provider } = params;
|
|
8
|
+
const { bitgo, coin, walletId, device, existingPassphrase, provider, encryptionVersion } = params;
|
|
8
9
|
// Throw early if PRF extension is not supported
|
|
9
10
|
if (!device.prfSalt) {
|
|
10
11
|
throw new Error('PRF extension not supported by this device. Please use a different passkey.');
|
|
@@ -23,40 +24,35 @@ async function attachPasskeyToWallet(params) {
|
|
|
23
24
|
// Fetch the user keychain — iterates keys until it finds one with encryptedPrv
|
|
24
25
|
const keychain = await wallet.getEncryptedUserKeychain();
|
|
25
26
|
const keychainId = keychain.id;
|
|
26
|
-
// Derive enterprise-scoped salt
|
|
27
|
-
|
|
27
|
+
// Derive enterprise-scoped salt (base64url; same encoding is used as the
|
|
28
|
+
// PRF eval input and as the server-stored prfSalt so the bytes fed to the
|
|
29
|
+
// authenticator match between attach and derive).
|
|
30
|
+
const prfSalt = (0, deriveEnterpriseSalt_1.deriveEnterpriseSalt)(device.prfSalt, enterpriseId);
|
|
28
31
|
// Decrypt private key with existing passphrase
|
|
29
|
-
const privateKey = bitgo.
|
|
32
|
+
const privateKey = await bitgo.decryptAsync({ password: existingPassphrase, input: keychain.encryptedPrv });
|
|
30
33
|
// Decode credentialId from base64url to ArrayBuffer for allowCredentials.
|
|
31
34
|
// The WebAuthn spec requires allowCredentials to be non-empty when using evalByCredential,
|
|
32
35
|
// and each entry must correspond to a key in the evalByCredential map.
|
|
33
|
-
const credentialIdBuffer =
|
|
34
|
-
// PRF assertion — evalByCredential maps this device's credentialId to
|
|
36
|
+
const credentialIdBuffer = (0, base64url_1.base64UrlToBuffer)(device.credentialId).buffer;
|
|
37
|
+
// PRF assertion — evalByCredential maps this device's credentialId to the
|
|
38
|
+
// base64url enterprise salt. The provider layer is responsible for decoding
|
|
39
|
+
// base64url to raw bytes before handing it to the WebAuthn PRF extension.
|
|
35
40
|
const authResult = await provider.get({
|
|
36
41
|
publicKey: {
|
|
37
42
|
allowCredentials: [{ type: 'public-key', id: credentialIdBuffer }],
|
|
38
43
|
},
|
|
39
|
-
evalByCredential: { [device.credentialId]:
|
|
44
|
+
evalByCredential: { [device.credentialId]: prfSalt },
|
|
40
45
|
});
|
|
41
46
|
if (!authResult.prfResult) {
|
|
42
47
|
throw new Error('PRF assertion did not return a result.');
|
|
43
48
|
}
|
|
44
|
-
// Derive password from PRF output and re-encrypt
|
|
45
49
|
const prfPassword = (0, derivePassword_1.derivePassword)(authResult.prfResult);
|
|
46
|
-
const encryptedPrv = bitgo.
|
|
47
|
-
// Convert enterpriseSalt from hex to base64url (URL-safe, no padding)
|
|
48
|
-
// as required by the server's prfSalt validation.
|
|
49
|
-
const prfSaltBase64url = Buffer.from(enterpriseSalt, 'hex')
|
|
50
|
-
.toString('base64')
|
|
51
|
-
.replace(/\+/g, '-')
|
|
52
|
-
.replace(/\//g, '_')
|
|
53
|
-
.replace(/=+$/, '');
|
|
54
|
-
// PUT webauthnInfo to keychain endpoint
|
|
50
|
+
const encryptedPrv = await bitgo.encryptAsync({ password: prfPassword, input: privateKey, encryptionVersion });
|
|
55
51
|
const updatedKeychain = await bitgo
|
|
56
52
|
.put(bitgo.url(`/${coin}/key/${keychainId}`, 2))
|
|
57
53
|
.send({
|
|
58
54
|
webauthnInfo: {
|
|
59
|
-
prfSalt
|
|
55
|
+
prfSalt,
|
|
60
56
|
otpDeviceId: device.id,
|
|
61
57
|
encryptedPrv,
|
|
62
58
|
},
|
|
@@ -64,4 +60,4 @@ async function attachPasskeyToWallet(params) {
|
|
|
64
60
|
.result();
|
|
65
61
|
return updatedKeychain;
|
|
66
62
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoUGFzc2tleVRvV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaFBhc3NrZXlUb1dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLHNEQTZFQztBQWxGRCwyQ0FBZ0Q7QUFDaEQsaUVBQThEO0FBQzlELHFEQUFrRDtBQUczQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFRM0M7SUFDQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVsRyxnREFBZ0Q7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsK0NBQStDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRTlELElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxRQUFRLG9FQUFvRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBRS9CLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsa0RBQWtEO0lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQW9CLEVBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVuRSwrQ0FBK0M7SUFDL0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUU1RywwRUFBMEU7SUFDMUUsMkZBQTJGO0lBQzNGLHVFQUF1RTtJQUN2RSxNQUFNLGtCQUFrQixHQUFHLElBQUEsNkJBQWlCLEVBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV6RSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDcEMsU0FBUyxFQUFFO1lBQ1QsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7U0FDOUI7UUFDdEMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUU7S0FDckQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsK0JBQWMsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUUvRyxNQUFNLGVBQWUsR0FBRyxNQUFNLEtBQUs7U0FDaEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFFBQVEsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0MsSUFBSSxDQUFDO1FBQ0osWUFBWSxFQUFFO1lBQ1osT0FBTztZQUNQLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUN0QixZQUFZO1NBQ2I7S0FDRixDQUFDO1NBQ0QsTUFBTSxFQUFFLENBQUM7SUFFWixPQUFPLGVBQTJCLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSwgRW5jcnlwdGlvblZlcnNpb24sIEtleWNoYWluIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmFzZTY0VXJsVG9CdWZmZXIgfSBmcm9tICcuL2Jhc2U2NHVybCc7XG5pbXBvcnQgeyBkZXJpdmVFbnRlcnByaXNlU2FsdCB9IGZyb20gJy4vZGVyaXZlRW50ZXJwcmlzZVNhbHQnO1xuaW1wb3J0IHsgZGVyaXZlUGFzc3dvcmQgfSBmcm9tICcuL2Rlcml2ZVBhc3N3b3JkJztcbmltcG9ydCB7IFdlYkF1dGhuT3RwRGV2aWNlLCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF0dGFjaFBhc3NrZXlUb1dhbGxldChwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogc3RyaW5nO1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBkZXZpY2U6IFdlYkF1dGhuT3RwRGV2aWNlO1xuICBleGlzdGluZ1Bhc3NwaHJhc2U6IHN0cmluZztcbiAgcHJvdmlkZXI6IFdlYkF1dGhuUHJvdmlkZXI7XG4gIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG59KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICBjb25zdCB7IGJpdGdvLCBjb2luLCB3YWxsZXRJZCwgZGV2aWNlLCBleGlzdGluZ1Bhc3NwaHJhc2UsIHByb3ZpZGVyLCBlbmNyeXB0aW9uVmVyc2lvbiB9ID0gcGFyYW1zO1xuXG4gIC8vIFRocm93IGVhcmx5IGlmIFBSRiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZFxuICBpZiAoIWRldmljZS5wcmZTYWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkYgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgcGFzc2tleS4nKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VDb2luID0gYml0Z28uY29pbihjb2luKTtcblxuICAvLyBGZXRjaCB3YWxsZXQgYW5kIHZhbGlkYXRlIGl0IGlzIGEgaG90IHdhbGxldFxuICBjb25zdCB3YWxsZXQgPSBhd2FpdCBiYXNlQ29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuXG4gIGlmICh3YWxsZXQudHlwZSgpICE9PSAnaG90Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2FsbGV0ICR7d2FsbGV0SWR9IGlzIG5vdCBhIGhvdCB3YWxsZXQuIE9ubHkgaG90IHdhbGxldHMgc3VwcG9ydCBwYXNza2V5IGF0dGFjaG1lbnQuYCk7XG4gIH1cblxuICBjb25zdCB3YWxsZXREYXRhID0gd2FsbGV0LnRvSlNPTigpO1xuICBjb25zdCBlbnRlcnByaXNlSWQgPSB3YWxsZXREYXRhLmVudGVycHJpc2U7XG4gIGlmICghZW50ZXJwcmlzZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXYWxsZXQgJHt3YWxsZXRJZH0gaGFzIG5vIGVudGVycHJpc2UuYCk7XG4gIH1cblxuICAvLyBGZXRjaCB0aGUgdXNlciBrZXljaGFpbiDigJQgaXRlcmF0ZXMga2V5cyB1bnRpbCBpdCBmaW5kcyBvbmUgd2l0aCBlbmNyeXB0ZWRQcnZcbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk7XG4gIGNvbnN0IGtleWNoYWluSWQgPSBrZXljaGFpbi5pZDtcblxuICAvLyBEZXJpdmUgZW50ZXJwcmlzZS1zY29wZWQgc2FsdCAoYmFzZTY0dXJsOyBzYW1lIGVuY29kaW5nIGlzIHVzZWQgYXMgdGhlXG4gIC8vIFBSRiBldmFsIGlucHV0IGFuZCBhcyB0aGUgc2VydmVyLXN0b3JlZCBwcmZTYWx0IHNvIHRoZSBieXRlcyBmZWQgdG8gdGhlXG4gIC8vIGF1dGhlbnRpY2F0b3IgbWF0Y2ggYmV0d2VlbiBhdHRhY2ggYW5kIGRlcml2ZSkuXG4gIGNvbnN0IHByZlNhbHQgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChkZXZpY2UucHJmU2FsdCwgZW50ZXJwcmlzZUlkKTtcblxuICAvLyBEZWNyeXB0IHByaXZhdGUga2V5IHdpdGggZXhpc3RpbmcgcGFzc3BocmFzZVxuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgYml0Z28uZGVjcnlwdEFzeW5jKHsgcGFzc3dvcmQ6IGV4aXN0aW5nUGFzc3BocmFzZSwgaW5wdXQ6IGtleWNoYWluLmVuY3J5cHRlZFBydiB9KTtcblxuICAvLyBEZWNvZGUgY3JlZGVudGlhbElkIGZyb20gYmFzZTY0dXJsIHRvIEFycmF5QnVmZmVyIGZvciBhbGxvd0NyZWRlbnRpYWxzLlxuICAvLyBUaGUgV2ViQXV0aG4gc3BlYyByZXF1aXJlcyBhbGxvd0NyZWRlbnRpYWxzIHRvIGJlIG5vbi1lbXB0eSB3aGVuIHVzaW5nIGV2YWxCeUNyZWRlbnRpYWwsXG4gIC8vIGFuZCBlYWNoIGVudHJ5IG11c3QgY29ycmVzcG9uZCB0byBhIGtleSBpbiB0aGUgZXZhbEJ5Q3JlZGVudGlhbCBtYXAuXG4gIGNvbnN0IGNyZWRlbnRpYWxJZEJ1ZmZlciA9IGJhc2U2NFVybFRvQnVmZmVyKGRldmljZS5jcmVkZW50aWFsSWQpLmJ1ZmZlcjtcblxuICAvLyBQUkYgYXNzZXJ0aW9uIOKAlCBldmFsQnlDcmVkZW50aWFsIG1hcHMgdGhpcyBkZXZpY2UncyBjcmVkZW50aWFsSWQgdG8gdGhlXG4gIC8vIGJhc2U2NHVybCBlbnRlcnByaXNlIHNhbHQuIFRoZSBwcm92aWRlciBsYXllciBpcyByZXNwb25zaWJsZSBmb3IgZGVjb2RpbmdcbiAgLy8gYmFzZTY0dXJsIHRvIHJhdyBieXRlcyBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUgV2ViQXV0aG4gUFJGIGV4dGVuc2lvbi5cbiAgY29uc3QgYXV0aFJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdldCh7XG4gICAgcHVibGljS2V5OiB7XG4gICAgICBhbGxvd0NyZWRlbnRpYWxzOiBbeyB0eXBlOiAncHVibGljLWtleScsIGlkOiBjcmVkZW50aWFsSWRCdWZmZXIgfV0sXG4gICAgfSBhcyBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsXG4gICAgZXZhbEJ5Q3JlZGVudGlhbDogeyBbZGV2aWNlLmNyZWRlbnRpYWxJZF06IHByZlNhbHQgfSxcbiAgfSk7XG5cbiAgaWYgKCFhdXRoUmVzdWx0LnByZlJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUFJGIGFzc2VydGlvbiBkaWQgbm90IHJldHVybiBhIHJlc3VsdC4nKTtcbiAgfVxuXG4gIGNvbnN0IHByZlBhc3N3b3JkID0gZGVyaXZlUGFzc3dvcmQoYXV0aFJlc3VsdC5wcmZSZXN1bHQpO1xuICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBhd2FpdCBiaXRnby5lbmNyeXB0QXN5bmMoeyBwYXNzd29yZDogcHJmUGFzc3dvcmQsIGlucHV0OiBwcml2YXRlS2V5LCBlbmNyeXB0aW9uVmVyc2lvbiB9KTtcblxuICBjb25zdCB1cGRhdGVkS2V5Y2hhaW4gPSBhd2FpdCBiaXRnb1xuICAgIC5wdXQoYml0Z28udXJsKGAvJHtjb2lufS9rZXkvJHtrZXljaGFpbklkfWAsIDIpKVxuICAgIC5zZW5kKHtcbiAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICBwcmZTYWx0LFxuICAgICAgICBvdHBEZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICB9LFxuICAgIH0pXG4gICAgLnJlc3VsdCgpO1xuXG4gIHJldHVybiB1cGRhdGVkS2V5Y2hhaW4gYXMgS2V5Y2hhaW47XG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64url encoding helpers.
|
|
3
|
+
*
|
|
4
|
+
* Base64url uses the same alphabet as standard base64 except `+` becomes `-`,
|
|
5
|
+
* `/` becomes `_`, and padding (`=`) is stripped. Browser WebAuthn APIs and
|
|
6
|
+
* the BitGo server both use base64url for credential IDs and PRF salts, so we
|
|
7
|
+
* normalise to it everywhere on the client to avoid mismatches caused by
|
|
8
|
+
* mixing encodings.
|
|
9
|
+
*/
|
|
10
|
+
/** Converts a standard base64 string (or already-base64url string) to base64url. */
|
|
11
|
+
export declare function toBase64Url(s: string): string;
|
|
12
|
+
/** Encodes an ArrayBuffer or Buffer as a base64url string (no padding). */
|
|
13
|
+
export declare function bufferToBase64Url(buffer: ArrayBuffer | Buffer): string;
|
|
14
|
+
/** Decodes a base64url string into a Buffer. */
|
|
15
|
+
export declare function base64UrlToBuffer(s: string): Buffer;
|
|
16
|
+
//# sourceMappingURL=base64url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64url.d.ts","sourceRoot":"","sources":["../../src/base64url.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAEtE;AAED,gDAAgD;AAChD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base64url encoding helpers.
|
|
4
|
+
*
|
|
5
|
+
* Base64url uses the same alphabet as standard base64 except `+` becomes `-`,
|
|
6
|
+
* `/` becomes `_`, and padding (`=`) is stripped. Browser WebAuthn APIs and
|
|
7
|
+
* the BitGo server both use base64url for credential IDs and PRF salts, so we
|
|
8
|
+
* normalise to it everywhere on the client to avoid mismatches caused by
|
|
9
|
+
* mixing encodings.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.toBase64Url = toBase64Url;
|
|
13
|
+
exports.bufferToBase64Url = bufferToBase64Url;
|
|
14
|
+
exports.base64UrlToBuffer = base64UrlToBuffer;
|
|
15
|
+
/** Converts a standard base64 string (or already-base64url string) to base64url. */
|
|
16
|
+
function toBase64Url(s) {
|
|
17
|
+
return s.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
18
|
+
}
|
|
19
|
+
/** Encodes an ArrayBuffer or Buffer as a base64url string (no padding). */
|
|
20
|
+
function bufferToBase64Url(buffer) {
|
|
21
|
+
return toBase64Url(Buffer.from(buffer).toString('base64'));
|
|
22
|
+
}
|
|
23
|
+
/** Decodes a base64url string into a Buffer. */
|
|
24
|
+
function base64UrlToBuffer(s) {
|
|
25
|
+
return Buffer.from(s.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTY0dXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jhc2U2NHVybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7O0FBR0gsa0NBRUM7QUFHRCw4Q0FFQztBQUdELDhDQUVDO0FBYkQsb0ZBQW9GO0FBQ3BGLFNBQWdCLFdBQVcsQ0FBQyxDQUFTO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsU0FBZ0IsaUJBQWlCLENBQUMsTUFBNEI7SUFDNUQsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELGdEQUFnRDtBQUNoRCxTQUFnQixpQkFBaUIsQ0FBQyxDQUFTO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhc2U2NHVybCBlbmNvZGluZyBoZWxwZXJzLlxuICpcbiAqIEJhc2U2NHVybCB1c2VzIHRoZSBzYW1lIGFscGhhYmV0IGFzIHN0YW5kYXJkIGJhc2U2NCBleGNlcHQgYCtgIGJlY29tZXMgYC1gLFxuICogYC9gIGJlY29tZXMgYF9gLCBhbmQgcGFkZGluZyAoYD1gKSBpcyBzdHJpcHBlZC4gQnJvd3NlciBXZWJBdXRobiBBUElzIGFuZFxuICogdGhlIEJpdEdvIHNlcnZlciBib3RoIHVzZSBiYXNlNjR1cmwgZm9yIGNyZWRlbnRpYWwgSURzIGFuZCBQUkYgc2FsdHMsIHNvIHdlXG4gKiBub3JtYWxpc2UgdG8gaXQgZXZlcnl3aGVyZSBvbiB0aGUgY2xpZW50IHRvIGF2b2lkIG1pc21hdGNoZXMgY2F1c2VkIGJ5XG4gKiBtaXhpbmcgZW5jb2RpbmdzLlxuICovXG5cbi8qKiBDb252ZXJ0cyBhIHN0YW5kYXJkIGJhc2U2NCBzdHJpbmcgKG9yIGFscmVhZHktYmFzZTY0dXJsIHN0cmluZykgdG8gYmFzZTY0dXJsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQmFzZTY0VXJsKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTtcbn1cblxuLyoqIEVuY29kZXMgYW4gQXJyYXlCdWZmZXIgb3IgQnVmZmVyIGFzIGEgYmFzZTY0dXJsIHN0cmluZyAobm8gcGFkZGluZykuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9CYXNlNjRVcmwoYnVmZmVyOiBBcnJheUJ1ZmZlciB8IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiB0b0Jhc2U2NFVybChCdWZmZXIuZnJvbShidWZmZXIgYXMgQXJyYXlCdWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG59XG5cbi8qKiBEZWNvZGVzIGEgYmFzZTY0dXJsIHN0cmluZyBpbnRvIGEgQnVmZmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NFVybFRvQnVmZmVyKHM6IHN0cmluZyk6IEJ1ZmZlciB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShzLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyksICdiYXNlNjQnKTtcbn1cbiJdfQ==
|
|
@@ -4,9 +4,15 @@
|
|
|
4
4
|
* Computes HMAC-SHA256(key=prfSalt_base64url_decoded, data=enterpriseId_utf8).
|
|
5
5
|
* The baseSalt must always come from the server — never generate it client-side.
|
|
6
6
|
*
|
|
7
|
+
* Returns base64url so the same encoding is used everywhere the salt is handled
|
|
8
|
+
* (server storage, PRF eval input, prfHelpers lookup). Mixing encodings
|
|
9
|
+
* (e.g. hex on the client, base64url on the server) caused the PRF to receive
|
|
10
|
+
* different bytes during attach vs derive in browser environments where
|
|
11
|
+
* `Buffer.toString('hex')` is unreliable.
|
|
12
|
+
*
|
|
7
13
|
* @param baseSalt - Server-provided base64url-encoded PRF salt
|
|
8
14
|
* @param enterpriseId - Enterprise identifier
|
|
9
|
-
* @returns
|
|
15
|
+
* @returns Base64url-encoded HMAC-SHA256 digest (no padding)
|
|
10
16
|
*/
|
|
11
17
|
export declare function deriveEnterpriseSalt(baseSalt: string, enterpriseId: string): string;
|
|
12
18
|
//# sourceMappingURL=deriveEnterpriseSalt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deriveEnterpriseSalt.d.ts","sourceRoot":"","sources":["../../src/deriveEnterpriseSalt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deriveEnterpriseSalt.d.ts","sourceRoot":"","sources":["../../src/deriveEnterpriseSalt.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnF"}
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.deriveEnterpriseSalt = deriveEnterpriseSalt;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
|
+
const base64url_1 = require("./base64url");
|
|
5
6
|
/**
|
|
6
7
|
* Derives an enterprise-scoped PRF salt to prevent cross-enterprise key reuse.
|
|
7
8
|
*
|
|
8
9
|
* Computes HMAC-SHA256(key=prfSalt_base64url_decoded, data=enterpriseId_utf8).
|
|
9
10
|
* The baseSalt must always come from the server — never generate it client-side.
|
|
10
11
|
*
|
|
12
|
+
* Returns base64url so the same encoding is used everywhere the salt is handled
|
|
13
|
+
* (server storage, PRF eval input, prfHelpers lookup). Mixing encodings
|
|
14
|
+
* (e.g. hex on the client, base64url on the server) caused the PRF to receive
|
|
15
|
+
* different bytes during attach vs derive in browser environments where
|
|
16
|
+
* `Buffer.toString('hex')` is unreliable.
|
|
17
|
+
*
|
|
11
18
|
* @param baseSalt - Server-provided base64url-encoded PRF salt
|
|
12
19
|
* @param enterpriseId - Enterprise identifier
|
|
13
|
-
* @returns
|
|
20
|
+
* @returns Base64url-encoded HMAC-SHA256 digest (no padding)
|
|
14
21
|
*/
|
|
15
22
|
function deriveEnterpriseSalt(baseSalt, enterpriseId) {
|
|
16
|
-
const keyBytes =
|
|
17
|
-
return (0, crypto_1.createHmac)('sha256', keyBytes).update(enterpriseId).digest('
|
|
23
|
+
const keyBytes = (0, base64url_1.base64UrlToBuffer)(baseSalt);
|
|
24
|
+
return (0, base64url_1.toBase64Url)((0, crypto_1.createHmac)('sha256', keyBytes).update(enterpriseId).digest('base64'));
|
|
18
25
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlRW50ZXJwcmlzZVNhbHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVyaXZlRW50ZXJwcmlzZVNhbHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsb0RBR0M7QUF0QkQsbUNBQW9DO0FBQ3BDLDJDQUE2RDtBQUU3RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFlBQW9CO0lBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUEsNkJBQWlCLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsT0FBTyxJQUFBLHVCQUFXLEVBQUMsSUFBQSxtQkFBVSxFQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhtYWMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgYmFzZTY0VXJsVG9CdWZmZXIsIHRvQmFzZTY0VXJsIH0gZnJvbSAnLi9iYXNlNjR1cmwnO1xuXG4vKipcbiAqIERlcml2ZXMgYW4gZW50ZXJwcmlzZS1zY29wZWQgUFJGIHNhbHQgdG8gcHJldmVudCBjcm9zcy1lbnRlcnByaXNlIGtleSByZXVzZS5cbiAqXG4gKiBDb21wdXRlcyBITUFDLVNIQTI1NihrZXk9cHJmU2FsdF9iYXNlNjR1cmxfZGVjb2RlZCwgZGF0YT1lbnRlcnByaXNlSWRfdXRmOCkuXG4gKiBUaGUgYmFzZVNhbHQgbXVzdCBhbHdheXMgY29tZSBmcm9tIHRoZSBzZXJ2ZXIg4oCUIG5ldmVyIGdlbmVyYXRlIGl0IGNsaWVudC1zaWRlLlxuICpcbiAqIFJldHVybnMgYmFzZTY0dXJsIHNvIHRoZSBzYW1lIGVuY29kaW5nIGlzIHVzZWQgZXZlcnl3aGVyZSB0aGUgc2FsdCBpcyBoYW5kbGVkXG4gKiAoc2VydmVyIHN0b3JhZ2UsIFBSRiBldmFsIGlucHV0LCBwcmZIZWxwZXJzIGxvb2t1cCkuIE1peGluZyBlbmNvZGluZ3NcbiAqIChlLmcuIGhleCBvbiB0aGUgY2xpZW50LCBiYXNlNjR1cmwgb24gdGhlIHNlcnZlcikgY2F1c2VkIHRoZSBQUkYgdG8gcmVjZWl2ZVxuICogZGlmZmVyZW50IGJ5dGVzIGR1cmluZyBhdHRhY2ggdnMgZGVyaXZlIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIHdoZXJlXG4gKiBgQnVmZmVyLnRvU3RyaW5nKCdoZXgnKWAgaXMgdW5yZWxpYWJsZS5cbiAqXG4gKiBAcGFyYW0gYmFzZVNhbHQgLSBTZXJ2ZXItcHJvdmlkZWQgYmFzZTY0dXJsLWVuY29kZWQgUFJGIHNhbHRcbiAqIEBwYXJhbSBlbnRlcnByaXNlSWQgLSBFbnRlcnByaXNlIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIEJhc2U2NHVybC1lbmNvZGVkIEhNQUMtU0hBMjU2IGRpZ2VzdCAobm8gcGFkZGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUVudGVycHJpc2VTYWx0KGJhc2VTYWx0OiBzdHJpbmcsIGVudGVycHJpc2VJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qga2V5Qnl0ZXMgPSBiYXNlNjRVcmxUb0J1ZmZlcihiYXNlU2FsdCk7XG4gIHJldHVybiB0b0Jhc2U2NFVybChjcmVhdGVIbWFjKCdzaGEyNTYnLCBrZXlCeXRlcykudXBkYXRlKGVudGVycHJpc2VJZCkuZGlnZXN0KCdiYXNlNjQnKSk7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivePasskeyPrfKey.d.ts","sourceRoot":"","sources":["../../src/derivePasskeyPrfKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"derivePasskeyPrfKey.d.ts","sourceRoot":"","sources":["../../src/derivePasskeyPrfKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAoD,MAAM,sBAAsB,CAAC;AAGjH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA8BxD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ClB"}
|
|
@@ -3,6 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.derivePasskeyPrfKey = derivePasskeyPrfKey;
|
|
4
4
|
const prfHelpers_1 = require("./prfHelpers");
|
|
5
5
|
const derivePassword_1 = require("./derivePassword");
|
|
6
|
+
function webauthnDevicesFromKeychain(keychain) {
|
|
7
|
+
const lower = keychain.webauthnDevices;
|
|
8
|
+
if (lower !== undefined && lower.length > 0) {
|
|
9
|
+
return lower;
|
|
10
|
+
}
|
|
11
|
+
const upper = keychain.webAuthnDevices;
|
|
12
|
+
if (upper !== undefined && upper.length > 0) {
|
|
13
|
+
return upper;
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
function challengeFromAuthResponse(body) {
|
|
18
|
+
if (typeof body !== 'object' || body === null) {
|
|
19
|
+
throw new Error('Invalid assertion challenge response');
|
|
20
|
+
}
|
|
21
|
+
const rec = body;
|
|
22
|
+
if (typeof rec.challenge !== 'string') {
|
|
23
|
+
throw new Error('Invalid assertion challenge response');
|
|
24
|
+
}
|
|
25
|
+
return rec.challenge;
|
|
26
|
+
}
|
|
6
27
|
/**
|
|
7
28
|
* Derives a wallet passphrase from a passkey PRF output.
|
|
8
29
|
*
|
|
@@ -12,34 +33,36 @@ const derivePassword_1 = require("./derivePassword");
|
|
|
12
33
|
*/
|
|
13
34
|
async function derivePasskeyPrfKey(params) {
|
|
14
35
|
const { bitgo, wallet, provider } = params;
|
|
15
|
-
// Fetch the wallet's user keychain to get webauthnDevices
|
|
16
36
|
const keychain = await wallet.getEncryptedUserKeychain();
|
|
17
|
-
const devices = keychain
|
|
37
|
+
const devices = webauthnDevicesFromKeychain(keychain);
|
|
18
38
|
if (!devices || devices.length === 0) {
|
|
19
39
|
throw new Error('No passkey devices available');
|
|
20
40
|
}
|
|
21
|
-
// Build PRF eval map from devices
|
|
22
41
|
const { evalByCredential } = (0, prfHelpers_1.buildEvalByCredential)(devices);
|
|
23
42
|
if (Object.keys(evalByCredential).length === 0) {
|
|
24
43
|
throw new Error('No passkey devices available with a valid PRF salt');
|
|
25
44
|
}
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
.
|
|
29
|
-
.
|
|
30
|
-
|
|
45
|
+
const challenge = challengeFromAuthResponse(await bitgo.get(bitgo.url('/user/otp/webauthn/auth', 2)).result());
|
|
46
|
+
const allowCredentials = Object.keys(evalByCredential).map((credId) => {
|
|
47
|
+
const nodeBuf = Buffer.from(credId.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
|
|
48
|
+
const id = nodeBuf.buffer.slice(nodeBuf.byteOffset, nodeBuf.byteOffset + nodeBuf.byteLength);
|
|
49
|
+
return {
|
|
50
|
+
type: 'public-key',
|
|
51
|
+
id,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
const publicKey = {
|
|
55
|
+
challenge: new Uint8Array(Buffer.from(challenge, 'base64')),
|
|
56
|
+
allowCredentials,
|
|
57
|
+
};
|
|
31
58
|
const result = await provider.get({
|
|
32
|
-
publicKey
|
|
33
|
-
challenge: Buffer.from(challenge, 'base64'),
|
|
34
|
-
},
|
|
59
|
+
publicKey,
|
|
35
60
|
evalByCredential,
|
|
36
61
|
});
|
|
37
|
-
// Verify the credential matches a known device
|
|
38
62
|
(0, prfHelpers_1.matchDeviceByCredentialId)(devices, result.credentialId);
|
|
39
|
-
// Derive and return hex-encoded wallet passphrase
|
|
40
63
|
if (!result.prfResult) {
|
|
41
64
|
throw new Error('PRF output was not returned by the authenticator');
|
|
42
65
|
}
|
|
43
66
|
return (0, derivePassword_1.derivePassword)(result.prfResult);
|
|
44
67
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0NBLGtEQWdEQztBQXZGRCw2Q0FBZ0Y7QUFDaEYscURBQWtEO0FBUWxELFNBQVMsMkJBQTJCLENBQUMsUUFBOEI7SUFDakUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUN2QyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQ3ZDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLElBQWE7SUFDOUMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBK0IsQ0FBQztJQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUN2QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BSXpDO0lBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTNDLE1BQU0sUUFBUSxHQUF5QixNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9FLE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXRELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsa0NBQXFCLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcseUJBQXlCLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRS9HLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdGLE9BQU87WUFDTCxJQUFJLEVBQUUsWUFBcUI7WUFDM0IsRUFBRTtTQUNILENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFzQztRQUNuRCxTQUFTLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0QsZ0JBQWdCO0tBQ2pCLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDaEMsU0FBUztRQUNULGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFFSCxJQUFBLHNDQUF5QixFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU8sSUFBQSwrQkFBYyxFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCaXRHb0Jhc2UsIElXYWxsZXQsIEtleWNoYWluV2ViYXV0aG5EZXZpY2UsIEtleWNoYWluV2l0aEVuY3J5cHRlZFBydiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJ1aWxkRXZhbEJ5Q3JlZGVudGlhbCwgbWF0Y2hEZXZpY2VCeUNyZWRlbnRpYWxJZCB9IGZyb20gJy4vcHJmSGVscGVycyc7XG5pbXBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4vZGVyaXZlUGFzc3dvcmQnO1xuaW1wb3J0IHR5cGUgeyBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuLyoqIEFQSSBwYXlsb2FkcyBtYXkgdXNlIGVpdGhlciBzcGVsbGluZyBmb3IgdGhlIHdlYmF1dGhuIGRldmljZSBsaXN0LiAqL1xudHlwZSBVc2VyS2V5Y2hhaW5SZXNwb25zZSA9IEtleWNoYWluV2l0aEVuY3J5cHRlZFBydiAmIHtcbiAgd2ViQXV0aG5EZXZpY2VzPzogS2V5Y2hhaW5XZWJhdXRobkRldmljZVtdO1xufTtcblxuZnVuY3Rpb24gd2ViYXV0aG5EZXZpY2VzRnJvbUtleWNoYWluKGtleWNoYWluOiBVc2VyS2V5Y2hhaW5SZXNwb25zZSk6IEtleWNoYWluV2ViYXV0aG5EZXZpY2VbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxvd2VyID0ga2V5Y2hhaW4ud2ViYXV0aG5EZXZpY2VzO1xuICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCAmJiBsb3dlci5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGxvd2VyO1xuICB9XG4gIGNvbnN0IHVwcGVyID0ga2V5Y2hhaW4ud2ViQXV0aG5EZXZpY2VzO1xuICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCAmJiB1cHBlci5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVwcGVyO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNoYWxsZW5nZUZyb21BdXRoUmVzcG9uc2UoYm9keTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcgfHwgYm9keSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NlcnRpb24gY2hhbGxlbmdlIHJlc3BvbnNlJyk7XG4gIH1cbiAgY29uc3QgcmVjID0gYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiByZWMuY2hhbGxlbmdlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NlcnRpb24gY2hhbGxlbmdlIHJlc3BvbnNlJyk7XG4gIH1cbiAgcmV0dXJuIHJlYy5jaGFsbGVuZ2U7XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIHdhbGxldCBwYXNzcGhyYXNlIGZyb20gYSBwYXNza2V5IFBSRiBvdXRwdXQuXG4gKlxuICogRmV0Y2hlcyB0aGUgd2FsbGV0J3MgdXNlciBrZXljaGFpbiwgdHJpZ2dlcnMgYSBXZWJBdXRobiBhc3NlcnRpb24gd2l0aCBQUkZcbiAqIGV2YWx1YXRpb24sIGFuZCByZXR1cm5zIGEgaGV4LWVuY29kZWQgcGFzc3BocmFzZSBzdWl0YWJsZSBmb3IgdXNlIGFzXG4gKiB3YWxsZXRQYXNzcGhyYXNlIGluIHNpZ25pbmcgY2FsbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXJpdmVQYXNza2V5UHJmS2V5KHBhcmFtczoge1xuICBiaXRnbzogQml0R29CYXNlO1xuICB3YWxsZXQ6IElXYWxsZXQ7XG4gIHByb3ZpZGVyOiBXZWJBdXRoblByb3ZpZGVyO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgYml0Z28sIHdhbGxldCwgcHJvdmlkZXIgfSA9IHBhcmFtcztcblxuICBjb25zdCBrZXljaGFpbjogVXNlcktleWNoYWluUmVzcG9uc2UgPSBhd2FpdCB3YWxsZXQuZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluKCk7XG4gIGNvbnN0IGRldmljZXMgPSB3ZWJhdXRobkRldmljZXNGcm9tS2V5Y2hhaW4oa2V5Y2hhaW4pO1xuXG4gIGlmICghZGV2aWNlcyB8fCBkZXZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZScpO1xuICB9XG5cbiAgY29uc3QgeyBldmFsQnlDcmVkZW50aWFsIH0gPSBidWlsZEV2YWxCeUNyZWRlbnRpYWwoZGV2aWNlcyk7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGV2YWxCeUNyZWRlbnRpYWwpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZSB3aXRoIGEgdmFsaWQgUFJGIHNhbHQnKTtcbiAgfVxuXG4gIGNvbnN0IGNoYWxsZW5nZSA9IGNoYWxsZW5nZUZyb21BdXRoUmVzcG9uc2UoYXdhaXQgYml0Z28uZ2V0KGJpdGdvLnVybCgnL3VzZXIvb3RwL3dlYmF1dGhuL2F1dGgnLCAyKSkucmVzdWx0KCkpO1xuXG4gIGNvbnN0IGFsbG93Q3JlZGVudGlhbHMgPSBPYmplY3Qua2V5cyhldmFsQnlDcmVkZW50aWFsKS5tYXAoKGNyZWRJZCkgPT4ge1xuICAgIGNvbnN0IG5vZGVCdWYgPSBCdWZmZXIuZnJvbShjcmVkSWQucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKSwgJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGlkID0gbm9kZUJ1Zi5idWZmZXIuc2xpY2Uobm9kZUJ1Zi5ieXRlT2Zmc2V0LCBub2RlQnVmLmJ5dGVPZmZzZXQgKyBub2RlQnVmLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncHVibGljLWtleScgYXMgY29uc3QsXG4gICAgICBpZCxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBwdWJsaWNLZXk6IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICBjaGFsbGVuZ2U6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGNoYWxsZW5nZSwgJ2Jhc2U2NCcpKSxcbiAgICBhbGxvd0NyZWRlbnRpYWxzLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdldCh7XG4gICAgcHVibGljS2V5LFxuICAgIGV2YWxCeUNyZWRlbnRpYWwsXG4gIH0pO1xuXG4gIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQoZGV2aWNlcywgcmVzdWx0LmNyZWRlbnRpYWxJZCk7XG5cbiAgaWYgKCFyZXN1bHQucHJmUmVzdWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkYgb3V0cHV0IHdhcyBub3QgcmV0dXJuZWQgYnkgdGhlIGF1dGhlbnRpY2F0b3InKTtcbiAgfVxuXG4gIHJldHVybiBkZXJpdmVQYXNzd29yZChyZXN1bHQucHJmUmVzdWx0KTtcbn1cbiJdfQ==
|
package/dist/src/index.d.ts
CHANGED
|
@@ -5,4 +5,6 @@ export { buildEvalByCredential, matchDeviceByCredentialId } from './prfHelpers';
|
|
|
5
5
|
export { removePasskeyFromAccount } from './removePasskeyFromAccount';
|
|
6
6
|
export type { WebAuthnOtpDevice, PasskeyAuthResult, PasskeyGetOptions, WebAuthnProvider } from './webAuthnTypes';
|
|
7
7
|
export { removePasskeyFromWallet } from './removePasskeyFromWallet';
|
|
8
|
+
export { attachPasskeyToWallet } from './attachPasskeyToWallet';
|
|
9
|
+
export { derivePasskeyPrfKey } from './derivePasskeyPrfKey';
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.removePasskeyFromWallet = exports.removePasskeyFromAccount = exports.matchDeviceByCredentialId = exports.buildEvalByCredential = exports.deriveEnterpriseSalt = exports.registerPasskey = exports.derivePassword = void 0;
|
|
3
|
+
exports.derivePasskeyPrfKey = exports.attachPasskeyToWallet = exports.removePasskeyFromWallet = exports.removePasskeyFromAccount = exports.matchDeviceByCredentialId = exports.buildEvalByCredential = exports.deriveEnterpriseSalt = exports.registerPasskey = exports.derivePassword = void 0;
|
|
4
4
|
var derivePassword_1 = require("./derivePassword");
|
|
5
5
|
Object.defineProperty(exports, "derivePassword", { enumerable: true, get: function () { return derivePassword_1.derivePassword; } });
|
|
6
6
|
var registerPasskey_1 = require("./registerPasskey");
|
|
@@ -14,4 +14,8 @@ var removePasskeyFromAccount_1 = require("./removePasskeyFromAccount");
|
|
|
14
14
|
Object.defineProperty(exports, "removePasskeyFromAccount", { enumerable: true, get: function () { return removePasskeyFromAccount_1.removePasskeyFromAccount; } });
|
|
15
15
|
var removePasskeyFromWallet_1 = require("./removePasskeyFromWallet");
|
|
16
16
|
Object.defineProperty(exports, "removePasskeyFromWallet", { enumerable: true, get: function () { return removePasskeyFromWallet_1.removePasskeyFromWallet; } });
|
|
17
|
-
|
|
17
|
+
var attachPasskeyToWallet_1 = require("./attachPasskeyToWallet");
|
|
18
|
+
Object.defineProperty(exports, "attachPasskeyToWallet", { enumerable: true, get: function () { return attachPasskeyToWallet_1.attachPasskeyToWallet; } });
|
|
19
|
+
var derivePasskeyPrfKey_1 = require("./derivePasskeyPrfKey");
|
|
20
|
+
Object.defineProperty(exports, "derivePasskeyPrfKey", { enumerable: true, get: function () { return derivePasskeyPrfKey_1.derivePasskeyPrfKey; } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWtEO0FBQXpDLGdIQUFBLGNBQWMsT0FBQTtBQUN2QixxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLCtEQUE4RDtBQUFyRCw0SEFBQSxvQkFBb0IsT0FBQTtBQUM3QiwyQ0FBZ0Y7QUFBdkUsbUhBQUEscUJBQXFCLE9BQUE7QUFBRSx1SEFBQSx5QkFBeUIsT0FBQTtBQUN6RCx1RUFBc0U7QUFBN0Qsb0lBQUEsd0JBQXdCLE9BQUE7QUFFakMscUVBQW9FO0FBQTNELGtJQUFBLHVCQUF1QixPQUFBO0FBQ2hDLGlFQUFnRTtBQUF2RCw4SEFBQSxxQkFBcUIsT0FBQTtBQUM5Qiw2REFBNEQ7QUFBbkQsMEhBQUEsbUJBQW1CLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZXJpdmVQYXNzd29yZCB9IGZyb20gJy4vZGVyaXZlUGFzc3dvcmQnO1xuZXhwb3J0IHsgcmVnaXN0ZXJQYXNza2V5IH0gZnJvbSAnLi9yZWdpc3RlclBhc3NrZXknO1xuZXhwb3J0IHsgZGVyaXZlRW50ZXJwcmlzZVNhbHQgfSBmcm9tICcuL2Rlcml2ZUVudGVycHJpc2VTYWx0JztcbmV4cG9ydCB7IGJ1aWxkRXZhbEJ5Q3JlZGVudGlhbCwgbWF0Y2hEZXZpY2VCeUNyZWRlbnRpYWxJZCB9IGZyb20gJy4vcHJmSGVscGVycyc7XG5leHBvcnQgeyByZW1vdmVQYXNza2V5RnJvbUFjY291bnQgfSBmcm9tICcuL3JlbW92ZVBhc3NrZXlGcm9tQWNjb3VudCc7XG5leHBvcnQgdHlwZSB7IFdlYkF1dGhuT3RwRGV2aWNlLCBQYXNza2V5QXV0aFJlc3VsdCwgUGFzc2tleUdldE9wdGlvbnMsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuZXhwb3J0IHsgcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQgfSBmcm9tICcuL3JlbW92ZVBhc3NrZXlGcm9tV2FsbGV0JztcbmV4cG9ydCB7IGF0dGFjaFBhc3NrZXlUb1dhbGxldCB9IGZyb20gJy4vYXR0YWNoUGFzc2tleVRvV2FsbGV0JztcbmV4cG9ydCB7IGRlcml2ZVBhc3NrZXlQcmZLZXkgfSBmcm9tICcuL2Rlcml2ZVBhc3NrZXlQcmZLZXknO1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prfHelpers.d.ts","sourceRoot":"","sources":["../../src/prfHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"prfHelpers.d.ts","sourceRoot":"","sources":["../../src/prfHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG;IAChE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C,CA0BA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAQzG"}
|
package/dist/src/prfHelpers.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildEvalByCredential = buildEvalByCredential;
|
|
4
4
|
exports.matchDeviceByCredentialId = matchDeviceByCredentialId;
|
|
5
|
+
const base64url_1 = require("./base64url");
|
|
5
6
|
/**
|
|
6
7
|
* Builds the PRF eval map and credential-to-device lookup from a wallet
|
|
7
8
|
* keychain's webauthn devices. Devices without a prfSalt are skipped.
|
|
@@ -13,8 +14,20 @@ function buildEvalByCredential(devices) {
|
|
|
13
14
|
if (!device.prfSalt)
|
|
14
15
|
continue;
|
|
15
16
|
const { credID } = device.authenticatorInfo;
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
// Normalise credID to base64url (no padding, URL-safe chars) so it matches
|
|
18
|
+
// the key format used by attachPasskeyToWallet (device.credentialId from the
|
|
19
|
+
// browser, which is already base64url). The WebAuthn PRF extension looks up
|
|
20
|
+
// the selected credential's ID against evalByCredential keys — if the encoding
|
|
21
|
+
// differs (e.g. standard base64 with padding/+/), the lookup silently fails and
|
|
22
|
+
// PRF evaluates with no salt, producing a different output.
|
|
23
|
+
const credIdBase64url = (0, base64url_1.toBase64Url)(credID);
|
|
24
|
+
// Pass prfSalt through as-is (base64url). attachPasskeyToWallet writes the
|
|
25
|
+
// server-stored salt in the same encoding and feeds the same string to
|
|
26
|
+
// the PRF extension at attach time, so both paths produce the same salt
|
|
27
|
+
// bytes — provided the WebAuthn provider layer decodes base64url before
|
|
28
|
+
// handing the bytes to navigator.credentials.get.
|
|
29
|
+
evalByCredential[credIdBase64url] = device.prfSalt;
|
|
30
|
+
credIdToDevice.set(credIdBase64url, device);
|
|
18
31
|
}
|
|
19
32
|
return { evalByCredential, credIdToDevice };
|
|
20
33
|
}
|
|
@@ -23,10 +36,12 @@ function buildEvalByCredential(devices) {
|
|
|
23
36
|
* @throws if no matching device is found
|
|
24
37
|
*/
|
|
25
38
|
function matchDeviceByCredentialId(devices, credentialId) {
|
|
26
|
-
|
|
39
|
+
// Normalise both sides to base64url so padding/char differences don't break matching.
|
|
40
|
+
const needle = (0, base64url_1.toBase64Url)(credentialId);
|
|
41
|
+
const device = devices.find((d) => (0, base64url_1.toBase64Url)(d.authenticatorInfo.credID) === needle);
|
|
27
42
|
if (!device) {
|
|
28
43
|
throw new Error('Could not identify which passkey device was used');
|
|
29
44
|
}
|
|
30
45
|
return device;
|
|
31
46
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJmSGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcmZIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esc0RBNkJDO0FBTUQsOERBUUM7QUFqREQsMkNBQTBDO0FBRTFDOzs7R0FHRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLE9BQXlCO0lBSTdELE1BQU0sZ0JBQWdCLEdBQTJCLEVBQUUsQ0FBQztJQUNwRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUV6RCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztZQUFFLFNBQVM7UUFDOUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUU1QywyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSwrRUFBK0U7UUFDL0UsZ0ZBQWdGO1FBQ2hGLDREQUE0RDtRQUM1RCxNQUFNLGVBQWUsR0FBRyxJQUFBLHVCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUMsMkVBQTJFO1FBQzNFLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLGtEQUFrRDtRQUNsRCxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ25ELGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDOUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLE9BQXlCLEVBQUUsWUFBb0I7SUFDdkYsc0ZBQXNGO0lBQ3RGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQVcsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLHVCQUFXLEVBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV2ViYXV0aG5EZXZpY2UgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IHRvQmFzZTY0VXJsIH0gZnJvbSAnLi9iYXNlNjR1cmwnO1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgUFJGIGV2YWwgbWFwIGFuZCBjcmVkZW50aWFsLXRvLWRldmljZSBsb29rdXAgZnJvbSBhIHdhbGxldFxuICoga2V5Y2hhaW4ncyB3ZWJhdXRobiBkZXZpY2VzLiBEZXZpY2VzIHdpdGhvdXQgYSBwcmZTYWx0IGFyZSBza2lwcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFdmFsQnlDcmVkZW50aWFsKGRldmljZXM6IFdlYmF1dGhuRGV2aWNlW10pOiB7XG4gIGV2YWxCeUNyZWRlbnRpYWw6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNyZWRJZFRvRGV2aWNlOiBNYXA8c3RyaW5nLCBXZWJhdXRobkRldmljZT47XG59IHtcbiAgY29uc3QgZXZhbEJ5Q3JlZGVudGlhbDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCBjcmVkSWRUb0RldmljZSA9IG5ldyBNYXA8c3RyaW5nLCBXZWJhdXRobkRldmljZT4oKTtcblxuICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgaWYgKCFkZXZpY2UucHJmU2FsdCkgY29udGludWU7XG4gICAgY29uc3QgeyBjcmVkSUQgfSA9IGRldmljZS5hdXRoZW50aWNhdG9ySW5mbztcblxuICAgIC8vIE5vcm1hbGlzZSBjcmVkSUQgdG8gYmFzZTY0dXJsIChubyBwYWRkaW5nLCBVUkwtc2FmZSBjaGFycykgc28gaXQgbWF0Y2hlc1xuICAgIC8vIHRoZSBrZXkgZm9ybWF0IHVzZWQgYnkgYXR0YWNoUGFzc2tleVRvV2FsbGV0IChkZXZpY2UuY3JlZGVudGlhbElkIGZyb20gdGhlXG4gICAgLy8gYnJvd3Nlciwgd2hpY2ggaXMgYWxyZWFkeSBiYXNlNjR1cmwpLiBUaGUgV2ViQXV0aG4gUFJGIGV4dGVuc2lvbiBsb29rcyB1cFxuICAgIC8vIHRoZSBzZWxlY3RlZCBjcmVkZW50aWFsJ3MgSUQgYWdhaW5zdCBldmFsQnlDcmVkZW50aWFsIGtleXMg4oCUIGlmIHRoZSBlbmNvZGluZ1xuICAgIC8vIGRpZmZlcnMgKGUuZy4gc3RhbmRhcmQgYmFzZTY0IHdpdGggcGFkZGluZy8rLyksIHRoZSBsb29rdXAgc2lsZW50bHkgZmFpbHMgYW5kXG4gICAgLy8gUFJGIGV2YWx1YXRlcyB3aXRoIG5vIHNhbHQsIHByb2R1Y2luZyBhIGRpZmZlcmVudCBvdXRwdXQuXG4gICAgY29uc3QgY3JlZElkQmFzZTY0dXJsID0gdG9CYXNlNjRVcmwoY3JlZElEKTtcblxuICAgIC8vIFBhc3MgcHJmU2FsdCB0aHJvdWdoIGFzLWlzIChiYXNlNjR1cmwpLiBhdHRhY2hQYXNza2V5VG9XYWxsZXQgd3JpdGVzIHRoZVxuICAgIC8vIHNlcnZlci1zdG9yZWQgc2FsdCBpbiB0aGUgc2FtZSBlbmNvZGluZyBhbmQgZmVlZHMgdGhlIHNhbWUgc3RyaW5nIHRvXG4gICAgLy8gdGhlIFBSRiBleHRlbnNpb24gYXQgYXR0YWNoIHRpbWUsIHNvIGJvdGggcGF0aHMgcHJvZHVjZSB0aGUgc2FtZSBzYWx0XG4gICAgLy8gYnl0ZXMg4oCUIHByb3ZpZGVkIHRoZSBXZWJBdXRobiBwcm92aWRlciBsYXllciBkZWNvZGVzIGJhc2U2NHVybCBiZWZvcmVcbiAgICAvLyBoYW5kaW5nIHRoZSBieXRlcyB0byBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0LlxuICAgIGV2YWxCeUNyZWRlbnRpYWxbY3JlZElkQmFzZTY0dXJsXSA9IGRldmljZS5wcmZTYWx0O1xuICAgIGNyZWRJZFRvRGV2aWNlLnNldChjcmVkSWRCYXNlNjR1cmwsIGRldmljZSk7XG4gIH1cblxuICByZXR1cm4geyBldmFsQnlDcmVkZW50aWFsLCBjcmVkSWRUb0RldmljZSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIFdlYmF1dGhuRGV2aWNlIG1hdGNoaW5nIHRoZSBnaXZlbiBjcmVkZW50aWFsIElELlxuICogQHRocm93cyBpZiBubyBtYXRjaGluZyBkZXZpY2UgaXMgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoRGV2aWNlQnlDcmVkZW50aWFsSWQoZGV2aWNlczogV2ViYXV0aG5EZXZpY2VbXSwgY3JlZGVudGlhbElkOiBzdHJpbmcpOiBXZWJhdXRobkRldmljZSB7XG4gIC8vIE5vcm1hbGlzZSBib3RoIHNpZGVzIHRvIGJhc2U2NHVybCBzbyBwYWRkaW5nL2NoYXIgZGlmZmVyZW5jZXMgZG9uJ3QgYnJlYWsgbWF0Y2hpbmcuXG4gIGNvbnN0IG5lZWRsZSA9IHRvQmFzZTY0VXJsKGNyZWRlbnRpYWxJZCk7XG4gIGNvbnN0IGRldmljZSA9IGRldmljZXMuZmluZCgoZCkgPT4gdG9CYXNlNjRVcmwoZC5hdXRoZW50aWNhdG9ySW5mby5jcmVkSUQpID09PSBuZWVkbGUpO1xuICBpZiAoIWRldmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyk7XG4gIH1cbiAgcmV0dXJuIGRldmljZTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerPasskey.d.ts","sourceRoot":"","sources":["../../src/registerPasskey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"registerPasskey.d.ts","sourceRoot":"","sources":["../../src/registerPasskey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAoEtE,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,iBAAiB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA8DzD"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerPasskey = registerPasskey;
|
|
4
|
-
|
|
5
|
-
function encodeBase64Url(buffer) {
|
|
6
|
-
return Buffer.from(buffer).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
7
|
-
}
|
|
4
|
+
const base64url_1 = require("./base64url");
|
|
8
5
|
/**
|
|
9
6
|
* Recursively converts a PublicKeyCredential (or any value it contains) to a
|
|
10
7
|
* JSON-serialisable representation, encoding ArrayBuffers as base64url strings.
|
|
@@ -14,10 +11,10 @@ function publicKeyCredentialToJSON(value) {
|
|
|
14
11
|
return value.map(publicKeyCredentialToJSON);
|
|
15
12
|
}
|
|
16
13
|
if (value instanceof ArrayBuffer) {
|
|
17
|
-
return
|
|
14
|
+
return (0, base64url_1.bufferToBase64Url)(value);
|
|
18
15
|
}
|
|
19
16
|
if (ArrayBuffer.isView(value)) {
|
|
20
|
-
return
|
|
17
|
+
return (0, base64url_1.bufferToBase64Url)(value.buffer);
|
|
21
18
|
}
|
|
22
19
|
if (value instanceof Object) {
|
|
23
20
|
const result = {};
|
|
@@ -93,4 +90,4 @@ async function registerPasskey(params) {
|
|
|
93
90
|
prfSupported,
|
|
94
91
|
};
|
|
95
92
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJQYXNza2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZ2lzdGVyUGFzc2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBFQSwwQ0FrRUM7QUE5R0QsaUVBQWlFO0FBQ2pFLFNBQVMsZUFBZSxDQUFDLE1BQW1CO0lBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMseUJBQXlCLENBQUMsS0FBYztJQUMvQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDakMsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7UUFDM0MsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUF5QixDQUFFLEtBQWlDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztR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QUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsV0FBVyxDQUFDLEVBQUUsa0JBQWtCLFNBQVMsR0FBRyxDQUN2RyxDQUFDO0lBQ0osQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFdlYkF1dGhuT3RwRGV2aWNlLCBXZWJBdXRoblByb3ZpZGVyIH0gZnJvbSAnLi93ZWJBdXRoblR5cGVzJztcblxuaW50ZXJmYWNlIFJlZ2lzdGVyQ2hhbGxlbmdlUmVzcG9uc2Uge1xuICBjaGFsbGVuZ2U6IHN0cmluZztcbiAgYmFzZVNhbHQ6IHN0cmluZztcbiAgcnA6IFB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eTtcbiAgdXNlcjogUHVibGljS2V5Q3JlZGVudGlhbFVzZXJFbnRpdHk7XG4gIHB1YktleUNyZWRQYXJhbXM6IFB1YmxpY0tleUNyZWRlbnRpYWxQYXJhbWV0ZXJzW107XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGV4Y2x1ZGVDcmVkZW50aWFscz86IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW107XG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24/OiBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE7XG4gIGF0dGVzdGF0aW9uPzogQXR0ZXN0YXRpb25Db252ZXlhbmNlUHJlZmVyZW5jZTtcbiAgZXh0ZW5zaW9ucz86IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElucHV0cztcbn1cblxuaW50ZXJmYWNlIE90cERldmljZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWxJZDogc3RyaW5nO1xuICBwcmZTYWx0Pzogc3RyaW5nO1xuICBpc1Bhc3NrZXk/OiBib29sZWFuO1xuICBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG59XG5cbmludGVyZmFjZSBSZWdpc3Rlck90cFJlc3BvbnNlIHtcbiAgdXNlcjoge1xuICAgIG90cERldmljZXM6IE90cERldmljZVtdO1xuICB9O1xufVxuXG4vKiogRW5jb2RlcyBhbiBBcnJheUJ1ZmZlciBhcyBhIGJhc2U2NHVybCBzdHJpbmcgKG5vIHBhZGRpbmcpLiAqL1xuZnVuY3Rpb24gZW5jb2RlQmFzZTY0VXJsKGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gQnVmZmVyLmZyb20oYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvPS9nLCAnJykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJyk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29udmVydHMgYSBQdWJsaWNLZXlDcmVkZW50aWFsIChvciBhbnkgdmFsdWUgaXQgY29udGFpbnMpIHRvIGFcbiAqIEpTT04tc2VyaWFsaXNhYmxlIHJlcHJlc2VudGF0aW9uLCBlbmNvZGluZyBBcnJheUJ1ZmZlcnMgYXMgYmFzZTY0dXJsIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBlbmNvZGVCYXNlNjRVcmwodmFsdWUpO1xuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGVuY29kZUJhc2U2NFVybCh2YWx1ZS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAvLyBVc2UgZm9yLi4uaW4gdG8gZW51bWVyYXRlIERPTSBvYmplY3QgcHJvcGVydGllcyAobm9uLWVudW1lcmFibGUgb3duICsgaW5oZXJpdGVkKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04oKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogRGVjb2RlcyBleGNsdWRlZCBjcmVkZW50aWFsIElEcyBmcm9tIGJhc2U2NCBzdHJpbmdzIHRvIEFycmF5QnVmZmVycy5cbiAqIFRoZSBXZWJBdXRobiBBUEkgcmVxdWlyZXMgQnVmZmVyU291cmNlIHZhbHVlcywgbm90IGJhc2U2NCBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwcmVmb3JtYXRFeGNsdWRlZENyZWRlbnRpYWxzKFxuICBleGNsdWRlQ3JlZGVudGlhbHM6IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gfCB1bmRlZmluZWRcbik6IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10ge1xuICBpZiAoIWV4Y2x1ZGVDcmVkZW50aWFscykgcmV0dXJuIFtdO1xuICByZXR1cm4gZXhjbHVkZUNyZWRlbnRpYWxzLm1hcCgoY3JlZCkgPT4gKHtcbiAgICAuLi5jcmVkLFxuICAgIGlkOiBCdWZmZXIuZnJvbShjcmVkLmlkIGFzIHVua25vd24gYXMgc3RyaW5nLCAnYmFzZTY0JykgYXMgdW5rbm93biBhcyBBcnJheUJ1ZmZlcixcbiAgfSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJQYXNza2V5KHBhcmFtczoge1xuICBiaXRnbzogQml0R29CYXNlO1xuICBwcm92aWRlcjogV2ViQXV0aG5Qcm92aWRlcjtcbiAgbGFiZWw6IHN0cmluZztcbn0pOiBQcm9taXNlPFdlYkF1dGhuT3RwRGV2aWNlICYgeyBwcmZTdXBwb3J0ZWQ6IGJvb2xlYW4gfT4ge1xuICBjb25zdCB7IGJpdGdvLCBwcm92aWRlciwgbGFiZWwgfSA9IHBhcmFtcztcblxuICAvLyBTdGVwIDE6IEZldGNoIHNlcnZlciBjaGFsbGVuZ2UgKGNvbnRhaW5zIGJhc2VTYWx0KVxuICBjb25zdCBjaGFsbGVuZ2UgPSAoYXdhaXQgYml0Z29cbiAgICAuZ2V0KGJpdGdvLnVybCgnL3VzZXIvb3RwL3dlYmF1dGhuL3JlZ2lzdGVyJywgMikpXG4gICAgLnJlc3VsdCgpKSBhcyBSZWdpc3RlckNoYWxsZW5nZVJlc3BvbnNlO1xuXG4gIC8vIFN0ZXAgMjogUGFzcyBmb3JtYXR0ZWQgY2hhbGxlbmdlIHRvIHByb3ZpZGVyLmNyZWF0ZSgpIOKAlCBicm93c2VyIHJldHVybnMgYXR0ZXN0YXRpb25cbiAgY29uc3QgYXR0ZXN0YXRpb24gPSBhd2FpdCBwcm92aWRlci5jcmVhdGUoe1xuICAgIGNoYWxsZW5nZTogQnVmZmVyLmZyb20oY2hhbGxlbmdlLmNoYWxsZW5nZSwgJ2Jhc2U2NCcpLFxuICAgIHJwOiBjaGFsbGVuZ2UucnAsXG4gICAgdXNlcjogY2hhbGxlbmdlLnVzZXIsXG4gICAgcHViS2V5Q3JlZFBhcmFtczogY2hhbGxlbmdlLnB1YktleUNyZWRQYXJhbXMsXG4gICAgdGltZW91dDogY2hhbGxlbmdlLnRpbWVvdXQsXG4gICAgZXhjbHVkZUNyZWRlbnRpYWxzOiBwcmVmb3JtYXRFeGNsdWRlZENyZWRlbnRpYWxzKGNoYWxsZW5nZS5leGNsdWRlQ3JlZGVudGlhbHMpLFxuICAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb246IGNoYWxsZW5nZS5hdXRoZW50aWNhdG9yU2VsZWN0aW9uLFxuICAgIGF0dGVzdGF0aW9uOiBjaGFsbGVuZ2UuYXR0ZXN0YXRpb24sXG4gICAgZXh0ZW5zaW9uczogY2hhbGxlbmdlLmV4dGVuc2lvbnMsXG4gIH0pO1xuXG4gIC8vIFN0ZXAgMzogQ2hlY2sgaWYgUFJGIGlzIHN1cHBvcnRlZCDigJQgYHByZi5lbmFibGVkYCBpcyBzZXQgZHVyaW5nIHJlZ2lzdHJhdGlvblxuICAvLyAobm90IGBwcmYucmVzdWx0cy5maXJzdGAsIHdoaWNoIGlzIG9ubHkgcHJlc2VudCBkdXJpbmcgYXV0aGVudGljYXRpb24gYXNzZXJ0aW9ucylcbiAgY29uc3QgY2xpZW50RXh0ZW5zaW9uUmVzdWx0czogQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50T3V0cHV0cyA9IGF0dGVzdGF0aW9uLmdldENsaWVudEV4dGVuc2lvblJlc3VsdHMoKTtcbiAgY29uc3QgcHJmRW5hYmxlZCA9IGNsaWVudEV4dGVuc2lvblJlc3VsdHMucHJmO1xuICBjb25zdCBwcmZTdXBwb3J0ZWQgPSB0eXBlb2YgcHJmRW5hYmxlZCA9PT0gJ29iamVjdCcgJiYgcHJmRW5hYmxlZCAhPT0gbnVsbCAmJiBwcmZFbmFibGVkLmVuYWJsZWQgPT09IHRydWU7XG5cbiAgLy8gU3RlcCA0OiBTZXJpYWxpemUgdGhlIGZ1bGwgY3JlZGVudGlhbCB1c2luZyByZWN1cnNpdmUgYmFzZTY0dXJsIGVuY29kaW5nXG4gIGNvbnN0IG90cCA9IEpTT04uc3RyaW5naWZ5KHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04oYXR0ZXN0YXRpb24pKTtcblxuICBjb25zdCBwdXRCb2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBvdHAsXG4gICAgdHlwZTogJ3dlYmF1dGhuJyxcbiAgICBsYWJlbCxcbiAgfTtcblxuICBpZiAocHJmU3VwcG9ydGVkKSB7XG4gICAgcHV0Qm9keS5leHRlbnNpb25zID0gWydwcmYnXTtcbiAgICBwdXRCb2R5LnNjb3BlcyA9IFsnd2FsbGV0X2hvdCddO1xuICB9XG5cbiAgLy8gU3RlcCA1OiBQVVQgL2FwaS92Mi91c2VyL290cFxuICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBiaXRnby5wdXQoYml0Z28udXJsKCcvdXNlci9vdHAnLCAyKSkuc2VuZChwdXRCb2R5KS5yZXN1bHQoKSkgYXMgUmVnaXN0ZXJPdHBSZXNwb25zZTtcblxuICAvLyBTdGVwIDY6IEZpbmQgdGhlIG5ld2x5IHJlZ2lzdGVyZWQgZGV2aWNlIGJ5IG1hdGNoaW5nIGNyZWRlbnRpYWxJZFxuICBjb25zdCBkZXZpY2UgPSByZXNwb25zZS51c2VyLm90cERldmljZXMuZmluZCgoZCkgPT4gZC5jcmVkZW50aWFsSWQgPT09IGF0dGVzdGF0aW9uLmlkKTtcbiAgaWYgKCFkZXZpY2UpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSByZXNwb25zZS51c2VyLm90cERldmljZXMubWFwKChkKSA9PiBkLmNyZWRlbnRpYWxJZCkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgUmVnaXN0ZXJlZCBkZXZpY2Ugbm90IGZvdW5kIGluIHJlc3BvbnNlIChjcmVkZW50aWFsSWQ6ICR7YXR0ZXN0YXRpb24uaWR9KS4gQXZhaWxhYmxlOiBbJHthdmFpbGFibGV9XWBcbiAgICApO1xuICB9XG5cbiAgLy8gU3RlcCA3OiBSZXR1cm4gV2ViQXV0aG5PdHBEZXZpY2UgKyBwcmZTdXBwb3J0ZWRcbiAgcmV0dXJuIHtcbiAgICBpZDogZGV2aWNlLmlkLFxuICAgIGNyZWRlbnRpYWxJZDogZGV2aWNlLmNyZWRlbnRpYWxJZCxcbiAgICBwcmZTYWx0OiBkZXZpY2UucHJmU2FsdCxcbiAgICBpc1Bhc3NrZXk6IGRldmljZS5pc1Bhc3NrZXksXG4gICAgZXh0ZW5zaW9uczogZGV2aWNlLmV4dGVuc2lvbnMsXG4gICAgcHJmU3VwcG9ydGVkLFxuICB9O1xufVxuIl19
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJQYXNza2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZ2lzdGVyUGFzc2tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNFQSwwQ0FrRUM7QUF2SUQsMkNBQWdEO0FBOEJoRDs7O0dBR0c7QUFDSCxTQUFTLHlCQUF5QixDQUFDLEtBQWM7SUFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBQSw2QkFBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFBLDZCQUFpQixFQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7UUFDM0MsbUZBQW1GO1FBQ25GLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLHlCQUF5QixDQUFFLEtBQWlDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNEJBQTRCLENBQ25DLGtCQUErRDtJQUUvRCxJQUFJLENBQUMsa0JBQWtCO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJ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QUUsa0JBQWtCLFNBQVMsR0FBRyxDQUN2RyxDQUFDO0lBQ0osQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJ1ZmZlclRvQmFzZTY0VXJsIH0gZnJvbSAnLi9iYXNlNjR1cmwnO1xuaW1wb3J0IHsgV2ViQXV0aG5PdHBEZXZpY2UsIFdlYkF1dGhuUHJvdmlkZXIgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuXG5pbnRlcmZhY2UgUmVnaXN0ZXJDaGFsbGVuZ2VSZXNwb25zZSB7XG4gIGNoYWxsZW5nZTogc3RyaW5nO1xuICBiYXNlU2FsdDogc3RyaW5nO1xuICBycDogUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5O1xuICB1c2VyOiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTtcbiAgcHViS2V5Q3JlZFBhcmFtczogUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXTtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgZXhjbHVkZUNyZWRlbnRpYWxzPzogUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXTtcbiAgYXV0aGVudGljYXRvclNlbGVjdGlvbj86IEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTtcbiAgYXR0ZXN0YXRpb24/OiBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlO1xuICBleHRlbnNpb25zPzogQXV0aGVudGljYXRpb25FeHRlbnNpb25zQ2xpZW50SW5wdXRzO1xufVxuXG5pbnRlcmZhY2UgT3RwRGV2aWNlIHtcbiAgaWQ6IHN0cmluZztcbiAgY3JlZGVudGlhbElkOiBzdHJpbmc7XG4gIHByZlNhbHQ/OiBzdHJpbmc7XG4gIGlzUGFzc2tleT86IGJvb2xlYW47XG4gIGV4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyT3RwUmVzcG9uc2Uge1xuICB1c2VyOiB7XG4gICAgb3RwRGV2aWNlczogT3RwRGV2aWNlW107XG4gIH07XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgY29udmVydHMgYSBQdWJsaWNLZXlDcmVkZW50aWFsIChvciBhbnkgdmFsdWUgaXQgY29udGFpbnMpIHRvIGFcbiAqIEpTT04tc2VyaWFsaXNhYmxlIHJlcHJlc2VudGF0aW9uLCBlbmNvZGluZyBBcnJheUJ1ZmZlcnMgYXMgYmFzZTY0dXJsIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHB1YmxpY0tleUNyZWRlbnRpYWxUb0pTT04odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBidWZmZXJUb0Jhc2U2NFVybCh2YWx1ZSk7XG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYnVmZmVyVG9CYXNlNjRVcmwodmFsdWUuYnVmZmVyIGFzIEFycmF5QnVmZmVyKTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgLy8gVXNlIGZvci4uLmluIHRvIGVudW1lcmF0ZSBET00gb2JqZWN0IHByb3BlcnRpZXMgKG5vbi1lbnVtZXJhYmxlIG93biArIGluaGVyaXRlZClcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKCh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIERlY29kZXMgZXhjbHVkZWQgY3JlZGVudGlhbCBJRHMgZnJvbSBiYXNlNjQgc3RyaW5ncyB0byBBcnJheUJ1ZmZlcnMuXG4gKiBUaGUgV2ViQXV0aG4gQVBJIHJlcXVpcmVzIEJ1ZmZlclNvdXJjZSB2YWx1ZXMsIG5vdCBiYXNlNjQgc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcHJlZm9ybWF0RXhjbHVkZWRDcmVkZW50aWFscyhcbiAgZXhjbHVkZUNyZWRlbnRpYWxzOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdIHwgdW5kZWZpbmVkXG4pOiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdIHtcbiAgaWYgKCFleGNsdWRlQ3JlZGVudGlhbHMpIHJldHVybiBbXTtcbiAgcmV0dXJuIGV4Y2x1ZGVDcmVkZW50aWFscy5tYXAoKGNyZWQpID0+ICh7XG4gICAgLi4uY3JlZCxcbiAgICBpZDogQnVmZmVyLmZyb20oY3JlZC5pZCBhcyB1bmtub3duIGFzIHN0cmluZywgJ2Jhc2U2NCcpIGFzIHVua25vd24gYXMgQXJyYXlCdWZmZXIsXG4gIH0pKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyUGFzc2tleShwYXJhbXM6IHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJvdmlkZXI6IFdlYkF1dGhuUHJvdmlkZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG59KTogUHJvbWlzZTxXZWJBdXRobk90cERldmljZSAmIHsgcHJmU3VwcG9ydGVkOiBib29sZWFuIH0+IHtcbiAgY29uc3QgeyBiaXRnbywgcHJvdmlkZXIsIGxhYmVsIH0gPSBwYXJhbXM7XG5cbiAgLy8gU3RlcCAxOiBGZXRjaCBzZXJ2ZXIgY2hhbGxlbmdlIChjb250YWlucyBiYXNlU2FsdClcbiAgY29uc3QgY2hhbGxlbmdlID0gKGF3YWl0IGJpdGdvXG4gICAgLmdldChiaXRnby51cmwoJy91c2VyL290cC93ZWJhdXRobi9yZWdpc3RlcicsIDIpKVxuICAgIC5yZXN1bHQoKSkgYXMgUmVnaXN0ZXJDaGFsbGVuZ2VSZXNwb25zZTtcblxuICAvLyBTdGVwIDI6IFBhc3MgZm9ybWF0dGVkIGNoYWxsZW5nZSB0byBwcm92aWRlci5jcmVhdGUoKSDigJQgYnJvd3NlciByZXR1cm5zIGF0dGVzdGF0aW9uXG4gIGNvbnN0IGF0dGVzdGF0aW9uID0gYXdhaXQgcHJvdmlkZXIuY3JlYXRlKHtcbiAgICBjaGFsbGVuZ2U6IEJ1ZmZlci5mcm9tKGNoYWxsZW5nZS5jaGFsbGVuZ2UsICdiYXNlNjQnKSxcbiAgICBycDogY2hhbGxlbmdlLnJwLFxuICAgIHVzZXI6IGNoYWxsZW5nZS51c2VyLFxuICAgIHB1YktleUNyZWRQYXJhbXM6IGNoYWxsZW5nZS5wdWJLZXlDcmVkUGFyYW1zLFxuICAgIHRpbWVvdXQ6IGNoYWxsZW5nZS50aW1lb3V0LFxuICAgIGV4Y2x1ZGVDcmVkZW50aWFsczogcHJlZm9ybWF0RXhjbHVkZWRDcmVkZW50aWFscyhjaGFsbGVuZ2UuZXhjbHVkZUNyZWRlbnRpYWxzKSxcbiAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiBjaGFsbGVuZ2UuYXV0aGVudGljYXRvclNlbGVjdGlvbixcbiAgICBhdHRlc3RhdGlvbjogY2hhbGxlbmdlLmF0dGVzdGF0aW9uLFxuICAgIGV4dGVuc2lvbnM6IGNoYWxsZW5nZS5leHRlbnNpb25zLFxuICB9KTtcblxuICAvLyBTdGVwIDM6IENoZWNrIGlmIFBSRiBpcyBzdXBwb3J0ZWQg4oCUIGBwcmYuZW5hYmxlZGAgaXMgc2V0IGR1cmluZyByZWdpc3RyYXRpb25cbiAgLy8gKG5vdCBgcHJmLnJlc3VsdHMuZmlyc3RgLCB3aGljaCBpcyBvbmx5IHByZXNlbnQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIGFzc2VydGlvbnMpXG4gIGNvbnN0IGNsaWVudEV4dGVuc2lvblJlc3VsdHM6IEF1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudE91dHB1dHMgPSBhdHRlc3RhdGlvbi5nZXRDbGllbnRFeHRlbnNpb25SZXN1bHRzKCk7XG4gIGNvbnN0IHByZkVuYWJsZWQgPSBjbGllbnRFeHRlbnNpb25SZXN1bHRzLnByZjtcbiAgY29uc3QgcHJmU3VwcG9ydGVkID0gdHlwZW9mIHByZkVuYWJsZWQgPT09ICdvYmplY3QnICYmIHByZkVuYWJsZWQgIT09IG51bGwgJiYgcHJmRW5hYmxlZC5lbmFibGVkID09PSB0cnVlO1xuXG4gIC8vIFN0ZXAgNDogU2VyaWFsaXplIHRoZSBmdWxsIGNyZWRlbnRpYWwgdXNpbmcgcmVjdXJzaXZlIGJhc2U2NHVybCBlbmNvZGluZ1xuICBjb25zdCBvdHAgPSBKU09OLnN0cmluZ2lmeShwdWJsaWNLZXlDcmVkZW50aWFsVG9KU09OKGF0dGVzdGF0aW9uKSk7XG5cbiAgY29uc3QgcHV0Qm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgb3RwLFxuICAgIHR5cGU6ICd3ZWJhdXRobicsXG4gICAgbGFiZWwsXG4gIH07XG5cbiAgaWYgKHByZlN1cHBvcnRlZCkge1xuICAgIHB1dEJvZHkuZXh0ZW5zaW9ucyA9IFsncHJmJ107XG4gICAgcHV0Qm9keS5zY29wZXMgPSBbJ3dhbGxldF9ob3QnXTtcbiAgfVxuXG4gIC8vIFN0ZXAgNTogUFVUIC9hcGkvdjIvdXNlci9vdHBcbiAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgYml0Z28ucHV0KGJpdGdvLnVybCgnL3VzZXIvb3RwJywgMikpLnNlbmQocHV0Qm9keSkucmVzdWx0KCkpIGFzIFJlZ2lzdGVyT3RwUmVzcG9uc2U7XG5cbiAgLy8gU3RlcCA2OiBGaW5kIHRoZSBuZXdseSByZWdpc3RlcmVkIGRldmljZSBieSBtYXRjaGluZyBjcmVkZW50aWFsSWRcbiAgY29uc3QgZGV2aWNlID0gcmVzcG9uc2UudXNlci5vdHBEZXZpY2VzLmZpbmQoKGQpID0+IGQuY3JlZGVudGlhbElkID09PSBhdHRlc3RhdGlvbi5pZCk7XG4gIGlmICghZGV2aWNlKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gcmVzcG9uc2UudXNlci5vdHBEZXZpY2VzLm1hcCgoZCkgPT4gZC5jcmVkZW50aWFsSWQpLmpvaW4oJywgJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFJlZ2lzdGVyZWQgZGV2aWNlIG5vdCBmb3VuZCBpbiByZXNwb25zZSAoY3JlZGVudGlhbElkOiAke2F0dGVzdGF0aW9uLmlkfSkuIEF2YWlsYWJsZTogWyR7YXZhaWxhYmxlfV1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFN0ZXAgNzogUmV0dXJuIFdlYkF1dGhuT3RwRGV2aWNlICsgcHJmU3VwcG9ydGVkXG4gIHJldHVybiB7XG4gICAgaWQ6IGRldmljZS5pZCxcbiAgICBjcmVkZW50aWFsSWQ6IGRldmljZS5jcmVkZW50aWFsSWQsXG4gICAgcHJmU2FsdDogZGV2aWNlLnByZlNhbHQsXG4gICAgaXNQYXNza2V5OiBkZXZpY2UuaXNQYXNza2V5LFxuICAgIGV4dGVuc2lvbnM6IGRldmljZS5leHRlbnNpb25zLFxuICAgIHByZlN1cHBvcnRlZCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removePasskeyFromWallet.d.ts","sourceRoot":"","sources":["../../src/removePasskeyFromWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"removePasskeyFromWallet.d.ts","sourceRoot":"","sources":["../../src/removePasskeyFromWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkC,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB"}
|
|
@@ -12,11 +12,11 @@ async function removePasskeyFromWallet(params) {
|
|
|
12
12
|
const keychainId = wallet.keyIds()[0];
|
|
13
13
|
const keychain = await baseCoin.keychains().get({ id: keychainId });
|
|
14
14
|
// Verify passphrase before any mutation
|
|
15
|
-
const decrypted = (0, sdk_core_1.
|
|
15
|
+
const decrypted = await (0, sdk_core_1.decryptKeychainPrivateKeyAsync)(bitgo, keychain, walletPassphrase);
|
|
16
16
|
if (!decrypted) {
|
|
17
17
|
throw new Error('Incorrect wallet passphrase. Passkey removal aborted to prevent lockout.');
|
|
18
18
|
}
|
|
19
19
|
// No sdk-core abstraction for this endpoint; raw DELETE is required
|
|
20
20
|
await bitgo.del(bitgo.url(`/key/${keychainId}/webauthndevice/${device.id}`, 2)).result();
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlUGFzc2tleUZyb21XYWxsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwREEwQkM7QUE3QkQsbURBQWlGO0FBRzFFLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxNQU03QztJQUNDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTdFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRXBFLHdDQUF3QztJQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEseUNBQThCLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsVUFBVSxtQkFBbUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSwgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleUFzeW5jIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgV2ViQXV0aG5PdHBEZXZpY2UgfSBmcm9tICcuL3dlYkF1dGhuVHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtb3ZlUGFzc2tleUZyb21XYWxsZXQocGFyYW1zOiB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIGNvaW46IHN0cmluZztcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZGV2aWNlOiBXZWJBdXRobk90cERldmljZTtcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGJpdGdvLCBjb2luOiBjb2luTmFtZSwgd2FsbGV0SWQsIGRldmljZSwgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuXG4gIGlmICghZGV2aWNlLmlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZXZpY2UuaWQgaXMgcmVxdWlyZWQgdG8gcmVtb3ZlIGEgcGFzc2tleSBmcm9tIHRoZSB3YWxsZXQnKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2VDb2luID0gYml0Z28uY29pbihjb2luTmFtZSk7XG4gIGNvbnN0IHdhbGxldCA9IGF3YWl0IGJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIGNvbnN0IGtleWNoYWluSWQgPSB3YWxsZXQua2V5SWRzKClbMF07XG4gIGNvbnN0IGtleWNoYWluID0gYXdhaXQgYmFzZUNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQ6IGtleWNoYWluSWQgfSk7XG5cbiAgLy8gVmVyaWZ5IHBhc3NwaHJhc2UgYmVmb3JlIGFueSBtdXRhdGlvblxuICBjb25zdCBkZWNyeXB0ZWQgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5QXN5bmMoYml0Z28sIGtleWNoYWluLCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgaWYgKCFkZWNyeXB0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCB3YWxsZXQgcGFzc3BocmFzZS4gUGFzc2tleSByZW1vdmFsIGFib3J0ZWQgdG8gcHJldmVudCBsb2Nrb3V0LicpO1xuICB9XG5cbiAgLy8gTm8gc2RrLWNvcmUgYWJzdHJhY3Rpb24gZm9yIHRoaXMgZW5kcG9pbnQ7IHJhdyBERUxFVEUgaXMgcmVxdWlyZWRcbiAgYXdhaXQgYml0Z28uZGVsKGJpdGdvLnVybChgL2tleS8ke2tleWNoYWluSWR9L3dlYmF1dGhuZGV2aWNlLyR7ZGV2aWNlLmlkfWAsIDIpKS5yZXN1bHQoKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const ENTERPRISE_ID = "enterprise-abc";
|
|
2
|
+
export declare const WALLET_ID = "wallet-hot-123";
|
|
3
|
+
export declare const KEYCHAIN_ID = "key-user-001";
|
|
4
|
+
export declare const COIN = "tbtc";
|
|
5
|
+
export declare const EXISTING_PASSPHRASE = "my-existing-passphrase";
|
|
6
|
+
export declare const PRF_OUTPUT: ArrayBuffer;
|
|
7
|
+
export declare const CREDENTIAL_ID = "Y3JlZC1pZC00NTY";
|
|
8
|
+
export declare const DEVICE_MONGO_ID = "device-mongo-id-1";
|
|
9
|
+
export declare const BASE_SALT = "ZqJ64M2dL65zn2-Jxd58SMN2ILc9QjbCFxUTGHd_LC8";
|
|
10
|
+
export declare const REGISTER_CHALLENGE: string;
|
|
11
|
+
export declare const ASSERTION_CHALLENGE: string;
|
|
12
|
+
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../../test/integration/helpers/fixtures.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAC9C,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAC1C,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,UAAU,aAA0E,CAAC;AAClG,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,eAAe,sBAAsB,CAAC;AACnD,eAAO,MAAM,SAAS,gDAAgD,CAAC;AACvE,eAAO,MAAM,kBAAkB,QAAqD,CAAC;AACrF,eAAO,MAAM,mBAAmB,QAAwD,CAAC"}
|