gnark-plonky2-verifier/sha512/maj.go
sha512/maj.goRaw
1package sha512
2
3import (
4 "github.com/consensys/gnark/frontend"
5)
6
7func Maj_t512(api frontend.API, a, b, c [] frontend.Variable) ([] frontend.Variable) {
8 n := len(a)
9 if len(a) != n { panic("bad length") }
10 if len(b) != n { panic("bad length") }
11 if len(c) != n { panic("bad length") }
12 mid := make([] frontend.Variable, n)
13 out := make([] frontend.Variable, n)
14 for k := 0; k < n; k++ {
15 mid[k] = api.Mul(b[k], c[k])
16 out[k] = api.Add(api.Mul(a[k], api.Sub(api.Add(b[k], c[k]), api.Mul(2, mid[k]))), mid[k])
17 }
18 return out
19}
20
21
22// template Maj_t512(n) {
23// signal input a[n];
24// signal input b[n];
25// signal input c[n];
26// signal output out[n];
27// signal mid[n];
28
29// for (var k=0; k<n; k++) {
30// mid[k] <== b[k]*c[k];
31// out[k] <== a[k] * (b[k]+c[k]-2*mid[k]) + mid[k];
32// }
33// }