package node import ( "bytes" "crypto/rand" "reflect" "testing" "golang.org/x/crypto/nacl/box" ) func TestEncryptDecryptAsym(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, if_mtu-64) rand.Read(original) h := header{ Counter: 2893749238, SourceIP: 5, DestIP: 12, Forward: 1, Stream: 1, } encrypted := make([]byte, bufferSize) encrypted = encryptPacketAsym(&h, sharedEncKey[:], original, encrypted) decrypted := make([]byte, bufferSize) var ok bool decrypted, ok = decryptPacketAsym(sharedDecKey[:], encrypted, decrypted) if !ok { t.Fatal(ok) } var h2 header h2.Parse(encrypted) if !reflect.DeepEqual(h, h2) { t.Fatal(h, h2) } if !bytes.Equal(original, decrypted) { t.Fatal("mismatch") } } func BenchmarkEncryptAsym(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, if_mtu) rand.Read(original) nonce := make([]byte, headerSize) rand.Read(nonce) encrypted := make([]byte, bufferSize) h := header{ Counter: 2893749238, SourceIP: 5, DestIP: 12, Forward: 1, Stream: 1, } for i := 0; i < b.N; i++ { encrypted = encryptPacketAsym(&h, sharedEncKey[:], original, encrypted) } } func BenchmarkDecryptAsym(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, if_mtu) rand.Read(original) nonce := make([]byte, headerSize) rand.Read(nonce) h := header{ Counter: 2893749238, SourceIP: 5, DestIP: 12, Forward: 1, Stream: 1, } encrypted := encryptPacketAsym(&h, sharedEncKey[:], original, make([]byte, bufferSize)) decrypted := make([]byte, bufferSize) var ok bool for i := 0; i < b.N; i++ { decrypted, ok = decryptPacketAsym(sharedDecKey[:], encrypted, decrypted) if !ok { panic(ok) } } }