initial commit (wip)
This commit is contained in:
commit
a5f2365761
153
README.md
Normal file
153
README.md
Normal file
@ -0,0 +1,153 @@
|
||||
# Keypairs CLI
|
||||
|
||||
The most useful and easy-to-use crypto cli on the planet
|
||||
(because `openssl` is confusing).
|
||||
|
||||
* [x] Universal Standards-based Crypto Support:
|
||||
* [x] RSA (2048, 3072, 4096, 8192)
|
||||
* [x] EC (NIST ECDSA) P-256 (prime256v1, secp256r1), P-384 (secp384r1)
|
||||
* [x] Supported Encodings: PEM, JSON
|
||||
* [x] Private Key Formats: PKCS1, SEC1, PKCS8, JWK, OpenSSH
|
||||
* [x] Public Key Formats: PKCS1, PKIX (SPKI), SSH
|
||||
* [x] Create JWT tokens
|
||||
* [x] Sign JWT/JWS claims/tokens/payloads
|
||||
* [x] Verify JWT/JWS tokens/json
|
||||
|
||||
# Install
|
||||
|
||||
You must have [node.js](https://nodejs.org) installed.
|
||||
|
||||
```bash
|
||||
npm install --global keypairs-cli
|
||||
```
|
||||
|
||||
# Usage
|
||||
|
||||
Guess and check.
|
||||
|
||||
The keypairs CLI is pretty fuzzy. **If you just type at it, it'll probably work.**
|
||||
|
||||
That said, the fuzzy behavior is _not_ API-stable and is subject to change,
|
||||
so you should only script to the documented syntax. ;)
|
||||
|
||||
# Overview
|
||||
|
||||
* Generate: `keypairs gen`
|
||||
* Convert: `keypairs ./priv.pem`
|
||||
* Sign: `keypairs ./priv.pem sign https://example.com/ '{"sub":"jon@example.com"}'`
|
||||
* Verify: `keypairs verify 'xxxxx.yyyyy.zzzzz'`
|
||||
|
||||
## Generate a New Key
|
||||
|
||||
No arguments - generates a universally compatible key of more-than-sufficient entropy.
|
||||
|
||||
```bash
|
||||
keypairs gen
|
||||
```
|
||||
|
||||
Generate an ecdsa key:
|
||||
|
||||
```bash
|
||||
keypairs gen ec P-256
|
||||
```
|
||||
|
||||
Generate an RSA key:
|
||||
|
||||
```bash
|
||||
keypairs gen rsa 2048
|
||||
```
|
||||
|
||||
## Parse/Convert an existing key
|
||||
|
||||
```bash
|
||||
keypairs ./priv.pem
|
||||
```
|
||||
|
||||
```bash
|
||||
keypairs '{"kty":"EC",...}'
|
||||
```
|
||||
|
||||
```bash
|
||||
keypairs ./priv.jwk.json
|
||||
```
|
||||
|
||||
**Syntax**: `keypairs <in> [priv-out opts...] [pub-out opts...]`
|
||||
|
||||
```bash
|
||||
keypairs <inkey> [[encoding|scheme] [priv-out]] [[encoding|scheme] [pub-out]] [public|private]
|
||||
```
|
||||
|
||||
**Note**: If you specify a private _and_ a public key, and you want to specify the schema/encoding
|
||||
of the public key, you must also specify the scheme and encoding of the public key. Order matters.
|
||||
Private keys come first.
|
||||
|
||||
JWK Keypair to PEM-encoded Private and Public keys:
|
||||
|
||||
```bash
|
||||
keypairs ./priv.json pem pkcs1 ./priv.pem pem spki ./pub.pem
|
||||
keypairs ./priv.json pem ./priv.pem ssh ./pub.json
|
||||
keypairs ./priv.json pkcs8 ./priv.pem spki ./pub.json
|
||||
```
|
||||
|
||||
PEM Keypair to JSON-encoded JWK (Public Key Only):
|
||||
|
||||
```bash
|
||||
keypairs ./priv.pem jwk ./priv.pem public
|
||||
keypairs ./priv.pem json ./priv.pem public
|
||||
```
|
||||
|
||||
Generic PEM to JWK:
|
||||
|
||||
```bash
|
||||
keypairs priv.pem priv.jwk.json
|
||||
```
|
||||
|
||||
```bash
|
||||
keypairs priv.pem priv.jwk.json pub.jwk.json
|
||||
```
|
||||
|
||||
```bash
|
||||
keypairs priv.pem pub.jwk.json public
|
||||
```
|
||||
|
||||
```bash
|
||||
# fails if the input is public
|
||||
keypairs priv.pem priv.jwk.json private
|
||||
```
|
||||
|
||||
|
||||
Generic JWK to PEM:
|
||||
|
||||
```bash
|
||||
keypairs '{"kty":"EC",...}' priv.pem
|
||||
```
|
||||
|
||||
```bash
|
||||
keypairs priv.json priv.pem
|
||||
```
|
||||
|
||||
## Sign a Token (JWT)
|
||||
|
||||
<!-- or Payload (JWS) -->
|
||||
|
||||
```bash
|
||||
keypairs ./priv.pem sign https://example.com/ '{"sub":"jon@example.com"}' 1h
|
||||
```
|
||||
|
||||
## Verify a JWT (Token)
|
||||
|
||||
<!-- or JWS (Payload) -->
|
||||
|
||||
Verify a JWT based on its issuer
|
||||
|
||||
```bash
|
||||
keypairs verify 'xxx.yyy.zzz'
|
||||
```
|
||||
|
||||
<!--
|
||||
Verify using a specific key
|
||||
|
||||
```bash
|
||||
keypairs priv.pem verify 'xxx.yyy.zzz' nofetch
|
||||
```
|
||||
-->
|
4
bin/keypairs-cli.js
Executable file
4
bin/keypairs-cli.js
Executable file
@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env node
|
||||
'use strict';
|
||||
|
||||
require("keypairs/bin/keypairs.js");
|
33
package.json
Normal file
33
package.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "keypairs-cli",
|
||||
"version": "1.2.0",
|
||||
"description": "CLI for Keypairs.js",
|
||||
"homepage": "https://git.coolaj86.com/coolaj86/keypairs-cli.js",
|
||||
"main": "bin/keypairs-cli.js",
|
||||
"files": [ "CLI.md", "bin/keypairs.js" ],
|
||||
"scripts": {
|
||||
"test": "node test.js"
|
||||
},
|
||||
"bin": {
|
||||
"keypairs": "bin/keypairs-cli.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.coolaj86.com/coolaj86/keypairs-cli.js"
|
||||
},
|
||||
"keywords": [
|
||||
"CLI",
|
||||
"commandline",
|
||||
"bash",
|
||||
"EC",
|
||||
"RSA",
|
||||
"ECDSA",
|
||||
"PEM",
|
||||
"JWK"
|
||||
],
|
||||
"author": "AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/)",
|
||||
"license": "MPL-2.0",
|
||||
"dependencies": {
|
||||
"keypairs": "1.x",
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user