当前位置: 首页 > news >正文

【零知识证明】MiMC哈希函数电路

1 哈希电路

哈希函数电路实现:

pragma circom 2.0.0;// y = (x + k + c) ^ 5
// 输入信号x, k ,常量c
// base = x + k + c
// base2 = base * base
// base4 = base2 * base2
// base5 = base *base4
// 输出 ytemplate MIMC5(){signal input x;signal input k;signal output y;var nRounds = 10;var lastOutput[0] <== x;signal lastOutput[nRounds + 1];var base[nRounds];signal base2[nRounds];signal base4[nRounds];var c[nRounds] = [];for(var i = 0; i < nRounds; i++){base[i] = lastOutput[i] + k + c[i];base2[i] <== base[i] * base[i];base4[i] <== base2[i] * base2[i];lastOutput[i+1] <== base[i] + base4[i]; }
}component main = MIMC5();

对于“c”使用ethers中的 BigNumber来生成10个随机的256位数

2 generate_bignumbers.js生成随机数

新建一个名为generate_bignumbers.js的文件

const { ethers } = require("ethers");const num = 10;async function generate(){for (let i = 0; i < num; i++){let n = ethers.BigNumber.from(ethers.utils.randomBytes(32));// ethers v5.6.1// let n = ethers.BigNumber.from(ethers.randomBytes(32));ethers v6console.log(n.toString());}
}generate().catch((err) => {console.log(err); process.exit(1);}
);

下载ethers的版本为v6.13.2,现需要更改为v5.6.0。

第一步,删除package-lock.json文件。

第二步,在package.json文件中将^6.13.2改为^5.6.0 ,并保存文件。

第三步,在终端输入" npm install ",然后等待下载完成。

最后,在终端输入 " node generate_bignumbers.js "得到结果:

 3 编译

第一步,终端输入:

circom circuit.circom --r1cs --wasm

运行成功后会生成circuit_js文件夹中的内容 

第二步,新建一个input.json文件,给出输入x和k的值

{"x" : "156345341","k" : "28965346"
}

第三步,对其生成见证

node ./circuit_js/generate_witness.js ./circuit_js/circuit.wasm input.json output.wtns

生成的见证为output.wtns文件 

第四步,将生成的见证转换为json可读形式:

snarkjs wtns export json output.wtns output.json

结果如下

 


http://www.mrgr.cn/news/14056.html

相关文章:

  • [米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-11 UART串口接收驱动设计
  • 【FPGA】HDMI参数信息汇总
  • 宠物空气净化器哪款更值得推荐?希喂和352哪款更好?
  • 35岁零基础能转型AI大模型吗?
  • CSS 终于在 2024 年增加了垂直居中功能
  • Qt调用外部exe并嵌入到Qt界面中(验证成功的成功)
  • 如何解决:Failed to start jenkins.service: Unit not found.
  • P1009 【深基4,例7】阶乘之和
  • Java对象属性比较工具类(可用)
  • 【中秋特惠】南卡Runner Pro5:送给家人的科技健康礼!
  • 不用async与await将异步函数改为同步函数
  • 【递归回溯之floodfill算法专题练习】
  • 了解CSS中的BFC
  • 华为设备默认密码
  • Lombok组件的使用
  • E29.【C语言】练习:sizeof和strlen的习题集(A)
  • matlab 将数组从左向右翻转
  • 电子电气架构 --- 车载网简史(上)
  • 迷雾大陆辅助:VMOS云手机助力升级装备系统秘籍!
  • Python——xml.etree.ElementTree