diff options
Diffstat (limited to 'nizk/stage1.go')
-rw-r--r-- | nizk/stage1.go | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/nizk/stage1.go b/nizk/stage1.go index 2342e17..4cd9547 100644 --- a/nizk/stage1.go +++ b/nizk/stage1.go @@ -3,16 +3,13 @@ package nizk import . "kesim.org/seal/common" type Stage struct { + bit *Bit + x *Scalar r *Scalar com *StageCommitment rev *StageReveal - - prf1 *Stage1Proof - prf2 *Stage2Proof - - bit *Bit } type StageCommitment struct { @@ -21,8 +18,8 @@ type StageCommitment struct { } type StageReveal struct { - Z *Point Y *Point + Z *Point } // Represents the proof of statements of the following form: @@ -45,18 +42,7 @@ func (b *Bit) stage(x, r *Scalar) *Stage { } } -func (b *Bit) CommitStage1(Xs ...*Point) (c *Stage, s *StageCommitment) { - x := Curve.RandomScalar() - r := Curve.RandomScalar() - return b.CommitStage1FromScalars(x, r, Xs...) -} - -func (b *Bit) CommitStage1FromScalars(x, r *Scalar, Xs ...*Point) (s *Stage, c *StageCommitment) { - s = b.stage(x, r) - return s, s.commit(false, Xs...) -} - -func (s *Stage) commit(lost bool, Xs ...*Point) *StageCommitment { +func (s *Stage) commit(Xs ...*Point) *StageCommitment { if s.com != nil { return s.com } @@ -68,18 +54,31 @@ func (s *Stage) commit(lost bool, Xs ...*Point) *StageCommitment { return s.com } -func (s *Stage) reveal(Xs ...*Point) (r *StageReveal, e error) { +func (b *Bit) Stage(Xs ...*Point) (c *Stage, s *StageCommitment) { + x := Curve.RandomScalar() + r := Curve.RandomScalar() + return b.StageFromScalars(x, r, Xs...) +} + +func (b *Bit) StageFromScalars(x, r *Scalar, Xs ...*Point) (s *Stage, c *StageCommitment) { + s = b.stage(x, r) + return s, s.commit(Xs...) +} + +func (s *Stage) reveal(prev_true bool, Xs ...*Point) (r *StageReveal, e error) { // TODO: Calculate Y based on the Xs and our own X_i // as Π_(i<k) X_k / Π_(i>k) X_k // For now: Y := G.Exp(Curve.RandomScalar()) r = &StageReveal{Y: Y} - if s.bit.IsSet() { + + if prev_true && s.bit.IsSet() { r.Z = s.com.R.Exp(s.x) } else { r.Z = Y.Exp(s.x) } + return r, e } @@ -89,10 +88,10 @@ func (s *Stage) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof, e for _, s := range []**Scalar{&r1, &r2, &ρ1, &ρ2, &ω} { *s = Curve.RandomScalar() } - c := s.commit(false) + c := s.commit() bc := s.bit.com - rev, e = s.reveal(Xs...) + rev, e = s.reveal(true, Xs...) if e != nil { return nil, nil, e } @@ -146,7 +145,6 @@ func (s *Stage) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof, e } s.rev = rev - s.prf1 = pr return rev, pr, e } |