1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
package dilithium
import "testing"
func (p *Poly) RandLe2Q() {
max := 2 * uint32(Q)
r := randSliceUint32WithMax(N, max)
copy(p[:], r)
}
func TestNTTAgainstGeneric(t *testing.T) {
for k := 0; k < 1000; k++ {
var p Poly
p.RandLe2Q()
q1 := p
q2 := p
q1.NTT()
q2.nttGeneric()
if q1 != q2 {
t.Fatalf("NTT(%v) = %v != %v", p, q1, q2)
}
}
}
func TestNTT(t *testing.T) {
for k := 0; k < 1000; k++ {
var p, q Poly
p.RandLe2Q()
q = p
q.Normalize()
p.NTT()
for i := uint(0); i < N; i++ {
if p[i] > 18*Q {
t.Fatalf("NTT(%v)[%d] = %d > 18*Q", q, i, p[i])
}
}
p.ReduceLe2Q()
p.InvNTT()
for i := uint(0); i < N; i++ {
if p[i] > 2*Q {
t.Fatalf("InvNTT(%v)[%d] > 2*Q", q, i)
}
}
p.Normalize()
for i := uint(0); i < N; i++ {
if p[i] != uint32((uint64(q[i])*uint64(1<<32))%Q) {
t.Fatalf("%v != %v", p, q)
}
}
}
}
func BenchmarkNTTGeneric(b *testing.B) {
var p Poly
for i := 0; i < b.N; i++ {
p.nttGeneric()
}
}
func BenchmarkInvNTTGeneric(b *testing.B) {
var p Poly
for i := 0; i < b.N; i++ {
p.invNttGeneric()
}
}
func BenchmarkNTT(b *testing.B) {
var p Poly
for i := 0; i < b.N; i++ {
p.NTT()
}
}
func BenchmarkInvNTT(b *testing.B) {
var p Poly
for i := 0; i < b.N; i++ {
p.InvNTT()
}
}
|