86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
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()
|
|
}
|
|
}
|