Несоответствие Pedersen circom/circomlibjs?

В качестве модульного теста для более крупного варианта использования я проверяю, действительно ли хэш Педерсена, который я делаю во внешнем интерфейсе, совпадает с ожидаемым хэшем, полученным через цепь обхода. Я использую простое утверждение в схеме и генерирую свидетеля и передаю в схему как хешированные, так и нехешированные значения, воссоздавая хэш, чтобы убедиться, что он проходит.

Я запускаю хэш Педерсена в своем интерфейсе, используя circomlibjs. В качестве модульного теста у меня есть. схема с простым утверждением, которое проверяет, совпадают ли результаты моего внешнего интерфейса с хэшем Педерсена в цепи circom.

Схема, которую я использую:

      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

Что описывает утверждение в схеме, поэтому я предполагаю, что в хэше есть несоответствие.

Я новичок в circom, поэтому любые идеи будут очень признательны!

0 ответов

Другие вопросы по тегам