summaryrefslogtreecommitdiff
path: root/lib/internal/crypto/cipher.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/internal/crypto/cipher.js')
-rw-r--r--lib/internal/crypto/cipher.js33
1 files changed, 20 insertions, 13 deletions
diff --git a/lib/internal/crypto/cipher.js b/lib/internal/crypto/cipher.js
index 1e5dc91c8d..0e8e5c4cf8 100644
--- a/lib/internal/crypto/cipher.js
+++ b/lib/internal/crypto/cipher.js
@@ -13,6 +13,11 @@ const {
const { validateString } = require('internal/validators');
const {
+ preparePrivateKey,
+ preparePublicOrPrivateKey,
+ prepareSecretKey
+} = require('internal/crypto/keys');
+const {
getDefaultEncoding,
kHandle,
legacyNativeHandle,
@@ -37,19 +42,25 @@ const { deprecate, normalizeEncoding } = require('internal/util');
// Lazy loaded for startup performance.
let StringDecoder;
-function rsaFunctionFor(method, defaultPadding) {
+function rsaFunctionFor(method, defaultPadding, keyType) {
return (options, buffer) => {
- const key = options.key || options;
+ const { format, type, data, passphrase } =
+ keyType === 'private' ?
+ preparePrivateKey(options) :
+ preparePublicOrPrivateKey(options);
const padding = options.padding || defaultPadding;
- const passphrase = options.passphrase || null;
- return method(toBuf(key), buffer, padding, passphrase);
+ return method(data, format, type, passphrase, buffer, padding);
};
}
-const publicEncrypt = rsaFunctionFor(_publicEncrypt, RSA_PKCS1_OAEP_PADDING);
-const publicDecrypt = rsaFunctionFor(_publicDecrypt, RSA_PKCS1_PADDING);
-const privateEncrypt = rsaFunctionFor(_privateEncrypt, RSA_PKCS1_PADDING);
-const privateDecrypt = rsaFunctionFor(_privateDecrypt, RSA_PKCS1_OAEP_PADDING);
+const publicEncrypt = rsaFunctionFor(_publicEncrypt, RSA_PKCS1_OAEP_PADDING,
+ 'public');
+const publicDecrypt = rsaFunctionFor(_publicDecrypt, RSA_PKCS1_PADDING,
+ 'private');
+const privateEncrypt = rsaFunctionFor(_privateEncrypt, RSA_PKCS1_PADDING,
+ 'private');
+const privateDecrypt = rsaFunctionFor(_privateDecrypt, RSA_PKCS1_OAEP_PADDING,
+ 'public');
function getDecoder(decoder, encoding) {
encoding = normalizeEncoding(encoding);
@@ -104,11 +115,7 @@ function createCipher(cipher, password, options, decipher) {
function createCipherWithIV(cipher, key, options, decipher, iv) {
validateString(cipher, 'cipher');
- key = toBuf(key);
- if (!isArrayBufferView(key)) {
- throw invalidArrayBufferView('key', key);
- }
-
+ key = prepareSecretKey(key);
iv = toBuf(iv);
if (iv !== null && !isArrayBufferView(iv)) {
throw invalidArrayBufferView('iv', iv);