95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # SSH to JWK (for node.js)
 | |
| 
 | |
| A minimal library to parse an SSH public key (`id_rsa.pub`)
 | |
| and convert it into a public JWK.
 | |
| 
 | |
| Works for RSA and ECDSA public keys.
 | |
| 
 | |
| # Features
 | |
| 
 | |
| < 100 lines of code | <1kb gzipped | 1.8kb minified | 3.1kb with comments
 | |
| 
 | |
| * [x] SSH Public Keys ([RFC 4253](https://coolaj86.com/articles/the-ssh-public-key-format/))
 | |
|   * fingerprint
 | |
| * [x] OpenSSH Private Keys
 | |
| * [x] RSA
 | |
|   * 2048, 3072, 4096
 | |
| * [x] EC Public Keys
 | |
|   * P-256 (prime256v1, secp256r1)
 | |
|   * P-384 (secp384r1)
 | |
| * [x] Browser Version
 | |
|   * [Bluecrypt SSH to JWK](https://git.coolaj86.com/coolaj86/bluecrypt-ssh-to-jwk.js)
 | |
| 
 | |
| Note: Lines of code have increased by about 2x since adding private key support.
 | |
| 
 | |
| ### Need JWK to SSH? SSH to PEM?
 | |
| 
 | |
| Try one of these:
 | |
| 
 | |
| * [jwk-to-ssh.js](https://git.coolaj86.com/coolaj86/jwk-to-ssh.js) (RSA + EC)
 | |
| * [Eckles.js](https://git.coolaj86.com/coolaj86/eckles.js) (more EC utils)
 | |
| * [Rasha.js](https://git.coolaj86.com/coolaj86/eckles.js) (more RSA utils)
 | |
| 
 | |
| ### Need SSH Private Keys?
 | |
| 
 | |
| Many SSH private keys are just normal PEM files,
 | |
| so you can use Eckles or Rasha, as mentioned above.
 | |
| 
 | |
| As for the [OpenSSH-specific Private Keys](https://coolaj86.com/articles/the-openssh-private-key-format/),
 | |
| both EC and RSA are fully supported.
 | |
| 
 | |
| # CLI
 | |
| 
 | |
| You can install `ssh-to-jwk` and use it from command line:
 | |
| 
 | |
| ```bash
 | |
| npm install -g ssh-to-jwk
 | |
| ```
 | |
| 
 | |
| ```bash
 | |
| ssh-to-jwk ~/.ssh/id_rsa.pub
 | |
| ```
 | |
| 
 | |
| ```bash
 | |
| ssh-to-jwk ~/.ssh/id_rsa
 | |
| ```
 | |
| 
 | |
| # Usage
 | |
| 
 | |
| You can also use it from JavaScript:
 | |
| 
 | |
| **SSH to JWK**
 | |
| 
 | |
| ```js
 | |
| var fs = require('fs');
 | |
| var sshtojwk = require('ssh-to-jwk');
 | |
| var ssh;
 | |
| 
 | |
| 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);
 | |
| ```
 | |
| 
 | |
| **SSH Fingerprint**
 | |
| 
 | |
| ```js
 | |
| var fs = require('fs');
 | |
| var sshtojwk = require('ssh-to-jwk');
 | |
| var pub = fs.readFileSync("./id_rsa.pub");
 | |
| 
 | |
| sshtojwk.fingerprint({ pub: pub }).then(function (fingerprint) {
 | |
|   console.info(fingerprint);
 | |
|   // SHA256:yCB62vBVsOwqksgYwy/WDbaMF2PhPijAwcrlzmrxfko
 | |
| });
 | |
| ```
 | |
| 
 | |
| # Legal
 | |
| 
 | |
| [ssh-to-jwk.js](https://git.coolaj86.com/coolaj86/ssh-to-jwk.js) |
 | |
| MPL-2.0 |
 | |
| [Terms of Use](https://therootcompany.com/legal/#terms) |
 | |
| [Privacy Policy](https://therootcompany.com/legal/#privacy)
 |