mirror of
https://github.com/arnaucube/keccak256-circom.git
synced 2026-01-11 00:11:30 +01:00
Add Circom Pad impl
This commit is contained in:
46
circuits/keccak256.circom
Normal file
46
circuits/keccak256.circom
Normal file
@@ -0,0 +1,46 @@
|
||||
pragma circom 2.0.0;
|
||||
|
||||
include "./utils.circom";
|
||||
|
||||
template Pad(nBits) {
|
||||
signal input in[nBits];
|
||||
var blockSize=136*8;
|
||||
signal output out[blockSize];
|
||||
signal out2[blockSize];
|
||||
var i;
|
||||
|
||||
for (i=0; i<nBits; i++) {
|
||||
out2[i] <== in[i];
|
||||
}
|
||||
var domain = 0x01;
|
||||
for (i=0; i<8; i++) {
|
||||
out2[nBits+i] <== (domain >> i) & 1;
|
||||
}
|
||||
for (i=nBits+8; i<blockSize; i++) {
|
||||
out2[i] <== 0;
|
||||
}
|
||||
component aux = OrArray(8);
|
||||
for (i=0; i<8; i++) {
|
||||
aux.a[i] <== out2[blockSize-8+i];
|
||||
aux.b[i] <== (0x80 >> i) & 1;
|
||||
}
|
||||
for (i=0; i<8; i++) {
|
||||
out[blockSize-8+i] <== aux.out[i];
|
||||
}
|
||||
for (i=0; i<blockSize-8; i++) {
|
||||
out[i]<==out2[i];
|
||||
}
|
||||
}
|
||||
|
||||
template Keccak256(nBits) {
|
||||
signal input in[nBits];
|
||||
signal output out[256];
|
||||
var i;
|
||||
|
||||
// pad
|
||||
component pad = Pad(nBits);
|
||||
for (i=0; i<nBits; i++) {
|
||||
pad.in[i] <== in[i];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user