Documentation ¶
Overview ¶
Package nacl is a pure Go implementation of the NaCL cryptography library.
Compared with the implementation in golang.org/x/crypto/nacl, this library offers all of the API's present in NaCL, as well as some utilities for generating and loading keys and nonces, and encrypting messages.
NaCl's goal is to provide all of the core operations needed to build higher-level cryptographic tools, as well as to demonstrate how to implement these tools in Go.
Compared with the equivalent packages in the Go standard library and x/crypto package, we replace some function calls with their equivalents in this package, and make more use of return values (versus writing to a byte array specified at stdin). Most functions should be compatible with their C/C++ counterparts in the library here: https://nacl.cr.yp.to/. In many cases the tests are ported directly to this library.
Index ¶
Examples ¶
Constants ¶
const HashSize = sha512.Size
HashSize is the size, in bytes, of the result of calling Hash.
const KeySize = 32
Size of a public or private key in bytes.
const NonceSize = 24
Size of a nonce in bytes.
const Version = "0.7"
The software version.
Variables ¶
This section is empty.
Functions ¶
func Hash ¶
Hash hashes a message m.
The crypto_hash function is designed to be usable as a strong component of DSA, RSA-PSS, key derivation, hash-based message-authentication codes, hash-based ciphers, and various other common applications. "Strong" means that the security of these applications, when instantiated with crypto_hash, is the same as the security of the applications against generic attacks. In particular, the crypto_hash function is designed to make finding collisions difficult.
Hash is currently an implementation of SHA-512.
func Load64 ¶
Load decodes a 128-byte hex string into a Key. A hex key is suitable for representation in a configuration file. You can generate one by running nacl/sign.GenerateKey(nil).
func Verify ¶
Verify returns true if and only if a and b have equal contents. The time taken is a function of the length of the slices and is independent of the contents. If an attacker controls the length of a, they may be able to determine the length of b (and vice versa).
Types ¶
type Key ¶
Key represents a private or public key for use in encryption or authentication. A key should be random bytes and *not* simply 32 characters in the visible ASCII set.
func Load ¶
Load decodes a 64-byte hex string into a Key. A hex key is suitable for representation in a configuration file. You can generate one by running "openssl rand -hex 32".
Example ¶
package main import ( "encoding/base64" "fmt" "github.com/kevinburke/nacl" ) func main() { // Don't use this key for anything real. // You can generate one by running openssl rand -hex 32. key, err := nacl.Load("6368616e676520746869732070617373776f726420746f206120736563726574") if err != nil { panic(err) } fmt.Println(base64.StdEncoding.EncodeToString(key[:])) }
Output: Y2hhbmdlIHRoaXMgcGFzc3dvcmQgdG8gYSBzZWNyZXQ=
type Nonce ¶
Nonce is an arbitrary value that should be used only once per (sender, receiver) pair. For example, the lexicographically smaller public key can use nonce 1 for its first message to the other key, nonce 3 for its second message, nonce 5 for its third message, etc., while the lexicographically larger public key uses nonce 2 for its first message to the other key, nonce 4 for its second message, nonce 6 for its third message, etc. Nonces are long enough that randomly generated nonces have negligible risk of collision.
Directories ¶
Path | Synopsis |
---|---|
Package auth authenticates a message m using a secret key k.
|
Package auth authenticates a message m using a secret key k. |
Package box authenticates and encrypts messages using public-key cryptography.
|
Package box authenticates and encrypts messages using public-key cryptography. |
cmd
|
|
generate-sign-keypair
generate-sign-keypair generates cryptographically secure public and private keys and prints hex encoded representations to stdout.
|
generate-sign-keypair generates cryptographically secure public and private keys and prints hex encoded representations to stdout. |
internal
|
|
subtle
Package subtle implements functions that are often useful in cryptographic code but require careful thought to use correctly.
|
Package subtle implements functions that are often useful in cryptographic code but require careful thought to use correctly. |
Package onetimeauth provides primitives for secret-key, single-message authentication.
|
Package onetimeauth provides primitives for secret-key, single-message authentication. |
Package randombytes implements helpers for reading random data.
|
Package randombytes implements helpers for reading random data. |
Package scalarmult provides an implementation of scalar multiplication.
|
Package scalarmult provides an implementation of scalar multiplication. |
Package secretbox encrypts and authenticates small messages.
|
Package secretbox encrypts and authenticates small messages. |
Package sign can be used to verify messages were signed with a given secret key.
|
Package sign can be used to verify messages were signed with a given secret key. |