1.4个函数
1.1 生成密钥函数VRFgen:生成一个公钥私钥对(VRFSK、VRFPK)
VRFSK: secret key
VRFPK: public key
1.2. 生成随机数输出VRFval
伪随机值val = VRFval (VRFSK, x)
input :x
1.3. 计算零知识证明VRFprove
varProof, proof = VRFprove(VRFSK, x)
验证 val和varProof相等
1.4. 验证随机数输出 VRFver
VRFver(VRFPK, x, val,proof)
eg. fn vrf_verify(PublicKey, Transcript, val, proof) -> bool;
2. 伪代码
func TestHonestComplete(t *testing.T) {
// 证明者
pk, sk, err := GenerateKey(nil) // step 1, 生成密钥对
if err != nil {
t.Fatal(err)
}
alice := []byte("alice") // Info
aliceVRF := Compute(alice, sk) // step 2, 计算result
aliceVRFFromProof, aliceProof := Prove(alice, sk)
// step 3, 计算proof,这儿是aliceVRFFromProof
fmt.Printf("pk: %X\n", pk)
fmt.Printf("sk: %X\n", *sk)
fmt.Printf("alice(bytes): %X\n", alice)
fmt.Printf("aliceVRF: %X\n", aliceVRF)
fmt.Printf("aliceProof: %X\n", aliceProof)
// 接收者
if !bytes.Equal(aliceVRF, aliceVRFFromProof) { // step 5,验证result 和proof
t.Errorf("Compute != Prove")
}
if !Verify(pk, alice, aliceVRF, aliceProof) { // step 7, 加入PK和Info验证
t.Errorf("Gen -> Compute -> Prove -> Verify -> FALSE")
}
}