1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /*
- In cryptography, Curve25519 is an elliptic curve offering 128 bits of security and designed for use with the elliptic
- curve Diffie–Hellman (ECDH) key agreement scheme. It is one of the fastest ECC curves and is not covered by any known
- patents. The reference implementation is public domain software. The original Curve25519 paper defined it
- as a Diffie–Hellman (DH) function.
- */
- package curve25519
- import (
- "crypto/rand"
- "golang.org/x/crypto/curve25519"
- "io"
- )
- /*
- GenerateKey generates a public private key pair using Curve25519.
- */
- func GenerateKey() (privateKey *[32]byte, publicKey *[32]byte, err error) {
- var pub, priv [32]byte
- _, err = io.ReadFull(rand.Reader, priv[:])
- if err != nil {
- return nil, nil, err
- }
- priv[0] &= 248
- priv[31] &= 127
- priv[31] |= 64
- curve25519.ScalarBaseMult(&pub, &priv)
- return &priv, &pub, nil
- }
- /*
- GenerateSharedSecret generates the shared secret with a given public private key pair.
- */
- func GenerateSharedSecret(priv, pub [32]byte) []byte {
- var secret [32]byte
- curve25519.ScalarMult(&secret, &priv, &pub)
- return secret[:]
- }
|