|
|
|
@ -7,7 +7,7 @@ import (
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// DLEQProof encapsulates a Chaum-Pedersen DLEQ Proof
|
|
|
|
|
//gut In Ernest F. Brickell, editor,CRYPTO’92,volume 740 ofLNCS, pages 89–105. Springer, Heidelberg,August 1993
|
|
|
|
|
// gut In Ernest F. Brickell, editor,CRYPTO’92,volume 740 ofLNCS, pages 89–105. Springer, Heidelberg,August 1993
|
|
|
|
|
type DLEQProof struct {
|
|
|
|
|
C *ristretto.Scalar
|
|
|
|
|
S *ristretto.Scalar
|
|
|
|
@ -16,10 +16,11 @@ type DLEQProof struct {
|
|
|
|
|
// DiscreteLogEquivalenceProof constructs a valid DLEQProof for the given parameters and transcript
|
|
|
|
|
// Given Y = kX & Q = kP
|
|
|
|
|
// Peggy: t := choose randomly from Zq
|
|
|
|
|
// A := tX
|
|
|
|
|
// B := tP
|
|
|
|
|
// c := H(transcript(X,Y,P,Q,A,B))
|
|
|
|
|
// s := (t + ck) mod q
|
|
|
|
|
//
|
|
|
|
|
// A := tX
|
|
|
|
|
// B := tP
|
|
|
|
|
// c := H(transcript(X,Y,P,Q,A,B))
|
|
|
|
|
// s := (t + ck) mod q
|
|
|
|
|
//
|
|
|
|
|
// Sends c,s to Vicky
|
|
|
|
|
func DiscreteLogEquivalenceProof(k *ristretto.Scalar, X *ristretto.Element, Y *ristretto.Element, P *ristretto.Element, Q *ristretto.Element, transcript *core.Transcript) DLEQProof {
|
|
|
|
@ -47,12 +48,14 @@ func DiscreteLogEquivalenceProof(k *ristretto.Scalar, X *ristretto.Element, Y *r
|
|
|
|
|
// VerifyDiscreteLogEquivalenceProof verifies the DLEQ for the given parameters and transcript
|
|
|
|
|
// Given Y = kX & Q = kP and Proof = (c,s)
|
|
|
|
|
// Vicky: X' := sX
|
|
|
|
|
// Y' := cY
|
|
|
|
|
// P' := sP
|
|
|
|
|
// Q' := cQ
|
|
|
|
|
// A' = X'+Y' == sX + cY ?= sG + ckG == (s+ck)X == tX == A
|
|
|
|
|
// B' = P'+Q' == sP + cQ ?= sP + ckP == (s+ck)P == tP == B
|
|
|
|
|
// c' := H(transcript(X,Y,P,Q,A',B'))
|
|
|
|
|
//
|
|
|
|
|
// Y' := cY
|
|
|
|
|
// P' := sP
|
|
|
|
|
// Q' := cQ
|
|
|
|
|
// A' = X'+Y' == sX + cY ?= sG + ckG == (s+ck)X == tX == A
|
|
|
|
|
// B' = P'+Q' == sP + cQ ?= sP + ckP == (s+ck)P == tP == B
|
|
|
|
|
// c' := H(transcript(X,Y,P,Q,A',B'))
|
|
|
|
|
//
|
|
|
|
|
// Tests c ?= c
|
|
|
|
|
func VerifyDiscreteLogEquivalenceProof(dleq DLEQProof, X *ristretto.Element, Y *ristretto.Element, P *ristretto.Element, Q *ristretto.Element, transcript *core.Transcript) bool {
|
|
|
|
|
|
|
|
|
|