首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pedersen /circomlibjs不一致?

Pedersen /circomlibjs不一致?
EN

Stack Overflow用户
提问于 2022-09-09 11:20:05
回答 1查看 88关注 0票数 0

作为更大用例的单元测试,我正在检查我在前端所做的pedersen哈希是否与通过圆环电路完成的预期哈希对齐。我在电路中使用一个简单的断言,并生成一个见证,并将散列和未散列的值都输入到电路中,重新创建散列以确保它通过。

我正在使用circomlibjs在我的前端运行Pedersen散列。作为一个单元测试,我有。一个简单断言的电路,检查来自我的前端的结果是否与圆环电路中的pedersen散列一致。

我使用的电路:

代码语言:javascript
运行
复制
include "../node_modules/circomlib/circuits/bitify.circom";
include "../node_modules/circomlib/circuits/pedersen.circom";

template check() {
    signal input unhashed;
    signal input hashed;
    signal output createdHash[2];

    component hasher = Pedersen(256);
    component unhashedBits = Num2Bits(256);

    unhashedBits.in <== unhashed;

    for (var i = 0; i < 256; i++){
        hasher.in[i] <== unhashedBits.out[i];
    }

    createdHash[0] <== hasher.out[0];
    createdHash[1] <== hasher.out[1];

    hashed === createdHash[1];
}

component main = check();

在前面,我在运行以下命令,

代码语言:javascript
运行
复制
import { buildPedersenHash } from 'circomlibjs';


export function buff2hex(buff) {
    function i2hex(i) {
      return ('0' + i.toString(16)).slice(-2);
    }
    return '0x' + Array.from(buff).map(i2hex).join('');
}


const secret = (new TextEncoder(32)).encode("Hello");

var pedersen = await buildPedersenHash();
var h = pedersen.hash(secret);

console.log(buff2hex(secret));
console.log(buff2hex(h));

所打印的值是:

代码语言:javascript
运行
复制
0x48656c6c6f
0x0e90d7d613ab8b5ea7f4f8bc537db6bb0fa2e5e97bbac1c1f609ef9e6a35fd8b

这与这里的测试是一致的。

所以我创建了一个input.json文件,如下所示,

代码语言:javascript
运行
复制
{
    "unhashed": "0x48656c6c6f",
    "hashed": "0x0e90d7d613ab8b5ea7f4f8bc537db6bb0fa2e5e97bbac1c1f609ef9e6a35fd8b" 
}

最后,运行下面的脚本来创建一个见证,希望断言能够通过。

代码语言:javascript
运行
复制
# Compile the circuit
circom ${CIRCUIT}.circom --r1cs --wasm --sym --c

# Generate the witness.wtns
node ${CIRCUIT}_js/generate_witness.js ${CIRCUIT}_js/${CIRCUIT}.wasm input.json ${CIRCUIT}_js/witness.wtns

不过,我一直有断言错误,

代码语言:javascript
运行
复制
Error: Error: Assert Failed.
Error in template check_11 line: 26

它描述了电路中的断言,所以我假设哈希中有不一致的地方。

我是新来的,所以任何见解都会非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-09-11 17:15:13

对于任何一个偶然发现这一点的人来说,问题的起因是明确的。这个问题是通过在输入中将未散列转换为小endian来解决的,我不确定问题到底在哪里,但似乎hasher在前面读它为大端,但输入被期望为小endian (或反面)。

由于我目前已设法修补了这一问题,我将停止调查,但恳请任何进一步了解这一点的人给出更好的解释。

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

https://stackoverflow.com/questions/73661360

复制
相关文章

相似问题

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