@learncard/sss-key-manager 0.1.24 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -95
- package/dist/api-client.d.ts +44 -7
- package/dist/api-client.d.ts.map +1 -1
- package/dist/atomic-operations.d.ts +10 -2
- package/dist/atomic-operations.d.ts.map +1 -1
- package/dist/email-relay-crypto.d.ts +49 -0
- package/dist/email-relay-crypto.d.ts.map +1 -0
- package/dist/escrow-attestation.d.ts +8 -0
- package/dist/escrow-attestation.d.ts.map +1 -0
- package/dist/escrow-crypto.d.ts +52 -0
- package/dist/escrow-crypto.d.ts.map +1 -0
- package/dist/escrow-pin.d.ts +22 -0
- package/dist/escrow-pin.d.ts.map +1 -0
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/key-manager.d.ts +2 -0
- package/dist/key-manager.d.ts.map +1 -1
- package/dist/qr-login.d.ts.map +1 -1
- package/dist/recovery-phrase.d.ts +6 -0
- package/dist/recovery-phrase.d.ts.map +1 -1
- package/dist/sss-key-manager.cjs.development.js +2891 -355
- package/dist/sss-key-manager.cjs.development.js.map +4 -4
- package/dist/sss-key-manager.cjs.production.min.js +33 -33
- package/dist/sss-key-manager.cjs.production.min.js.map +4 -4
- package/dist/sss-key-manager.esm.js +2891 -355
- package/dist/sss-key-manager.esm.js.map +4 -4
- package/dist/sss-strategy.d.ts +74 -4
- package/dist/sss-strategy.d.ts.map +1 -1
- package/dist/storage.d.ts +1 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/types.d.ts +87 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/api-client.test.ts +122 -0
- package/src/api-client.ts +107 -116
- package/src/atomic-operations.test.ts +56 -16
- package/src/atomic-operations.ts +55 -19
- package/src/critical-paths.test.ts +51 -1
- package/src/email-relay-crypto.test.ts +87 -0
- package/src/email-relay-crypto.ts +293 -0
- package/src/escrow-attestation.test.ts +85 -0
- package/src/escrow-attestation.ts +64 -0
- package/src/escrow-crypto.test.ts +381 -0
- package/src/escrow-crypto.ts +319 -0
- package/src/escrow-pin.test.ts +119 -0
- package/src/escrow-pin.ts +83 -0
- package/src/index.ts +63 -1
- package/src/key-manager.ts +4 -9
- package/src/qr-login.ts +22 -15
- package/src/recovery-phrase.ts +40 -0
- package/src/sss-session-writes.test.ts +109 -0
- package/src/sss-strategy.test.ts +2642 -110
- package/src/sss-strategy.ts +2186 -224
- package/src/storage.test.ts +66 -8
- package/src/storage.ts +41 -29
- package/src/types.ts +107 -6
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ This package provides a secure, self-hosted alternative to Web3Auth Single Facto
|
|
|
15
15
|
- Password-based (Argon2id KDF)
|
|
16
16
|
- Passkey/WebAuthn PRF (coming soon)
|
|
17
17
|
- Backup file export/import
|
|
18
|
+
- Enclave escrow recovery with a seven-day waiting period (explicit attestation policy required)
|
|
18
19
|
- **Migration**: Seamless migration from Web3Auth SFA
|
|
19
20
|
|
|
20
21
|
## Installation
|
|
@@ -25,75 +26,22 @@ bun add @learncard/sss-key-manager
|
|
|
25
26
|
|
|
26
27
|
## Usage
|
|
27
28
|
|
|
28
|
-
###
|
|
29
|
+
### AuthCoordinator Setup
|
|
29
30
|
|
|
30
31
|
```typescript
|
|
31
|
-
import {
|
|
32
|
+
import { createSSSStrategy } from '@learncard/sss-key-manager';
|
|
32
33
|
|
|
33
|
-
const
|
|
34
|
+
const keyDerivation = createSSSStrategy({
|
|
34
35
|
serverUrl: 'https://your-lca-api.com',
|
|
35
|
-
authProvider: {
|
|
36
|
-
getIdToken: async () => firebaseUser.getIdToken(),
|
|
37
|
-
getCurrentUser: async () => ({
|
|
38
|
-
id: firebaseUser.uid,
|
|
39
|
-
email: firebaseUser.email,
|
|
40
|
-
providerType: 'firebase',
|
|
41
|
-
}),
|
|
42
|
-
getProviderType: () => 'firebase',
|
|
43
|
-
signOut: async () => firebaseAuth.signOut(),
|
|
44
|
-
},
|
|
45
36
|
});
|
|
46
37
|
```
|
|
47
38
|
|
|
48
|
-
|
|
39
|
+
Use this strategy with LearnCard's `AuthCoordinator`, which obtains a fresh DID challenge for every
|
|
40
|
+
protected write.
|
|
49
41
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
console.log('DID:', deriveDid(privateKey));
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Returning User
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
// Reconstruct key from device + server shares
|
|
60
|
-
const privateKey = await keyManager.connect();
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Migration from Web3Auth
|
|
64
|
-
|
|
65
|
-
```typescript
|
|
66
|
-
// Extract key from Web3Auth and migrate to SSS
|
|
67
|
-
const web3AuthPrivateKey = await web3Auth.provider.request({ method: 'eth_private_key' });
|
|
68
|
-
await keyManager.migrate(web3AuthPrivateKey);
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Recovery
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
// Add password recovery
|
|
75
|
-
await keyManager.addRecoveryMethod({
|
|
76
|
-
type: 'password',
|
|
77
|
-
password: userPassword,
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// Recover with password
|
|
81
|
-
const privateKey = await keyManager.recover({
|
|
82
|
-
type: 'password',
|
|
83
|
-
password: userPassword,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
// Export backup file
|
|
87
|
-
const backup = await keyManager.exportBackup(backupPassword);
|
|
88
|
-
downloadFile('wallet.lcbackup', JSON.stringify(backup));
|
|
89
|
-
|
|
90
|
-
// Import backup file
|
|
91
|
-
const privateKey = await keyManager.recover({
|
|
92
|
-
type: 'backup',
|
|
93
|
-
fileContents: backupFileJson,
|
|
94
|
-
password: backupPassword,
|
|
95
|
-
});
|
|
96
|
-
```
|
|
42
|
+
> `createSSSKeyManager` and `SSSApiClient` are deprecated compatibility exports. Their legacy write
|
|
43
|
+
> methods fail closed because they cannot satisfy the hardened DID-challenge routes. Migrate callers
|
|
44
|
+
> to `createSSSStrategy`.
|
|
97
45
|
|
|
98
46
|
## Architecture
|
|
99
47
|
|
|
@@ -131,41 +79,10 @@ The package is designed to work with any authentication provider:
|
|
|
131
79
|
|
|
132
80
|
## API Reference
|
|
133
81
|
|
|
134
|
-
### `
|
|
135
|
-
|
|
136
|
-
Creates a new SSS Key Manager instance.
|
|
137
|
-
|
|
138
|
-
### `keyManager.connect()`
|
|
139
|
-
|
|
140
|
-
Reconstructs the private key from device and auth shares.
|
|
141
|
-
|
|
142
|
-
### `keyManager.setupNewKey()`
|
|
143
|
-
|
|
144
|
-
Generates a new private key and splits it into shares.
|
|
145
|
-
|
|
146
|
-
### `keyManager.setupWithKey(privateKey, primaryDid?)`
|
|
147
|
-
|
|
148
|
-
Sets up SSS with an existing private key (used for migration).
|
|
149
|
-
|
|
150
|
-
### `keyManager.migrate(privateKey)`
|
|
151
|
-
|
|
152
|
-
Migrates from Web3Auth to SSS, preserving the existing key.
|
|
153
|
-
|
|
154
|
-
### `keyManager.addRecoveryMethod(method)`
|
|
155
|
-
|
|
156
|
-
Adds a recovery method (password, passkey, or backup).
|
|
157
|
-
|
|
158
|
-
### `keyManager.recover(method)`
|
|
159
|
-
|
|
160
|
-
Recovers the private key using a recovery method.
|
|
161
|
-
|
|
162
|
-
### `keyManager.exportBackup(password)`
|
|
163
|
-
|
|
164
|
-
Exports an encrypted backup file.
|
|
165
|
-
|
|
166
|
-
### `keyManager.getSecurityLevel()`
|
|
82
|
+
### `createSSSStrategy(config)`
|
|
167
83
|
|
|
168
|
-
|
|
84
|
+
Creates the SSS key-derivation strategy used by `AuthCoordinator` for setup, migration, recovery,
|
|
85
|
+
and DID-authorized server writes.
|
|
169
86
|
|
|
170
87
|
## Four shares
|
|
171
88
|
|
package/dist/api-client.d.ts
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* API client for SSS Key Manager server routes
|
|
3
3
|
*/
|
|
4
|
-
import type { AuthProvider, ServerEncryptedShare, RecoveryMethodInfo, EncryptedShare, SecurityLevel } from './types';
|
|
4
|
+
import type { AuthProvider, AuthProviderType, ServerEncryptedShare, RecoveryMethodInfo, EncryptedShare, SecurityLevel, SssActivationState, IdentityRecoverySession } from './types';
|
|
5
|
+
import type { EmailRelayBranding } from './email-relay-crypto';
|
|
5
6
|
export interface GetAuthShareResponse {
|
|
6
7
|
authShare: ServerEncryptedShare | null;
|
|
7
8
|
primaryDid: string | null;
|
|
8
9
|
securityLevel: SecurityLevel;
|
|
9
10
|
recoveryMethods: RecoveryMethodInfo[];
|
|
10
11
|
keyProvider: 'web3auth' | 'sss';
|
|
12
|
+
shareVersion: number;
|
|
11
13
|
maskedRecoveryEmail?: string | null;
|
|
14
|
+
sssActivationState: SssActivationState;
|
|
12
15
|
}
|
|
13
16
|
export interface StoreAuthShareInput {
|
|
14
17
|
authShare: ServerEncryptedShare;
|
|
15
18
|
primaryDid: string;
|
|
16
19
|
securityLevel?: SecurityLevel;
|
|
20
|
+
sssActivationState?: 'provisional';
|
|
17
21
|
}
|
|
18
22
|
export interface StoreRecoveryShareInput {
|
|
19
23
|
type: 'passkey' | 'backup' | 'phrase' | 'email';
|
|
@@ -21,29 +25,62 @@ export interface StoreRecoveryShareInput {
|
|
|
21
25
|
credentialId?: string;
|
|
22
26
|
shareVersion?: number;
|
|
23
27
|
}
|
|
28
|
+
export interface RecoverySessionMaterial {
|
|
29
|
+
authShare: ServerEncryptedShare;
|
|
30
|
+
encryptedShare?: EncryptedShare;
|
|
31
|
+
primaryDid: string;
|
|
32
|
+
shareVersion: number;
|
|
33
|
+
rebindSessionToken: string;
|
|
34
|
+
}
|
|
24
35
|
export interface ApiClientConfig {
|
|
25
36
|
serverUrl: string;
|
|
26
37
|
authProvider: AuthProvider;
|
|
38
|
+
escrowRelayPublicKey?: string;
|
|
39
|
+
escrowRelayKeyId?: string;
|
|
40
|
+
emailBranding?: EmailRelayBranding;
|
|
27
41
|
}
|
|
42
|
+
/** @deprecated Use `createSSSStrategy`, which implements the hardened DID-challenge flow. */
|
|
28
43
|
export declare class SSSApiClient {
|
|
29
44
|
private serverUrl;
|
|
30
45
|
private authProvider;
|
|
31
46
|
constructor(config: ApiClientConfig);
|
|
32
47
|
private getAuthHeaders;
|
|
33
|
-
private getContactMethodFromUser;
|
|
34
48
|
getAuthShare(): Promise<GetAuthShareResponse | null>;
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
50
|
+
storeAuthShare(_input: StoreAuthShareInput): Promise<void>;
|
|
51
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
52
|
+
addRecoveryMethod(_input: StoreRecoveryShareInput): Promise<void>;
|
|
37
53
|
getRecoveryShare(type: 'passkey' | 'backup' | 'phrase' | 'email', credentialId?: string): Promise<{
|
|
38
54
|
encryptedShare?: EncryptedShare;
|
|
39
55
|
shareVersion?: number;
|
|
40
56
|
} | null>;
|
|
57
|
+
startIdentityRecovery(email: string): Promise<void>;
|
|
58
|
+
verifyIdentityRecovery(email: string, code: string): Promise<IdentityRecoverySession>;
|
|
59
|
+
useIdentityRecoverySession(recoverySessionToken: string, type: StoreRecoveryShareInput['type'], credentialId?: string): Promise<RecoverySessionMaterial>;
|
|
60
|
+
completeIdentityRecoveryRebind(input: {
|
|
61
|
+
recoverySessionToken: string;
|
|
62
|
+
newAuthToken: string;
|
|
63
|
+
providerType: AuthProviderType;
|
|
64
|
+
primaryDid: string;
|
|
65
|
+
authShare: ServerEncryptedShare;
|
|
66
|
+
didAuthVp: string;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
shareVersion: number;
|
|
69
|
+
recoveryMethodsRequireConfirmation: string[];
|
|
70
|
+
}>;
|
|
71
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
41
72
|
markMigrated(): Promise<void>;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
73
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
74
|
+
activate(): Promise<void>;
|
|
75
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
76
|
+
sendEmailBackupShare(_emailShare: string, _overrideEmail?: string): Promise<void>;
|
|
77
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
78
|
+
addRecoveryEmail(_email: string): Promise<void>;
|
|
79
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
80
|
+
verifyRecoveryEmail(_code: string): Promise<{
|
|
45
81
|
maskedEmail: string;
|
|
46
82
|
}>;
|
|
83
|
+
/** @deprecated Requires DID-challenge authorization. Use `createSSSStrategy`. */
|
|
47
84
|
deleteUserKey(): Promise<void>;
|
|
48
85
|
}
|
|
49
86
|
//# sourceMappingURL=api-client.d.ts.map
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,YAAY,
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ export interface AtomicUpdateOptions {
|
|
|
18
18
|
export interface StorageOperations {
|
|
19
19
|
storeDevice: (share: string) => Promise<void>;
|
|
20
20
|
storeAuth: (share: string) => Promise<void>;
|
|
21
|
+
clearDevice?: () => Promise<void>;
|
|
21
22
|
getDevice?: () => Promise<string | null>;
|
|
22
23
|
getAuth?: () => Promise<string | null>;
|
|
23
24
|
}
|
|
@@ -33,6 +34,10 @@ export declare class AtomicUpdateError extends Error {
|
|
|
33
34
|
readonly cause?: Error | undefined;
|
|
34
35
|
constructor(message: string, phase: 'split' | 'verify' | 'store_device' | 'store_auth' | 'verify_stored', rolledBack: boolean, cause?: Error | undefined);
|
|
35
36
|
}
|
|
37
|
+
/** A write was explicitly rejected, rather than its outcome being unknown. */
|
|
38
|
+
export declare class ShareWriteRejectedError extends Error {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
36
41
|
/**
|
|
37
42
|
* Split a private key into shares and verify ALL combinations reconstruct correctly.
|
|
38
43
|
*
|
|
@@ -49,13 +54,16 @@ export declare function splitAndVerify(privateKey: string): Promise<AtomicSplitR
|
|
|
49
54
|
*
|
|
50
55
|
* This function ensures that either:
|
|
51
56
|
* 1. Both device and auth shares are updated successfully, OR
|
|
52
|
-
* 2.
|
|
57
|
+
* 2. A rejected write restores the previous state (rollback), OR
|
|
58
|
+
* 3. An indeterminate write preserves the new device share for reconciliation
|
|
53
59
|
*
|
|
54
60
|
* The operation flow:
|
|
55
61
|
* 1. Generate and verify new shares
|
|
56
62
|
* 2. Store device share locally
|
|
57
63
|
* 3. Store auth share on server
|
|
58
|
-
* 4.
|
|
64
|
+
* 4. Roll back only if step 3 throws ShareWriteRejectedError. Network failures
|
|
65
|
+
* may happen after commit and must never destroy the new device share.
|
|
66
|
+
* Callers can stage storeDevice in a separate entry to retain both versions.
|
|
59
67
|
*
|
|
60
68
|
* @param privateKey - The private key to split
|
|
61
69
|
* @param storage - Storage operations for device and auth shares
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-operations.d.ts","sourceRoot":"","sources":["../src/atomic-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE/E,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;aAGzB,WAAW,EAAE,MAAM;aACnB,QAAQ,EAAE,MAAM;aAChB,GAAG,EAAE,MAAM;gBAH3B,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM;CAKlC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe;aAC3E,UAAU,EAAE,OAAO;aACnB,KAAK,CAAC,EAAE,KAAK;gBAH7B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe,EAC3E,UAAU,EAAE,OAAO,EACnB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKpC;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+BnF;AAED
|
|
1
|
+
{"version":3,"file":"atomic-operations.d.ts","sourceRoot":"","sources":["../src/atomic-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE/E,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;aAGzB,WAAW,EAAE,MAAM;aACnB,QAAQ,EAAE,MAAM;aAChB,GAAG,EAAE,MAAM;gBAH3B,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM;CAKlC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe;aAC3E,UAAU,EAAE,OAAO;aACnB,KAAK,CAAC,EAAE,KAAK;gBAH7B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,eAAe,EAC3E,UAAU,EAAE,OAAO,EACnB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKpC;AAED,8EAA8E;AAC9E,qBAAa,uBAAwB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI9B;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+BnF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,SAAS,CAAC,CA+EpB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,SAAS,CAAC,EACzD,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC3D,OAAO,CAAC;IACP,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CA6CD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;CACxB,CAAC,CAWD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-compatible encryption for recovery-key delivery.
|
|
3
|
+
*
|
|
4
|
+
* This is an HPKE-style construction using Web Crypto primitives:
|
|
5
|
+
* ephemeral P-256 ECDH, HKDF-SHA-256, and AES-256-GCM. The relay public key
|
|
6
|
+
* is pinned in tenant/runtime configuration; only the isolated relay has the
|
|
7
|
+
* matching PKCS#8 private key.
|
|
8
|
+
*/
|
|
9
|
+
export declare const EMAIL_RELAY_ENVELOPE_VERSION: 1;
|
|
10
|
+
export declare const EMAIL_RELAY_ALGORITHM: "P-256-HKDF-SHA256-AES-256-GCM";
|
|
11
|
+
export interface EmailRelayBranding {
|
|
12
|
+
brandName?: string;
|
|
13
|
+
logoUrl?: string;
|
|
14
|
+
logoAlt?: string;
|
|
15
|
+
primaryColor?: string;
|
|
16
|
+
primaryTextColor?: string;
|
|
17
|
+
supportEmail?: string;
|
|
18
|
+
websiteUrl?: string;
|
|
19
|
+
appUrl?: string;
|
|
20
|
+
fromDomain?: string;
|
|
21
|
+
copyrightHolder?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface EmailRelayPlaintext {
|
|
24
|
+
version: typeof EMAIL_RELAY_ENVELOPE_VERSION;
|
|
25
|
+
targetEmail: string;
|
|
26
|
+
recoveryKey: string;
|
|
27
|
+
confirmationCode: string;
|
|
28
|
+
branding?: EmailRelayBranding;
|
|
29
|
+
}
|
|
30
|
+
export interface EmailRelayEnvelope {
|
|
31
|
+
version: typeof EMAIL_RELAY_ENVELOPE_VERSION;
|
|
32
|
+
algorithm: typeof EMAIL_RELAY_ALGORITHM;
|
|
33
|
+
keyId: string;
|
|
34
|
+
ephemeralPublicKey: string;
|
|
35
|
+
salt: string;
|
|
36
|
+
iv: string;
|
|
37
|
+
ciphertext: string;
|
|
38
|
+
}
|
|
39
|
+
/** Validate an untrusted encrypted envelope before attempting decryption. */
|
|
40
|
+
export declare const parseEmailRelayEnvelope: (value: unknown) => EmailRelayEnvelope;
|
|
41
|
+
/** Validate decrypted relay plaintext and copy only recognized fields. */
|
|
42
|
+
export declare const parseEmailRelayPlaintext: (value: unknown) => EmailRelayPlaintext;
|
|
43
|
+
/** Generate a uniformly distributed six-digit confirmation code in the browser. */
|
|
44
|
+
export declare const generateEmailRelayConfirmationCode: () => string;
|
|
45
|
+
/** Encrypt a complete recovery-email payload to a pinned relay SPKI public key. */
|
|
46
|
+
export declare const encryptEmailRelayPayload: (input: Omit<EmailRelayPlaintext, "version">, publicKeyBase64: string, keyId: string) => Promise<EmailRelayEnvelope>;
|
|
47
|
+
/** Decrypt an envelope using the relay's PKCS#8 P-256 private key. */
|
|
48
|
+
export declare const decryptEmailRelayPayload: (value: unknown, privateKeyBase64: string) => Promise<EmailRelayPlaintext>;
|
|
49
|
+
//# sourceMappingURL=email-relay-crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-relay-crypto.d.ts","sourceRoot":"","sources":["../src/email-relay-crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AACvD,eAAO,MAAM,qBAAqB,EAAG,+BAAwC,CAAC;AAc9E,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,4BAA4B,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,OAAO,4BAA4B,CAAC;IAC7C,SAAS,EAAE,OAAO,qBAAqB,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACtB;AAwDD,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,GAAI,OAAO,OAAO,KAAG,kBAqBxD,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,mBAwBzD,CAAC;AAyBF,mFAAmF;AACnF,eAAO,MAAM,kCAAkC,QAAO,MAUrD,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,GACjC,OAAO,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAC3C,iBAAiB,MAAM,EACvB,OAAO,MAAM,KACd,OAAO,CAAC,kBAAkB,CAmD5B,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,GACjC,OAAO,OAAO,EACd,kBAAkB,MAAM,KACzB,OAAO,CAAC,mBAAmB,CAgC7B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EscrowAttestationPolicy } from './types';
|
|
2
|
+
/** Parse untrusted attestation data and enforce an explicit enclave trust policy. */
|
|
3
|
+
export declare const verifyEnclaveAttestation: (attestation: unknown, policy: EscrowAttestationPolicy) => Promise<{
|
|
4
|
+
publicKey: string;
|
|
5
|
+
keyId: string;
|
|
6
|
+
mode: "software" | "nitro";
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=escrow-attestation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow-attestation.d.ts","sourceRoot":"","sources":["../src/escrow-attestation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAiBvD,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,GACjC,aAAa,OAAO,EACpB,QAAQ,uBAAuB,KAChC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;CAAE,CAyC1E,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Supported escrow wire-format version. */
|
|
2
|
+
export declare const ESCROW_ENVELOPE_VERSION: 1;
|
|
3
|
+
/** Cryptographic suite used by escrow envelopes. */
|
|
4
|
+
export declare const ESCROW_ALGORITHM: "P-256-HKDF-SHA256-AES-256-GCM";
|
|
5
|
+
/** HKDF info for client-to-enclave escrow blobs. */
|
|
6
|
+
export declare const ESCROW_BLOB_INFO = "learncard-escrow-blob-v1";
|
|
7
|
+
/** HKDF info for enclave-to-client release envelopes. */
|
|
8
|
+
export declare const ESCROW_RELEASE_INFO = "learncard-escrow-release-v1";
|
|
9
|
+
/** Recipient key identifier used when sealing a release. */
|
|
10
|
+
export declare const ESCROW_CLIENT_KEY_ID: "client";
|
|
11
|
+
/** Encrypted escrow payload with authenticated version, algorithm, and key ID. */
|
|
12
|
+
export interface EscrowEnvelope {
|
|
13
|
+
version: typeof ESCROW_ENVELOPE_VERSION;
|
|
14
|
+
algorithm: typeof ESCROW_ALGORITHM;
|
|
15
|
+
keyId: string;
|
|
16
|
+
ephemeralPublicKey: string;
|
|
17
|
+
salt: string;
|
|
18
|
+
iv: string;
|
|
19
|
+
ciphertext: string;
|
|
20
|
+
}
|
|
21
|
+
/** Recovery share bound to an identity and a positive share version. */
|
|
22
|
+
export interface EscrowBlobPlaintext {
|
|
23
|
+
version: typeof ESCROW_ENVELOPE_VERSION;
|
|
24
|
+
recoveryShare: string;
|
|
25
|
+
did: string;
|
|
26
|
+
shareVersion: number;
|
|
27
|
+
pinVerifier?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Released recovery share additionally bound to its recovery hold. */
|
|
30
|
+
export interface EscrowReleasePlaintext extends EscrowBlobPlaintext {
|
|
31
|
+
holdId: string;
|
|
32
|
+
}
|
|
33
|
+
/** Validate an untrusted envelope before decryption, copying only recognized fields. */
|
|
34
|
+
export declare const parseEscrowEnvelope: (value: unknown) => EscrowEnvelope;
|
|
35
|
+
/** Validate blob plaintext, normalize hex to lowercase, and omit unknown fields. */
|
|
36
|
+
export declare const parseEscrowBlobPlaintext: (value: unknown) => EscrowBlobPlaintext;
|
|
37
|
+
/** Validate release plaintext, including its hold ID, and omit unknown fields. */
|
|
38
|
+
export declare const parseEscrowReleasePlaintext: (value: unknown) => EscrowReleasePlaintext;
|
|
39
|
+
/** Generate an extractable P-256 ECDH pair as base64 SPKI and PKCS#8 keys. */
|
|
40
|
+
export declare const generateEscrowKeyPair: () => Promise<{
|
|
41
|
+
publicKey: string;
|
|
42
|
+
privateKey: string;
|
|
43
|
+
}>;
|
|
44
|
+
/** Validate and encrypt a recovery share to the enclave's SPKI public key. */
|
|
45
|
+
export declare const encryptEscrowBlob: (input: Omit<EscrowBlobPlaintext, "version">, enclavePublicKeySpkiB64: string, keyId: string) => Promise<EscrowEnvelope>;
|
|
46
|
+
/** Decrypt and validate a blob using the enclave's PKCS#8 private key. */
|
|
47
|
+
export declare const decryptEscrowBlob: (envelope: unknown, enclavePrivateKeyPkcs8B64: string) => Promise<EscrowBlobPlaintext>;
|
|
48
|
+
/** Validate and seal a release to the recovering client's ephemeral SPKI public key. */
|
|
49
|
+
export declare const sealEscrowRelease: (input: Omit<EscrowReleasePlaintext, "version">, clientEphemeralPublicKeySpkiB64: string) => Promise<EscrowEnvelope>;
|
|
50
|
+
/** Open and validate a release using the recovering client's ephemeral PKCS#8 private key. */
|
|
51
|
+
export declare const openEscrowRelease: (envelope: unknown, clientEphemeralPrivateKeyPkcs8B64: string) => Promise<EscrowReleasePlaintext>;
|
|
52
|
+
//# sourceMappingURL=escrow-crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow-crypto.d.ts","sourceRoot":"","sources":["../src/escrow-crypto.ts"],"names":[],"mappings":"AAQA,4CAA4C;AAC5C,eAAO,MAAM,uBAAuB,EAAG,CAAU,CAAC;AAClD,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,EAAG,+BAAwC,CAAC;AACzE,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAC3D,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,gCAAgC,CAAC;AACjE,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,EAAG,QAAiB,CAAC;AAEtD,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,uBAAuB,CAAC;IACxC,SAAS,EAAE,OAAO,gBAAgB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,uBAAuB,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IAC/D,MAAM,EAAE,MAAM,CAAC;CAClB;AA+BD,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,cAkBpD,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,mBA+BzD,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,2BAA2B,GAAI,OAAO,OAAO,KAAG,sBAQ5D,CAAC;AA0BF,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,QAAa,OAAO,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB,CAUA,CAAC;AA8FF,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,GAC1B,OAAO,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAC3C,yBAAyB,MAAM,EAC/B,OAAO,MAAM,KACd,OAAO,CAAC,cAAc,CASxB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,GAC1B,UAAU,OAAO,EACjB,2BAA2B,MAAM,KAClC,OAAO,CAAC,mBAAmB,CAGzB,CAAC;AAEN,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,GAC1B,OAAO,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,EAC9C,iCAAiC,MAAM,KACxC,OAAO,CAAC,cAAc,CASxB,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,iBAAiB,GAC1B,UAAU,OAAO,EACjB,mCAAmC,MAAM,KAC1C,OAAO,CAAC,sBAAsB,CAG5B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const PIN_MIN_LENGTH = 6;
|
|
2
|
+
export declare const PIN_MAX_LENGTH = 12;
|
|
3
|
+
export declare const ESCROW_PIN_MAX_ATTEMPTS = 10;
|
|
4
|
+
/** Normalize compatibility digits before removing formatting and non-digits. */
|
|
5
|
+
export declare const normalizePin: (raw: string) => string;
|
|
6
|
+
/** Validate the normalized PIN, rejecting full-length sequential and repeated digits. */
|
|
7
|
+
export declare const validatePin: (pin: string) => {
|
|
8
|
+
ok: true;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
reason: "length" | "trivial";
|
|
12
|
+
};
|
|
13
|
+
/** Generate a public, random 16-byte salt encoded as standard base64. */
|
|
14
|
+
export declare const generatePinSalt: () => string;
|
|
15
|
+
/** Derive the enclave proof using the shared default Argon2id parameters. */
|
|
16
|
+
export declare const derivePinProof: (pin: string, pinSaltBase64: string) => Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Compare valid hex bytes without an early exit on differing contents.
|
|
19
|
+
* Format and length are public; JavaScript runtimes cannot guarantee constant-time execution.
|
|
20
|
+
*/
|
|
21
|
+
export declare const constantTimeEqualHex: (a: string, b: string) => boolean;
|
|
22
|
+
//# sourceMappingURL=escrow-pin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow-pin.d.ts","sourceRoot":"","sources":["../src/escrow-pin.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAc1C,gFAAgF;AAChF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MACQ,CAAC;AAEpD,yFAAyF;AACzF,eAAO,MAAM,WAAW,GACpB,KAAK,MAAM,KACZ;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;CAgB1D,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,eAAe,QAAO,MACkC,CAAC;AAEtE,6EAA6E;AAC7E,eAAO,MAAM,cAAc,GAAU,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,OAAO,CAAC,MAAM,CAUvF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OAY3D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,18 +9,27 @@ export { splitPrivateKey, reconstructPrivateKey, reconstructFromShares, SSS_TOTA
|
|
|
9
9
|
export { storeDeviceShare, getDeviceShare, hasDeviceShare, deleteDeviceShare, clearAllShares, listAllDeviceShares, storeShareVersion, getShareVersion, isPublicComputerMode, setPublicComputerMode, createAdaptiveStorage, } from './storage';
|
|
10
10
|
export type { DeviceShareEntry } from './storage';
|
|
11
11
|
export { encryptWithPassword, decryptWithPassword, deriveKeyFromPassword, generateEd25519PrivateKey, hexToBytes, bytesToHex, bufferToBase64, base64ToBuffer, DEFAULT_KDF_PARAMS, } from './crypto';
|
|
12
|
+
export { EMAIL_RELAY_ALGORITHM, EMAIL_RELAY_ENVELOPE_VERSION, encryptEmailRelayPayload, decryptEmailRelayPayload, generateEmailRelayConfirmationCode, parseEmailRelayEnvelope, parseEmailRelayPlaintext, } from './email-relay-crypto';
|
|
13
|
+
export type { EmailRelayBranding, EmailRelayEnvelope, EmailRelayPlaintext, } from './email-relay-crypto';
|
|
14
|
+
export { ESCROW_ENVELOPE_VERSION, ESCROW_ALGORITHM, ESCROW_BLOB_INFO, ESCROW_RELEASE_INFO, ESCROW_CLIENT_KEY_ID, parseEscrowEnvelope, parseEscrowBlobPlaintext, parseEscrowReleasePlaintext, generateEscrowKeyPair, encryptEscrowBlob, decryptEscrowBlob, sealEscrowRelease, openEscrowRelease, } from './escrow-crypto';
|
|
15
|
+
export type { EscrowEnvelope, EscrowBlobPlaintext, EscrowReleasePlaintext } from './escrow-crypto';
|
|
16
|
+
export { verifyEnclaveAttestation } from './escrow-attestation';
|
|
17
|
+
export type { EscrowAttestationPolicy, EscrowHoldStatus, EscrowRecoveryStart } from './types';
|
|
18
|
+
export type { EscrowEnrollmentOptions, EscrowEnrollmentState, EscrowPinStatus } from './types';
|
|
19
|
+
export { EscrowPinMismatchError, EscrowPinLockedError, EscrowPinThrottledError, EscrowHoldRestartThrottledError, EscrowPinUnavailableError, } from './types';
|
|
20
|
+
export { PIN_MIN_LENGTH, PIN_MAX_LENGTH, ESCROW_PIN_MAX_ATTEMPTS, normalizePin, validatePin, generatePinSalt, derivePinProof, constantTimeEqualHex, } from './escrow-pin';
|
|
12
21
|
export { createPasskeyCredential, deriveKeyFromPasskey, encryptShareWithPasskey, decryptShareWithPasskey, isWebAuthnSupported, isPRFSupported, } from './passkey';
|
|
13
22
|
export type { PasskeyCredential, PasskeyEncryptedShare } from './passkey';
|
|
14
|
-
export { shareToRecoveryPhrase, recoveryPhraseToShare, generateRecoveryPhrase, validateRecoveryPhrase, countWords, } from './recovery-phrase';
|
|
23
|
+
export { shareToRecoveryPhrase, recoveryPhraseToShare, generateRecoveryPhrase, validateRecoveryPhrase, countWords, buildRecoveryPhraseChallengeOptions, } from './recovery-phrase';
|
|
15
24
|
export type { RecoveryPhraseData } from './recovery-phrase';
|
|
16
|
-
export { splitAndVerify, atomicShareUpdate, verifyStoredShares, atomicRecovery, ShareVerificationError, AtomicUpdateError, } from './atomic-operations';
|
|
25
|
+
export { splitAndVerify, atomicShareUpdate, verifyStoredShares, atomicRecovery, ShareVerificationError, AtomicUpdateError, ShareWriteRejectedError, } from './atomic-operations';
|
|
17
26
|
export type { AtomicSplitResult, AtomicUpdateOptions, StorageOperations, } from './atomic-operations';
|
|
18
|
-
export { createSSSStrategy } from './sss-strategy';
|
|
27
|
+
export { createSSSStrategy, IdentityRecoverySessionConsumedError, EscrowRequestError, } from './sss-strategy';
|
|
19
28
|
export type { SSSStorageFunctions, SSSStrategyConfig } from './sss-strategy';
|
|
20
29
|
export { generateEphemeralKeypair, encryptShareForTransfer, decryptShareFromTransfer, } from './qr-crypto';
|
|
21
30
|
export type { EphemeralKeypair, EncryptedSharePayload } from './qr-crypto';
|
|
22
31
|
export { createQrLoginSession, pollQrLoginSession, pollUntilApproved, getQrLoginSessionInfo, approveQrLoginSession, notifyDevicesForQrSession, } from './qr-login';
|
|
23
32
|
export type { QrLoginSession, QrLoginSessionInfo, QrLoginClientConfig, QrPayload, PollResult, NotifyDevicesResult, } from './qr-login';
|
|
24
33
|
export { AuthSessionError } from './types';
|
|
25
|
-
export type { SSSKeyManagerConfig, SSSKeyDerivationProvider, KeyDerivationProvider, KeyDerivationStrategy, SSSKeyDerivationStrategy, ServerKeyStatus, AuthProvider, AuthUser, AuthProviderType, ContactMethod, ContactMethodType, RecoveryMethod, RecoveryMethodType, RecoveryMethodInfo, RecoveryInput, RecoveryResult, RecoverySetupInput, RecoverySetupResult, PasskeyRecoveryMethod, BackupFileRecoveryMethod, RecoveryPhraseRecoveryMethod, SecurityLevel, BackupFile, EncryptedShare, ServerEncryptedShare, UserKeyRecord, AuthProviderMapping, } from './types';
|
|
34
|
+
export type { SSSKeyManagerConfig, SSSKeyDerivationProvider, KeyDerivationProvider, KeyDerivationStrategy, SSSKeyDerivationStrategy, ServerKeyStatus, AuthProvider, AuthUser, AuthProviderType, DidAuthVpSigner, ContactMethod, ContactMethodType, RecoveryMethod, RecoveryMethodType, RecoveryMethodInfo, RecoveryInput, RecoveryResult, RecoverySetupInput, RecoverySetupResult, RecoveryConfirmationInput, PasskeyRecoveryMethod, BackupFileRecoveryMethod, RecoveryPhraseRecoveryMethod, SecurityLevel, BackupFile, EncryptedShare, ServerEncryptedShare, UserKeyRecord, AuthProviderMapping, } from './types';
|
|
26
35
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GAChB,MAAM,OAAO,CAAC;AAEf,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACxB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,GACrB,MAAM,UAAU,CAAC;AAElB,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,GACjB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE1E,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/key-manager.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* SSS Key Manager - Main class
|
|
3
3
|
*/
|
|
4
4
|
import type { SSSKeyManagerConfig, SSSKeyDerivationProvider, RecoveryMethod, RecoveryMethodInfo, SecurityLevel, BackupFile } from './types';
|
|
5
|
+
/** @deprecated Use `createSSSStrategy` with AuthCoordinator. */
|
|
5
6
|
export declare class SSSKeyManager implements SSSKeyDerivationProvider {
|
|
6
7
|
readonly name = "sss";
|
|
7
8
|
private config;
|
|
@@ -26,5 +27,6 @@ export declare class SSSKeyManager implements SSSKeyDerivationProvider {
|
|
|
26
27
|
clearLocalData(): Promise<void>;
|
|
27
28
|
deleteAccount(): Promise<void>;
|
|
28
29
|
}
|
|
30
|
+
/** @deprecated Use `createSSSStrategy` with AuthCoordinator. */
|
|
29
31
|
export declare function createSSSKeyManager(config: SSSKeyManagerConfig): SSSKeyManager;
|
|
30
32
|
//# sourceMappingURL=key-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEb,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../src/key-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEb,MAAM,SAAS,CAAC;AAqBjB,gEAAgE;AAChE,qBAAa,aAAc,YAAW,wBAAwB;IAC1D,QAAQ,CAAC,IAAI,SAAS;IAEtB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAuB;gBAEpC,MAAM,EAAE,mBAAmB;IAQvC,aAAa,IAAI,OAAO;IAIlB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA4B1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAM9B,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCxD,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAWzC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKnD,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA2FhD,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAK1C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBnD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvC;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAE9E"}
|
package/dist/qr-login.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qr-login.d.ts","sourceRoot":"","sources":["../src/qr-login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAM3E,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,4EAA4E;AAC5E,MAAM,MAAM,UAAU,GAChB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;
|
|
1
|
+
{"version":3,"file":"qr-login.d.ts","sourceRoot":"","sources":["../src/qr-login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAM3E,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,4EAA4E;AAC5E,MAAM,MAAM,UAAU,GAChB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IACI,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAYR;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC7B,QAAQ,mBAAmB,KAC5B,OAAO,CAAC;IACP,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;CACxB,CAsBA,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC3B,QAAQ,mBAAmB,EAC3B,WAAW,MAAM,EACjB,qBAAqB,SAAS,KAC/B,OAAO,CAAC,UAAU,CAkCpB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAC1B,QAAQ,mBAAmB,EAC3B,WAAW,MAAM,EACjB,qBAAqB,SAAS,EAC9B,UAAU;IACN,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,KACF,OAAO,CAAC;IACP,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CA4CA,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAC9B,QAAQ,mBAAmB,EAC3B,QAAQ,MAAM,KACf,OAAO,CAAC,kBAAkB,CAW5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,GAC9B,QAAQ,mBAAmB,EAC3B,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,aAAa,MAAM,EACnB,oBAAoB,MAAM,EAC1B,cAAc,MAAM,EACpB,eAAe,MAAM,KACtB,OAAO,CAAC,IAAI,CAoBd,CAAC;AAMF,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,GAClC,QAAQ,mBAAmB,EAC3B,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,eAAc,MAAmB,KAClC,OAAO,CAAC,mBAAmB,CAqB7B,CAAC"}
|
|
@@ -11,4 +11,10 @@ export declare function recoveryPhraseToShare(phrase: string): Promise<string>;
|
|
|
11
11
|
export declare function generateRecoveryPhrase(shareHex: string): Promise<RecoveryPhraseData>;
|
|
12
12
|
export declare function validateRecoveryPhrase(phrase: string): Promise<boolean>;
|
|
13
13
|
export declare function countWords(phrase: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* Builds tap-to-confirm choices for each challenged word: the correct word plus
|
|
16
|
+
* `optionCount - 1` decoys, shuffled. Decoys never appear anywhere in the phrase,
|
|
17
|
+
* so a choice can only be right for its own position.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildRecoveryPhraseChallengeOptions(phrase: string, challengeWordIndices: number[], optionCount?: number): Promise<string[][]>;
|
|
14
20
|
//# sourceMappingURL=recovery-phrase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery-phrase.d.ts","sourceRoot":"","sources":["../src/recovery-phrase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAkCD,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc7E;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoD3E;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAG1F;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKjD"}
|
|
1
|
+
{"version":3,"file":"recovery-phrase.d.ts","sourceRoot":"","sources":["../src/recovery-phrase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAkCD,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc7E;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoD3E;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAG1F;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKjD;AAYD;;;;GAIG;AACH,wBAAsB,mCAAmC,CACrD,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,MAAM,EAAE,EAC9B,WAAW,SAAI,GAChB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAmBrB"}
|