UNPKG

3.39 kBJavaScriptView Raw
1var test = require('tape');
2var fs = require('fs');
3var constants = require('constants');
4var parseKeys = require('parse-asn1');
5var priv1024 = fs.readFileSync(__dirname + '/rsa.1024.priv');
6var rsa1024 = {
7 private: fs.readFileSync(__dirname + '/rsa.1024.priv'),
8 public: fs.readFileSync(__dirname + '/rsa.1024.pub')
9};
10var rsa1024 = {
11 private: fs.readFileSync(__dirname + '/rsa.1024.priv'),
12 public: fs.readFileSync(__dirname + '/rsa.1024.pub')
13};
14var rsa2028 = {
15 private: fs.readFileSync(__dirname + '/rsa.2028.priv'),
16 public: fs.readFileSync(__dirname + '/rsa.2028.pub')
17};
18var nonrsa1024 = {
19 private: fs.readFileSync(__dirname + '/1024.priv'),
20 public: fs.readFileSync(__dirname + '/1024.pub')
21};
22var nonrsa1024str = {
23 private: fs.readFileSync(__dirname + '/1024.priv').toString(),
24 public: fs.readFileSync(__dirname + '/1024.pub').toString()
25};
26var pass1024 = {
27 private: {
28 passphrase: 'fooo',
29 key:fs.readFileSync(__dirname + '/pass.1024.priv')
30 },
31 public: fs.readFileSync(__dirname + '/pass.1024.pub')
32};
33var pass2028 = {
34 private: {
35 passphrase: 'password',
36 key:fs.readFileSync(__dirname + '/rsa.pass.priv')
37 },
38 public: fs.readFileSync(__dirname + '/rsa.pass.pub')
39};
40
41var nodeCrypto = require('crypto');
42var myCrypto = require('../');
43function _testIt(keys, message, t) {
44 var pub = keys.public;
45 var priv = keys.private;
46 t.test(message.toString(), function (t) {
47 t.plan(4);
48 var myEnc = myCrypto.publicEncrypt(pub, message);
49 var nodeEnc = nodeCrypto.publicEncrypt(pub, message);
50 t.equals(myCrypto.privateDecrypt(priv, myEnc).toString('hex'), message.toString('hex'), 'my decrypter my message');
51 t.equals(myCrypto.privateDecrypt(priv, nodeEnc).toString('hex'), message.toString('hex'), 'my decrypter node\'s message');
52 t.equals(nodeCrypto.privateDecrypt(priv, myEnc).toString('hex'), message.toString('hex'), 'node decrypter my message');
53 t.equals(nodeCrypto.privateDecrypt(priv, nodeEnc).toString('hex'), message.toString('hex'), 'node decrypter node\'s message');
54 });
55}
56function testIt(keys, message, t) {
57 _testIt(keys, message, t);
58 _testIt(paddingObject(keys, constants.RSA_PKCS1_PADDING), Buffer.concat([message, new Buffer(' with RSA_PKCS1_PADDING')]), t);
59 var parsedKey = parseKeys(keys.public);
60 var k = parsedKey.modulus.byteLength();
61 var zBuf = new Buffer(k);
62 zBuf.fill(0);
63 var msg = Buffer.concat([zBuf, message, new Buffer(' with no padding')]).slice(-k);
64 _testIt(paddingObject(keys, constants.RSA_NO_PADDING), msg, t);
65}
66function paddingObject(keys, padding) {
67 return {
68 public: addPadding(keys.public, padding),
69 private: addPadding(keys.private, padding)
70 };
71}
72function addPadding(key, padding) {
73 if (typeof key === 'string' || Buffer.isBuffer(key)) {
74 return {
75 key: key,
76 padding: padding
77 };
78 }
79 var out = {
80 key: key.key,
81 padding:padding
82 };
83 if ('passphrase' in key) {
84 out.passphrase = key.passphrase;
85 }
86 return out;
87}
88function testRun(i) {
89 test('run ' + i, function (t) {
90 testIt(rsa1024, new Buffer('1024 keys'), t);
91 testIt(rsa2028, new Buffer('2028 keys'), t);
92 testIt(nonrsa1024, new Buffer('1024 keys non-rsa key'), t);
93 testIt(pass1024, new Buffer('1024 keys and password'), t);
94 testIt(nonrsa1024str, new Buffer('1024 keys non-rsa key as a string'), t);
95 testIt(pass2028, new Buffer('2028 rsa key with variant passwords'), t);
96 });
97}
98var i = 0;
99var num = 20;
100while (++i <= 20) {
101 testRun(i);
102}
\No newline at end of file