arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/sha512/ch.go
sha512/ch.goRaw
 1package sha512
 2
 3import (
 4	"github.com/consensys/gnark/frontend"
 5)
 6
 7func Ch_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	out := make([] frontend.Variable, n)
13	for k := 0; k < n; k++ {
14		out[k] = api.Add(api.Mul(a[k], api.Sub(b[k], c[k])), c[k]);
15	}
16	return out
17}
18
19// template Ch_t512(n) {
20//     signal input a[n];
21//     signal input b[n];
22//     signal input c[n];
23//     signal output out[n];
24
25//     for (var k=0; k<n; k++) {
26//         out[k] <== a[k] * (b[k]-c[k]) + c[k];
27//     }
28// }