Configure a cyclic group
In order to perform any Pedersen operations (like splitting a secret, combining a secret or verifying a secret part or every secret parts), a cyclic group must be generated. In particular given two large primes and such that divides , is the unique subgroup of of order . Let and be two generators of .
The cyclic group can be instantiated in two ways.
Generate a new group
In this case a fresh cyclic group is generated at random by using the function pedersen.NewSchnorrGroup()
:
import (
"github.com/matteoarella/pedersen"
)
groupSize := 1024
group, err := pedersen.NewSchnorrGroup(groupSize)
if err != nil {
panic(err)
}
Use a previously generated group
For reconstructing a secret or validating the secret parts the same group that has been adopted for splitting the secret
must be used.
In this case you cannot use the pedersen.NewSchnorrGroup()
function otherwise a fresh group is generated.
The pedersen.Group
object must be instantiated by specifying the , , and parameters as follows:
import (
"github.com/matteoarella/pedersen"
"github.com/matteoarella/pedersen/big"
)
p, err := big.NewInt()
// check err
q, err := big.NewInt()
// check err
g, err := big.NewInt()
// check err
h, err := big.NewInt()
// check err
err = p.SetDecString("17634709279010524619")
// check err
err = q.SetDecString("8817354639505262309")
// check err
err = g.SetDecString("8414335786771157015")
// check err
err = h.SetDecString("15078279289296123424")
// check err
group := pedersen.Group{
P: p, // prime p
Q: q, // prime q
G: g, // first generator g
H: h, // second generator h
}
Use a group
The group
object created with one of the two methods depicted above can be used for instantiating a pedersen.Pedersen
object as follows:
schemeParts := 5
schemeThreshold := 3
p, err := pedersen.NewPedersen(schemeParts, schemeThreshold, pedersen.CyclicGroup(group))
if err != nil {
panic(err)
}