From cc27f98aaee3f2fc59dec0c596c7c5b9ad53cf5e Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 5 Mar 2019 16:36:11 -0500 Subject: [PATCH] makeKeyFromPin in background context --- src/abstractions/crypto.service.ts | 1 + src/angular/components/lock.component.ts | 7 ++----- src/services/crypto.service.ts | 12 ++++++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/abstractions/crypto.service.ts b/src/abstractions/crypto.service.ts index 889500c40f4..3ee45f1bc16 100644 --- a/src/abstractions/crypto.service.ts +++ b/src/abstractions/crypto.service.ts @@ -30,6 +30,7 @@ export abstract class CryptoService { clearKeys: () => Promise; toggleKey: () => Promise; makeKey: (password: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise; + makeKeyFromPin: (pin: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise; makeShareKey: () => Promise<[CipherString, SymmetricCryptoKey]>; makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, CipherString]>; makePinKey: (pin: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise; diff --git a/src/angular/components/lock.component.ts b/src/angular/components/lock.component.ts index 419124f0387..31493ac8723 100644 --- a/src/angular/components/lock.component.ts +++ b/src/angular/components/lock.component.ts @@ -66,12 +66,9 @@ export class LockComponent implements OnInit { this.doContinue(); } } else { - const pinProtectedKey = await this.storageService.get(ConstantsService.pinProtectedKey); - const protectedKeyCs = new CipherString(pinProtectedKey); - const pinKey = await this.cryptoService.makePinKey(this.pin, this.email, kdf, kdfIterations); - const decKey = await this.cryptoService.decryptToBytes(protectedKeyCs, pinKey); + const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations); failed = false; - await this.setKeyAndContinue(new SymmetricCryptoKey(decKey)); + await this.setKeyAndContinue(key); } } catch { failed = true; diff --git a/src/services/crypto.service.ts b/src/services/crypto.service.ts index 865ec3bfc15..b2da1ce5321 100644 --- a/src/services/crypto.service.ts +++ b/src/services/crypto.service.ts @@ -310,6 +310,18 @@ export class CryptoService implements CryptoServiceAbstraction { return new SymmetricCryptoKey(key); } + async makeKeyFromPin(pin: string, salt: string, kdf: KdfType, kdfIterations: number): + Promise { + const pinProtectedKey = await this.storageService.get(ConstantsService.pinProtectedKey); + if (pinProtectedKey == null) { + throw new Error('No PIN protected key found.'); + } + const protectedKeyCs = new CipherString(pinProtectedKey); + const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations); + const decKey = await this.decryptToBytes(protectedKeyCs, pinKey); + return new SymmetricCryptoKey(decKey); + } + async makeShareKey(): Promise<[CipherString, SymmetricCryptoKey]> { const shareKey = await this.cryptoFunctionService.randomBytes(64); const publicKey = await this.getPublicKey();