VRF可验证随机函数(2)4个函数

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;

VRF可验证随机函数(2)4个函数
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")
    }
}
上一篇:UDP . 操作系统发展 . 多道技术


下一篇:linux源码解读(十九):网络通信原理简介&sk_buff结构体介绍