arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
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// }