package peer import ( "bytes" "crypto/rand" "testing" "golang.org/x/crypto/nacl/box" ) func TestEncryptDecryptPacket(t *testing.T) { pubKey1, privKey1, err := box.GenerateKey(rand.Reader) if err != nil { t.Fatal(err) } pubKey2, privKey2, err := box.GenerateKey(rand.Reader) if err != nil { t.Fatal(err) } sharedEncKey := [32]byte{} box.Precompute(&sharedEncKey, pubKey2, privKey1) sharedDecKey := [32]byte{} box.Precompute(&sharedDecKey, pubKey1, privKey2) original := make([]byte, MTU) rand.Read(original) nonce := make([]byte, NONCE_SIZE) rand.Read(nonce) encrypted := make([]byte, BUFFER_SIZE) encrypted = encryptPacket(sharedEncKey[:], nonce, original, encrypted) decrypted := make([]byte, MTU) var ok bool decrypted, ok = decryptPacket(sharedDecKey[:], encrypted, decrypted) if !ok { t.Fatal(ok) } if !bytes.Equal(original, decrypted) { t.Fatal("mismatch") } } func BenchmarkEncryptPacket(b *testing.B) { _, privKey1, err := box.GenerateKey(rand.Reader) if err != nil { b.Fatal(err) } pubKey2, _, err := box.GenerateKey(rand.Reader) if err != nil { b.Fatal(err) } sharedEncKey := [32]byte{} box.Precompute(&sharedEncKey, pubKey2, privKey1) original := make([]byte, MTU) rand.Read(original) nonce := make([]byte, NONCE_SIZE) rand.Read(nonce) encrypted := make([]byte, BUFFER_SIZE) for i := 0; i < b.N; i++ { encrypted = encryptPacket(sharedEncKey[:], nonce, original, encrypted) } } func BenchmarkDecryptPacket(b *testing.B) { pubKey1, privKey1, err := box.GenerateKey(rand.Reader) if err != nil { b.Fatal(err) } pubKey2, privKey2, err := box.GenerateKey(rand.Reader) if err != nil { b.Fatal(err) } sharedEncKey := [32]byte{} box.Precompute(&sharedEncKey, pubKey2, privKey1) sharedDecKey := [32]byte{} box.Precompute(&sharedDecKey, pubKey1, privKey2) original := make([]byte, MTU) rand.Read(original) nonce := make([]byte, NONCE_SIZE) rand.Read(nonce) encrypted := make([]byte, BUFFER_SIZE) encrypted = encryptPacket(sharedEncKey[:], nonce, original, encrypted) decrypted := make([]byte, MTU) for i := 0; i < b.N; i++ { decrypted, _ = decryptPacket(sharedDecKey[:], encrypted, decrypted) } }