forked from lug/matterbridge
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | ||
| 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[:]
 | ||
| }
 | 
