Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/openpgpjs/openpgpjs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/crypto.js')
-rw-r--r--src/crypto/crypto.js29
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];
}