37 secp256k1_scalar_add(r, b, b);
38 secp256k1_scalar_negate(r, r);
41 secp256k1_scalar_negate(r, b);
44 secp256k1_scalar_clear(r);
50 secp256k1_scalar_add(r, b, b);
53 secp256k1_scalar_mul(r, &a->
scal, b);
59 secp256k1_scalar_mul(&mul, &a->
scal, b);
60 CHECK(secp256k1_scalar_eq(&mul, r));
86 secp256k1_scalar yinvn, zyn;
87 secp256k1_scalar zsqr;
99 secp256k1_scalar_sqr(&zsqr, z);
101 secp256k1_scalar_mul(&ret->
zn[0], &zsqr, z);
104 secp256k1_scalar_mul(&ret->
zn[i], &ret->
zn[i - 1], z);
108 secp256k1_scalar_set_int(&yinvn, 1);
109 secp256k1_scalar_clear(&ret->
c_sum);
111 for (i = 0; i < circ->
n_gates; i++) {
116 if (i < circ->n_bits) {
117 secp256k1_scalar_negate(&ret->
wr[i], z);
119 secp256k1_scalar_mul(&wl, &wl, &yinvn);
120 secp256k1_scalar_add(&wl, &wl, z);
122 secp256k1_scalar_mul(&ret->
wl_wo[i], &wl, x);
123 secp256k1_scalar_add(&ret->
wl_wo[i], &ret->
wl_wo[i], &zsqr);
126 secp256k1_scalar_mul(&wl, &wl, &zyn);
127 secp256k1_scalar_negate(&wl, &wl);
129 secp256k1_scalar_add(&ret->
c_sum, &ret->
c_sum, &wl);
130 secp256k1_scalar_add(&ret->
c_sum, &ret->
c_sum, &zyn);
131 secp256k1_scalar_mul(&zyn, &zyn, y);
136 secp256k1_scalar_mul(&tmp, &wl, x);
137 secp256k1_scalar_add(&tmp, &tmp, &ret->
wl_wo[i]);
138 secp256k1_scalar_mul(&ret->
wl_wo[i], &tmp, &yinvn);
140 secp256k1_scalar_mul(&ret->
wr[i], &ret->
wr[i], &yinvn);
142 secp256k1_scalar_mul(&tmp, &wl, &ret->
wr[i]);
143 secp256k1_scalar_add(&ret->
c_sum, &ret->
c_sum, &tmp);
146 secp256k1_scalar_mul(&yinvn, &yinvn, yinv);
149 secp256k1_scalar_sqr(&tmp, x);
152 secp256k1_scalar_mul(&ret->
wv[i], &ret->
wv[i], &tmp);
156 secp256k1_scalar term;
158 secp256k1_scalar_add(&ret->
c_sum, &ret->
c_sum, &term);
160 secp256k1_scalar_mul(&ret->
c_sum, &ret->
c_sum, &tmp);
199 secp256k1_scalar yinvn, yn;
200 secp256k1_scalar zsqr;
203 secp256k1_scalar_sqr(&zsqr, z);
205 secp256k1_scalar_mul(&ret->
zn[0], &zsqr, z);
208 secp256k1_scalar_mul(&ret->
zn[i], &ret->
zn[i - 1], z);
211 secp256k1_scalar_set_int(&yinvn, 1);
212 secp256k1_scalar_set_int(&yn, 1);
214 for (i = 0; i < circ->
n_gates; i++) {
215 secp256k1_scalar wl, wr, wo;
223 if (i < circ->n_bits) {
224 secp256k1_scalar tmp;
226 secp256k1_scalar_negate(&tmp, z);
227 secp256k1_scalar_add(&wr, &wr, &tmp);
229 secp256k1_scalar_mul(&tmp, &yn, z);
230 secp256k1_scalar_add(&wl, &wl, &tmp);
232 secp256k1_scalar_mul(&tmp, &tmp, z);
233 secp256k1_scalar_add(&wo, &wo, &tmp);
235 secp256k1_scalar_mul(&wr, &wr, &yinvn);
239 secp256k1_scalar_mul(&ret->
r3[i], &ret->
r3[i], &yn);
241 if (i < assn->n_gates) {
242 secp256k1_scalar_add(&ret->
l1[i], &wr, &assn->
al[i]);
245 secp256k1_scalar_negate(&ret->
r0[i], &yn);
246 secp256k1_scalar_add(&ret->
r0[i], &ret->
r0[i], &wo);
248 if (i < assn->n_gates) {
249 secp256k1_scalar_mul(&ret->
r1[i], &assn->
ar[i], &yn);
250 secp256k1_scalar_add(&ret->
r1[i], &ret->
r1[i], &wl);
255 secp256k1_scalar_mul(&yn, &yn, y);
256 secp256k1_scalar_mul(&yinvn, &yinvn, yinv);
void secp256k1_bulletproof_pf_compress_circuit(secp256k1_bulletproof_pf_compressed_circuit *ret, const secp256k1_bulletproof_circuit *circ, const secp256k1_bulletproof_circuit_assignment *assn, const secp256k1_scalar *y, const secp256k1_scalar *yinv, const secp256k1_scalar *z)
secp256k1_bulletproof_vfy_compressed_circuit * secp256k1_bulletproof_vfy_compress_circuit(secp256k1_scratch *scratch, const secp256k1_bulletproof_circuit *circ, const secp256k1_scalar *x, const secp256k1_scalar *y, const secp256k1_scalar *yinv, const secp256k1_scalar *z)
secp256k1_fast_scalar scal