v1.2.1: fingerprint privkeys, doc priv parsing, update bin
This commit is contained in:
parent
29802c1af8
commit
7a1d0bbe76
11
README.md
11
README.md
@ -52,6 +52,10 @@ npm install -g ssh-to-jwk
|
||||
ssh-to-jwk ~/.ssh/id_rsa.pub
|
||||
```
|
||||
|
||||
```bash
|
||||
ssh-to-jwk ~/.ssh/id_rsa
|
||||
```
|
||||
|
||||
# Usage
|
||||
|
||||
You can also use it from JavaScript:
|
||||
@ -61,10 +65,13 @@ You can also use it from JavaScript:
|
||||
```js
|
||||
var fs = require('fs');
|
||||
var sshtojwk = require('ssh-to-jwk');
|
||||
var ssh;
|
||||
|
||||
var pub = fs.readFileSync("./id_rsa.pub");
|
||||
var ssh = sshtojwk.parse({ pub: pub });
|
||||
ssh = sshtojwk.parse({ pub: fs.readFileSync("./id_rsa.pub") });
|
||||
console.info(ssh.jwk);
|
||||
|
||||
// For OpenSSH PEMs only, use Rasha for standard RSA or Eckles for standard EC
|
||||
ssh = sshtojwk.parse({ pem: fs.readFileSync("./id_rsa") });
|
||||
console.info(ssh.jwk);
|
||||
```
|
||||
|
||||
|
@ -6,17 +6,27 @@ var path = require('path');
|
||||
var sshtojwk = require('../index.js');
|
||||
|
||||
var pubfile = process.argv[2];
|
||||
var pub = process.argv[3];
|
||||
|
||||
if (!pubfile) {
|
||||
pubfile = path.join(require('os').homedir(), '.ssh/id_rsa.pub');
|
||||
}
|
||||
|
||||
var buf = fs.readFileSync(pubfile);
|
||||
var pub = buf.toString('ascii');
|
||||
var ssh = sshtojwk.parse({ pub: pub });
|
||||
var txt = buf.toString('ascii');
|
||||
var opts = { public: 'public' === pub };
|
||||
var ssh;
|
||||
|
||||
if ('-' === txt[0]) {
|
||||
opts.pem = txt;
|
||||
} else {
|
||||
opts.pub = txt;
|
||||
}
|
||||
|
||||
ssh = sshtojwk.parse(opts);
|
||||
|
||||
// Finally! https://superuser.com/a/714195
|
||||
sshtojwk.fingerprint({ pub: pub }).then(function (fingerprint) {
|
||||
sshtojwk.fingerprint(ssh).then(function (fingerprint) {
|
||||
console.warn('The key fingerprint is:\n' + fingerprint + ' ' + ssh.comment);
|
||||
console.info(JSON.stringify(ssh.jwk, null, 2));
|
||||
});
|
||||
|
@ -5,7 +5,7 @@ var Enc = require('./encoding.js');
|
||||
var PEM = require('./pem.js');
|
||||
|
||||
SSH.parse = function (opts) {
|
||||
var pub = opts.pub || opts;
|
||||
var pub = opts.pem || opts.pub || opts;
|
||||
var ssh = SSH.parseBlock(pub);
|
||||
if ('OPENSSH PRIVATE KEY' === ssh.type) {
|
||||
ssh = SSH.parsePrivateElements(ssh);
|
||||
@ -57,6 +57,7 @@ SSH.parsePrivateElements = function (ssh) {
|
||||
var index = 0;
|
||||
var padlen = 0;
|
||||
var len;
|
||||
var pub;
|
||||
|
||||
// The last byte will be either
|
||||
// * a non-printable pad character
|
||||
@ -91,6 +92,7 @@ SSH.parsePrivateElements = function (ssh) {
|
||||
len = dv.getUint32(index, false);
|
||||
// throw away public key (it's in the private key)
|
||||
index += 4 + len;
|
||||
pub = ssh.bytes.slice(index - len, index);
|
||||
|
||||
// length of dummy checksum + private key + padding
|
||||
len = dv.getUint32(index, false) - padlen;
|
||||
@ -105,6 +107,7 @@ SSH.parsePrivateElements = function (ssh) {
|
||||
|
||||
// comment will exist, even if it's an empty string
|
||||
ssh.comment = Enc.bufToBin(ssh.elements.pop());
|
||||
ssh.bytes = pub;
|
||||
return ssh;
|
||||
};
|
||||
SSH.parseElements = function (buf) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ssh-to-jwk",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.1",
|
||||
"description": "💯 SSH to JWK in a lightweight, zero-dependency library.",
|
||||
"homepage": "https://git.coolaj86.com/coolaj86/ssh-to-jwk.js",
|
||||
"main": "index.js",
|
||||
|
Loading…
x
Reference in New Issue
Block a user