From 34c5f5c8f0b8053f55fe5435646f826cd18253af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Fri, 12 Jul 2019 18:53:46 +0200 Subject: [PATCH] feat: add (rsa)pubKey.encrypt and (rsa)privKey.decrypt nodeJS only for now --- src/keys/rsa-class.js | 8 ++++++-- src/keys/rsa.js | 8 ++++++++ test/keys/rsa.spec.js | 7 +++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/keys/rsa-class.js b/src/keys/rsa-class.js index 84ad38b..1046eba 100644 --- a/src/keys/rsa-class.js +++ b/src/keys/rsa-class.js @@ -31,8 +31,8 @@ class RsaPublicKey { }) } - encrypt (bytes) { - return this._key.encrypt(bytes, 'RSAES-PKCS1-V1_5') + async encrypt (bytes) { + return crypto.encrypt(this._key, bytes) } equals (key) { @@ -68,6 +68,10 @@ class RsaPrivateKey { return new RsaPublicKey(this._publicKey) } + async decrypt (bytes) { + return crypto.decrypt(this._key, bytes) + } + marshal () { return crypto.utils.jwkToPkcs1(this._key) } diff --git a/src/keys/rsa.js b/src/keys/rsa.js index 019760a..f7c0b35 100644 --- a/src/keys/rsa.js +++ b/src/keys/rsa.js @@ -68,3 +68,11 @@ exports.hashAndVerify = async function (key, sig, msg) { // eslint-disable-line const pem = jwkToPem(key) return verify.verify(pem, sig) } + +exports.encrypt = async function (key, bytes) { + return crypto.publicEncrypt(jwkToPem(key), bytes) +} + +exports.decrypt = async function (key, bytes) { + return crypto.privateDecrypt(jwkToPem(key), bytes) +} diff --git a/test/keys/rsa.spec.js b/test/keys/rsa.spec.js index 175b144..c3b47be 100644 --- a/test/keys/rsa.spec.js +++ b/test/keys/rsa.spec.js @@ -80,6 +80,13 @@ describe('RSA', function () { expect(valid).to.be.eql(true) }) + it('encrypt and decrypt', async () => { + const data = Buffer.from('hello world') + const enc = await key.public.encrypt(data) + const dec = await key.decrypt(enc) + expect(dec).to.be.eql(data) + }) + it('fails to verify for different data', async () => { const data = Buffer.from('hello world') const sig = await key.sign(data)