首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZoKrates证明中的点序

ZoKrates证明中的点序
EN

Stack Overflow用户
提问于 2019-12-29 03:40:57
回答 1查看 89关注 0票数 0

我正在尝试验证一个具有go-snark验证功能的ZoKrates proof (相同的bn128参数和G16协议)。但由于某些原因,它不能工作,我怀疑这是一个问题,在点的顺序。

exported contract中,G1点的定义是一个具有两个uint的结构,而G2是一个具有22个uint的结构。

因此,库以这种方式声明生成器:

代码语言:javascript
复制
    /// @return the generator of G1
    function P1() pure internal returns (G1Point memory) {
        return G1Point(1, 2);
    }
    /// @return the generator of G2
    function P2() pure internal returns (G2Point memory) {
        return G2Point(
            [11559732032986387107991004021392285783925812861821192530917403151452391805634,
             10857046999023057135944570762232829481370756359578518086990519993285655852781],
            [4082367875863433681332203403145435568316851327593401208105741076214120093531,
             8495653923123431417604973247489272438418190587263600148770280649306958101930]
        );
    }

同时,go-snark package让它变成这样:

代码语言:javascript
复制
    b.Gg1 = [2]*big.Int{
        big.NewInt(int64(1)),
        big.NewInt(int64(2)),
    }

    g2_00, ok := new(big.Int).SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781", 10)
    if !ok {
        return b, errors.New("err with g2_00")
    }
    g2_01, ok := new(big.Int).SetString("11559732032986387107991004021392285783925812861821192530917403151452391805634", 10)
    if !ok {
        return b, errors.New("err with g2_00")
    }
    g2_10, ok := new(big.Int).SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930", 10)
    if !ok {
        return b, errors.New("err with g2_00")
    }
    g2_11, ok := new(big.Int).SetString("4082367875863433681332203403145435568316851327593401208105741076214120093531", 10)
    if !ok {
        return b, errors.New("err with g2_00")
    }

    b.Gg2 = [2][2]*big.Int{
        [2]*big.Int{
            g2_00,
            g2_01,
        },
        [2]*big.Int{
            g2_10,
            g2_11,
        },
    }

所以g1点的顺序是相同的(我猜),但是g2点是颠倒的,我猜所有的bn128点( pk,vk和证明中的点)都是一样的。这是因为一个错误的声明吗?或者实体化中的数组索引被颠倒了?结构声明的方式是相同的吗? proof.json和verification.key中的点是不是为了让它们在可靠的情况下工作?

我有点迷失在我必须改变的点的顺序,在证明和验证密钥中的阿尔法,贝塔,伽马和增量点,使其在golang程序中工作。我甚至不确定输入数组的顺序。

EN

回答 1

Stack Overflow用户

发布于 2020-01-02 12:09:03

所以我想通了。简短的答案是,对于每一种理智的语言,固定性和go都有相同的索引顺序,如果曲线点的定义是一致的,那么顺序并不重要。

我的问题是在两个包中G2点的定义是不同的(可靠合约和go-snark),所以我更改为go的clearmatic bn256包,它是专门为与以太坊一起工作而构建的,一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59514288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档