29 lines
451 B
Go
29 lines
451 B
Go
package engine
|
|
|
|
import (
|
|
"crypto/ecdh"
|
|
"crypto/rand"
|
|
"fmt"
|
|
)
|
|
|
|
type Engine struct {
|
|
curve ecdh.Curve
|
|
}
|
|
|
|
func NewEngine() *Engine {
|
|
return &Engine{
|
|
curve: ecdh.X25519(),
|
|
}
|
|
}
|
|
|
|
func (e *Engine) GenerateKeyPair() (*KeyPair, error) {
|
|
priv, err := e.curve.GenerateKey(rand.Reader)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to generate private key: %w", err)
|
|
}
|
|
return &KeyPair{
|
|
PrivateKey: priv,
|
|
PublicKey: priv.PublicKey(),
|
|
}, nil
|
|
}
|