sidh_torture/csidh/cmd/torturer/main.go

87 lines
1.8 KiB
Go
Raw Normal View History

2019-01-30 16:17:20 +00:00
package main
import (
"bytes"
"fmt"
"time"
"github.com/henrydcase/nobs/dh/csidh"
2019-04-12 11:53:30 +01:00
"github.com/henrydcase/nobs/drbg"
"github.com/henrydcase/sidh_torture/csidh/ref/go-wrapper"
2019-01-30 16:17:20 +00:00
)
2019-04-12 11:53:30 +01:00
var rng *drbg.CtrDrbg
2019-01-30 16:17:20 +00:00
func TestSS() {
var r wrapper.Ref
2019-01-30 20:30:11 +00:00
var ssRef [csidh.SharedSecretSize]byte
var ss [csidh.SharedSecretSize]byte
2019-01-30 16:17:20 +00:00
// Go types
prA := r.KeygenPrv()
pkA := r.KeygenPub(&prA)
prB := csidh.NewPrivateKey()
pkB := csidh.NewPublicKey()
2019-04-12 11:53:30 +01:00
prB.Generate(rng)
2019-01-30 16:17:20 +00:00
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
2019-01-30 20:30:11 +00:00
var ssRef [csidh.SharedSecretSize]byte
var ss [csidh.SharedSecretSize]byte
2019-01-30 16:17:20 +00:00
// Go types
prA := csidh.NewPrivateKey()
pkA := csidh.NewPublicKey()
prB := csidh.NewPrivateKey()
pkB := csidh.NewPublicKey()
2019-04-12 11:53:30 +01:00
prA.Generate(rng)
2019-01-30 16:17:20 +00:00
pkA.Generate(&prA)
2019-04-12 11:53:30 +01:00
prB.Generate(rng)
2019-01-30 16:17:20 +00:00
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")
2019-04-12 11:53:30 +01:00
rng = drbg.NewCtrDrbg()
2019-01-30 16:17:20 +00:00
for {
TestSS()
TestKeyGeneration()
}
}