diff options
Diffstat (limited to 'src/crypto/crypto.js')
-rw-r--r-- | src/crypto/crypto.js | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/crypto/crypto.js b/src/crypto/crypto.js index 27bbdd20..ed950d43 100644 --- a/src/crypto/crypto.js +++ b/src/crypto/crypto.js @@ -26,6 +26,7 @@ import publicKey from './public_key'; import * as cipher from './cipher'; +import mode from './mode'; import { getRandomBytes } from './random'; import ECDHSymkey from '../type/ecdh_symkey'; import KDFParams from '../type/kdf_params'; @@ -348,7 +349,8 @@ export async function validateParams(algo, publicParams, privateParams) { * @async */ export async function getPrefixRandom(algo) { - const prefixrandom = await getRandomBytes(cipher[algo].blockSize); + const { blockSize } = getCipher(algo); + const prefixrandom = await getRandomBytes(blockSize); const repeat = new Uint8Array([prefixrandom[prefixrandom.length - 2], prefixrandom[prefixrandom.length - 1]]); return util.concat([prefixrandom, repeat]); } @@ -361,5 +363,28 @@ export async function getPrefixRandom(algo) { * @async */ export function generateSessionKey(algo) { - return getRandomBytes(cipher[algo].keySize); + const { keySize } = getCipher(algo); + return getRandomBytes(keySize); +} + +/** + * Get implementation of the given AEAD mode + * @param {enums.aead} algo + * @returns {Object} + * @throws {Error} on invalid algo + */ +export function getAEADMode(algo) { + const algoName = enums.read(enums.aead, algo); + return mode[algoName]; +} + +/** + * Get implementation of the given cipher + * @param {enums.symmetric} algo + * @returns {Object} + * @throws {Error} on invalid algo + */ +export function getCipher(algo) { + const algoName = enums.read(enums.symmetric, algo); + return cipher[algoName]; } |