In the CMP keygen we need to perform the Schnorr proof of knowledge interactively, but for FROST this can be done in a non-interactively. This resulted in a weak API where parameters were confusing.
Instead, we now define Randomness, Commitment, Response and Proof types.
Randomness represents the secret randomness used to generate the Commitment sent in the first round of the Sigma protocol. A prove calls r := NewRandomness() and obtains the Commitment by calling commitment := r.Commitment().
Later, when the appropriate context was provided to the hash function, the Response is generated by calling response := r.Prove(h, public, secret). The response can be verified by calling response.Verify(h, public, commitment)
A non-interactive Proof is a wrapper that contains a Commitment and the corresponding Response and can be validated using the same API as other ZK proofs
In the CMP keygen we need to perform the Schnorr proof of knowledge interactively, but for FROST this can be done in a non-interactively. This resulted in a weak API where parameters were confusing.
Instead, we now define
Randomness
,Commitment
,Response
andProof
types.Randomness
represents the secret randomness used to generate theCommitment
sent in the first round of the Sigma protocol. A prove callsr := NewRandomness()
and obtains theCommitment
by callingcommitment := r.Commitment()
.Response
is generated by callingresponse := r.Prove(h, public, secret)
. The response can be verified by callingresponse.Verify(h, public, commitment)
Proof
is a wrapper that contains aCommitment
and the correspondingResponse
and can be validated using the same API as other ZK proofs