1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package x25519
import (
"bytes"
"crypto/rand"
"testing"
)
func TestGenerate(t *testing.T) {
privateKey, err := GenerateKey(rand.Reader)
if err != nil {
t.Fatal(err)
}
if len(privateKey.Secret) != KeySize {
t.Fatal("key has the wrong size")
}
if len(privateKey.PublicKey.Point) != KeySize {
t.Fatal("key has the wrong size")
}
}
func TestValidate(t *testing.T) {
privateKey, err := GenerateKey(rand.Reader)
if err != nil {
t.Fatal(err)
}
err = Validate(privateKey)
if err != nil {
t.Fatal(err)
}
privateKey.PublicKey.Point[0] = privateKey.PublicKey.Point[0] + byte(1)
err = Validate(privateKey)
if err == nil {
t.Fatal("validation failed")
}
}
func TestEncryptDecrypt(t *testing.T) {
sessionKey := []byte("session.........")
privateKey, err := GenerateKey(rand.Reader)
if err != nil {
t.Fatal(err)
}
ephemeralPublic, ctxt, err := Encrypt(rand.Reader, &privateKey.PublicKey, sessionKey)
if err != nil {
t.Errorf("error encrypting: %s", err)
}
sessionKeyAfter, err := Decrypt(privateKey, ephemeralPublic, ctxt)
if err != nil {
t.Errorf("error decrypting: %s", err)
}
if !bytes.Equal(sessionKeyAfter, sessionKey) {
t.Errorf("decryption failed, got: %x, want: %x", sessionKeyAfter, sessionKey)
}
}
|