1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00
ZoKrates/zokrates_stdlib/stdlib/hashes/mimcSponge/mimcSponge.zok
2022-06-28 19:23:45 +02:00

20 lines
No EOL
636 B
Text

import "./mimcFeistel" as MiMCFeistel;
def main<nInputs, nOutputs>(field[nInputs] ins, field k) -> field[nOutputs] {
field[nInputs + nOutputs - 1][2] mut S = [[0; 2]; nInputs + nOutputs - 1];
field[nOutputs] mut outs = [0; nOutputs];
for u32 i in 0..nInputs {
u32 j = i == 0 ? 0 : i - 1;
S[i] = i == 0 ? MiMCFeistel(ins[0], 0, k) : MiMCFeistel(S[j][0] + ins[i], S[j][1], k);
}
outs[0] = S[nInputs - 1][0];
for u32 i in 0..(nOutputs - 1) {
S[nInputs + i] = MiMCFeistel(S[nInputs + i - 1][0], S[nInputs + i - 1][1], k);
outs[i + 1] = S[nInputs + i][0];
}
return outs;
}