circom/circuits/sha256/sigma.circom
circuits/sha256/sigma.circomRaw
1include "xor3.circom";
2include "rotate.circom";
3include "shift.circom";
4
5template SmallSigma(ra, rb, rc) {
6 signal input in[32];
7 signal output out[32];
8
9 component xor3 = Xor3(32);
10
11 component rota = RotR(32, ra);
12 component rotb = RotR(32, rb);
13 component shrc = ShR(32, rc);
14
15 for (var k=0; k<32; k++) {
16 rota.in[k] <== in[k];
17 rotb.in[k] <== in[k];
18 shrc.in[k] <== in[k];
19
20 xor3.a[k] <== rota.out[k];
21 xor3.b[k] <== rotb.out[k];
22 xor3.c[k] <== shrc.out[k];
23
24 out[k] <== xor3.out[k];
25 }
26}
27
28template BigSigma(ra, rb, rc) {
29 signal input in[32];
30 signal output out[32];
31
32 component xor3 = Xor3(32);
33
34 component rota = RotR(32, ra);
35 component rotb = RotR(32, rb);
36 component rotc = RotR(32, rc);
37
38 for (var k=0; k<32; k++) {
39 rota.in[k] <== in[k];
40 rotb.in[k] <== in[k];
41 rotc.in[k] <== in[k];
42
43 xor3.a[k] <== rota.out[k];
44 xor3.b[k] <== rotb.out[k];
45 xor3.c[k] <== rotc.out[k];
46
47 out[k] <== xor3.out[k];
48 }
49}