mirror of
https://github.com/arnaucube/eth-kzg-ceremony-alt.git
synced 2026-01-08 15:01:30 +01:00
Add BatchContribution computation
This commit is contained in:
@@ -9,6 +9,8 @@ import (
|
|||||||
|
|
||||||
// todo: unify addition & multiplicative notation in the comments
|
// todo: unify addition & multiplicative notation in the comments
|
||||||
|
|
||||||
|
const MinRandomnessLen = 64
|
||||||
|
|
||||||
type Witness struct {
|
type Witness struct {
|
||||||
RunningProducts []*bls12381.PointG1
|
RunningProducts []*bls12381.PointG1
|
||||||
PotPubKeys []*bls12381.PointG2
|
PotPubKeys []*bls12381.PointG2
|
||||||
@@ -28,6 +30,16 @@ type State struct {
|
|||||||
ParticipantECDSASignatures []string
|
ParticipantECDSASignatures []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Contribution struct {
|
||||||
|
NumG1Powers uint64
|
||||||
|
NumG2Powers uint64
|
||||||
|
PowersOfTau *SRS
|
||||||
|
PotPubKey *bls12381.PointG2
|
||||||
|
}
|
||||||
|
type BatchContribution struct {
|
||||||
|
Contributions []Contribution
|
||||||
|
}
|
||||||
|
|
||||||
func (cs *State) Contribute(randomness []byte) (*State, error) {
|
func (cs *State) Contribute(randomness []byte) (*State, error) {
|
||||||
ns := State{}
|
ns := State{}
|
||||||
ns.Transcripts = make([]Transcript, len(cs.Transcripts))
|
ns.Transcripts = make([]Transcript, len(cs.Transcripts))
|
||||||
@@ -48,12 +60,31 @@ func (cs *State) Contribute(randomness []byte) (*State, error) {
|
|||||||
append(cs.Transcripts[i].Witness.PotPubKeys, proof.G2P)
|
append(cs.Transcripts[i].Witness.PotPubKeys, proof.G2P)
|
||||||
ns.Transcripts[i].Witness.BLSSignatures = cs.Transcripts[i].Witness.BLSSignatures
|
ns.Transcripts[i].Witness.BLSSignatures = cs.Transcripts[i].Witness.BLSSignatures
|
||||||
}
|
}
|
||||||
ns.ParticipantIDs = cs.ParticipantIDs
|
ns.ParticipantIDs = cs.ParticipantIDs // TODO add github id (id_token.sub)
|
||||||
ns.ParticipantECDSASignatures = cs.ParticipantECDSASignatures
|
ns.ParticipantECDSASignatures = cs.ParticipantECDSASignatures
|
||||||
|
|
||||||
return &ns, nil
|
return &ns, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pb *BatchContribution) Contribute(randomness []byte) (*BatchContribution, error) {
|
||||||
|
nb := BatchContribution{}
|
||||||
|
nb.Contributions = make([]Contribution, len(pb.Contributions))
|
||||||
|
for i := 0; i < len(pb.Contributions); i++ {
|
||||||
|
nb.Contributions[i].NumG1Powers = pb.Contributions[i].NumG1Powers
|
||||||
|
nb.Contributions[i].NumG2Powers = pb.Contributions[i].NumG2Powers
|
||||||
|
|
||||||
|
newSRS, proof, err := Contribute(pb.Contributions[i].PowersOfTau, randomness)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
nb.Contributions[i].PowersOfTau = newSRS
|
||||||
|
|
||||||
|
nb.Contributions[i].PotPubKey = proof.G2P
|
||||||
|
}
|
||||||
|
|
||||||
|
return &nb, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SRS contains the powers of tau in G1 & G2, eg.
|
// SRS contains the powers of tau in G1 & G2, eg.
|
||||||
// [τ'⁰]₁, [τ'¹]₁, [τ'²]₁, ..., [τ'ⁿ⁻¹]₁,
|
// [τ'⁰]₁, [τ'¹]₁, [τ'²]₁, ..., [τ'ⁿ⁻¹]₁,
|
||||||
// [τ'⁰]₂, [τ'¹]₂, [τ'²]₂, ..., [τ'ⁿ⁻¹]₂
|
// [τ'⁰]₂, [τ'¹]₂, [τ'²]₂, ..., [τ'ⁿ⁻¹]₂
|
||||||
@@ -138,7 +169,7 @@ func genProof(toxicWaste *toxicWaste, prevSRS, newSRS *SRS) *Proof {
|
|||||||
// Contribute takes as input the previous SRS and a random
|
// Contribute takes as input the previous SRS and a random
|
||||||
// byte slice, and returns the new SRS together with the Proof
|
// byte slice, and returns the new SRS together with the Proof
|
||||||
func Contribute(prevSRS *SRS, randomness []byte) (*SRS, *Proof, error) {
|
func Contribute(prevSRS *SRS, randomness []byte) (*SRS, *Proof, error) {
|
||||||
if len(randomness) < 64 {
|
if len(randomness) < MinRandomnessLen {
|
||||||
return nil, nil, fmt.Errorf("err randomness") // WIP
|
return nil, nil, fmt.Errorf("err randomness") // WIP
|
||||||
}
|
}
|
||||||
// set tau from randomness
|
// set tau from randomness
|
||||||
|
|||||||
Reference in New Issue
Block a user