arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/sha512/sigma.go
sha512/sigma.goRaw
 1package sha512
 2
 3import (
 4    "github.com/consensys/gnark/frontend"
 5)
 6
 7
 8func SmallSigma512(api frontend.API, in []frontend.Variable, ra, rb, rc int) ([]frontend.Variable) {
 9    if len(in) != 64 { panic("bad length") }
10
11    rota := RotR512(api, in, ra)
12    rotb := RotR512(api, in, rb)
13    shrc := ShR512(api, in, rc)
14
15    return Xor3_512(api, rota, rotb, shrc)
16}
17
18// template SmallSigma512(ra, rb, rc) {
19//     signal input in[64];
20//     signal output out[64];
21//     var k;
22
23//     component rota = RotR512(64, ra);
24//     component rotb = RotR512(64, rb);
25//     component shrc = ShR512(64, rc);
26
27//     for (k=0; k<64; k++) {
28//         rota.in[k] <== in[k];
29//         rotb.in[k] <== in[k];
30//         shrc.in[k] <== in[k];
31//     }
32
33//     component xor3 = Xor3_512(64);
34//     for (k=0; k<64; k++) {
35//         xor3.a[k] <== rota.out[k];
36//         xor3.b[k] <== rotb.out[k];
37//         xor3.c[k] <== shrc.out[k];
38//     }
39
40//     for (k=0; k<64; k++) {
41//         out[k] <== xor3.out[k];
42//     }
43// }
44
45func BigSigma512(api frontend.API, in []frontend.Variable, ra, rb, rc int) ([]frontend.Variable) {
46    if len(in) != 64 { panic("bad length") }
47
48    rota := RotR512(api, in, ra)
49    rotb := RotR512(api, in, rb)
50    rotc := RotR512(api, in, rc)
51
52    return Xor3_512(api, rota, rotb, rotc)
53}
54
55// template BigSigma512(ra, rb, rc) {
56//     signal input in[64];
57//     signal output out[64];
58//     var k;
59
60//     component rota = RotR512(64, ra);
61//     component rotb = RotR512(64, rb);
62//     component rotc = RotR512(64, rc);
63//     for (k=0; k<64; k++) {
64//         rota.in[k] <== in[k];
65//         rotb.in[k] <== in[k];
66//         rotc.in[k] <== in[k];
67//     }
68
69//     component xor3 = Xor3_512(64);
70
71//     for (k=0; k<64; k++) {
72//         xor3.a[k] <== rota.out[k];
73//         xor3.b[k] <== rotb.out[k];
74//         xor3.c[k] <== rotc.out[k];
75//     }
76
77//     for (k=0; k<64; k++) {
78//         out[k] <== xor3.out[k];
79//     }
80// }
81