package main import ( "bytes" "crypto/rand" "fmt" "time" "github.com/henrydcase/nobs/dh/csidh" "github.com/henrydcase/sidh_torture/csidh/ref/go-wrapper" ) func TestSS() { var r wrapper.Ref var ssRef [csidh.SharedSecretSize]byte var ss [csidh.SharedSecretSize]byte // Go types prA := r.KeygenPrv() pkA := r.KeygenPub(&prA) prB := csidh.NewPrivateKey() pkB := csidh.NewPublicKey() prB.Generate(rand.Reader) pkB.Generate(&prB) s1 := time.Now() // Generate with Go pkB.DeriveSecret(ss[:], &pkA, &prB) s2 := time.Since(s1) // Generate with C s1 = time.Now() r.Derive(ssRef[:], &pkB, &prA) s3 := time.Since(s1) fmt.Printf("|TestSharedSecret | %.8s | %.8s |\n", s2, s3) if !bytes.Equal(ss[:], ssRef[:]) { panic("TestSS") } } func TestKeyGeneration() { var r wrapper.Ref var ssRef [csidh.SharedSecretSize]byte var ss [csidh.SharedSecretSize]byte // Go types prA := csidh.NewPrivateKey() pkA := csidh.NewPublicKey() prB := csidh.NewPrivateKey() pkB := csidh.NewPublicKey() prA.Generate(rand.Reader) pkA.Generate(&prA) prB.Generate(rand.Reader) pkB.Generate(&prB) s1 := time.Now() // Generate with Go r.Derive(ss[:], &pkA, &prB) s2 := time.Since(s1) // Generate with C s1 = time.Now() r.Derive(ssRef[:], &pkB, &prA) s3 := time.Since(s1) fmt.Printf("|TestKeyGeneration | %.8s | %.8s |\n", s2, s3) if !bytes.Equal(ss[:], ssRef[:]) { panic("TestKeyGeneration") } } func main() { fmt.Printf("| TestName |Go | C |\n") fmt.Printf("|------------------|----------|----------|\n") // OZAPTF: make configurable // for i:=0; i<100; i++ { for { TestSS() TestKeyGeneration() } }