aboutsummaryrefslogtreecommitdiff
path: root/nizk/stage1.go
diff options
context:
space:
mode:
authorÖzgür Kesim <oec@kesim.org>2024-11-14 14:24:05 +0100
committerÖzgür Kesim <oec@kesim.org>2024-11-14 14:24:05 +0100
commit51e06106376faf477b68c842b6ced84975ee7db6 (patch)
tree7d253f5af743518f0e362ec11c60ce90506bbd39 /nizk/stage1.go
parent1dd0089e5f689eef3464452fbc70f0adf11d8ebc (diff)
wip: refactor stage commit into a single data structure; test for stage2 STILL FAIL
Diffstat (limited to 'nizk/stage1.go')
-rw-r--r--nizk/stage1.go44
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
}