181-circom签名方案

文章展示了如何使用circom库和Poseidon哈希函数来创建签名方案,包括生成公钥、进行签名以及实现群签名。模板函数SkToPk用于从私钥生成公钥,Sign函数执行签名过程,而GroupSign则扩展到多用户的群签名场景。
摘要由CSDN通过智能技术生成

我们来用circom写一个签名方案

要签名

那么就需要什么

1.需要公钥和私钥

2.需要sign

3.需要verify

好,那么我们来试试看

pragma circom 2.1.4;

include "circomlib/poseidon.circom";
// include "https://github.com/0xPARC/circom-secp256k1/blob/master/circuits/bigint.circom";

template SkToPk () {
    signal input sk;
    signal output pk;

    component p;
    p = Poseidon(1);
    p.inputs[0] <== sk;
    pk <== p.out;
}

component main = SkToPk();

/* INPUT = {
    "sk": "5"
} */

这就是一个最简单的

利用Poseidon来生成公钥的办法

然后接下来我们来写sign签名

pragma circom 2.1.4;

include "circomlib/poseidon.circom";
// include "https://github.com/0xPARC/circom-secp256k1/blob/master/circuits/bigint.circom";

template SkToPk () {
    signal input sk;
    signal output pk;

    component p;
    p = Poseidon(1);
    p.inputs[0] <== sk;
    pk <== p.out;
}

template Sign () {
    signal input sk;
    signal input pk;
    signal input m;

    component s2p;
    s2p = SkToPk();
    s2p.sk <== sk;
    s2p.pk === pk;

}

component main {public [pk, m]}= Sign();

/* INPUT = {
    "sk": "5",
    "pk": "19065150524771031435284970883882288895168425523179566388456001105768498065277",
    "m": "1"
} */

然后我们来写GroupSign

pragma circom 2.1.4;

include "circomlib/poseidon.circom";
// include "https://github.com/0xPARC/circom-secp256k1/blob/master/circuits/bigint.circom";

template SkToPk () {
    signal input sk;
    signal output pk;

    component p;
    p = Poseidon(1);
    p.inputs[0] <== sk;
    pk <== p.out;
}

template GroupSign(n) {
    signal input sk;
    signal input pk[n];
    signal input m;

    component s2p;
    s2p = SkToPk();
    s2p.sk <== sk;
    // s2p.pk === pk;

    signal zeroChecker[n+1];
    zeroChecker[0] <== 1;
    for (var i=0; i<n ; i++){
        zeroChecker[i+1] <== zeroChecker[i] * (s2p.pk - pk[i]);
    }

    zeroChecker[n] === 0;
}

component main {public [pk, m]}= GroupSign(3);

/* INPUT = {
    "sk": "5",
    "pk": ["19065150524771031435284970883882288895168425523179566388456001105768498065277", "1", "2"],
    "m": "1"
} */

好复杂

其实还好

仔细一看

也挺简单的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值