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