github.com/mad-day/Yawning-crypto@v0.0.0-20190711051033-5a5f8cca32ec/bcns/rlwe_test.go (about) 1 // 2 // Ring LWE integration tests/benchmarks 3 // 4 // To the extent possible under law, Yawning Angel waived all copyright 5 // and related or neighboring rights to bcns, using the Creative 6 // Commons "CC0" public domain dedication. See LICENSE or 7 // <http://creativecommons.org/publicdomain/zero/1.0/> for full details. 8 9 package bcns 10 11 import ( 12 "crypto/rand" 13 "fmt" 14 "testing" 15 ) 16 17 func validateSharedSecret(a, b *[16]uint64) error { 18 for i, v := range b { 19 if a[i] != v { 20 return fmt.Errorf("shared secret mismatch: [%d]: %v != %v", i, a[i], v) 21 } 22 } 23 return nil 24 } 25 26 func TestKexComputeKeyAliceBob(t *testing.T) { 27 var skAlice, pkAlice [1024]uint32 28 err := kexGenerateKeypair(rand.Reader, &rlweARef, &skAlice, &pkAlice) 29 if err != nil { 30 t.Fatalf("alice: kexGenerateKeypair failed: %v", err) 31 } 32 33 var skBob, pkBob [1024]uint32 34 err = kexGenerateKeypair(rand.Reader, &rlweARef, &skBob, &pkBob) 35 if err != nil { 36 t.Fatalf("alice: kexGenerateKeypair failed: %v", err) 37 } 38 39 var recData, sBob [16]uint64 40 err = kexComputeKeyBob(rand.Reader, &pkAlice, &skBob, &recData, &sBob) 41 if err != nil { 42 t.Fatalf("bob: kexComputeKeyBob failed: %v", err) 43 } 44 45 var sAlice [16]uint64 46 kexComputeKeyAlice(&pkBob, &skAlice, &recData, &sAlice) 47 if err = validateSharedSecret(&sAlice, &sBob); err != nil { 48 t.Fatalf("%v", err) 49 } 50 } 51 52 func BenchmarkGenerateKeyPair(b *testing.B) { 53 var skAlice, pkAlice [1024]uint32 54 for i := 0; i < b.N; i++ { 55 err := kexGenerateKeypair(rand.Reader, &rlweARef, &skAlice, &pkAlice) 56 if err != nil { 57 b.Fatalf("alice: kexGenerateKeypair failed: %v", err) 58 } 59 } 60 } 61 62 func BenchmarkKexAlice(b *testing.B) { 63 var skAlice, pkAlice [1024]uint32 64 for i := 0; i < b.N; i++ { 65 err := kexGenerateKeypair(rand.Reader, &rlweARef, &skAlice, &pkAlice) 66 if err != nil { 67 b.Fatalf("alice: kexGenerateKeypair failed: %v", err) 68 } 69 70 b.StopTimer() 71 var skBob, pkBob [1024]uint32 72 err = kexGenerateKeypair(rand.Reader, &rlweARef, &skBob, &pkBob) 73 if err != nil { 74 b.Fatalf("alice: kexGenerateKeypair failed: %v", err) 75 } 76 77 var recData, sBob [16]uint64 78 err = kexComputeKeyBob(rand.Reader, &pkAlice, &skBob, &recData, &sBob) 79 if err != nil { 80 b.Fatalf("bob: kexComputeKeyBob failed: %v", err) 81 } 82 b.StartTimer() 83 84 var sAlice [16]uint64 85 kexComputeKeyAlice(&pkBob, &skAlice, &recData, &sAlice) 86 87 b.StopTimer() 88 if err = validateSharedSecret(&sAlice, &sBob); err != nil { 89 b.Fatalf("%v", err) 90 } 91 b.StartTimer() 92 } 93 } 94 95 func BenchmarkKexBob(b *testing.B) { 96 var skAlice, pkAlice [1024]uint32 97 for i := 0; i < b.N; i++ { 98 b.StopTimer() 99 err := kexGenerateKeypair(rand.Reader, &rlweARef, &skAlice, &pkAlice) 100 if err != nil { 101 b.Fatalf("alice: kexGenerateKeypair failed: %v", err) 102 } 103 104 b.StartTimer() 105 var skBob, pkBob [1024]uint32 106 err = kexGenerateKeypair(rand.Reader, &rlweARef, &skBob, &pkBob) 107 if err != nil { 108 b.Fatalf("alice: kexGenerateKeypair failed: %v", err) 109 } 110 111 var recData, sBob [16]uint64 112 err = kexComputeKeyBob(rand.Reader, &pkAlice, &skBob, &recData, &sBob) 113 if err != nil { 114 b.Fatalf("bob: kexComputeKeyBob failed: %v", err) 115 } 116 b.StopTimer() 117 118 var sAlice [16]uint64 119 kexComputeKeyAlice(&pkBob, &skAlice, &recData, &sAlice) 120 if err = validateSharedSecret(&sAlice, &sBob); err != nil { 121 b.Fatalf("%v", err) 122 } 123 } 124 }