diff --git a/lib/base64.js b/lib/base64.js index 90b4d448..aae4104c 100644 --- a/lib/base64.js +++ b/lib/base64.js @@ -71,3 +71,43 @@ exports.b64toBA = function (s) { } return a; } + +exports.b64to16 = function(s) { + var ret = ""; + var i; + var k = 0; + var slop; + for (i = 0; i < s.length; ++i) + { + if (s.charAt(i) == "=") break; + v = b64map.indexOf(s.charAt(i)); + if (v < 0) continue; + if (k == 0) + { + ret += jsbn.int2char(v >> 2); + slop = v & 3; + k = 1; + } + else if (k == 1) + { + ret += jsbn.int2char((slop << 2) | (v >> 4)); + slop = v & 0xf; + k = 2; + } + else if (k == 2) + { + ret += jsb.int2char(slop); + ret += jsbn.int2char(v >> 2); + slop = v & 3; + k = 3; + } + else + { + ret += jsbn.int2char((slop << 2) | (v >> 4)); + ret += jsbn.int2char(v & 0xf); + k = 0; + } + } + if (k == 1) ret += jsbn.int2char(slop << 2); + return ret; +} \ No newline at end of file diff --git a/lib/rsa.js b/lib/rsa.js index 00f26fbc..71d9814b 100644 --- a/lib/rsa.js +++ b/lib/rsa.js @@ -780,5 +780,5 @@ RSAKey.prototype.readPrivateKeyFromPEMString = _rsapem_readPrivateKeyFromPEMStri -exports.RSAKey = RSAKey; + exports.RSAKey = RSAKey; exports.Math = Math; // so we can seed the rng. \ No newline at end of file diff --git a/rsa.js b/rsa.js index d484c4f1..4ef90e1e 100644 --- a/rsa.js +++ b/rsa.js @@ -4,7 +4,7 @@ if (typeof define !== 'function') { define(function(require) { var rsa = require('./lib/rsa'); - + var base64 = require('./lib/base64') var my = {}; my.generate = function(passphrase, options, callback) { @@ -29,7 +29,21 @@ define(function(require) { return key; } + my.publicKeyFromString = function(string) + { + var N = base64.b64to16(string.split("|")[0]); + var E = "03"; + var rsa = new rsa.RSAKey(); + rsa.setPublic(N, E); + return rsa + } + // Returns the ascii-armored version of the public key. + my.publicKeyString = function(rsakey) + { + pubkey = base64.hex2b64(rsakey.n.toString(16)); + return pubkey; + } return my; }); \ No newline at end of file diff --git a/tests/amd-rsa-test.js b/tests/amd-rsa-test.js index 8aa8c9c5..019d9564 100644 --- a/tests/amd-rsa-test.js +++ b/tests/amd-rsa-test.js @@ -20,7 +20,8 @@ test('Read Private RSA key', function(t) { console.log(data.toString()); var private = rsa.privateFromPEM(data.toString()); console.log(private); - + var public = rsa.publicKeyString(private); + console.log(public); t.end(); })