diff options
Diffstat (limited to 'nizk/stage2')
-rw-r--r-- | nizk/stage2/stage2.go | 11 | ||||
-rw-r--r-- | nizk/stage2/stage2_test.go | 33 |
2 files changed, 40 insertions, 4 deletions
diff --git a/nizk/stage2/stage2.go b/nizk/stage2/stage2.go index a17000f..88bfa59 100644 --- a/nizk/stage2/stage2.go +++ b/nizk/stage2/stage2.go @@ -47,7 +47,16 @@ type Commitment struct { Z_ *Point } -func NewStatement(typ Type, a, b, r, x, y, r_, x_, y_ *Scalar) *Statement { +func NewStatement(typ Type) *Statement { + var s [8]*Scalar + for i := range s { + s[i] = Curve.RandomScalar() + } + + return NewStatementFromScalars(typ, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7]) +} + +func NewStatementFromScalars(typ Type, a, b, r, x, y, r_, x_, y_ *Scalar) *Statement { if typ > Set || typ < None { panic("unknown type") } diff --git a/nizk/stage2/stage2_test.go b/nizk/stage2/stage2_test.go index e4e6e5c..a33a468 100644 --- a/nizk/stage2/stage2_test.go +++ b/nizk/stage2/stage2_test.go @@ -7,16 +7,43 @@ import ( ) func TestVerification(t *testing.T) { + var st [3]*Statement + for i, typ := range []Type{None, Unset, Set} { + st[i] = NewStatement(typ) + c, p := st[i].Commit(), st[i].Proof() + if !c.Verify(p) { + t.Fatalf("Couldn't verify proof for %v, case %d\n", typ, i) + } + } + + for _, ind := range [][2]int{{0, 1}, {1, 2}, {2, 0}} { + c, p := st[ind[0]].Commit(), st[ind[1]].Proof() + if c.Verify(p) { + t.Fatalf("Shouldn't be able to verify %d with proof %d", ind[0], ind[1]) + } + } +} + +func TestVerificationFromScalar(t *testing.T) { var s [8]*Scalar + var st [3]*Statement + for i := range s { s[i] = Curve.RandomScalar() } for i, typ := range []Type{None, Unset, Set} { - st := NewStatement(typ, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7]) - c, p := st.Commit(), st.Proof() + st[i] = NewStatementFromScalars(typ, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7]) + c, p := st[i].Commit(), st[i].Proof() if !c.Verify(p) { t.Fatalf("Couldn't verify proof for %v, case %d\n", typ, i) } } -}
\ No newline at end of file + + for _, ind := range [][2]int{{0, 1}, {1, 2}, {2, 1}, {2, 0}} { + c, p := st[ind[0]].Commit(), st[ind[1]].Proof() + if c.Verify(p) { + t.Fatalf("Shouldn't be able to verify %d with proof %d", ind[0], ind[1]) + } + } +} |