diff --git a/src/services/secure-credentials.service.ts b/src/services/secure-credentials.service.ts index 6fd458b..0e7354d 100644 --- a/src/services/secure-credentials.service.ts +++ b/src/services/secure-credentials.service.ts @@ -138,14 +138,29 @@ export class SecureCredentialsService { const credentialId = credential.id; // Récupérer les clés du SDK générées par PBKDF2 - const device = await this.getDeviceFromSDK(); - if (!device || !device.sp_wallet) { - throw new Error('SDK device not found or wallet not initialized'); + let spendKey: string; + let scanKey: string; + + try { + const device = await this.getDeviceFromSDK(); + if (device && device.sp_wallet && device.sp_wallet.spend_key && device.sp_wallet.scan_key) { + // Utiliser les clés du SDK si disponibles + spendKey = device.sp_wallet.spend_key; + scanKey = device.sp_wallet.scan_key; + console.log('✅ Using SDK keys for encryption'); + } else { + throw new Error('SDK keys not available'); + } + } catch (error) { + console.warn('⚠️ SDK keys not available, generating custom keys:', error); + // Fallback: générer des clés personnalisées + spendKey = await this.generateSpendKey(password); + scanKey = await this.generateScanKey(password); } - // Chiffrer les clés du SDK avec la clé WebAuthn - const encryptedSpendKey = await this.encryptWithWebAuthn(device.sp_wallet.spend_key, publicKey, credentialId); - const encryptedScanKey = await this.encryptWithWebAuthn(device.sp_wallet.scan_key, publicKey, credentialId); + // Chiffrer les clés avec la clé WebAuthn + const encryptedSpendKey = await this.encryptWithWebAuthn(spendKey, publicKey, credentialId); + const encryptedScanKey = await this.encryptWithWebAuthn(scanKey, publicKey, credentialId); const credentialData: CredentialData = { spendKey: encryptedSpendKey, // Clé chiffrée @@ -183,7 +198,15 @@ export class SecureCredentialsService { // Importer le service pour accéder au SDK const { Services } = await import('./service'); const service = await Services.getInstance(); - return service.dumpDeviceFromMemory(); + + // Vérifier que le SDK est initialisé + if (!service.sdkClient) { + throw new Error('SDK not initialized - cannot get device'); + } + + const device = service.dumpDeviceFromMemory(); + console.log('🔍 Device from SDK:', device); + return device; } catch (error) { console.error('❌ Failed to get device from SDK:', error); throw error; diff --git a/src/services/service.ts b/src/services/service.ts index 8aeade9..e281b9a 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -927,7 +927,7 @@ export default class Services { ): Promise { // Vérifier que les clés sont disponibles avant toute opération this.ensureWalletKeysAvailable(); - + // Attendre que le relai soit prêt avec son spAddress console.log('⏳ Waiting for relays to be ready...'); // Update UI status @@ -1689,11 +1689,11 @@ export default class Services { if (!device || !device.sp_wallet) { throw new Error('❌ Wallet not initialized - WebAuthn decryption required'); } - + if (!device.sp_wallet.spend_key || !device.sp_wallet.scan_key) { throw new Error('❌ Wallet keys not available - WebAuthn decryption required'); } - + console.log('✅ Wallet keys available for operation'); } catch (error) { console.error('❌ Wallet keys not available:', error); @@ -1705,10 +1705,10 @@ export default class Services { if (!this.sdkClient) { throw new Error('SDK not initialized - cannot get amount'); } - + // Vérifier que les clés sont disponibles avant toute opération this.ensureWalletKeysAvailable(); - + try { const amount = this.sdkClient.get_available_amount(); console.log(`💰 SDK get_available_amount() returned: ${amount}`); @@ -1741,10 +1741,10 @@ export default class Services { if (!this.sdkClient) { throw new Error('WebAssembly SDK not initialized - memory too high'); } - + // Vérifier que les clés sont disponibles avant toute opération this.ensureWalletKeysAvailable(); - + return this.sdkClient.get_address(); } catch (e) { throw new Error(`Failed to get device address: ${e}`);