Pedersen circom/circomlibjs 不一致?

问题描述 投票:0回答:1

作为更大用例的单元测试,我正在检查我在前端执行的 pedersen 哈希确实与通过 circom 电路完成的预期哈希一致。我在电路中使用一个简单的断言并生成一个见证,并将散列值和未散列值提供给电路,重新创建散列以确保它通过。

我正在使用 circomlibjs 在前端运行 Pedersen 哈希。作为单元测试,我有。一个带有简单断言的电路,用于检查我前端的结果是否与 circom 电路中的 pedersen 哈希值一致。

我使用的电路:

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();

在前端,我正在运行以下内容,

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));

打印的值是:

0x48656c6c6f
0x0e90d7d613ab8b5ea7f4f8bc537db6bb0fa2e5e97bbac1c1f609ef9e6a35fd8b

此处所做的测试一致。

然后我创建一个 input.json 文件,如下所示,

{
    "unhashed": "0x48656c6c6f",
    "hashed": "0x0e90d7d613ab8b5ea7f4f8bc537db6bb0fa2e5e97bbac1c1f609ef9e6a35fd8b" 
}

最后运行以下脚本来创建见证人,希望断言能够通过。

# 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

但是,我不断收到断言错误,

Error: Error: Assert Failed.
Error in template check_11 line: 26

它描述了电路中的断言,所以我假设散列中存在不一致。

hash node-modules circuit circom zk-snark
1个回答
2
投票

对于任何偶然发现这个问题的人来说,问题的原因恰好是字节顺序。通过将输入中的未散列转换为小尾数法解决了该问题,我不确定问题到底出在哪里,但似乎哈希器在前端将其读取为大尾数法,但输入预计为小尾数法(或反之)诗句)。

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

© www.soinside.com 2019 - 2024. All rights reserved.