Ошибка утверждения Circomlib на простом хеше MimcSponge

Я играю с circom и circomlib.

Я использую простую схему хеширования mimcsponge и смотрю, смогу ли я создать правильный ввод через интерфейс javascript.

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

          template sponge_test() {
    signal input l;
    signal input r;
    signal input o;

    // instantiate - 2 inputs 220 rounds of hashing and 1 output
    component hasher = MiMCSponge(2, 220, 1);

    // signals in hasher
    hasher.ins[0] <== l;
    hasher.ins[1] <== r;

    // addition constant
    hasher.k <== 0;

    o === hasher.outs[0];

}

component main = sponge_test();

В моем интерфейсе javascript я импортирую circomlib

          import { buildMimcSponge } from 'circomlibjs';
        
    function toHexString(byteArray) {
      return Array.from(byteArray, function(byte) {
        return ('0' + (byte & 0xFF).toString(16)).slice(-2);
      }).join('')
    }
    
    export async function getProof(message) {
      var hasher = await buildMimcSponge();
      var h = hasher.multiHash([BigInt("0x3"), BigInt("0x4")]);

      // returns byte array
      console.log(h);
      // back to hexstring
      console.log(toHexString(h));
    
    }

Затем я создаю input.json, который выглядит так:

          {
        "l": "0x3",
        "r": "0x4",
        "o": "0x690f48aba976f2786371b7fa3e941df623e96329e0570dc610f59b7fcfa94723"
    }

Это включает в себя значения, которые я использовал для ввода хеширования, и вывод, который я получил от печати шестнадцатеричного значения, а затем запустил следующий скрипт.

          # 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

И я получаю сообщение об ошибке, что утверждение(o===hasher.outs[0])терпит неудачу.

Теперь я знаю, что эта схема mimcsponge также использует 220 раундов в javascript-реализации circomlib, глядя на библиотеку узлов, где еще я могу получить противоречивые результаты для хеширования?

1 ответ

Итак, я обнаружил, что чтение has выполняется с использованием следующего. Я полагаю, что это связано с используемыми эллиптическими кривыми.

      hasher.F.toString(h, 16);

Это дает ожидаемый результат, который принимается схемой.

Если у кого-то есть дополнительные идеи, я был бы рад понять это дальше.

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