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  }