当前位置: 首页 > 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

结果如下

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 罗素悖论 是集合论中的一个经典悖论
  • 【C语言】十六进制、二进制、字节、位
  • 【论文阅读】Single-Stage Visual Query Localization in Egocentric Videos
  • 一键编译QT5源码脚本(交叉编译arm64、mips64版本)
  • 春秋云镜(ZZCMS 2023)·CVE-2023-50104
  • 深入探究Nginx中的URL哈希负载均衡策略
  • 引用和类型强转
  • Java算法之快速排序(Quick Sort)
  • AMD Zen 5 微架构及其市场策略
  • 简单排序(sort)
  • Openstack 与 Ceph集群搭建(完结): 配置Ceph作为Openstack后端存储
  • 如何打造基于Java SpringBoot和Vue的医院门诊智能预约平台?四步实现高效就医流程,整合MySQL数据库,优化用户体验。
  • 功能测试常用的测试用例大全
  • C#泛型相关
  • 【最新华为OD机试E卷】boos的收入(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 【Amaple教程】5. 插件
  • 2017前端实习生面试总结
  • Android组件 - 收藏集 - 掘金
  • Bootstrap JS插件Alert源码分析
  • Elasticsearch 参考指南(升级前重新索引)
  • HTTP--网络协议分层,http历史(二)
  • IP路由与转发
  • JAVA SE 6 GC调优笔记
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PV统计优化设计
  • Python学习笔记 字符串拼接
  • socket.io+express实现聊天室的思考(三)
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Theano - 导数
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • uni-app项目数字滚动
  • vue 配置sass、scss全局变量
  • vue:响应原理
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vultr 教程目录
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端面试总结(at, md)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用common-codec进行md5加密
  • 通信类
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​学习一下,什么是预包装食品?​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • $.ajax()
  • $.proxy和$.extend
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (八)Flask之app.route装饰器函数的参数
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (算法)求1到1亿间的质数或素数
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • ****三次握手和四次挥手