diff options
Diffstat (limited to 'nizk/stage1.go')
-rw-r--r-- | nizk/stage1.go | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/nizk/stage1.go b/nizk/stage1.go index 3ebed27..07eba3f 100644 --- a/nizk/stage1.go +++ b/nizk/stage1.go @@ -1,8 +1,6 @@ package nizk import ( - "fmt" - . "kesim.org/seal/common" ) @@ -36,14 +34,13 @@ type Stage1Proof struct { } func (b *Bit) stage(x, r *Scalar) { - b.Commit() // ensure non-null values for A, B, C b.Stage = &Stage{ x: x, r: r, } } -func (s *Stage) commit(Xs ...*Point) *StageCommitment { +func (s *Stage) commit() *StageCommitment { if s.StageCommitment != nil { return s.StageCommitment } @@ -55,22 +52,22 @@ func (s *Stage) commit(Xs ...*Point) *StageCommitment { return s.StageCommitment } -func (b *Bit) StageCommit(Xs ...*Point) (s *StageCommitment) { +func (b *Bit) StageCommit() (s *StageCommitment) { + if b.Stage != nil { + return b.Stage.StageCommitment + } x := Curve.RandomScalar() r := Curve.RandomScalar() - return b.StageFromScalars(x, r, Xs...) + return b.StageFromScalars(x, r) } -func (b *Bit) StageFromScalars(x, r *Scalar, Xs ...*Point) (c *StageCommitment) { +func (b *Bit) StageFromScalars(x, r *Scalar) (c *StageCommitment) { b.stage(x, r) - return b.Stage.commit(Xs...) + return b.Stage.commit() } -func (b *Bit) reveal(prev_true bool, Xs ...*Point) (r *StageReveal, e error) { +func (b *Bit) reveal(prev_true bool, Xs ...*Point) (r *StageReveal) { s := b.Stage - if s == nil { - return nil, fmt.Errorf("stage not ready") - } // TODO: Calculate Y based on the Xs and our own X_i // as Π_(i<k) X_k / Π_(i>k) X_k @@ -85,14 +82,15 @@ func (b *Bit) reveal(prev_true bool, Xs ...*Point) (r *StageReveal, e error) { r.Z = Y.Exp(s.x) } - return r, e + return r } -func (b *Bit) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof, e error) { - s := b.Stage - if s == nil { - return nil, nil, fmt.Errorf("stage not ready") +func (b *Bit) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof) { + if b.Stage == nil { + b.StageCommit() } + s := b.Stage + var ε [2][4]*Point var r1, r2, ρ1, ρ2, ω *Scalar for _, s := range []**Scalar{&r1, &r2, &ρ1, &ρ2, &ω} { @@ -100,10 +98,7 @@ func (b *Bit) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof, e e } c := s.commit() - rev, e = b.reveal(true, Xs...) - if e != nil { - return nil, nil, e - } + rev = b.reveal(true, Xs...) if b.IsSet() { ε[0][0] = G.Exp(r1).Mul(c.X.Exp(ω)) @@ -126,11 +121,11 @@ func (b *Bit) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof, e e } p := []Bytes{G, b.A, b.B, b.C, c.R, c.X, rev.Y, rev.Z} - for _, e := range ε[0] { - p = append(p, e) + for _, ε := range ε[0] { + p = append(p, ε) } - for _, e := range ε[1] { - p = append(p, e) + for _, ε := range ε[1] { + p = append(p, ε) } ch := Challenge(p...) @@ -153,7 +148,7 @@ func (b *Bit) RevealStage1(Xs ...*Point) (rev *StageReveal, pr *Stage1Proof, e e } s.StageReveal = rev - return rev, pr, e + return rev, pr } func (c *Commitment) VerifyStage1(sc *StageCommitment, r *StageReveal, p *Stage1Proof) bool { |