aboutsummaryrefslogtreecommitdiff
path: root/nizk/stage1.go
diff options
context:
space:
mode:
Diffstat (limited to 'nizk/stage1.go')
-rw-r--r--nizk/stage1.go47
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 {