aboutsummaryrefslogtreecommitdiff
path: root/nizk/commit
diff options
context:
space:
mode:
Diffstat (limited to 'nizk/commit')
-rw-r--r--nizk/commit/commit.go93
1 files changed, 47 insertions, 46 deletions
diff --git a/nizk/commit/commit.go b/nizk/commit/commit.go
index 5238c15..085d9a2 100644
--- a/nizk/commit/commit.go
+++ b/nizk/commit/commit.go
@@ -5,45 +5,46 @@ import (
)
// This is a construction of a proof of a statement of the form
-// σ == [(Φ = g^(αβ)) && (A = g^α) && (Β = g^β)]
-// || [(Φ = g^(αβ+1)) && (A = g^α) && (Β = g^β)]
-// for given Φ, A and B
+// [(C = g^(ab)) && (A = g^a) && (Β = g^b)]
+// || [(C = g^(ab+1)) && (A = g^a) && (Β = g^b)]
+//
+// for given C, A and B
type Statement struct {
- α *Scalar
- β *Scalar
+ a *Scalar
+ b *Scalar
plus bool
*Commitment
}
type Commitment struct {
- Φ *Point
+ C *Point
A *Point
B *Point
}
-func NewStatement(α, β *Scalar, plus bool) *Statement {
+func NewStatement(a, b *Scalar, plus bool) *Statement {
return &Statement{
- α: α,
- β: β,
+ a: a,
+ b: b,
plus: plus,
- Commitment: commitment(α, β, plus),
+ Commitment: commitment(a, b, plus),
}
}
-func commitment(α, β *Scalar, plus bool) *Commitment {
- var Φ *Point
- φ := α.Mul(β)
+func commitment(a, b *Scalar, plus bool) *Commitment {
+ var C *Point
+ c := a.Mul(b)
if plus {
- Φ = G.Exp(φ.Add(One))
+ C = G.Exp(c.Add(One))
} else {
- Φ = G.Exp(φ)
+ C = G.Exp(c)
}
return &Commitment{
- Φ: Φ,
- A: G.Exp(α),
- B: G.Exp(β),
+ C: C,
+ A: G.Exp(a),
+ B: G.Exp(b),
}
}
@@ -52,53 +53,53 @@ func (s *Statement) Commit() *Commitment {
}
type Proof struct {
- Ch [2]*Scalar
- Rho [2]*Scalar
+ Ch [2]*Scalar
+ R [2]*Scalar
}
func (s *Statement) Proof() *Proof {
- var ε [2][2]*Point
- var r1, r2, ω *Scalar
+ var e [2][2]*Point
+ var r1, r2, w *Scalar
r1 = Curve.RandomScalar()
r2 = Curve.RandomScalar()
- ω = Curve.RandomScalar()
+ w = Curve.RandomScalar()
if s.plus {
- ε[0][0] = G.Exp(r1)
- ε[0][1] = s.B.Exp(r1).Mul(G.Exp(ω))
- ε[1][0] = G.Exp(r2)
- ε[1][1] = s.B.Exp(r2)
+ e[0][0] = G.Exp(r1)
+ e[0][1] = s.B.Exp(r1).Mul(G.Exp(w))
+ e[1][0] = G.Exp(r2)
+ e[1][1] = s.B.Exp(r2)
} else {
- ε[0][0] = G.Exp(r1)
- ε[0][1] = s.B.Exp(r1)
- ε[1][0] = G.Exp(r2).Mul(s.A.Exp(ω))
- ε[1][1] = s.B.Exp(r2).Mul(s.Φ.Div(G).Exp(ω))
+ e[0][0] = G.Exp(r1)
+ e[0][1] = s.B.Exp(r1)
+ e[1][0] = G.Exp(r2).Mul(s.A.Exp(w))
+ e[1][1] = s.B.Exp(r2).Mul(s.C.Div(G).Exp(w))
}
- ch := Challenge(G, s.Φ, s.A, s.B, ε[0][0], ε[0][1], ε[1][0], ε[1][1])
+ ch := Challenge(G, s.C, s.A, s.B, e[0][0], e[0][1], e[1][0], e[1][1])
pr := &Proof{}
if s.plus {
- pr.Ch[0] = ω
- pr.Ch[1] = ch.Sub(ω)
- pr.Rho[0] = r1.Sub(s.α.Mul(pr.Ch[0]))
- pr.Rho[1] = r2.Sub(s.α.Mul(pr.Ch[1]))
+ pr.Ch[0] = w
+ pr.Ch[1] = ch.Sub(w)
+ pr.R[0] = r1.Sub(s.a.Mul(pr.Ch[0]))
+ pr.R[1] = r2.Sub(s.a.Mul(pr.Ch[1]))
} else {
- pr.Ch[0] = ch.Sub(ω)
- pr.Ch[1] = ω
- pr.Rho[0] = r1.Sub(s.α.Mul(pr.Ch[0]))
- pr.Rho[1] = r2
+ pr.Ch[0] = ch.Sub(w)
+ pr.Ch[1] = w
+ pr.R[0] = r1.Sub(s.a.Mul(pr.Ch[0]))
+ pr.R[1] = r2
}
return pr
}
func (c *Commitment) Verify(p *Proof) bool {
- var ε [2][2]*Point
- ε[0][0] = G.Exp(p.Rho[0]).Mul(c.A.Exp(p.Ch[0]))
- ε[0][1] = c.B.Exp(p.Rho[0]).Mul(c.Φ.Exp(p.Ch[0]))
- ε[1][0] = G.Exp(p.Rho[1]).Mul(c.A.Exp(p.Ch[1]))
- ε[1][1] = c.B.Exp(p.Rho[1]).Mul(c.Φ.Div(G).Exp(p.Ch[1]))
- ch := Challenge(G, c.Φ, c.A, c.B, ε[0][0], ε[0][1], ε[1][0], ε[1][1])
+ var e [2][2]*Point
+ e[0][0] = G.Exp(p.R[0]).Mul(c.A.Exp(p.Ch[0]))
+ e[0][1] = c.B.Exp(p.R[0]).Mul(c.C.Exp(p.Ch[0]))
+ e[1][0] = G.Exp(p.R[1]).Mul(c.A.Exp(p.Ch[1]))
+ e[1][1] = c.B.Exp(p.R[1]).Mul(c.C.Div(G).Exp(p.Ch[1]))
+ ch := Challenge(G, c.C, c.A, c.B, e[0][0], e[0][1], e[1][0], e[1][1])
return p.Ch[0].Add(p.Ch[1]).Equal(ch)
}