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

ops/2024/11/13 9:39:31/

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.ppmy.cn/ops/105266.html

相关文章

Day-03-信号与槽的三种代码引入方式

一、构造函数引用 1、引出三个按键 2、为了方便区分和编写&#xff0c;对控件进行改名 3、切记切记&#xff0c;注意函数声明 4、注意相关的头文件 5、快捷跳转 二、Lambda函数引用 lambda函数不需要另外再单独声明其他函数 三、函数指针直接连接信号与槽 此种引用需要另外声明…

数据库系统之逻辑设计

数据库的逻辑设计是将概念设计阶段产生的实体关系图&#xff08;ER图&#xff09;转化为具体的数据库表结构的过程。这一阶段的目标是创建一个高效、易于管理和扩展的数据库模式。下面我将通过一个简单的例子来详细介绍数据库逻辑设计的过程。 ### 示例&#xff1a;图书管理系…

C_12_链表

链表 概述&#xff1a; 是一种数据结构 分为单链表与双链表两种 单链表&#xff1a; 链表种节点是离散的在内存中开辟空间的 因为是离散开辟&#xff0c;内存地址通常不是连续的&#xff0c;地址不一定相邻&#xff0c;甚至可能存在其他数据在它们之间。 双链表 1 定义节点 分…

Anaconda的包管理

使用pip命令安装第三方包的方法&#xff0c;其中package-name代表程序包的名字 pip install package-name使用conda下载Python程序包 conda install package-name使用conda list可以查看有哪些包是使用conda进行安装的。 使用pip list可以查看有哪些包是使用pip进行安装的。

【STM32】FMC

FMC功能与FSMC类似&#xff0c;但比FSMC更强大&#xff0c;但仅在F4 / F7 / H7等高级一点的MCU上支持&#xff0c;F1不支持。虽然我的是F103&#xff0c;但顺便都看了。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目…

【人工智能】项目案例分析:使用TensorFlow进行大规模对象检测

&#x1f3c6;&#x1f3c6;欢迎大家来到我们的天空&#x1f3c6;&#x1f3c6; &#x1f3c6; 作者简介&#xff1a;我们的天空 &#x1f3c6;《头衔》&#xff1a;大厂高级软件测试工程师&#xff0c;阿里云开发者社区专家博主&#xff0c;CSDN人工智能领域新星创作者。 &…

Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

win10配置adb环境变量

初始状态&#xff1a; 最简单的配置方案&#xff0c;直接复制adb所在路径&#xff1a; 粘贴进来确定即可&#xff1a; 然后打开 cmd 查看已经配置成功了&#xff1a;