| // Copyright (c) 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package edwards25519 |
| |
| import ( |
| "testing" |
| ) |
| |
| func TestProjLookupTable(t *testing.T) { |
| var table projLookupTable |
| table.FromP3(B) |
| |
| var tmp1, tmp2, tmp3 projCached |
| table.SelectInto(&tmp1, 6) |
| table.SelectInto(&tmp2, -2) |
| table.SelectInto(&tmp3, -4) |
| // Expect T1 + T2 + T3 = identity |
| |
| var accP1xP1 projP1xP1 |
| accP3 := NewIdentityPoint() |
| |
| accP1xP1.Add(accP3, &tmp1) |
| accP3.fromP1xP1(&accP1xP1) |
| accP1xP1.Add(accP3, &tmp2) |
| accP3.fromP1xP1(&accP1xP1) |
| accP1xP1.Add(accP3, &tmp3) |
| accP3.fromP1xP1(&accP1xP1) |
| |
| if accP3.Equal(I) != 1 { |
| t.Errorf("Consistency check on ProjLookupTable.SelectInto failed! %x %x %x", tmp1, tmp2, tmp3) |
| } |
| } |
| |
| func TestAffineLookupTable(t *testing.T) { |
| var table affineLookupTable |
| table.FromP3(B) |
| |
| var tmp1, tmp2, tmp3 affineCached |
| table.SelectInto(&tmp1, 3) |
| table.SelectInto(&tmp2, -7) |
| table.SelectInto(&tmp3, 4) |
| // Expect T1 + T2 + T3 = identity |
| |
| var accP1xP1 projP1xP1 |
| accP3 := NewIdentityPoint() |
| |
| accP1xP1.AddAffine(accP3, &tmp1) |
| accP3.fromP1xP1(&accP1xP1) |
| accP1xP1.AddAffine(accP3, &tmp2) |
| accP3.fromP1xP1(&accP1xP1) |
| accP1xP1.AddAffine(accP3, &tmp3) |
| accP3.fromP1xP1(&accP1xP1) |
| |
| if accP3.Equal(I) != 1 { |
| t.Errorf("Consistency check on ProjLookupTable.SelectInto failed! %x %x %x", tmp1, tmp2, tmp3) |
| } |
| } |
| |
| func TestNafLookupTable5(t *testing.T) { |
| var table nafLookupTable5 |
| table.FromP3(B) |
| |
| var tmp1, tmp2, tmp3, tmp4 projCached |
| table.SelectInto(&tmp1, 9) |
| table.SelectInto(&tmp2, 11) |
| table.SelectInto(&tmp3, 7) |
| table.SelectInto(&tmp4, 13) |
| // Expect T1 + T2 = T3 + T4 |
| |
| var accP1xP1 projP1xP1 |
| lhs := NewIdentityPoint() |
| rhs := NewIdentityPoint() |
| |
| accP1xP1.Add(lhs, &tmp1) |
| lhs.fromP1xP1(&accP1xP1) |
| accP1xP1.Add(lhs, &tmp2) |
| lhs.fromP1xP1(&accP1xP1) |
| |
| accP1xP1.Add(rhs, &tmp3) |
| rhs.fromP1xP1(&accP1xP1) |
| accP1xP1.Add(rhs, &tmp4) |
| rhs.fromP1xP1(&accP1xP1) |
| |
| if lhs.Equal(rhs) != 1 { |
| t.Errorf("Consistency check on nafLookupTable5 failed") |
| } |
| } |
| |
| func TestNafLookupTable8(t *testing.T) { |
| var table nafLookupTable8 |
| table.FromP3(B) |
| |
| var tmp1, tmp2, tmp3, tmp4 affineCached |
| table.SelectInto(&tmp1, 49) |
| table.SelectInto(&tmp2, 11) |
| table.SelectInto(&tmp3, 35) |
| table.SelectInto(&tmp4, 25) |
| // Expect T1 + T2 = T3 + T4 |
| |
| var accP1xP1 projP1xP1 |
| lhs := NewIdentityPoint() |
| rhs := NewIdentityPoint() |
| |
| accP1xP1.AddAffine(lhs, &tmp1) |
| lhs.fromP1xP1(&accP1xP1) |
| accP1xP1.AddAffine(lhs, &tmp2) |
| lhs.fromP1xP1(&accP1xP1) |
| |
| accP1xP1.AddAffine(rhs, &tmp3) |
| rhs.fromP1xP1(&accP1xP1) |
| accP1xP1.AddAffine(rhs, &tmp4) |
| rhs.fromP1xP1(&accP1xP1) |
| |
| if lhs.Equal(rhs) != 1 { |
| t.Errorf("Consistency check on nafLookupTable8 failed") |
| } |
| } |