Narrow pkg/cbk to keypair derivation
Remove KeyFromHex, Seal, and Open with their errors and constants. The library only derives crypto_box keypairs from BIP39 mnemonics; callers use golang.org/x/crypto/nacl/box directly for everything else.
This commit is contained in:
@@ -67,29 +67,14 @@ func main() {
|
||||
}
|
||||
|
||||
// The same mnemonic (and optional passphrase) always yields the same
|
||||
// keypair, on any machine.
|
||||
alice, err := cbk.New(cbk.Params{Mnemonic: mnemonic})
|
||||
// keypair, on any machine. The keys are plain crypto_box keys for use
|
||||
// with golang.org/x/crypto/nacl/box.
|
||||
keypair, err := cbk.New(cbk.Params{Mnemonic: mnemonic})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
bob, err := cbk.FromMnemonic("abandon abandon abandon abandon abandon " +
|
||||
"abandon abandon abandon abandon abandon abandon about")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
sealed, err := alice.Seal([]byte("hello bob"), bob.PublicKey)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
plain, err := bob.Open(sealed, alice.PublicKey)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(string(plain), alice.PublicKeyHex())
|
||||
fmt.Println(keypair.PublicKeyHex())
|
||||
}
|
||||
```
|
||||
|
||||
@@ -143,9 +128,9 @@ directory is never read.
|
||||
|
||||
### `pkg/cbk`
|
||||
|
||||
Derives NaCl crypto_box keypairs (Curve25519, XSalsa20, Poly1305)
|
||||
deterministically from BIP39 mnemonics, and seals and opens messages with them.
|
||||
The derivation is fixed and documented so keys are reproducible:
|
||||
Derives NaCl crypto_box keypairs (Curve25519) deterministically from BIP39
|
||||
mnemonics, and nothing else. The derivation is fixed and documented so keys are
|
||||
reproducible:
|
||||
|
||||
1. The mnemonic is validated and canonicalized with
|
||||
`bip39wordlist.NormalizeWordlist`.
|
||||
@@ -156,16 +141,13 @@ The derivation is fixed and documented so keys are reproducible:
|
||||
`HKDF-SHA256(seed, salt = nil, info = cbk.DerivationInfo)`.
|
||||
4. The public key is the Curve25519 base-point multiple of the private key.
|
||||
|
||||
A sealed message is a 24-byte random nonce followed by the box ciphertext, so it
|
||||
can be handled as a single opaque byte string. The API:
|
||||
The resulting keys are plain 32-byte crypto_box keys for use with
|
||||
`golang.org/x/crypto/nacl/box`. The API:
|
||||
|
||||
- `cbk.New(cbk.Params{Mnemonic, Passphrase})` and `cbk.FromMnemonic(m)` return a
|
||||
`CryptoBoxKeypair`.
|
||||
- `CryptoBoxKeypair.Seal(message, recipientPublicKey)` and
|
||||
`CryptoBoxKeypair.Open(sealed, senderPublicKey)`.
|
||||
- `CryptoBoxKey.Hex()`, `CryptoBoxKey.Bytes()`, `cbk.KeyFromHex(s)`, and the
|
||||
`PublicKeyHex`, `PrivateKeyHex`, `PublicKeyBytes`, `PrivateKeyBytes` accessors
|
||||
on the keypair.
|
||||
- `CryptoBoxKey.Hex()`, `CryptoBoxKey.Bytes()`, and the `PublicKeyHex`,
|
||||
`PrivateKeyHex`, `PublicKeyBytes`, `PrivateKeyBytes` accessors on the keypair.
|
||||
|
||||
The test suite pins the keypair derived from the standard all-zero-entropy BIP39
|
||||
test vector. If that test ever fails, the derivation has changed and existing
|
||||
|
||||
Reference in New Issue
Block a user