Ошибка утверждения 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);
Это дает ожидаемый результат, который принимается схемой.
Если у кого-то есть дополнительные идеи, я был бы рад понять это дальше.