Add Circom Pad impl

This commit is contained in:
2021-11-02 20:17:36 +01:00
parent 4bae0b97a6
commit e48f7347eb
5 changed files with 102 additions and 2 deletions

46
circuits/keccak256.circom Normal file
View 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];
}
}