@dynamic-labs-wallet/browser 1.0.37 → 1.0.39
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/index.cjs +50 -300
- package/index.esm.js +50 -300
- package/package.json +3 -3
- package/src/backup/encryption/argon2.d.ts +2 -16
- package/src/backup/encryption/argon2.d.ts.map +1 -1
- package/src/backup/encryption/core.d.ts +3 -7
- package/src/backup/encryption/core.d.ts.map +1 -1
- package/src/backup/encryption/types.d.ts +0 -15
- package/src/backup/encryption/types.d.ts.map +1 -1
- package/src/client.d.ts +6 -26
- package/src/client.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -101,6 +101,33 @@ const ARGON2_HASH_LENGTH = 32;
|
|
|
101
101
|
*/ const PBKDF2_ITERATIONS_V1 = 100000;
|
|
102
102
|
const PBKDF2_ITERATIONS_V2 = 1000000;
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Derives a key using Argon2id algorithm
|
|
106
|
+
* @param params - Key derivation parameters
|
|
107
|
+
* @param encryptionConfig - Encryption configuration
|
|
108
|
+
* @returns Promise<CryptoKey>
|
|
109
|
+
*/ const deriveArgon2Key = async ({ password, salt }, encryptionConfig)=>{
|
|
110
|
+
const argon2id = await loadArgon2idWasm();
|
|
111
|
+
const argon2Config = encryptionConfig;
|
|
112
|
+
const passwordBytes = new TextEncoder().encode(password);
|
|
113
|
+
const parallelism = argon2Config.parallelism || ARGON2_PARALLELISM;
|
|
114
|
+
const hash = argon2id({
|
|
115
|
+
password: passwordBytes,
|
|
116
|
+
salt: salt,
|
|
117
|
+
parallelism,
|
|
118
|
+
passes: argon2Config.iterations,
|
|
119
|
+
memorySize: argon2Config.memorySize || ARGON2_MEMORY_SIZE,
|
|
120
|
+
tagLength: argon2Config.hashLength || ARGON2_HASH_LENGTH
|
|
121
|
+
});
|
|
122
|
+
return crypto.subtle.importKey('raw', new Uint8Array(hash), {
|
|
123
|
+
name: encryptionConfig.algorithm,
|
|
124
|
+
length: encryptionConfig.algorithmLength
|
|
125
|
+
}, false, [
|
|
126
|
+
'encrypt',
|
|
127
|
+
'decrypt'
|
|
128
|
+
]);
|
|
129
|
+
};
|
|
130
|
+
|
|
104
131
|
/**
|
|
105
132
|
* Encryption configuration for each version
|
|
106
133
|
*/ const ENCRYPTION_VERSIONS = {
|
|
@@ -153,98 +180,6 @@ const PBKDF2_ITERATIONS_V2 = 1000000;
|
|
|
153
180
|
return config.keyDerivation === ARGON2_ALGORITHM;
|
|
154
181
|
};
|
|
155
182
|
|
|
156
|
-
/**
|
|
157
|
-
* One-way, truncated SHA-256 over the concatenated byte parts. Used to build a
|
|
158
|
-
* fingerprint of the *inputs* to a derivation so two derivations can be proven
|
|
159
|
-
* to have consumed identical inputs without exposing those inputs.
|
|
160
|
-
*/ const fingerprint = async (...parts)=>{
|
|
161
|
-
const total = parts.reduce((n, p)=>n + p.length, 0);
|
|
162
|
-
const buf = new Uint8Array(total);
|
|
163
|
-
let offset = 0;
|
|
164
|
-
for (const part of parts){
|
|
165
|
-
buf.set(part, offset);
|
|
166
|
-
offset += part.length;
|
|
167
|
-
}
|
|
168
|
-
const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', buf));
|
|
169
|
-
return Array.from(digest.subarray(0, 8), (b)=>b.toString(16).padStart(2, '0')).join('');
|
|
170
|
-
};
|
|
171
|
-
/**
|
|
172
|
-
* Per-component fingerprint of the *exact* inputs the KDF consumes: salt, password,
|
|
173
|
-
* and the Argon2 params (incl. parallelism). Computed at the derivation site so the
|
|
174
|
-
* backup self-test can prove the encrypt-side and decrypt-side derivations ran on
|
|
175
|
-
* identical inputs — and, when they don't, pinpoint *which* component differed.
|
|
176
|
-
* If all components match but the derived keys differ, that is genuine Argon2id
|
|
177
|
-
* non-determinism; a mismatching component means the drift is an input mismatch
|
|
178
|
-
* (e.g. a p=2 vs p=1 retry), not the engine. One-way and non-secret (envId path only).
|
|
179
|
-
*/ const fingerprintInputs = async (passwordBytes, salt, argon2Config)=>{
|
|
180
|
-
const params = new Uint8Array(16);
|
|
181
|
-
const view = new DataView(params.buffer);
|
|
182
|
-
view.setUint32(0, argon2Config.parallelism || ARGON2_PARALLELISM, true);
|
|
183
|
-
view.setUint32(4, argon2Config.iterations, true);
|
|
184
|
-
view.setUint32(8, argon2Config.memorySize || ARGON2_MEMORY_SIZE, true);
|
|
185
|
-
view.setUint32(12, argon2Config.hashLength || ARGON2_HASH_LENGTH, true);
|
|
186
|
-
const [saltFp, passwordFp, paramsFp] = await Promise.all([
|
|
187
|
-
fingerprint(salt),
|
|
188
|
-
fingerprint(passwordBytes),
|
|
189
|
-
fingerprint(params)
|
|
190
|
-
]);
|
|
191
|
-
return {
|
|
192
|
-
salt: saltFp,
|
|
193
|
-
password: passwordFp,
|
|
194
|
-
params: paramsFp
|
|
195
|
-
};
|
|
196
|
-
};
|
|
197
|
-
/**
|
|
198
|
-
* Derives the raw Argon2id hash bytes for the given params/config.
|
|
199
|
-
*
|
|
200
|
-
* Exposed separately from {@link deriveArgon2Key} for the backup self-test's
|
|
201
|
-
* determinism probe: it lets the caller derive twice from identical inputs and
|
|
202
|
-
* diff the results to detect Argon2id non-determinism (suspected on
|
|
203
|
-
* memory-constrained clients). The raw bytes are AES key material and must
|
|
204
|
-
* never be logged or persisted — keep them in-process.
|
|
205
|
-
*/ const deriveRawArgon2Bytes = async ({ password, salt }, encryptionConfig)=>{
|
|
206
|
-
const argon2id = await loadArgon2idWasm();
|
|
207
|
-
const argon2Config = encryptionConfig;
|
|
208
|
-
const passwordBytes = new TextEncoder().encode(password);
|
|
209
|
-
const parallelism = argon2Config.parallelism || ARGON2_PARALLELISM;
|
|
210
|
-
const hash = argon2id({
|
|
211
|
-
password: passwordBytes,
|
|
212
|
-
salt: salt,
|
|
213
|
-
parallelism,
|
|
214
|
-
passes: argon2Config.iterations,
|
|
215
|
-
memorySize: argon2Config.memorySize || ARGON2_MEMORY_SIZE,
|
|
216
|
-
tagLength: argon2Config.hashLength || ARGON2_HASH_LENGTH
|
|
217
|
-
});
|
|
218
|
-
return new Uint8Array(hash);
|
|
219
|
-
};
|
|
220
|
-
/**
|
|
221
|
-
* Derives a key using Argon2id algorithm
|
|
222
|
-
* @param params - Key derivation parameters
|
|
223
|
-
* @param encryptionConfig - Encryption configuration
|
|
224
|
-
* @param onRawKey - In-process hook receiving the raw derived bytes (key material —
|
|
225
|
-
* never log) and a per-component fingerprint of the inputs that produced them. Lets
|
|
226
|
-
* the backup self-test reuse the keys it already derives — and prove both sides used
|
|
227
|
-
* identical inputs (and which component differs if not) — without extra derivations.
|
|
228
|
-
* @returns Promise<CryptoKey>
|
|
229
|
-
*/ const deriveArgon2Key = async (params, encryptionConfig, onRawKey)=>{
|
|
230
|
-
const hash = await deriveRawArgon2Bytes(params, encryptionConfig);
|
|
231
|
-
if (onRawKey) {
|
|
232
|
-
try {
|
|
233
|
-
const inputFingerprint = await fingerprintInputs(new TextEncoder().encode(params.password), params.salt, encryptionConfig);
|
|
234
|
-
onRawKey(hash, inputFingerprint);
|
|
235
|
-
} catch (e) {
|
|
236
|
-
// Never let the diagnostic hook affect key derivation.
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return crypto.subtle.importKey('raw', new Uint8Array(hash), {
|
|
240
|
-
name: encryptionConfig.algorithm,
|
|
241
|
-
length: encryptionConfig.algorithmLength
|
|
242
|
-
}, false, [
|
|
243
|
-
'encrypt',
|
|
244
|
-
'decrypt'
|
|
245
|
-
]);
|
|
246
|
-
};
|
|
247
|
-
|
|
248
183
|
/**
|
|
249
184
|
* Utility functions for encryption operations
|
|
250
185
|
* These functions are separated to avoid circular dependencies
|
|
@@ -319,20 +254,18 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
319
254
|
*/ const isInvalidPasswordError = (error)=>error instanceof Error && error.name === 'OperationError';
|
|
320
255
|
/**
|
|
321
256
|
* Get the appropriate key derivation function based on the encryption config
|
|
322
|
-
*/ const getKey = async (params, encryptionConfig
|
|
257
|
+
*/ const getKey = async (params, encryptionConfig)=>{
|
|
323
258
|
// Use Argon2 for v3, PBKDF2 for v1 and v2
|
|
324
259
|
if (encryptionConfig.keyDerivation === ARGON2_ALGORITHM) {
|
|
325
|
-
return deriveArgon2Key(params, encryptionConfig
|
|
260
|
+
return deriveArgon2Key(params, encryptionConfig);
|
|
326
261
|
} else {
|
|
327
|
-
// PBKDF2 derives a non-extractable CryptoKey directly, so raw bytes are
|
|
328
|
-
// unavailable; the hook simply doesn't fire (drift probe is v3-only anyway).
|
|
329
262
|
return derivePBKDF2Key(params, encryptionConfig);
|
|
330
263
|
}
|
|
331
264
|
};
|
|
332
265
|
/**
|
|
333
266
|
* Encrypts data using the specified encryption version.
|
|
334
267
|
* Always uses the latest encryption configuration for new encryptions by default.
|
|
335
|
-
*/ const encryptData = async ({ data, password, version = DEFAULT_ENCRYPTION_VERSION
|
|
268
|
+
*/ const encryptData = async ({ data, password, version = DEFAULT_ENCRYPTION_VERSION })=>{
|
|
336
269
|
const encryptionConfig = getEncryptionConfig(version);
|
|
337
270
|
try {
|
|
338
271
|
// Generate a random salt and IV
|
|
@@ -341,7 +274,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
341
274
|
const key = await getKey({
|
|
342
275
|
password,
|
|
343
276
|
salt
|
|
344
|
-
}, encryptionConfig
|
|
277
|
+
}, encryptionConfig);
|
|
345
278
|
// Convert the input string to bytes
|
|
346
279
|
const dataBytes = new TextEncoder().encode(data);
|
|
347
280
|
// Encrypt the data
|
|
@@ -366,7 +299,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
366
299
|
* Uses the version field from the data to determine encryption parameters.
|
|
367
300
|
* Falls back to legacy version for backward compatibility if no version is specified.
|
|
368
301
|
* For v3 (Argon2), retries with parallelism=1 if an OperationError occurs.
|
|
369
|
-
*/ const decryptData = async ({ data, password
|
|
302
|
+
*/ const decryptData = async ({ data, password })=>{
|
|
370
303
|
const { salt, iv, cipher, version } = data;
|
|
371
304
|
// Ensure proper base64 padding for all values
|
|
372
305
|
const paddedSalt = ensureBase64Padding(salt);
|
|
@@ -381,7 +314,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
381
314
|
const key = await getKey({
|
|
382
315
|
password,
|
|
383
316
|
salt: saltBytes
|
|
384
|
-
}, encryptionConfig
|
|
317
|
+
}, encryptionConfig);
|
|
385
318
|
const decryptedData = await crypto.subtle.decrypt({
|
|
386
319
|
name: AES_GCM_ALGORITHM,
|
|
387
320
|
iv: ivBytes
|
|
@@ -400,7 +333,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
400
333
|
const key = await getKey({
|
|
401
334
|
password,
|
|
402
335
|
salt: saltBytes
|
|
403
|
-
}, modifiedConfig
|
|
336
|
+
}, modifiedConfig);
|
|
404
337
|
const decryptedData = await crypto.subtle.decrypt({
|
|
405
338
|
name: AES_GCM_ALGORITHM,
|
|
406
339
|
iv: ivBytes
|
|
@@ -5080,165 +5013,11 @@ class DynamicWalletClient {
|
|
|
5080
5013
|
throw error;
|
|
5081
5014
|
}
|
|
5082
5015
|
}
|
|
5083
|
-
// AES-GCM authenticates the ciphertext, so a wrong key fails to decrypt
|
|
5084
|
-
// rather than returning corrupted plaintext — "decrypt did not throw" is a
|
|
5085
|
-
// sufficient guarantee the cipher is recoverable.
|
|
5086
|
-
async assertEncryptionRoundTrip({ password, encrypted, encryptDerivation, walletId, accountAddress }) {
|
|
5087
|
-
if (!encrypted) return;
|
|
5088
|
-
this.logger.info('[keyshare-selftest] encryption round-trip self-test starting', {
|
|
5089
|
-
walletId,
|
|
5090
|
-
accountAddress
|
|
5091
|
-
});
|
|
5092
|
-
// Capture the decrypt-side derived key + its input fingerprint (envId path only) so
|
|
5093
|
-
// a failure can be diffed against the encrypt side without any extra Argon2 derivation.
|
|
5094
|
-
// The `??=` keeps the FIRST (p=2) derivation, so the v3 p=2->p=1 retry can't pair a
|
|
5095
|
-
// p=2 encrypt key against a p=1 decrypt key (the input fingerprints would then differ).
|
|
5096
|
-
let decryptKeyBytes;
|
|
5097
|
-
let decryptInputFingerprint;
|
|
5098
|
-
const onRawKey = password ? undefined : (k, fp)=>{
|
|
5099
|
-
decryptKeyBytes != null ? decryptKeyBytes : decryptKeyBytes = k;
|
|
5100
|
-
decryptInputFingerprint != null ? decryptInputFingerprint : decryptInputFingerprint = fp;
|
|
5101
|
-
};
|
|
5102
|
-
try {
|
|
5103
|
-
await this.decryptKeyShare({
|
|
5104
|
-
keyShare: encrypted,
|
|
5105
|
-
password,
|
|
5106
|
-
onRawKey
|
|
5107
|
-
});
|
|
5108
|
-
} catch (error) {
|
|
5109
|
-
// Only a genuine ciphertext-integrity failure (AES-GCM auth failure /
|
|
5110
|
-
// wrong key material) means the backup is unrecoverable — that's the
|
|
5111
|
-
// terminal, non-retryable condition this self-test exists to catch.
|
|
5112
|
-
// Anything else (most commonly a failure to fetch the Argon2id WASM,
|
|
5113
|
-
// which surfaces as "Fetch error GET .../argon2id/simd.wasm") means the
|
|
5114
|
-
// self-test never actually ran: the crypto engine couldn't load. That's a
|
|
5115
|
-
// transient network error, so rethrow it as-is rather than masking it
|
|
5116
|
-
// behind "backup aborted" — it stays visible in logs and stays retryable.
|
|
5117
|
-
if (error instanceof InvalidPasswordError || error instanceof KeyShareDecryptionError) {
|
|
5118
|
-
this.logSelfTestDiagnostics({
|
|
5119
|
-
encrypted,
|
|
5120
|
-
password,
|
|
5121
|
-
walletId,
|
|
5122
|
-
accountAddress,
|
|
5123
|
-
cause: error,
|
|
5124
|
-
encryptDerivation,
|
|
5125
|
-
decryptKeyBytes,
|
|
5126
|
-
decryptInputFingerprint
|
|
5127
|
-
});
|
|
5128
|
-
throw new EncryptionSelfTestFailedError({
|
|
5129
|
-
walletId,
|
|
5130
|
-
accountAddress,
|
|
5131
|
-
cause: error
|
|
5132
|
-
});
|
|
5133
|
-
}
|
|
5134
|
-
throw error;
|
|
5135
|
-
}
|
|
5136
|
-
this.logger.info('[keyshare-selftest] encryption round-trip self-test passed', {
|
|
5137
|
-
walletId,
|
|
5138
|
-
accountAddress
|
|
5139
|
-
});
|
|
5140
|
-
}
|
|
5141
|
-
/**
|
|
5142
|
-
* Diagnostics for backup self-test failures. ONLY runs on the envId-default
|
|
5143
|
-
* path (no user password): envId is public, so the salt/iv/version emitted
|
|
5144
|
-
* here are non-secret.
|
|
5145
|
-
*
|
|
5146
|
-
* Reuses the encrypt- and decrypt-side keys that the backup already derived
|
|
5147
|
-
* (no extra Argon2 work — important, since the failing clients are the
|
|
5148
|
-
* memory-constrained ones) and logs the byte-wise XOR of the two: equal keys
|
|
5149
|
-
* give an all-zero diff, any non-zero byte localises the Argon2id drift that
|
|
5150
|
-
* broke this round-trip. The XOR of two unknown keys is not usable key
|
|
5151
|
-
* material, and the raw keys are never logged.
|
|
5152
|
-
*/ logSelfTestDiagnostics({ encrypted, password, walletId, accountAddress, cause, encryptDerivation, decryptKeyBytes, decryptInputFingerprint }) {
|
|
5153
|
-
if (password) {
|
|
5154
|
-
this.logger.warn('[keyshare-selftest] password provided... skipping diagnostics', {
|
|
5155
|
-
environmentId: this.environmentId,
|
|
5156
|
-
walletId,
|
|
5157
|
-
accountAddress
|
|
5158
|
-
});
|
|
5159
|
-
return;
|
|
5160
|
-
} else {
|
|
5161
|
-
this.logger.info('[keyshare-selftest] password not provided (envId path), running diagnostics', {
|
|
5162
|
-
environmentId: this.environmentId,
|
|
5163
|
-
walletId,
|
|
5164
|
-
accountAddress
|
|
5165
|
-
});
|
|
5166
|
-
}
|
|
5167
|
-
try {
|
|
5168
|
-
const decoded = JSON.parse(Buffer.from(encrypted, 'base64').toString());
|
|
5169
|
-
var _decoded_version;
|
|
5170
|
-
const version = (_decoded_version = decoded.version) != null ? _decoded_version : 'unknown';
|
|
5171
|
-
const config = getEncryptionConfig(version);
|
|
5172
|
-
const toHex = (a)=>Array.from(a, (b)=>b.toString(16).padStart(2, '0')).join('');
|
|
5173
|
-
// Diff the two real derivations when both were captured (v3/Argon2 only —
|
|
5174
|
-
// PBKDF2 keys are non-extractable so no bytes are available).
|
|
5175
|
-
let drift;
|
|
5176
|
-
const encryptKeyBytes = encryptDerivation == null ? void 0 : encryptDerivation.key;
|
|
5177
|
-
if (encryptKeyBytes && decryptKeyBytes) {
|
|
5178
|
-
const len = Math.min(encryptKeyBytes.length, decryptKeyBytes.length);
|
|
5179
|
-
const xor = new Uint8Array(len);
|
|
5180
|
-
const driftPositions = [];
|
|
5181
|
-
for(let i = 0; i < len; i++){
|
|
5182
|
-
xor[i] = encryptKeyBytes[i] ^ decryptKeyBytes[i];
|
|
5183
|
-
if (xor[i] !== 0) driftPositions.push(i);
|
|
5184
|
-
}
|
|
5185
|
-
drift = {
|
|
5186
|
-
keyLength: len,
|
|
5187
|
-
keyDriftXor: toHex(xor),
|
|
5188
|
-
keyDriftByteCount: driftPositions.length,
|
|
5189
|
-
keyDriftPositions: driftPositions
|
|
5190
|
-
};
|
|
5191
|
-
}
|
|
5192
|
-
// Compare the two derivations' inputs component-by-component so a mismatch is
|
|
5193
|
-
// attributable to the salt, the password, or the config (params) — not just
|
|
5194
|
-
// "inputs differ". All match + a non-zero key drift ⇒ proven Argon2id non-determinism.
|
|
5195
|
-
const encInputs = encryptDerivation == null ? void 0 : encryptDerivation.inputFingerprint;
|
|
5196
|
-
const inputComparison = encInputs && decryptInputFingerprint ? {
|
|
5197
|
-
saltMatch: encInputs.salt === decryptInputFingerprint.salt,
|
|
5198
|
-
passwordMatch: encInputs.password === decryptInputFingerprint.password,
|
|
5199
|
-
paramsMatch: encInputs.params === decryptInputFingerprint.params,
|
|
5200
|
-
inputsMatch: encInputs.salt === decryptInputFingerprint.salt && encInputs.password === decryptInputFingerprint.password && encInputs.params === decryptInputFingerprint.params
|
|
5201
|
-
} : undefined;
|
|
5202
|
-
// Detect if drift has happened
|
|
5203
|
-
const detectedDrift = (drift == null ? void 0 : drift.keyDriftByteCount) && drift.keyDriftByteCount > 0;
|
|
5204
|
-
this.logger.error('[keyshare-selftest] self-test failed', _extends({
|
|
5205
|
-
walletId,
|
|
5206
|
-
accountAddress,
|
|
5207
|
-
environmentId: this.environmentId,
|
|
5208
|
-
userId: this.userId,
|
|
5209
|
-
version,
|
|
5210
|
-
salt: decoded.salt,
|
|
5211
|
-
iv: decoded.iv,
|
|
5212
|
-
saltLength: base64ToBytes(ensureBase64Padding(decoded.salt)).length,
|
|
5213
|
-
cipherLength: base64ToBytes(ensureBase64Padding(decoded.cipher)).length,
|
|
5214
|
-
causeName: cause instanceof Error ? cause.name : undefined,
|
|
5215
|
-
causeContext: cause instanceof KeyShareDecryptionError ? cause.context : undefined,
|
|
5216
|
-
// Whether both real keys were available to diff (false ⇒ non-v3 or a key wasn't captured).
|
|
5217
|
-
keyDriftAvailable: !!drift,
|
|
5218
|
-
detectedDrift
|
|
5219
|
-
}, drift, inputComparison, {
|
|
5220
|
-
argon2: isArgon2Config(config) ? {
|
|
5221
|
-
memorySize: config.memorySize,
|
|
5222
|
-
iterations: config.iterations,
|
|
5223
|
-
parallelism: config.parallelism,
|
|
5224
|
-
hashLength: config.hashLength
|
|
5225
|
-
} : undefined
|
|
5226
|
-
}));
|
|
5227
|
-
} catch (diagError) {
|
|
5228
|
-
// Diagnostics must never mask the real failure.
|
|
5229
|
-
this.logger.warn('[keyshare-selftest] diagnostics failed to run', {
|
|
5230
|
-
walletId,
|
|
5231
|
-
accountAddress,
|
|
5232
|
-
error: diagError instanceof Error ? diagError.message : String(diagError)
|
|
5233
|
-
});
|
|
5234
|
-
}
|
|
5235
|
-
}
|
|
5236
5016
|
/**
|
|
5237
|
-
* Post-backup recoverability check (feature-flagged).
|
|
5238
|
-
*
|
|
5239
|
-
*
|
|
5240
|
-
*
|
|
5241
|
-
* real store → fetch → decrypt path the user will rely on to recover.
|
|
5017
|
+
* Post-backup recoverability check (feature-flagged). Fetches the just-stored
|
|
5018
|
+
* share back from the keyshare service and confirms it decrypts to the same
|
|
5019
|
+
* secret we hold in memory — exercising the real store → fetch → decrypt path
|
|
5020
|
+
* the user will rely on to recover.
|
|
5242
5021
|
*
|
|
5243
5022
|
* The local share is never deleted: a failed/flaky fetch must not be able to
|
|
5244
5023
|
* lose the only client copy. A genuine decrypt failure or a value mismatch is
|
|
@@ -5322,12 +5101,11 @@ class DynamicWalletClient {
|
|
|
5322
5101
|
throw error;
|
|
5323
5102
|
}
|
|
5324
5103
|
}
|
|
5325
|
-
async encryptKeyShare({ keyShare, password,
|
|
5104
|
+
async encryptKeyShare({ keyShare, password, version }) {
|
|
5326
5105
|
const serializedKeyShare = JSON.stringify(keyShare);
|
|
5327
5106
|
const encryptedKeyShare = await encryptData({
|
|
5328
5107
|
data: serializedKeyShare,
|
|
5329
5108
|
password: password != null ? password : this.environmentId,
|
|
5330
|
-
onRawKey,
|
|
5331
5109
|
version
|
|
5332
5110
|
});
|
|
5333
5111
|
this.logPasswordSharePresence(password, 'encrypt');
|
|
@@ -5696,7 +5474,7 @@ class DynamicWalletClient {
|
|
|
5696
5474
|
hasDelegatedShare: !!distribution.delegatedShare
|
|
5697
5475
|
}));
|
|
5698
5476
|
try {
|
|
5699
|
-
var
|
|
5477
|
+
var _this_getWalletFromMap, _backupData_locationsWithKeyShares, _backupData_locationsWithKeyShares1;
|
|
5700
5478
|
// `let` so the retry path can swap in a freshly-signed session via the reverse channel on 400.
|
|
5701
5479
|
let resolvedSignedSessionId = await this.signedSession.resolve(signedSessionId);
|
|
5702
5480
|
if (!(walletData == null ? void 0 : walletData.walletId)) {
|
|
@@ -5713,28 +5491,13 @@ class DynamicWalletClient {
|
|
|
5713
5491
|
}
|
|
5714
5492
|
const bitcoinConfig = this.getBitcoinConfigForChain(walletData.chainName, accountAddress);
|
|
5715
5493
|
const isPasswordEncrypted = shouldValidatePassword(password, this.environmentId);
|
|
5716
|
-
// On the envId-default path, capture each share's derived encrypt key
|
|
5717
|
-
// (keyed by its ciphertext blob) so the self-test can diff it against the
|
|
5718
|
-
// decrypt key it derives — detecting Argon2id drift with NO extra
|
|
5719
|
-
// derivations. Skipped entirely when a user password is set; keys are
|
|
5720
|
-
// in-process only and cleared right after the self-test.
|
|
5721
|
-
const encryptKeyByBlob = isPasswordEncrypted ? undefined : new Map();
|
|
5722
5494
|
// Pre-encrypt all shares once, with retry to handle transient WebCrypto errors.
|
|
5723
5495
|
// This avoids re-running expensive Argon2id key derivation on every retry attempt.
|
|
5724
|
-
const encryptWithRetry = (keyShare)=>retryPromise(
|
|
5725
|
-
let derived;
|
|
5726
|
-
const blob = await this.encryptKeyShare({
|
|
5496
|
+
const encryptWithRetry = (keyShare)=>retryPromise(()=>this.encryptKeyShare({
|
|
5727
5497
|
keyShare,
|
|
5728
5498
|
password,
|
|
5729
|
-
onRawKey: encryptKeyByBlob ? (key, inputFingerprint)=>derived = {
|
|
5730
|
-
key,
|
|
5731
|
-
inputFingerprint
|
|
5732
|
-
} : undefined,
|
|
5733
5499
|
version: encryptionVersion
|
|
5734
|
-
})
|
|
5735
|
-
if (encryptKeyByBlob && derived) encryptKeyByBlob.set(blob, derived);
|
|
5736
|
-
return blob;
|
|
5737
|
-
}, {
|
|
5500
|
+
}), {
|
|
5738
5501
|
maxAttempts: 3,
|
|
5739
5502
|
operationName: 'encrypt key share'
|
|
5740
5503
|
});
|
|
@@ -5754,22 +5517,6 @@ class DynamicWalletClient {
|
|
|
5754
5517
|
dynamicShareCount: preEncryptedDynamicShares.length,
|
|
5755
5518
|
cloudProviderCount: preEncryptedCloudShares.length
|
|
5756
5519
|
}));
|
|
5757
|
-
var _preEncryptedDynamicShares_;
|
|
5758
|
-
// Fail fast before any upload if the just-written cipher can't be read
|
|
5759
|
-
// back with the same key material. Runs once per backup, not per share.
|
|
5760
|
-
const selfTestBlob = (_preEncryptedDynamicShares_ = preEncryptedDynamicShares[0]) != null ? _preEncryptedDynamicShares_ : (_preEncryptedCloudShares_ = preEncryptedCloudShares[0]) == null ? void 0 : _preEncryptedCloudShares_.encrypted[0];
|
|
5761
|
-
try {
|
|
5762
|
-
await this.assertEncryptionRoundTrip({
|
|
5763
|
-
password,
|
|
5764
|
-
encrypted: selfTestBlob,
|
|
5765
|
-
encryptDerivation: selfTestBlob ? encryptKeyByBlob == null ? void 0 : encryptKeyByBlob.get(selfTestBlob) : undefined,
|
|
5766
|
-
walletId: walletData.walletId,
|
|
5767
|
-
accountAddress
|
|
5768
|
-
});
|
|
5769
|
-
} finally{
|
|
5770
|
-
// Drop captured key material promptly regardless of outcome.
|
|
5771
|
-
encryptKeyByBlob == null ? void 0 : encryptKeyByBlob.clear();
|
|
5772
|
-
}
|
|
5773
5520
|
// Step 1: Upload shares in parallel, each with its own retry
|
|
5774
5521
|
const uploadPromises = [];
|
|
5775
5522
|
if (distribution.clientShares.length > 0) {
|
|
@@ -6309,7 +6056,7 @@ class DynamicWalletClient {
|
|
|
6309
6056
|
throw error;
|
|
6310
6057
|
}
|
|
6311
6058
|
}
|
|
6312
|
-
async decryptKeyShare({ keyShare, password
|
|
6059
|
+
async decryptKeyShare({ keyShare, password }) {
|
|
6313
6060
|
const decodedKeyShare = JSON.parse(Buffer.from(keyShare, 'base64').toString());
|
|
6314
6061
|
// Track whether a user-supplied password was provided so we can emit a
|
|
6315
6062
|
// distinct error class on failure. The default `environmentId` fallback is
|
|
@@ -6321,8 +6068,7 @@ class DynamicWalletClient {
|
|
|
6321
6068
|
try {
|
|
6322
6069
|
const decryptedKeyShare = await decryptData({
|
|
6323
6070
|
data: decodedKeyShare,
|
|
6324
|
-
password: effectivePassword
|
|
6325
|
-
onRawKey
|
|
6071
|
+
password: effectivePassword
|
|
6326
6072
|
});
|
|
6327
6073
|
this.logPasswordSharePresence(password, 'decrypt');
|
|
6328
6074
|
this.logger.info('[keyshare-decryption] key share decrypted', {
|
|
@@ -7661,7 +7407,7 @@ class DynamicWalletClient {
|
|
|
7661
7407
|
this.userId = user.id;
|
|
7662
7408
|
const waasWallets = (_user_verifiedCredentials = user.verifiedCredentials) == null ? void 0 : _user_verifiedCredentials.filter((vc)=>vc.walletName === 'dynamicwaas');
|
|
7663
7409
|
const wallets = waasWallets.map((vc)=>{
|
|
7664
|
-
var _this_getWalletFromMap, _vc_walletProperties, _vc_walletProperties1, _vc_walletProperties2, _vc_walletProperties3, _vc_walletProperties4;
|
|
7410
|
+
var _this_getWalletFromMap, _vc_walletProperties, _vc_walletProperties1, _vc_walletProperties2, _vc_walletProperties3, _vc_walletProperties4, _vc_walletProperties5;
|
|
7665
7411
|
var _this_getWalletFromMap_derivationPath;
|
|
7666
7412
|
return {
|
|
7667
7413
|
walletId: vc.id,
|
|
@@ -7675,7 +7421,11 @@ class DynamicWalletClient {
|
|
|
7675
7421
|
addressType: (_vc_walletProperties1 = vc.walletProperties) == null ? void 0 : _vc_walletProperties1.addressType,
|
|
7676
7422
|
shareSetId: (_vc_walletProperties2 = vc.walletProperties) == null ? void 0 : _vc_walletProperties2.shareSetId,
|
|
7677
7423
|
shareSetType: (_vc_walletProperties3 = vc.walletProperties) == null ? void 0 : _vc_walletProperties3.shareSetType,
|
|
7678
|
-
otherShareSets: (_vc_walletProperties4 = vc.walletProperties) == null ? void 0 : _vc_walletProperties4.otherShareSets
|
|
7424
|
+
otherShareSets: (_vc_walletProperties4 = vc.walletProperties) == null ? void 0 : _vc_walletProperties4.otherShareSets,
|
|
7425
|
+
// On-sign-on settings (shouldRefreshOnNextSignOn / reshareOnNextSignOn /
|
|
7426
|
+
// revokeOnNextSignOn). Surfaced so the SDK can self-drive the on-sign-on
|
|
7427
|
+
// orchestration instead of the host reading these flags.
|
|
7428
|
+
settings: (_vc_walletProperties5 = vc.walletProperties) == null ? void 0 : _vc_walletProperties5.settings
|
|
7679
7429
|
};
|
|
7680
7430
|
});
|
|
7681
7431
|
const existingWalletMap = this.walletMap;
|
package/index.esm.js
CHANGED
|
@@ -102,6 +102,33 @@ const ARGON2_HASH_LENGTH = 32;
|
|
|
102
102
|
*/ const PBKDF2_ITERATIONS_V1 = 100000;
|
|
103
103
|
const PBKDF2_ITERATIONS_V2 = 1000000;
|
|
104
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Derives a key using Argon2id algorithm
|
|
107
|
+
* @param params - Key derivation parameters
|
|
108
|
+
* @param encryptionConfig - Encryption configuration
|
|
109
|
+
* @returns Promise<CryptoKey>
|
|
110
|
+
*/ const deriveArgon2Key = async ({ password, salt }, encryptionConfig)=>{
|
|
111
|
+
const argon2id = await loadArgon2idWasm();
|
|
112
|
+
const argon2Config = encryptionConfig;
|
|
113
|
+
const passwordBytes = new TextEncoder().encode(password);
|
|
114
|
+
const parallelism = argon2Config.parallelism || ARGON2_PARALLELISM;
|
|
115
|
+
const hash = argon2id({
|
|
116
|
+
password: passwordBytes,
|
|
117
|
+
salt: salt,
|
|
118
|
+
parallelism,
|
|
119
|
+
passes: argon2Config.iterations,
|
|
120
|
+
memorySize: argon2Config.memorySize || ARGON2_MEMORY_SIZE,
|
|
121
|
+
tagLength: argon2Config.hashLength || ARGON2_HASH_LENGTH
|
|
122
|
+
});
|
|
123
|
+
return crypto.subtle.importKey('raw', new Uint8Array(hash), {
|
|
124
|
+
name: encryptionConfig.algorithm,
|
|
125
|
+
length: encryptionConfig.algorithmLength
|
|
126
|
+
}, false, [
|
|
127
|
+
'encrypt',
|
|
128
|
+
'decrypt'
|
|
129
|
+
]);
|
|
130
|
+
};
|
|
131
|
+
|
|
105
132
|
/**
|
|
106
133
|
* Encryption configuration for each version
|
|
107
134
|
*/ const ENCRYPTION_VERSIONS = {
|
|
@@ -154,98 +181,6 @@ const PBKDF2_ITERATIONS_V2 = 1000000;
|
|
|
154
181
|
return config.keyDerivation === ARGON2_ALGORITHM;
|
|
155
182
|
};
|
|
156
183
|
|
|
157
|
-
/**
|
|
158
|
-
* One-way, truncated SHA-256 over the concatenated byte parts. Used to build a
|
|
159
|
-
* fingerprint of the *inputs* to a derivation so two derivations can be proven
|
|
160
|
-
* to have consumed identical inputs without exposing those inputs.
|
|
161
|
-
*/ const fingerprint = async (...parts)=>{
|
|
162
|
-
const total = parts.reduce((n, p)=>n + p.length, 0);
|
|
163
|
-
const buf = new Uint8Array(total);
|
|
164
|
-
let offset = 0;
|
|
165
|
-
for (const part of parts){
|
|
166
|
-
buf.set(part, offset);
|
|
167
|
-
offset += part.length;
|
|
168
|
-
}
|
|
169
|
-
const digest = new Uint8Array(await crypto.subtle.digest('SHA-256', buf));
|
|
170
|
-
return Array.from(digest.subarray(0, 8), (b)=>b.toString(16).padStart(2, '0')).join('');
|
|
171
|
-
};
|
|
172
|
-
/**
|
|
173
|
-
* Per-component fingerprint of the *exact* inputs the KDF consumes: salt, password,
|
|
174
|
-
* and the Argon2 params (incl. parallelism). Computed at the derivation site so the
|
|
175
|
-
* backup self-test can prove the encrypt-side and decrypt-side derivations ran on
|
|
176
|
-
* identical inputs — and, when they don't, pinpoint *which* component differed.
|
|
177
|
-
* If all components match but the derived keys differ, that is genuine Argon2id
|
|
178
|
-
* non-determinism; a mismatching component means the drift is an input mismatch
|
|
179
|
-
* (e.g. a p=2 vs p=1 retry), not the engine. One-way and non-secret (envId path only).
|
|
180
|
-
*/ const fingerprintInputs = async (passwordBytes, salt, argon2Config)=>{
|
|
181
|
-
const params = new Uint8Array(16);
|
|
182
|
-
const view = new DataView(params.buffer);
|
|
183
|
-
view.setUint32(0, argon2Config.parallelism || ARGON2_PARALLELISM, true);
|
|
184
|
-
view.setUint32(4, argon2Config.iterations, true);
|
|
185
|
-
view.setUint32(8, argon2Config.memorySize || ARGON2_MEMORY_SIZE, true);
|
|
186
|
-
view.setUint32(12, argon2Config.hashLength || ARGON2_HASH_LENGTH, true);
|
|
187
|
-
const [saltFp, passwordFp, paramsFp] = await Promise.all([
|
|
188
|
-
fingerprint(salt),
|
|
189
|
-
fingerprint(passwordBytes),
|
|
190
|
-
fingerprint(params)
|
|
191
|
-
]);
|
|
192
|
-
return {
|
|
193
|
-
salt: saltFp,
|
|
194
|
-
password: passwordFp,
|
|
195
|
-
params: paramsFp
|
|
196
|
-
};
|
|
197
|
-
};
|
|
198
|
-
/**
|
|
199
|
-
* Derives the raw Argon2id hash bytes for the given params/config.
|
|
200
|
-
*
|
|
201
|
-
* Exposed separately from {@link deriveArgon2Key} for the backup self-test's
|
|
202
|
-
* determinism probe: it lets the caller derive twice from identical inputs and
|
|
203
|
-
* diff the results to detect Argon2id non-determinism (suspected on
|
|
204
|
-
* memory-constrained clients). The raw bytes are AES key material and must
|
|
205
|
-
* never be logged or persisted — keep them in-process.
|
|
206
|
-
*/ const deriveRawArgon2Bytes = async ({ password, salt }, encryptionConfig)=>{
|
|
207
|
-
const argon2id = await loadArgon2idWasm();
|
|
208
|
-
const argon2Config = encryptionConfig;
|
|
209
|
-
const passwordBytes = new TextEncoder().encode(password);
|
|
210
|
-
const parallelism = argon2Config.parallelism || ARGON2_PARALLELISM;
|
|
211
|
-
const hash = argon2id({
|
|
212
|
-
password: passwordBytes,
|
|
213
|
-
salt: salt,
|
|
214
|
-
parallelism,
|
|
215
|
-
passes: argon2Config.iterations,
|
|
216
|
-
memorySize: argon2Config.memorySize || ARGON2_MEMORY_SIZE,
|
|
217
|
-
tagLength: argon2Config.hashLength || ARGON2_HASH_LENGTH
|
|
218
|
-
});
|
|
219
|
-
return new Uint8Array(hash);
|
|
220
|
-
};
|
|
221
|
-
/**
|
|
222
|
-
* Derives a key using Argon2id algorithm
|
|
223
|
-
* @param params - Key derivation parameters
|
|
224
|
-
* @param encryptionConfig - Encryption configuration
|
|
225
|
-
* @param onRawKey - In-process hook receiving the raw derived bytes (key material —
|
|
226
|
-
* never log) and a per-component fingerprint of the inputs that produced them. Lets
|
|
227
|
-
* the backup self-test reuse the keys it already derives — and prove both sides used
|
|
228
|
-
* identical inputs (and which component differs if not) — without extra derivations.
|
|
229
|
-
* @returns Promise<CryptoKey>
|
|
230
|
-
*/ const deriveArgon2Key = async (params, encryptionConfig, onRawKey)=>{
|
|
231
|
-
const hash = await deriveRawArgon2Bytes(params, encryptionConfig);
|
|
232
|
-
if (onRawKey) {
|
|
233
|
-
try {
|
|
234
|
-
const inputFingerprint = await fingerprintInputs(new TextEncoder().encode(params.password), params.salt, encryptionConfig);
|
|
235
|
-
onRawKey(hash, inputFingerprint);
|
|
236
|
-
} catch (e) {
|
|
237
|
-
// Never let the diagnostic hook affect key derivation.
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return crypto.subtle.importKey('raw', new Uint8Array(hash), {
|
|
241
|
-
name: encryptionConfig.algorithm,
|
|
242
|
-
length: encryptionConfig.algorithmLength
|
|
243
|
-
}, false, [
|
|
244
|
-
'encrypt',
|
|
245
|
-
'decrypt'
|
|
246
|
-
]);
|
|
247
|
-
};
|
|
248
|
-
|
|
249
184
|
/**
|
|
250
185
|
* Utility functions for encryption operations
|
|
251
186
|
* These functions are separated to avoid circular dependencies
|
|
@@ -320,20 +255,18 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
320
255
|
*/ const isInvalidPasswordError = (error)=>error instanceof Error && error.name === 'OperationError';
|
|
321
256
|
/**
|
|
322
257
|
* Get the appropriate key derivation function based on the encryption config
|
|
323
|
-
*/ const getKey = async (params, encryptionConfig
|
|
258
|
+
*/ const getKey = async (params, encryptionConfig)=>{
|
|
324
259
|
// Use Argon2 for v3, PBKDF2 for v1 and v2
|
|
325
260
|
if (encryptionConfig.keyDerivation === ARGON2_ALGORITHM) {
|
|
326
|
-
return deriveArgon2Key(params, encryptionConfig
|
|
261
|
+
return deriveArgon2Key(params, encryptionConfig);
|
|
327
262
|
} else {
|
|
328
|
-
// PBKDF2 derives a non-extractable CryptoKey directly, so raw bytes are
|
|
329
|
-
// unavailable; the hook simply doesn't fire (drift probe is v3-only anyway).
|
|
330
263
|
return derivePBKDF2Key(params, encryptionConfig);
|
|
331
264
|
}
|
|
332
265
|
};
|
|
333
266
|
/**
|
|
334
267
|
* Encrypts data using the specified encryption version.
|
|
335
268
|
* Always uses the latest encryption configuration for new encryptions by default.
|
|
336
|
-
*/ const encryptData = async ({ data, password, version = DEFAULT_ENCRYPTION_VERSION
|
|
269
|
+
*/ const encryptData = async ({ data, password, version = DEFAULT_ENCRYPTION_VERSION })=>{
|
|
337
270
|
const encryptionConfig = getEncryptionConfig(version);
|
|
338
271
|
try {
|
|
339
272
|
// Generate a random salt and IV
|
|
@@ -342,7 +275,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
342
275
|
const key = await getKey({
|
|
343
276
|
password,
|
|
344
277
|
salt
|
|
345
|
-
}, encryptionConfig
|
|
278
|
+
}, encryptionConfig);
|
|
346
279
|
// Convert the input string to bytes
|
|
347
280
|
const dataBytes = new TextEncoder().encode(data);
|
|
348
281
|
// Encrypt the data
|
|
@@ -367,7 +300,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
367
300
|
* Uses the version field from the data to determine encryption parameters.
|
|
368
301
|
* Falls back to legacy version for backward compatibility if no version is specified.
|
|
369
302
|
* For v3 (Argon2), retries with parallelism=1 if an OperationError occurs.
|
|
370
|
-
*/ const decryptData = async ({ data, password
|
|
303
|
+
*/ const decryptData = async ({ data, password })=>{
|
|
371
304
|
const { salt, iv, cipher, version } = data;
|
|
372
305
|
// Ensure proper base64 padding for all values
|
|
373
306
|
const paddedSalt = ensureBase64Padding(salt);
|
|
@@ -382,7 +315,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
382
315
|
const key = await getKey({
|
|
383
316
|
password,
|
|
384
317
|
salt: saltBytes
|
|
385
|
-
}, encryptionConfig
|
|
318
|
+
}, encryptionConfig);
|
|
386
319
|
const decryptedData = await crypto.subtle.decrypt({
|
|
387
320
|
name: AES_GCM_ALGORITHM,
|
|
388
321
|
iv: ivBytes
|
|
@@ -401,7 +334,7 @@ const KEY_SHARE_DECRYPTION_ERROR = 'Decryption failed.';
|
|
|
401
334
|
const key = await getKey({
|
|
402
335
|
password,
|
|
403
336
|
salt: saltBytes
|
|
404
|
-
}, modifiedConfig
|
|
337
|
+
}, modifiedConfig);
|
|
405
338
|
const decryptedData = await crypto.subtle.decrypt({
|
|
406
339
|
name: AES_GCM_ALGORITHM,
|
|
407
340
|
iv: ivBytes
|
|
@@ -5081,165 +5014,11 @@ class DynamicWalletClient {
|
|
|
5081
5014
|
throw error;
|
|
5082
5015
|
}
|
|
5083
5016
|
}
|
|
5084
|
-
// AES-GCM authenticates the ciphertext, so a wrong key fails to decrypt
|
|
5085
|
-
// rather than returning corrupted plaintext — "decrypt did not throw" is a
|
|
5086
|
-
// sufficient guarantee the cipher is recoverable.
|
|
5087
|
-
async assertEncryptionRoundTrip({ password, encrypted, encryptDerivation, walletId, accountAddress }) {
|
|
5088
|
-
if (!encrypted) return;
|
|
5089
|
-
this.logger.info('[keyshare-selftest] encryption round-trip self-test starting', {
|
|
5090
|
-
walletId,
|
|
5091
|
-
accountAddress
|
|
5092
|
-
});
|
|
5093
|
-
// Capture the decrypt-side derived key + its input fingerprint (envId path only) so
|
|
5094
|
-
// a failure can be diffed against the encrypt side without any extra Argon2 derivation.
|
|
5095
|
-
// The `??=` keeps the FIRST (p=2) derivation, so the v3 p=2->p=1 retry can't pair a
|
|
5096
|
-
// p=2 encrypt key against a p=1 decrypt key (the input fingerprints would then differ).
|
|
5097
|
-
let decryptKeyBytes;
|
|
5098
|
-
let decryptInputFingerprint;
|
|
5099
|
-
const onRawKey = password ? undefined : (k, fp)=>{
|
|
5100
|
-
decryptKeyBytes != null ? decryptKeyBytes : decryptKeyBytes = k;
|
|
5101
|
-
decryptInputFingerprint != null ? decryptInputFingerprint : decryptInputFingerprint = fp;
|
|
5102
|
-
};
|
|
5103
|
-
try {
|
|
5104
|
-
await this.decryptKeyShare({
|
|
5105
|
-
keyShare: encrypted,
|
|
5106
|
-
password,
|
|
5107
|
-
onRawKey
|
|
5108
|
-
});
|
|
5109
|
-
} catch (error) {
|
|
5110
|
-
// Only a genuine ciphertext-integrity failure (AES-GCM auth failure /
|
|
5111
|
-
// wrong key material) means the backup is unrecoverable — that's the
|
|
5112
|
-
// terminal, non-retryable condition this self-test exists to catch.
|
|
5113
|
-
// Anything else (most commonly a failure to fetch the Argon2id WASM,
|
|
5114
|
-
// which surfaces as "Fetch error GET .../argon2id/simd.wasm") means the
|
|
5115
|
-
// self-test never actually ran: the crypto engine couldn't load. That's a
|
|
5116
|
-
// transient network error, so rethrow it as-is rather than masking it
|
|
5117
|
-
// behind "backup aborted" — it stays visible in logs and stays retryable.
|
|
5118
|
-
if (error instanceof InvalidPasswordError || error instanceof KeyShareDecryptionError) {
|
|
5119
|
-
this.logSelfTestDiagnostics({
|
|
5120
|
-
encrypted,
|
|
5121
|
-
password,
|
|
5122
|
-
walletId,
|
|
5123
|
-
accountAddress,
|
|
5124
|
-
cause: error,
|
|
5125
|
-
encryptDerivation,
|
|
5126
|
-
decryptKeyBytes,
|
|
5127
|
-
decryptInputFingerprint
|
|
5128
|
-
});
|
|
5129
|
-
throw new EncryptionSelfTestFailedError({
|
|
5130
|
-
walletId,
|
|
5131
|
-
accountAddress,
|
|
5132
|
-
cause: error
|
|
5133
|
-
});
|
|
5134
|
-
}
|
|
5135
|
-
throw error;
|
|
5136
|
-
}
|
|
5137
|
-
this.logger.info('[keyshare-selftest] encryption round-trip self-test passed', {
|
|
5138
|
-
walletId,
|
|
5139
|
-
accountAddress
|
|
5140
|
-
});
|
|
5141
|
-
}
|
|
5142
|
-
/**
|
|
5143
|
-
* Diagnostics for backup self-test failures. ONLY runs on the envId-default
|
|
5144
|
-
* path (no user password): envId is public, so the salt/iv/version emitted
|
|
5145
|
-
* here are non-secret.
|
|
5146
|
-
*
|
|
5147
|
-
* Reuses the encrypt- and decrypt-side keys that the backup already derived
|
|
5148
|
-
* (no extra Argon2 work — important, since the failing clients are the
|
|
5149
|
-
* memory-constrained ones) and logs the byte-wise XOR of the two: equal keys
|
|
5150
|
-
* give an all-zero diff, any non-zero byte localises the Argon2id drift that
|
|
5151
|
-
* broke this round-trip. The XOR of two unknown keys is not usable key
|
|
5152
|
-
* material, and the raw keys are never logged.
|
|
5153
|
-
*/ logSelfTestDiagnostics({ encrypted, password, walletId, accountAddress, cause, encryptDerivation, decryptKeyBytes, decryptInputFingerprint }) {
|
|
5154
|
-
if (password) {
|
|
5155
|
-
this.logger.warn('[keyshare-selftest] password provided... skipping diagnostics', {
|
|
5156
|
-
environmentId: this.environmentId,
|
|
5157
|
-
walletId,
|
|
5158
|
-
accountAddress
|
|
5159
|
-
});
|
|
5160
|
-
return;
|
|
5161
|
-
} else {
|
|
5162
|
-
this.logger.info('[keyshare-selftest] password not provided (envId path), running diagnostics', {
|
|
5163
|
-
environmentId: this.environmentId,
|
|
5164
|
-
walletId,
|
|
5165
|
-
accountAddress
|
|
5166
|
-
});
|
|
5167
|
-
}
|
|
5168
|
-
try {
|
|
5169
|
-
const decoded = JSON.parse(Buffer.from(encrypted, 'base64').toString());
|
|
5170
|
-
var _decoded_version;
|
|
5171
|
-
const version = (_decoded_version = decoded.version) != null ? _decoded_version : 'unknown';
|
|
5172
|
-
const config = getEncryptionConfig(version);
|
|
5173
|
-
const toHex = (a)=>Array.from(a, (b)=>b.toString(16).padStart(2, '0')).join('');
|
|
5174
|
-
// Diff the two real derivations when both were captured (v3/Argon2 only —
|
|
5175
|
-
// PBKDF2 keys are non-extractable so no bytes are available).
|
|
5176
|
-
let drift;
|
|
5177
|
-
const encryptKeyBytes = encryptDerivation == null ? void 0 : encryptDerivation.key;
|
|
5178
|
-
if (encryptKeyBytes && decryptKeyBytes) {
|
|
5179
|
-
const len = Math.min(encryptKeyBytes.length, decryptKeyBytes.length);
|
|
5180
|
-
const xor = new Uint8Array(len);
|
|
5181
|
-
const driftPositions = [];
|
|
5182
|
-
for(let i = 0; i < len; i++){
|
|
5183
|
-
xor[i] = encryptKeyBytes[i] ^ decryptKeyBytes[i];
|
|
5184
|
-
if (xor[i] !== 0) driftPositions.push(i);
|
|
5185
|
-
}
|
|
5186
|
-
drift = {
|
|
5187
|
-
keyLength: len,
|
|
5188
|
-
keyDriftXor: toHex(xor),
|
|
5189
|
-
keyDriftByteCount: driftPositions.length,
|
|
5190
|
-
keyDriftPositions: driftPositions
|
|
5191
|
-
};
|
|
5192
|
-
}
|
|
5193
|
-
// Compare the two derivations' inputs component-by-component so a mismatch is
|
|
5194
|
-
// attributable to the salt, the password, or the config (params) — not just
|
|
5195
|
-
// "inputs differ". All match + a non-zero key drift ⇒ proven Argon2id non-determinism.
|
|
5196
|
-
const encInputs = encryptDerivation == null ? void 0 : encryptDerivation.inputFingerprint;
|
|
5197
|
-
const inputComparison = encInputs && decryptInputFingerprint ? {
|
|
5198
|
-
saltMatch: encInputs.salt === decryptInputFingerprint.salt,
|
|
5199
|
-
passwordMatch: encInputs.password === decryptInputFingerprint.password,
|
|
5200
|
-
paramsMatch: encInputs.params === decryptInputFingerprint.params,
|
|
5201
|
-
inputsMatch: encInputs.salt === decryptInputFingerprint.salt && encInputs.password === decryptInputFingerprint.password && encInputs.params === decryptInputFingerprint.params
|
|
5202
|
-
} : undefined;
|
|
5203
|
-
// Detect if drift has happened
|
|
5204
|
-
const detectedDrift = (drift == null ? void 0 : drift.keyDriftByteCount) && drift.keyDriftByteCount > 0;
|
|
5205
|
-
this.logger.error('[keyshare-selftest] self-test failed', _extends({
|
|
5206
|
-
walletId,
|
|
5207
|
-
accountAddress,
|
|
5208
|
-
environmentId: this.environmentId,
|
|
5209
|
-
userId: this.userId,
|
|
5210
|
-
version,
|
|
5211
|
-
salt: decoded.salt,
|
|
5212
|
-
iv: decoded.iv,
|
|
5213
|
-
saltLength: base64ToBytes(ensureBase64Padding(decoded.salt)).length,
|
|
5214
|
-
cipherLength: base64ToBytes(ensureBase64Padding(decoded.cipher)).length,
|
|
5215
|
-
causeName: cause instanceof Error ? cause.name : undefined,
|
|
5216
|
-
causeContext: cause instanceof KeyShareDecryptionError ? cause.context : undefined,
|
|
5217
|
-
// Whether both real keys were available to diff (false ⇒ non-v3 or a key wasn't captured).
|
|
5218
|
-
keyDriftAvailable: !!drift,
|
|
5219
|
-
detectedDrift
|
|
5220
|
-
}, drift, inputComparison, {
|
|
5221
|
-
argon2: isArgon2Config(config) ? {
|
|
5222
|
-
memorySize: config.memorySize,
|
|
5223
|
-
iterations: config.iterations,
|
|
5224
|
-
parallelism: config.parallelism,
|
|
5225
|
-
hashLength: config.hashLength
|
|
5226
|
-
} : undefined
|
|
5227
|
-
}));
|
|
5228
|
-
} catch (diagError) {
|
|
5229
|
-
// Diagnostics must never mask the real failure.
|
|
5230
|
-
this.logger.warn('[keyshare-selftest] diagnostics failed to run', {
|
|
5231
|
-
walletId,
|
|
5232
|
-
accountAddress,
|
|
5233
|
-
error: diagError instanceof Error ? diagError.message : String(diagError)
|
|
5234
|
-
});
|
|
5235
|
-
}
|
|
5236
|
-
}
|
|
5237
5017
|
/**
|
|
5238
|
-
* Post-backup recoverability check (feature-flagged).
|
|
5239
|
-
*
|
|
5240
|
-
*
|
|
5241
|
-
*
|
|
5242
|
-
* real store → fetch → decrypt path the user will rely on to recover.
|
|
5018
|
+
* Post-backup recoverability check (feature-flagged). Fetches the just-stored
|
|
5019
|
+
* share back from the keyshare service and confirms it decrypts to the same
|
|
5020
|
+
* secret we hold in memory — exercising the real store → fetch → decrypt path
|
|
5021
|
+
* the user will rely on to recover.
|
|
5243
5022
|
*
|
|
5244
5023
|
* The local share is never deleted: a failed/flaky fetch must not be able to
|
|
5245
5024
|
* lose the only client copy. A genuine decrypt failure or a value mismatch is
|
|
@@ -5323,12 +5102,11 @@ class DynamicWalletClient {
|
|
|
5323
5102
|
throw error;
|
|
5324
5103
|
}
|
|
5325
5104
|
}
|
|
5326
|
-
async encryptKeyShare({ keyShare, password,
|
|
5105
|
+
async encryptKeyShare({ keyShare, password, version }) {
|
|
5327
5106
|
const serializedKeyShare = JSON.stringify(keyShare);
|
|
5328
5107
|
const encryptedKeyShare = await encryptData({
|
|
5329
5108
|
data: serializedKeyShare,
|
|
5330
5109
|
password: password != null ? password : this.environmentId,
|
|
5331
|
-
onRawKey,
|
|
5332
5110
|
version
|
|
5333
5111
|
});
|
|
5334
5112
|
this.logPasswordSharePresence(password, 'encrypt');
|
|
@@ -5697,7 +5475,7 @@ class DynamicWalletClient {
|
|
|
5697
5475
|
hasDelegatedShare: !!distribution.delegatedShare
|
|
5698
5476
|
}));
|
|
5699
5477
|
try {
|
|
5700
|
-
var
|
|
5478
|
+
var _this_getWalletFromMap, _backupData_locationsWithKeyShares, _backupData_locationsWithKeyShares1;
|
|
5701
5479
|
// `let` so the retry path can swap in a freshly-signed session via the reverse channel on 400.
|
|
5702
5480
|
let resolvedSignedSessionId = await this.signedSession.resolve(signedSessionId);
|
|
5703
5481
|
if (!(walletData == null ? void 0 : walletData.walletId)) {
|
|
@@ -5714,28 +5492,13 @@ class DynamicWalletClient {
|
|
|
5714
5492
|
}
|
|
5715
5493
|
const bitcoinConfig = this.getBitcoinConfigForChain(walletData.chainName, accountAddress);
|
|
5716
5494
|
const isPasswordEncrypted = shouldValidatePassword(password, this.environmentId);
|
|
5717
|
-
// On the envId-default path, capture each share's derived encrypt key
|
|
5718
|
-
// (keyed by its ciphertext blob) so the self-test can diff it against the
|
|
5719
|
-
// decrypt key it derives — detecting Argon2id drift with NO extra
|
|
5720
|
-
// derivations. Skipped entirely when a user password is set; keys are
|
|
5721
|
-
// in-process only and cleared right after the self-test.
|
|
5722
|
-
const encryptKeyByBlob = isPasswordEncrypted ? undefined : new Map();
|
|
5723
5495
|
// Pre-encrypt all shares once, with retry to handle transient WebCrypto errors.
|
|
5724
5496
|
// This avoids re-running expensive Argon2id key derivation on every retry attempt.
|
|
5725
|
-
const encryptWithRetry = (keyShare)=>retryPromise(
|
|
5726
|
-
let derived;
|
|
5727
|
-
const blob = await this.encryptKeyShare({
|
|
5497
|
+
const encryptWithRetry = (keyShare)=>retryPromise(()=>this.encryptKeyShare({
|
|
5728
5498
|
keyShare,
|
|
5729
5499
|
password,
|
|
5730
|
-
onRawKey: encryptKeyByBlob ? (key, inputFingerprint)=>derived = {
|
|
5731
|
-
key,
|
|
5732
|
-
inputFingerprint
|
|
5733
|
-
} : undefined,
|
|
5734
5500
|
version: encryptionVersion
|
|
5735
|
-
})
|
|
5736
|
-
if (encryptKeyByBlob && derived) encryptKeyByBlob.set(blob, derived);
|
|
5737
|
-
return blob;
|
|
5738
|
-
}, {
|
|
5501
|
+
}), {
|
|
5739
5502
|
maxAttempts: 3,
|
|
5740
5503
|
operationName: 'encrypt key share'
|
|
5741
5504
|
});
|
|
@@ -5755,22 +5518,6 @@ class DynamicWalletClient {
|
|
|
5755
5518
|
dynamicShareCount: preEncryptedDynamicShares.length,
|
|
5756
5519
|
cloudProviderCount: preEncryptedCloudShares.length
|
|
5757
5520
|
}));
|
|
5758
|
-
var _preEncryptedDynamicShares_;
|
|
5759
|
-
// Fail fast before any upload if the just-written cipher can't be read
|
|
5760
|
-
// back with the same key material. Runs once per backup, not per share.
|
|
5761
|
-
const selfTestBlob = (_preEncryptedDynamicShares_ = preEncryptedDynamicShares[0]) != null ? _preEncryptedDynamicShares_ : (_preEncryptedCloudShares_ = preEncryptedCloudShares[0]) == null ? void 0 : _preEncryptedCloudShares_.encrypted[0];
|
|
5762
|
-
try {
|
|
5763
|
-
await this.assertEncryptionRoundTrip({
|
|
5764
|
-
password,
|
|
5765
|
-
encrypted: selfTestBlob,
|
|
5766
|
-
encryptDerivation: selfTestBlob ? encryptKeyByBlob == null ? void 0 : encryptKeyByBlob.get(selfTestBlob) : undefined,
|
|
5767
|
-
walletId: walletData.walletId,
|
|
5768
|
-
accountAddress
|
|
5769
|
-
});
|
|
5770
|
-
} finally{
|
|
5771
|
-
// Drop captured key material promptly regardless of outcome.
|
|
5772
|
-
encryptKeyByBlob == null ? void 0 : encryptKeyByBlob.clear();
|
|
5773
|
-
}
|
|
5774
5521
|
// Step 1: Upload shares in parallel, each with its own retry
|
|
5775
5522
|
const uploadPromises = [];
|
|
5776
5523
|
if (distribution.clientShares.length > 0) {
|
|
@@ -6310,7 +6057,7 @@ class DynamicWalletClient {
|
|
|
6310
6057
|
throw error;
|
|
6311
6058
|
}
|
|
6312
6059
|
}
|
|
6313
|
-
async decryptKeyShare({ keyShare, password
|
|
6060
|
+
async decryptKeyShare({ keyShare, password }) {
|
|
6314
6061
|
const decodedKeyShare = JSON.parse(Buffer.from(keyShare, 'base64').toString());
|
|
6315
6062
|
// Track whether a user-supplied password was provided so we can emit a
|
|
6316
6063
|
// distinct error class on failure. The default `environmentId` fallback is
|
|
@@ -6322,8 +6069,7 @@ class DynamicWalletClient {
|
|
|
6322
6069
|
try {
|
|
6323
6070
|
const decryptedKeyShare = await decryptData({
|
|
6324
6071
|
data: decodedKeyShare,
|
|
6325
|
-
password: effectivePassword
|
|
6326
|
-
onRawKey
|
|
6072
|
+
password: effectivePassword
|
|
6327
6073
|
});
|
|
6328
6074
|
this.logPasswordSharePresence(password, 'decrypt');
|
|
6329
6075
|
this.logger.info('[keyshare-decryption] key share decrypted', {
|
|
@@ -7662,7 +7408,7 @@ class DynamicWalletClient {
|
|
|
7662
7408
|
this.userId = user.id;
|
|
7663
7409
|
const waasWallets = (_user_verifiedCredentials = user.verifiedCredentials) == null ? void 0 : _user_verifiedCredentials.filter((vc)=>vc.walletName === 'dynamicwaas');
|
|
7664
7410
|
const wallets = waasWallets.map((vc)=>{
|
|
7665
|
-
var _this_getWalletFromMap, _vc_walletProperties, _vc_walletProperties1, _vc_walletProperties2, _vc_walletProperties3, _vc_walletProperties4;
|
|
7411
|
+
var _this_getWalletFromMap, _vc_walletProperties, _vc_walletProperties1, _vc_walletProperties2, _vc_walletProperties3, _vc_walletProperties4, _vc_walletProperties5;
|
|
7666
7412
|
var _this_getWalletFromMap_derivationPath;
|
|
7667
7413
|
return {
|
|
7668
7414
|
walletId: vc.id,
|
|
@@ -7676,7 +7422,11 @@ class DynamicWalletClient {
|
|
|
7676
7422
|
addressType: (_vc_walletProperties1 = vc.walletProperties) == null ? void 0 : _vc_walletProperties1.addressType,
|
|
7677
7423
|
shareSetId: (_vc_walletProperties2 = vc.walletProperties) == null ? void 0 : _vc_walletProperties2.shareSetId,
|
|
7678
7424
|
shareSetType: (_vc_walletProperties3 = vc.walletProperties) == null ? void 0 : _vc_walletProperties3.shareSetType,
|
|
7679
|
-
otherShareSets: (_vc_walletProperties4 = vc.walletProperties) == null ? void 0 : _vc_walletProperties4.otherShareSets
|
|
7425
|
+
otherShareSets: (_vc_walletProperties4 = vc.walletProperties) == null ? void 0 : _vc_walletProperties4.otherShareSets,
|
|
7426
|
+
// On-sign-on settings (shouldRefreshOnNextSignOn / reshareOnNextSignOn /
|
|
7427
|
+
// revokeOnNextSignOn). Surfaced so the SDK can self-drive the on-sign-on
|
|
7428
|
+
// orchestration instead of the host reading these flags.
|
|
7429
|
+
settings: (_vc_walletProperties5 = vc.walletProperties) == null ? void 0 : _vc_walletProperties5.settings
|
|
7680
7430
|
};
|
|
7681
7431
|
});
|
|
7682
7432
|
const existingWalletMap = this.walletMap;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/browser",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.39",
|
|
4
4
|
"license": "Licensed under the Dynamic Labs, Inc. Terms Of Service (https://www.dynamic.xyz/terms-conditions)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/core": "1.0.
|
|
7
|
+
"@dynamic-labs-wallet/core": "1.0.39",
|
|
8
8
|
"@dynamic-labs-wallet/forward-mpc-client": "0.12.0",
|
|
9
|
-
"@dynamic-labs-wallet/primitives": "1.0.
|
|
9
|
+
"@dynamic-labs-wallet/primitives": "1.0.39",
|
|
10
10
|
"@dynamic-labs/sdk-api-core": "^0.0.984",
|
|
11
11
|
"argon2id": "1.0.1",
|
|
12
12
|
"axios": "1.16.0",
|
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
import type { EncryptionConfig } from './config.js';
|
|
2
|
-
import type {
|
|
3
|
-
/**
|
|
4
|
-
* Derives the raw Argon2id hash bytes for the given params/config.
|
|
5
|
-
*
|
|
6
|
-
* Exposed separately from {@link deriveArgon2Key} for the backup self-test's
|
|
7
|
-
* determinism probe: it lets the caller derive twice from identical inputs and
|
|
8
|
-
* diff the results to detect Argon2id non-determinism (suspected on
|
|
9
|
-
* memory-constrained clients). The raw bytes are AES key material and must
|
|
10
|
-
* never be logged or persisted — keep them in-process.
|
|
11
|
-
*/
|
|
12
|
-
export declare const deriveRawArgon2Bytes: ({ password, salt }: KeyDerivationParams, encryptionConfig: EncryptionConfig) => Promise<Uint8Array>;
|
|
2
|
+
import type { KeyDerivationParams } from './types.js';
|
|
13
3
|
/**
|
|
14
4
|
* Derives a key using Argon2id algorithm
|
|
15
5
|
* @param params - Key derivation parameters
|
|
16
6
|
* @param encryptionConfig - Encryption configuration
|
|
17
|
-
* @param onRawKey - In-process hook receiving the raw derived bytes (key material —
|
|
18
|
-
* never log) and a per-component fingerprint of the inputs that produced them. Lets
|
|
19
|
-
* the backup self-test reuse the keys it already derives — and prove both sides used
|
|
20
|
-
* identical inputs (and which component differs if not) — without extra derivations.
|
|
21
7
|
* @returns Promise<CryptoKey>
|
|
22
8
|
*/
|
|
23
|
-
export declare const deriveArgon2Key: (
|
|
9
|
+
export declare const deriveArgon2Key: ({ password, salt }: KeyDerivationParams, encryptionConfig: EncryptionConfig) => Promise<CryptoKey>;
|
|
24
10
|
//# sourceMappingURL=argon2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argon2.d.ts","sourceRoot":"","sources":["../../../src/backup/encryption/argon2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAA0B,
|
|
1
|
+
{"version":3,"file":"argon2.d.ts","sourceRoot":"","sources":["../../../src/backup/encryption/argon2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAA0B,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,eAAe,uBACN,mBAAmB,oBACrB,gBAAgB,KACjC,OAAO,CAAC,SAAS,CA0BnB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EncryptionMetadata } from '@dynamic-labs-wallet/core';
|
|
2
|
-
import type { DecryptionData,
|
|
2
|
+
import type { DecryptionData, EncryptedData } from './types.js';
|
|
3
3
|
export declare const INVALID_PASSWORD_ERROR = "Decryption failed: Invalid password. Please check your password and try again.";
|
|
4
4
|
export declare class InvalidPasswordError extends Error {
|
|
5
5
|
constructor();
|
|
@@ -32,12 +32,10 @@ export declare class KeyShareDecryptionError extends Error {
|
|
|
32
32
|
* Encrypts data using the specified encryption version.
|
|
33
33
|
* Always uses the latest encryption configuration for new encryptions by default.
|
|
34
34
|
*/
|
|
35
|
-
export declare const encryptData: ({ data, password, version,
|
|
35
|
+
export declare const encryptData: ({ data, password, version, }: {
|
|
36
36
|
data: string;
|
|
37
37
|
password: string;
|
|
38
38
|
version?: string;
|
|
39
|
-
/** In-process hook receiving the raw derived key bytes (key material, never log) + a one-way input fingerprint. */
|
|
40
|
-
onRawKey?: (rawKey: Uint8Array, inputFingerprint: DerivationInputFingerprint) => void;
|
|
41
39
|
}) => Promise<EncryptedData>;
|
|
42
40
|
/**
|
|
43
41
|
* Decrypts data with version-based configuration.
|
|
@@ -45,11 +43,9 @@ export declare const encryptData: ({ data, password, version, onRawKey, }: {
|
|
|
45
43
|
* Falls back to legacy version for backward compatibility if no version is specified.
|
|
46
44
|
* For v3 (Argon2), retries with parallelism=1 if an OperationError occurs.
|
|
47
45
|
*/
|
|
48
|
-
export declare const decryptData: ({ data, password
|
|
46
|
+
export declare const decryptData: ({ data, password }: {
|
|
49
47
|
data: DecryptionData;
|
|
50
48
|
password: string;
|
|
51
|
-
/** In-process hook receiving the raw derived key bytes (key material, never log) + a one-way input fingerprint. */
|
|
52
|
-
onRawKey?: (rawKey: Uint8Array, inputFingerprint: DerivationInputFingerprint) => void;
|
|
53
49
|
}) => Promise<string>;
|
|
54
50
|
/**
|
|
55
51
|
* Gets encryption metadata for a specific version.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/backup/encryption/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAMpE,OAAO,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/backup/encryption/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAMpE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAuB,MAAM,YAAY,CAAC;AAGrF,eAAO,MAAM,sBAAsB,mFAAmF,CAAC;AAEvH,qBAAa,oBAAqB,SAAQ,KAAK;;CAK9C;AAED,eAAO,MAAM,0BAA0B,uBAAuB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAgB,OAAO,CAAC,EAAE,yBAAyB,CAAC;gBAExC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,yBAAyB,CAAA;KAAE;CAU/E;AAoBD;;;GAGG;AACH,eAAO,MAAM,WAAW,iCAIrB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,OAAO,CAAC,aAAa,CA2BxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,uBAA8B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CAyDhH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,YAAa,MAAM,KAAG,kBAmBjE,CAAC"}
|
|
@@ -43,19 +43,4 @@ export interface KeyDerivationParams {
|
|
|
43
43
|
password: string;
|
|
44
44
|
salt: Uint8Array;
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
47
|
-
* Per-component, one-way fingerprints of the exact inputs a single Argon2id
|
|
48
|
-
* derivation consumed. Split by component so that when two derivations disagree,
|
|
49
|
-
* the self-test can pinpoint whether the salt, the password, or the config
|
|
50
|
-
* (Argon2 params) was the difference — rather than just "inputs differ".
|
|
51
|
-
* Each value is a truncated SHA-256; none is reversible.
|
|
52
|
-
*/
|
|
53
|
-
export interface DerivationInputFingerprint {
|
|
54
|
-
/** H(salt) */
|
|
55
|
-
salt: string;
|
|
56
|
-
/** H(password bytes) */
|
|
57
|
-
password: string;
|
|
58
|
-
/** H(parallelism, passes, memorySize, tagLength) */
|
|
59
|
-
params: string;
|
|
60
|
-
}
|
|
61
46
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/backup/encryption/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/backup/encryption/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB"}
|
package/src/client.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { EcdsaSignature, MessageHash, type EcdsaPublicKey } from '#internal/web'
|
|
|
2
2
|
import { AuthMode, BackupLocation, DynamicApiClient, BusinessAccountClient, type TargetSignerIdentity, type BusinessAccountSignerType, ThresholdSignatureScheme, WalletOperation, type Argon2idRebackupTarget, type BackupLocationWithExternalKeyShareId, type BitcoinConfig, type DynamicWalletClientProps, type FeatureFlags, type GetWalletResponse, type ILogger, type InitializeResult, type KeyShareBackupInfo, type SecureStorageAdapter, type ShareSet, type ShareSetType, type TraceContext, type WalletRecoveryState, type CreateWaasSDKContainer } from '@dynamic-labs-wallet/core';
|
|
3
3
|
import { RoomTypeEnum, type SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
4
4
|
import { EncryptionVersion } from './backup/encryption/constants.js';
|
|
5
|
-
import type { DerivationInputFingerprint } from './backup/encryption/types.js';
|
|
6
5
|
import type { ClientInitKeygenResult, ClientKeyShare, MPCSigner } from './mpc/types.js';
|
|
7
6
|
import { type SupportedStorage } from './services/localStorage.js';
|
|
8
7
|
import { OperationSource, type Room, type ShareDistribution, type WalletProperties } from './types.js';
|
|
@@ -450,26 +449,11 @@ export declare class DynamicWalletClient {
|
|
|
450
449
|
derivedPrivateKey: string | undefined;
|
|
451
450
|
rawPublicKey: EcdsaPublicKey | Uint8Array | string | undefined;
|
|
452
451
|
}>;
|
|
453
|
-
private assertEncryptionRoundTrip;
|
|
454
452
|
/**
|
|
455
|
-
*
|
|
456
|
-
*
|
|
457
|
-
*
|
|
458
|
-
*
|
|
459
|
-
* Reuses the encrypt- and decrypt-side keys that the backup already derived
|
|
460
|
-
* (no extra Argon2 work — important, since the failing clients are the
|
|
461
|
-
* memory-constrained ones) and logs the byte-wise XOR of the two: equal keys
|
|
462
|
-
* give an all-zero diff, any non-zero byte localises the Argon2id drift that
|
|
463
|
-
* broke this round-trip. The XOR of two unknown keys is not usable key
|
|
464
|
-
* material, and the raw keys are never logged.
|
|
465
|
-
*/
|
|
466
|
-
private logSelfTestDiagnostics;
|
|
467
|
-
/**
|
|
468
|
-
* Post-backup recoverability check (feature-flagged). Where
|
|
469
|
-
* `assertEncryptionRoundTrip` only proves the cipher decrypts in-process,
|
|
470
|
-
* this fetches the just-stored share back from the keyshare service and
|
|
471
|
-
* confirms it decrypts to the same secret we hold in memory — exercising the
|
|
472
|
-
* real store → fetch → decrypt path the user will rely on to recover.
|
|
453
|
+
* Post-backup recoverability check (feature-flagged). Fetches the just-stored
|
|
454
|
+
* share back from the keyshare service and confirms it decrypts to the same
|
|
455
|
+
* secret we hold in memory — exercising the real store → fetch → decrypt path
|
|
456
|
+
* the user will rely on to recover.
|
|
473
457
|
*
|
|
474
458
|
* The local share is never deleted: a failed/flaky fetch must not be able to
|
|
475
459
|
* lose the only client copy. A genuine decrypt failure or a value mismatch is
|
|
@@ -478,11 +462,9 @@ export declare class DynamicWalletClient {
|
|
|
478
462
|
* stays visible and retryable rather than masquerading as "unrecoverable".
|
|
479
463
|
*/
|
|
480
464
|
private assertServerCopyRecoverable;
|
|
481
|
-
encryptKeyShare({ keyShare, password,
|
|
465
|
+
encryptKeyShare({ keyShare, password, version, }: {
|
|
482
466
|
keyShare: ClientKeyShare;
|
|
483
467
|
password?: string;
|
|
484
|
-
/** In-process hook receiving the raw derived key bytes (key material, never log) + input fingerprint. */
|
|
485
|
-
onRawKey?: (rawKey: Uint8Array, inputFingerprint: DerivationInputFingerprint) => void;
|
|
486
468
|
/** Encryption version to use. Defaults to the current default (v3) when omitted. */
|
|
487
469
|
version?: EncryptionVersion;
|
|
488
470
|
}): Promise<string>;
|
|
@@ -662,11 +644,9 @@ export declare class DynamicWalletClient {
|
|
|
662
644
|
signedSessionId: string;
|
|
663
645
|
passwordUpdateBatchId?: string;
|
|
664
646
|
}): Promise<void>;
|
|
665
|
-
decryptKeyShare({ keyShare, password
|
|
647
|
+
decryptKeyShare({ keyShare, password }: {
|
|
666
648
|
keyShare: string;
|
|
667
649
|
password?: string;
|
|
668
|
-
/** In-process hook receiving the raw derived key bytes (key material, never log) + input fingerprint. */
|
|
669
|
-
onRawKey?: (rawKey: Uint8Array, inputFingerprint: DerivationInputFingerprint) => void;
|
|
670
650
|
}): Promise<ClientKeyShare>;
|
|
671
651
|
/**
|
|
672
652
|
* Validates that the provided password is consistent with existing encrypted wallets.
|
package/src/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"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"}
|