From 00562d083b687fb566b09c0df8a05e90b86f9e5a Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 27 Aug 2018 19:06:36 -0400 Subject: [PATCH] remakeEncKey --- src/abstractions/crypto.service.ts | 1 + src/services/crypto.service.ts | 30 ++++++++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/abstractions/crypto.service.ts b/src/abstractions/crypto.service.ts index 8181ccf587..e333e5791b 100644 --- a/src/abstractions/crypto.service.ts +++ b/src/abstractions/crypto.service.ts @@ -32,6 +32,7 @@ export abstract class CryptoService { makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, CipherString]>; hashPassword: (password: string, key: SymmetricCryptoKey) => Promise; makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, CipherString]>; + remakeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, CipherString]> encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise; encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise; rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer, key?: SymmetricCryptoKey) => Promise; diff --git a/src/services/crypto.service.ts b/src/services/crypto.service.ts index 21e9d07852..dc0890eb31 100644 --- a/src/services/crypto.service.ts +++ b/src/services/crypto.service.ts @@ -318,16 +318,12 @@ export class CryptoService implements CryptoServiceAbstraction { async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, CipherString]> { const encKey = await this.cryptoFunctionService.randomBytes(64); - let encKeyEnc: CipherString = null; - if (key.key.byteLength === 32) { - const newKey = await this.stretchKey(key); - encKeyEnc = await this.encrypt(encKey, newKey); - } else if (key.key.byteLength === 64) { - encKeyEnc = await this.encrypt(encKey, key); - } else { - throw new Error('Invalid key size.'); - } - return [new SymmetricCryptoKey(encKey), encKeyEnc]; + return this.buildEncKey(key, encKey); + } + + async remakeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, CipherString]> { + const encKey = await this.getEncKey(); + return this.buildEncKey(key, encKey.key); } async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise { @@ -677,4 +673,18 @@ export class CryptoService implements CryptoServiceAbstraction { } return okm; } + + private async buildEncKey(key: SymmetricCryptoKey, encKey: ArrayBuffer = null) + : Promise<[SymmetricCryptoKey, CipherString]> { + let encKeyEnc: CipherString = null; + if (key.key.byteLength === 32) { + const newKey = await this.stretchKey(key); + encKeyEnc = await this.encrypt(encKey, newKey); + } else if (key.key.byteLength === 64) { + encKeyEnc = await this.encrypt(encKey, key); + } else { + throw new Error('Invalid key size.'); + } + return [new SymmetricCryptoKey(encKey), encKeyEnc]; + } }