Cross-platform RSA & EC keypair generation, signing and verification - suitable for JWT, JOSE, and asymmetric cryptography.
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
AJ ONeal 88a0b05c2f update usage example pirms 3 gadiem
cmd/keypairs update usage example pirms 3 gadiem
examples update documented import path pirms 4 gadiem
fixtures friendlier error reporting pirms 5 gadiem
keyfetch transitioning to go1.15 PublicKey interface pirms 4 gadiem
keyserve transitioning to go1.15 PublicKey interface pirms 4 gadiem
.gitignore fix flag parsing pirms 4 gadiem
.goreleaser.yml add goreleaser pirms 4 gadiem
AUTHORS update doc links and author info pirms 4 gadiem
LICENSE add MIT license pirms 5 gadiem
README.md doc: update README and help pirms 4 gadiem
cli_test.sh add verify subcommand pirms 4 gadiem
doc.go update canonical import path pirms 4 gadiem
generate.go add verify subcommand pirms 4 gadiem
go.mod update canonical import path pirms 4 gadiem
jwk.go add verify subcommand pirms 4 gadiem
jws.go add verify subcommand pirms 4 gadiem
keypairs.go transitioning to go1.15 PublicKey interface pirms 4 gadiem
keypairs_test.go friendlier error reporting pirms 5 gadiem
marshal.go transitioning to go1.15 PublicKey interface pirms 4 gadiem
mock.go add verify subcommand pirms 4 gadiem
sign.go transitioning to go1.15 PublicKey interface pirms 4 gadiem
verify.go transitioning to go1.15 PublicKey interface pirms 4 gadiem

README.md

keypairs

A cross-platform Command Line Tool and Golang Library that works with RSA, ECDSA, PEM, DER, JWK, and the JOSE suite.

Keypairs CLI

Generates, signs, and verifies with NIST-strength asymmetric keys.

# Generate JSON Web Keys (JWKs)
keypairs gen > key.jwk.json 2> pub.jwk.json

# Generate PEM (or DER) Keys, by extension
keypairs gen --key key.pem --pub pub.pem

# Sign a payload
keypairs sign key.jwk.json --exp 1h '{ "sub": "me@example.com" }' > token.jwt 2> sig.jws

# Verify a signature
keypairs verify pub.jwk.json token.jwt

Cheat Sheet at https://webinstall.dev/keypairs.

Install

Mac, Linux:

curl -sS https://webinstall.dev/keypairs | bash

Windows 10:

curl.exe -A MS https://webinstall.dev/keypairs | powershell

Keypairs Go Library

JSON Web Key (JWK) support and type safety lightly placed over top of Go's crypto/ecdsa and crypto/rsa

Useful for JWT, JOSE, etc.

key, err := keypairs.ParsePrivateKey(bytesForJWKOrPEMOrDER)

pub, err := keypairs.ParsePublicKey(bytesForJWKOrPEMOrDER)

jwk, err := keypairs.MarshalJWKPublicKey(pub, time.Now().Add(2 * time.Day))

kid, err := keypairs.ThumbprintPublicKey(pub)

GoDoc API Documentation

See https://pkg.go.dev/git.rootprojects.org/root/keypairs

Philosophy

Go's standard library is great.

Go has excellent crytography support and provides wonderful primitives for dealing with them.

I prefer to stay as close to Go's crypto package as possible, just adding a light touch for JWT support and type safety.

Type Safety

crypto.PublicKey is a "marker interface", meaning that it is not typesafe!

go-keypairs defines type keypairs.PrivateKey interface { Public() crypto.PublicKey }, which is implemented by crypto/rsa and crypto/ecdsa (but not crypto/dsa, which we really don't care that much about).

Go1.15 will add [PublicKey.Equal(crypto.PublicKey)](https://github.com/golang/go/issues/21704), which will make it possible to remove the additional wrapper over PublicKey and use an interface instead.

Since there are no common methods between rsa.PublicKey and ecdsa.PublicKey, go-keypairs lightly wraps each to implement Thumbprint() string (part of the JOSE/JWK spec).

JSON Web Key (JWK) as a "codec"

Although there are many, many ways that JWKs could be interpreted (possibly why they haven't made it into the standard library), go-keypairs follows the basic pattern of encoding/x509 to Parse and Marshal only the most basic and most meaningful parts of a key.

I highly recommend that you use Thumbprint() for KeyID you also get the benefit of not losing information when encoding and decoding between the ASN.1, x509, PEM, and JWK formats.

LICENSE

Copyright (c) 2020-present AJ ONeal
Copyright (c) 2018-2019 Big Squid, Inc.

This work is licensed under the terms of the MIT license.
For a copy, see https://opensource.org/licenses/MIT.