Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

node-rsa

Package Overview
Dependencies
Maintainers
1
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-rsa - npm Package Compare versions

Comparing version 0.2.21 to 0.2.22

.travis.yml

2

gruntfile.js

@@ -19,3 +19,3 @@ module.exports = function (grunt) {

options: {
reporter: 'List'
reporter: 'list'
},

@@ -22,0 +22,0 @@ all: {src: ['test/**/*.js']}

{
"name": "node-rsa",
"version": "0.2.21",
"version": "0.2.22",
"description": "Node.js RSA library",

@@ -5,0 +5,0 @@ "main": "src/NodeRSA.js",

@@ -12,3 +12,2 @@ # Node-RSA

## Example

@@ -27,3 +26,2 @@

## Installing

@@ -192,3 +190,3 @@

> *Notice:* usage `encryptPrivate` and `decryptPublic` with `pkcs1_oaep` padding not described in the RSA [specification](http://www.emc.com/collateral/white-papers/h11300-pkcs-1v2-2-rsa-cryptography-standard-wp.pdf)
> *Notice:*`encryptPrivate` and `decryptPublic` using only pkcs1 padding type 1 (not random)

@@ -217,2 +215,5 @@ ### Signing/Verifying

### 0.2.22
* `encryptPrivate` and `decryptPublic` now using only pkcs1 (type 1) padding.
### 0.2.20

@@ -222,3 +223,2 @@ * Added `.encryptPrivate()` and `.decryptPublic()` methods.

* Fixed some regex issue causing catastrophic backtracking.
* *KNOWN ISSUE*: `encryptPrivate` and `decryptPublic` don't have native implementation in nodejs and can't be use in native implementation with pkcs1_oaep padding in io.js.

@@ -300,1 +300,3 @@ ### 0.2.10

and disclaimer.
[![Build Status](https://travis-ci.org/rzcoder/node-rsa.svg?branch=master)](https://travis-ci.org/rzcoder/node-rsa)

@@ -5,20 +5,17 @@ var crypto = require('crypto');

module.exports = function (keyPair, options) {
var jsEngine = require('./js.js')(keyPair);
var jsEngine = require('./js.js')(keyPair, options);
return {
encrypt: function (buffer, usePrivate) {
var padding = constants.RSA_PKCS1_OAEP_PADDING;
if (options.encryptionScheme === 'pkcs1') {
padding = constants.RSA_PKCS1_PADDING;
}
if (usePrivate) {
// openssl don't support oaep padding for private encrypt
if (padding === constants.RSA_PKCS1_OAEP_PADDING) {
return jsEngine.encrypt(buffer, usePrivate);
}
return crypto.privateEncrypt({
key: options.rsaUtils.exportKey('private'),
padding: padding
padding: constants.RSA_PKCS1_PADDING
}, buffer);
} else {
var padding = constants.RSA_PKCS1_OAEP_PADDING;
if (options.encryptionScheme === 'pkcs1') {
padding = constants.RSA_PKCS1_PADDING;
}
return crypto.publicEncrypt({

@@ -32,16 +29,13 @@ key: options.rsaUtils.exportKey('public'),

decrypt: function (buffer, usePublic) {
var padding = constants.RSA_PKCS1_OAEP_PADDING;
if (options.encryptionScheme === 'pkcs1') {
padding = constants.RSA_PKCS1_PADDING;
}
if (usePublic) {
// openssl don't support oaep padding for public decrypt
if (padding === constants.RSA_PKCS1_OAEP_PADDING) {
return jsEngine.decrypt(buffer, usePublic);
}
return crypto.publicDecrypt({
key: options.rsaUtils.exportKey('public'),
padding: padding
padding: constants.RSA_PKCS1_PADDING
}, buffer);
} else {
var padding = constants.RSA_PKCS1_OAEP_PADDING;
if (options.encryptionScheme === 'pkcs1') {
padding = constants.RSA_PKCS1_PADDING;
}
return crypto.privateDecrypt({

@@ -48,0 +42,0 @@ key: options.rsaUtils.exportKey('private'),

var BigInteger = require('../libs/jsbn.js');
var schemes = require('../schemes/schemes.js');
module.exports = function (keyPair, options) {
var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options);
return {
encrypt: function (buffer, usePrivate) {
var m = new BigInteger(keyPair.encryptionScheme.encPad(buffer));
var c = usePrivate ? keyPair.$doPrivate(m) : keyPair.$doPublic(m);
var m, c;
if (usePrivate) {
m = new BigInteger(pkcs1Scheme.encPad(buffer, {type: 1}));
c = keyPair.$doPrivate(m);
} else {
m = new BigInteger(keyPair.encryptionScheme.encPad(buffer));
c = keyPair.$doPublic(m);
}
return c.toBuffer(keyPair.encryptedDataLength);

@@ -12,7 +21,13 @@ },

decrypt: function (buffer, usePublic) {
var c = new BigInteger(buffer);
var m = usePublic ? keyPair.$doPublic(c) : keyPair.$doPrivate(c);
return keyPair.encryptionScheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength));
var m, c = new BigInteger(buffer);
if (usePublic) {
m = keyPair.$doPublic(c);
return pkcs1Scheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength), {type: 1});
} else {
m = keyPair.$doPrivate(c);
return keyPair.encryptionScheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength));
}
}
};
};

@@ -5,3 +5,3 @@ var crypto = require('crypto');

module.exports = function (keyPair, options) {
var jsEngine = require('./js.js')(keyPair);
var jsEngine = require('./js.js')(keyPair, options);

@@ -8,0 +8,0 @@ return {

@@ -42,7 +42,9 @@ /**

* Pad input Buffer to encryptedDataLength bytes, and return new Buffer
* alg: PKCS#1 (type 2, random)
* alg: PKCS#1
* @param buffer
* @returns {Buffer}
*/
Scheme.prototype.encPad = function (buffer) {
Scheme.prototype.encPad = function (buffer, options) {
options = options || {};
var filled;
if (buffer.length > this.key.maxMessageLength) {

@@ -52,19 +54,24 @@ throw new Error("Message too long for RSA (n=" + this.key.encryptedDataLength + ", l=" + buffer.length + ")");

// TODO: make n-length buffer
var ba = Array.prototype.slice.call(buffer, 0);
if (options.type === 1) {
filled = new Buffer(this.key.encryptedDataLength - buffer.length - 1);
filled.fill(0xff, 0, filled.length - 1);
filled[0] = 1;
filled[filled.length - 1] = 0;
// random padding
ba.unshift(0);
var rand = crypt.randomBytes(this.key.encryptedDataLength - ba.length - 2);
for (var i = 0; i < rand.length; i++) {
var r = rand[i];
while (r === 0) { // non-zero only
r = crypt.randomBytes(1)[0];
return Buffer.concat([filled, buffer]);
} else {
filled = new Buffer(this.key.encryptedDataLength - buffer.length);
filled[0] = 0;
filled[1] = 2;
var rand = crypt.randomBytes(filled.length - 3);
for (var i = 0; i < rand.length; i++) {
var r = rand[i];
while (r === 0) { // non-zero only
r = crypt.randomBytes(1)[0];
}
filled[i + 2] = r;
}
ba.unshift(r);
filled[filled.length - 1] = 0;
return Buffer.concat([filled, buffer]);
}
ba.unshift(2);
ba.unshift(0);
return ba;
};

@@ -78,28 +85,32 @@

*/
Scheme.prototype.encUnPad = function (buffer) {
//var buffer = buffer.toByteArray();
Scheme.prototype.encUnPad = function (buffer, options) {
options = options || {};
var i = 0;
while (i < buffer.length && buffer[i] === 0) {
++i;
}
if (buffer.length - i != this.key.encryptedDataLength - 1 || buffer[i] != 2) {
if (buffer.length < 4) {
return null;
}
++i;
while (buffer[i] !== 0) {
if (++i >= buffer.length) {
if (options.type === 1) {
if (buffer[0] !== 0 && buffer[1] !== 1) {
return null;
}
i = 3;
while (buffer[i] !== 0) {
if (buffer[i] != 0xFF || ++i >= buffer.length) {
return null;
}
}
} else {
if (buffer[0] !== 0 && buffer[1] !== 2) {
return null;
}
i = 3;
while (buffer[i] !== 0) {
if (++i >= buffer.length) {
return null;
}
}
}
var c = 0;
var res = new Buffer(buffer.length - i - 1);
while (++i < buffer.length) {
res[c++] = buffer[i] & 255;
}
return res;
return buffer.slice(i + 1, buffer.length);
};

@@ -106,0 +117,0 @@

@@ -10,3 +10,3 @@ /**

describe("NodeRSA", function(){
describe("NodeRSA", function () {
var keySizes = [

@@ -51,7 +51,7 @@ {b: 512, e: 3},

"json object": {
data: {str: "string", arr: ["a","r","r", "a", "y", true, "⑨"], int: 42, nested: {key: {key: 1}}},
data: {str: "string", arr: ["a", "r", "r", "a", "y", true, "⑨"], int: 42, nested: {key: {key: 1}}},
encoding: "json"
},
"json array": {
data: [1,2,3,4,5,6,7,8,9,[10,11,12,[13],14,15,[16,17,[18]]]],
data: [1, 2, 3, 4, 5, 6, 7, 8, 9, [10, 11, 12, [13], 14, 15, [16, 17, [18]]]],
encoding: "json"

@@ -65,3 +65,3 @@ }

describe("Setup options", function(){
describe("Setup options", function () {
it("should use browser environment", function () {

@@ -147,3 +147,3 @@ assert.equal((new NodeRSA(null, {environment: 'browser'})).$options.environment, 'browser');

assert.throw(function(){
assert.throw(function () {
key.setOptions({

@@ -157,4 +157,4 @@ environment: 'browser',

describe("Work with keys", function() {
describe("Generating keys", function() {
describe("Work with keys", function () {
describe("Generating keys", function () {
for (var size in keySizes) {

@@ -174,46 +174,46 @@ (function (size) {

describe("Imprt/Export keys", function(){
var privateKeyPKCS1 = "-----BEGIN RSA PRIVATE KEY-----\n"+
"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\n"+
describe("Imprt/Export keys", function () {
var privateKeyPKCS1 = "-----BEGIN RSA PRIVATE KEY-----\n" +
"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\n" +
"-----END RSA PRIVATE KEY-----";
var publicKeyPKCS8 = "-----BEGIN PUBLIC KEY-----\n"+
"MIIBYjANBgkqhkiG9w0BAQEFAAOCAU8AMIIBSgKCAUEAsE1edyfToZRv6cFOkB0t\n"+
"AJ5qJor4YF5CccJAL0fS/o1Yk10VSXH4Xx4peSJgYQKkO0HqO1hAz6k9dFQB4U1C\n"+
"nWtRjtNEcIfycqrZrhu6you5syb6ScV3Zu/9bm7/DyaLlx/gJhUPR1OxOzaqsEvl\n"+
"u7hbDhNLIYo1zKFb/aUBbD6+UcaGxH2BfFNdzVAtVSVpc/s2Y3sboMN7rByUj793\n"+
"7iQlaMINvVjyasynYuzHNw6ZRP9JP9fwxrCyaxnTPWxVl0qvVaQO2+TtFMtDXH2O\n"+
"VZtWWeLHAL8cildw0G+u2qVqTqIGEwNyJlsAHykaPFAMW0xLueumrSlB+JUJPrRv\n"+
"vw4nBCd4GOrNSlPCE/xlk1Cb8JaICTLvDUcYc3ZqL3jqAueBhkpw2uCz8xVJeOA1\n"+
"KY4kQIIx8JEBsAYzgyP2iy0CAwEAAQ==\n"+
var publicKeyPKCS8 = "-----BEGIN PUBLIC KEY-----\n" +
"MIIBYjANBgkqhkiG9w0BAQEFAAOCAU8AMIIBSgKCAUEAsE1edyfToZRv6cFOkB0t\n" +
"AJ5qJor4YF5CccJAL0fS/o1Yk10VSXH4Xx4peSJgYQKkO0HqO1hAz6k9dFQB4U1C\n" +
"nWtRjtNEcIfycqrZrhu6you5syb6ScV3Zu/9bm7/DyaLlx/gJhUPR1OxOzaqsEvl\n" +
"u7hbDhNLIYo1zKFb/aUBbD6+UcaGxH2BfFNdzVAtVSVpc/s2Y3sboMN7rByUj793\n" +
"7iQlaMINvVjyasynYuzHNw6ZRP9JP9fwxrCyaxnTPWxVl0qvVaQO2+TtFMtDXH2O\n" +
"VZtWWeLHAL8cildw0G+u2qVqTqIGEwNyJlsAHykaPFAMW0xLueumrSlB+JUJPrRv\n" +
"vw4nBCd4GOrNSlPCE/xlk1Cb8JaICTLvDUcYc3ZqL3jqAueBhkpw2uCz8xVJeOA1\n" +
"KY4kQIIx8JEBsAYzgyP2iy0CAwEAAQ==\n" +
"-----END PUBLIC KEY-----";

@@ -224,16 +224,16 @@

var fileKeyPKCS1 = "-----BEGIN RSA PRIVATE KEY-----\n"+
"MIICXAIBAAKBgQCCdY+EpDC/vPa335l751SBM8d5Lf4z4QZX4bc+DqTY9zVY/rmP\n"+
"GbTkCueKnIKApuOGMXJOaCwNH9wUftNt7T0foEwjl16uIC8m4hwSjjNL5TKqMVey\n"+
"Syv04oBuidv76u5yNiLC4J85lbmW3WAyYkTCbm/VJZAXNJuqCm7AVWmQMQIDAQAB\n"+
"AoGAEYR3oPfrE9PrzQTZNyn4zuCFCGCEobK1h1dno42T1Q5cu3Z4tB5fi79rF9Gs\n"+
"NFo0cvBwyNZ0E88TXi0pdrlEW6mdPgQFd3CFxrOgKt9AGpOtI1zzVOb1Uddywq/m\n"+
"WBPyETwEKzq7lC2nAcMUr0rlFrrDmUT2dafHeuWnFMZ/1YECQQDCtftsH9/prbgu\n"+
"Q4F2lOWsLz96aix/jnI8FhBmukKmfLMXjCZYYv+Dsr8TIl/iriGqcSgGkBHHoGe1\n"+
"nmLUZ4EHAkEAq4YcB8T9DLIYUeaS+JRWwLOejU6/rYdgxBIaGn2m0Ldp/z7lLM7g\n"+
"b0H5Al+7POajkAdnDclBDhyxqInHO4VvBwJBAJ25jNEpgNhqQKg5RsYoF2RDYchn\n"+
"+WPan+7McLzGZPc4TFrmzKkMiK7GPMHjNokJRXwr7aBjVAPBjEEy7BvjPEECQFOJ\n"+
"4rcKAzEewGeLREObg9Eg6nTqSMLMb52vL1V9ozR+UDrHuDilnXuyhwPX+kqEDl+E\n"+
"q3V0cqHb6c8rI4TizRsCQANIyhoJ33ughNzbCIknkMPKtgvLOUARnbya/bkfRexL\n"+
"icyYzXPNuqZDY8JZQHlshN8cCcZcYjGPYYscd2LKB6o=\n"+
var fileKeyPKCS1 = "-----BEGIN RSA PRIVATE KEY-----\n" +
"MIICXAIBAAKBgQCCdY+EpDC/vPa335l751SBM8d5Lf4z4QZX4bc+DqTY9zVY/rmP\n" +
"GbTkCueKnIKApuOGMXJOaCwNH9wUftNt7T0foEwjl16uIC8m4hwSjjNL5TKqMVey\n" +
"Syv04oBuidv76u5yNiLC4J85lbmW3WAyYkTCbm/VJZAXNJuqCm7AVWmQMQIDAQAB\n" +
"AoGAEYR3oPfrE9PrzQTZNyn4zuCFCGCEobK1h1dno42T1Q5cu3Z4tB5fi79rF9Gs\n" +
"NFo0cvBwyNZ0E88TXi0pdrlEW6mdPgQFd3CFxrOgKt9AGpOtI1zzVOb1Uddywq/m\n" +
"WBPyETwEKzq7lC2nAcMUr0rlFrrDmUT2dafHeuWnFMZ/1YECQQDCtftsH9/prbgu\n" +
"Q4F2lOWsLz96aix/jnI8FhBmukKmfLMXjCZYYv+Dsr8TIl/iriGqcSgGkBHHoGe1\n" +
"nmLUZ4EHAkEAq4YcB8T9DLIYUeaS+JRWwLOejU6/rYdgxBIaGn2m0Ldp/z7lLM7g\n" +
"b0H5Al+7POajkAdnDclBDhyxqInHO4VvBwJBAJ25jNEpgNhqQKg5RsYoF2RDYchn\n" +
"+WPan+7McLzGZPc4TFrmzKkMiK7GPMHjNokJRXwr7aBjVAPBjEEy7BvjPEECQFOJ\n" +
"4rcKAzEewGeLREObg9Eg6nTqSMLMb52vL1V9ozR+UDrHuDilnXuyhwPX+kqEDl+E\n" +
"q3V0cqHb6c8rI4TizRsCQANIyhoJ33ughNzbCIknkMPKtgvLOUARnbya/bkfRexL\n" +
"icyYzXPNuqZDY8JZQHlshN8cCcZcYjGPYYscd2LKB6o=\n" +
"-----END RSA PRIVATE KEY-----";

@@ -309,4 +309,4 @@ var keysFolder = __dirname + '/keys/';

for(var format in keys_formats) {
(function(format) {
for (var format in keys_formats) {
(function (format) {
var options = keys_formats[format];

@@ -341,12 +341,20 @@

describe("Bad cases", function () {
it("not public key", function(){
it("not public key", function () {
var key = new NodeRSA();
assert.throw(function(){ key.exportKey(); }, Error, "It is not private key");
assert.throw(function(){ key.exportKey('public'); }, Error, "It is not public key");
assert.throw(function () {
key.exportKey();
}, Error, "It is not private key");
assert.throw(function () {
key.exportKey('public');
}, Error, "It is not public key");
});
it("not private key", function(){
it("not private key", function () {
var key = new NodeRSA(publicKeyPKCS8);
assert.throw(function(){ key.exportKey(); }, Error, "It is not private key");
assert.doesNotThrow(function(){ key.exportKey('public'); }, Error, "It is not public key");
assert.throw(function () {
key.exportKey();
}, Error, "It is not private key");
assert.doesNotThrow(function () {
key.exportKey('public');
}, Error, "It is not public key");
});

@@ -392,27 +400,3 @@ });

for (var i in dataBundle) {
(function (i) {
var key = null;
var suit = dataBundle[i];
it("`encryptPrivate()` should encrypt " + i, function () {
key = new NodeRSA(generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey(), {
environment: env,
encryptionScheme: scheme
});
encrypted[i] = key.encryptPrivate(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`decryptPublic()` should decrypt " + i, function () {
decrypted[i] = key.decryptPublic(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
});

@@ -443,2 +427,31 @@

}
describe("Environment: " + env + ". encryptPrivate & decryptPublic", function () {
var encrypted = {};
var decrypted = {};
for (var i in dataBundle) {
(function (i) {
var key = null;
var suit = dataBundle[i];
it("`encryptPrivate()` should encrypt " + i, function () {
key = new NodeRSA(generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey(), {
environment: env
});
encrypted[i] = key.encryptPrivate(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`decryptPublic()` should decrypt " + i, function () {
decrypted[i] = key.decryptPublic(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
});
})(environments[env]);

@@ -448,121 +461,129 @@ }

describe("Compatibility of different environments", function () {
var encrypted = {};
var decrypted = {};
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
for (var scheme_i in encryptSchemes) {
(function (scheme) {
var encrypted = {};
var decrypted = {};
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
it("`encrypt()` by browser" + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {environment: 'browser'});
key2 = new NodeRSA(key, {environment: 'node'});
encrypted[i] = key1.encrypt(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("Encryption scheme: " + scheme + " `encrypt()` by browser " + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {
environment: 'browser',
encryptionScheme: scheme
});
key2 = new NodeRSA(key, {
environment: 'node',
encryptionScheme: scheme
});
encrypted[i] = key1.encrypt(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`decrypt()` by node" + i, function () {
decrypted[i] = key2.decrypt(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
it("Encryption scheme: " + scheme + " `decrypt()` by node " + i, function () {
decrypted[i] = key2.decrypt(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
var encrypted = {};
var decrypted = {};
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
it("`encryptPrivate()` by browser " + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {
environment: 'browser',
encryptionScheme: 'pkcs1'
});
key2 = new NodeRSA(key, {
environment: 'node',
encryptionScheme: 'pkcs1'
});
encrypted[i] = key1.encryptPrivate(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("Encryption scheme: " + scheme + " `encrypt()` by node " + i + ". Scheme", function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {
environment: 'node',
encryptionScheme: scheme
});
key2 = new NodeRSA(key, {
environment: 'browser',
encryptionScheme: scheme
});
encrypted[i] = key1.encrypt(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`decryptPublic()` by node " + i, function () {
decrypted[i] = key2.decryptPublic(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
it("Encryption scheme: " + scheme + " `decrypt()` by browser " + i, function () {
decrypted[i] = key2.decrypt(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
})(encryptSchemes[scheme_i]);
}
var encrypted = {};
var decrypted = {};
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
describe("encryptPrivate & decryptPublic", function () {
var encrypted = {};
var decrypted = {};
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
it("`encrypt()` by node" + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {environment: 'node'});
key2 = new NodeRSA(key, {environment: 'browser'});
encrypted[i] = key1.encrypt(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`encryptPrivate()` by browser " + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {environment: 'browser'});
key2 = new NodeRSA(key, {environment: 'node'});
encrypted[i] = key1.encryptPrivate(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`decrypt()` by browser" + i, function () {
decrypted[i] = key2.decrypt(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
it("`decryptPublic()` by node " + i, function () {
decrypted[i] = key2.decryptPublic(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
for (var i in dataBundle) {
(function (i) {
var key1 = null;
var key2 = null;
var suit = dataBundle[i];
it("`encryptPrivate()` by node " + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {
environment: 'browser',
encryptionScheme: 'pkcs1'
it("`encryptPrivate()` by node " + i, function () {
var key = generatedKeys[Math.round(Math.random() * 1000) % generatedKeys.length].exportKey();
key1 = new NodeRSA(key, {environment: 'browser'});
key2 = new NodeRSA(key, {environment: 'node'});
encrypted[i] = key1.encryptPrivate(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
key2 = new NodeRSA(key, {
environment: 'node',
encryptionScheme: 'pkcs1'
it("`decryptPublic()` by browser " + i, function () {
decrypted[i] = key2.decryptPublic(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
encrypted[i] = key1.encryptPrivate(suit.data);
assert(Buffer.isBuffer(encrypted[i]));
assert(encrypted[i].length > 0);
});
it("`decryptPublic()` by browser " + i, function () {
decrypted[i] = key2.decryptPublic(encrypted[i], _.isArray(suit.encoding) ? suit.encoding[0] : suit.encoding);
if (Buffer.isBuffer(decrypted[i])) {
assert.equal(suit.data.toString('hex'), decrypted[i].toString('hex'));
} else {
assert(_.isEqual(suit.data, decrypted[i]));
}
});
})(i);
}
})(i);
}
});
});

@@ -582,3 +603,3 @@ });

(function (env) {
describe("Good cases" + (envs.length > 1 ? " in " + env + " environment" : ""), function () {
describe("Good cases " + (envs.length > 1 ? " in " + env + " environment" : ""), function () {
var signed = {};

@@ -601,3 +622,3 @@ var key = null;

it("should verify " + i, function () {
if(!key.verify(suit.data, signed[i])) {
if (!key.verify(suit.data, signed[i])) {
key.verify(suit.data, signed[i]);

@@ -618,3 +639,3 @@ }

var signed = key.sign('data');
if(!key.verify('data', signed)) {
if (!key.verify('data', signed)) {
key.verify('data', signed);

@@ -621,0 +642,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc