arnaucube
arnaucube/circomPublic Self-hosted repository
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}