113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
//go:build (amd64 || arm64) && !generic && !generic32 && !generic64
|
|
// +build amd64 arm64
|
|
// +build !generic
|
|
// +build !generic32
|
|
// +build !generic64
|
|
|
|
package ec256
|
|
|
|
import (
|
|
"fmt"
|
|
"math/big"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func pointFromBig(x, y *big.Int) []uint64 {
|
|
xyz := make([]uint64, 12)
|
|
fromBig(xyz[0:4], maybeReduceModP(x))
|
|
fromBig(xyz[4:8], maybeReduceModP(y))
|
|
c256Mul(xyz[0:4], xyz[0:4], rr[:])
|
|
c256Mul(xyz[4:8], xyz[4:8], rr[:])
|
|
xyz[8] = montOne0
|
|
xyz[9] = montOne1
|
|
xyz[10] = montOne2
|
|
xyz[11] = montOne3
|
|
return xyz
|
|
}
|
|
|
|
// func TestC256AddSpeed(t *testing.T) {
|
|
// a := []uint64{0x715A4589334C74C7, 0x8FE30BBFF2660BE1, 0x5F9904466A39C994, 0x32C4AE2C1F198119}
|
|
// b := []uint64{0x715A4589334C74C7, 0x8FE30BBFF2660BE1, 0x5F9904466A39C994, 0x32C4AE2C1F198119}
|
|
// res := make([]uint64, 4)
|
|
// begin := time.Now()
|
|
// total := 1000000000
|
|
// for i := 0; i < total; i++ {
|
|
// c256Add(res, a, b)
|
|
// }
|
|
// elaspe := time.Since(begin)
|
|
// fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
|
// fmt.Println(int(float64(total) / float64(elaspe.Milliseconds()) * 1000))
|
|
// }
|
|
|
|
func TestC256SqrSpeed(t *testing.T) {
|
|
a := []uint64{0x715A4589334C74C7, 0x8FE30BBFF2660BE1, 0x5F9904466A39C994, 0x32C4AE2C1F198119}
|
|
res := make([]uint64, 4)
|
|
begin := time.Now()
|
|
total := 100000000
|
|
for i := 0; i < total; i++ {
|
|
c256Sqr(res, a, 1)
|
|
// c256Sqr(res, res, 1)
|
|
// c256Sqr(res, res, 1)
|
|
// c256Sqr(res, res, 1)
|
|
}
|
|
elaspe := time.Since(begin)
|
|
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
|
fmt.Println(int(float64(total) / float64(elaspe.Milliseconds()) * 1000))
|
|
}
|
|
|
|
func TestC256MulSpeed(t *testing.T) {
|
|
a := []uint64{0x715A4589334C74C7, 0x8FE30BBFF2660BE1, 0x5F9904466A39C994, 0x32C4AE2C1F198119}
|
|
b := []uint64{0x715A4589334C74C6, 0x8FE30BBFF2660BE1, 0x5F9904466A39C994, 0x32C4AE2C1F198119}
|
|
res := make([]uint64, 4)
|
|
total := 100000000
|
|
begin := time.Now()
|
|
for i := 0; i < total; i++ {
|
|
c256Mul(res, a, b)
|
|
}
|
|
elaspe := time.Since(begin)
|
|
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
|
fmt.Println(int(float64(total) / float64(elaspe.Milliseconds()) * 1000))
|
|
}
|
|
|
|
func TestC256PointAddAsmSpeed(t *testing.T) {
|
|
p1 := pointFromBig(c256.Gx, c256.Gy)
|
|
x2, y2 := c256.ScalarMult(c256.Gx, c256.Gy, (new(big.Int).SetInt64(2)).Bytes())
|
|
p2 := pointFromBig(x2, y2)
|
|
var res [12]uint64
|
|
begin := time.Now()
|
|
total := 10000000
|
|
for i := 0; i < total; i++ {
|
|
c256PointAddAsm(res[:], p1, p2)
|
|
}
|
|
elaspe := time.Since(begin)
|
|
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
|
fmt.Println(int(float64(total) / float64(elaspe.Milliseconds()) * 1000))
|
|
}
|
|
|
|
func TestC256PointDoubleAsmSpeed(t *testing.T) {
|
|
p1 := pointFromBig(c256.Gx, c256.Gy)
|
|
var res [12]uint64
|
|
begin := time.Now()
|
|
total := 10000000
|
|
for i := 0; i < total; i++ {
|
|
c256PointDoubleAsm(res[:], p1)
|
|
}
|
|
elaspe := time.Since(begin)
|
|
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
|
fmt.Println(int(float64(total) / float64(elaspe.Milliseconds()) * 1000))
|
|
}
|
|
|
|
func TestC256InvSpeed(t *testing.T) {
|
|
in := []uint64{34235, 23341, 3444, 55555}
|
|
out := make([]uint64, 4)
|
|
begin := time.Now()
|
|
total := 1000000
|
|
for i := 0; i < total; i++ {
|
|
c256Inverse(out, in)
|
|
}
|
|
elaspe := time.Since(begin)
|
|
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
|
fmt.Println(float64(total) / float64(elaspe.Milliseconds()) * 1000)
|
|
}
|