• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

nk/H30-Mar-2020-388295

.gitignoreH A D30-Mar-2020282 1612

.goreleaser.ymlH A D30-Mar-2020681 3932

.travis.ymlH A D30-Mar-2020667 3127

GOVERNANCE.mdH A D30-Mar-2020171 32

LICENSEH A D30-Mar-202011.1 KiB202169

MAINTAINERS.mdH A D30-Mar-2020164 64

README.mdH A D30-Mar-20203.8 KiB7346

TODO.mdH A D30-Mar-202076 63

crc16.goH A D30-Mar-20203.3 KiB7652

go.modH A D30-Mar-202096 42

go.sumH A D30-Mar-2020724 87

keypair.goH A D30-Mar-20202.9 KiB11879

main.goH A D30-Mar-20203.2 KiB10566

main_test.goH A D30-Mar-202018.3 KiB695577

public.goH A D30-Mar-20201.8 KiB6736

strkey.goH A D30-Mar-20208.6 KiB307208

README.md

1# NKEYS
2
3[![License Apache 2](https://img.shields.io/badge/License-Apache2-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
4[![ReportCard](http://goreportcard.com/badge/nats-io/nkeys)](http://goreportcard.com/report/nats-io/nkeys)
5[![Build Status](https://travis-ci.org/nats-io/nkeys.svg?branch=master)](http://travis-ci.org/nats-io/nkeys)
6[![GoDoc](http://godoc.org/github.com/nats-io/nkeys?status.svg)](http://godoc.org/github.com/nats-io/nkeys)
7[![Coverage Status](https://coveralls.io/repos/github/nats-io/nkeys/badge.svg?branch=master&service=github)](https://coveralls.io/github/nats-io/nkeys?branch=master)
8[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fnats-io%2Fnkeys.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fnats-io%2Fnkeys?ref=badge_shield)
9
10A public-key signature system based on [Ed25519](https://ed25519.cr.yp.to/) for the NATS ecosystem.
11
12## About
13
14The NATS ecosystem will be moving to [Ed25519](https://ed25519.cr.yp.to/) keys for identity, authentication and authorization for entities such as Accounts, Users, Servers and Clusters.
15
16Ed25519 is fast and resistant to side channel attacks. Generation of a seed key is all that is needed to be stored and kept safe, as the seed can generate both the public and private keys.
17
18The NATS system will utilize Ed25519 keys, meaning that NATS systems will never store or even have access to any private keys. Authentication will utilize a random challenge response mechanism.
19
20Dealing with 32 byte and 64 byte raw keys can be challenging. NKEYS is designed to formulate keys in a much friendlier fashion and references work done in cryptocurrencies, specifically [Stellar](https://www.stellar.org/).	Bitcoin and others used a form of Base58 (or Base58Check) to encode raw keys. Stellar utilized a more traditional Base32 with a CRC16 and a version or prefix byte. NKEYS utilizes a similar format where the prefix will be 1 byte for public and private keys and will be 2 bytes for seeds. The base32 encoding of these prefixes will yield friendly human readable prefixes, e.g. '**N**' = server, '**C**' = cluster, '**O**' = operator, '**A**' = account, and '**U**' = user. '**P**' is used for private keys. For seeds, the first encoded prefix is '**S**', and the second character will be the type for the public key, e.g. "**SU**" is a seed for a user key pair, "**SA**" is a seed for an account key pair.
21
22## Installation
23
24Use the `go` command:
25
26	$ go get github.com/nats-io/nkeys
27
28## nk - Command Line Utility
29
30Located under the nk [directory](https://github.com/nats-io/nkeys/tree/master/nk).
31
32## Basic API Usage
33```go
34
35// Create a new User KeyPair
36user, _ := nkeys.CreateUser()
37
38// Sign some data with a full key pair user.
39data := []byte("Hello World")
40sig, _ := user.Sign(data)
41
42// Verify the signature.
43err = user.Verify(data, sig)
44
45// Access the seed, the only thing that needs to be stored and kept safe.
46// seed = "SUAKYRHVIOREXV7EUZTBHUHL7NUMHPMAS7QMDU3GTIUWEI5LDNOXD43IZY"
47seed, _ := user.Seed()
48
49// Access the public key which can be shared.
50// publicKey = "UD466L6EBCM3YY5HEGHJANNTN4LSKTSUXTH7RILHCKEQMQHTBNLHJJXT"
51publicKey, _ := user.PublicKey()
52
53// Create a full User who can sign and verify from a private seed.
54user, _ = nkeys.FromSeed(seed)
55
56// Create a User who can only verify signatures via a public key.
57user, _ = nkeys.FromPublicKey(publicKey)
58
59// Create a User KeyPair with our own random data.
60var rawSeed [32]byte
61_, err := io.ReadFull(rand.Reader, rawSeed[:])  // Or some other random source.
62user2, _ := nkeys.FromRawSeed(PrefixByteUser, rawSeed)
63
64```
65
66## License
67
68Unless otherwise noted, the NATS source files are distributed
69under the Apache Version 2.0 license found in the LICENSE file.
70
71
72[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fnats-io%2Fnkeys.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fnats-io%2Fnkeys?ref=badge_large)
73