7 #ifndef SECP256K1_MODULE_COMMITMENT_MAIN
8 #define SECP256K1_MODULE_COMMITMENT_MAIN
21 0x50, 0x92, 0x9b, 0x74, 0xc1, 0xa0, 0x49, 0x54, 0xb7, 0x8b, 0x4b, 0x60, 0x35, 0xe9, 0x7a, 0x5e,
22 0x07, 0x8a, 0x5a, 0x0f, 0x28, 0xec, 0x96, 0xd5, 0x47, 0xbf, 0xee, 0x9a, 0xce, 0x80, 0x3a, 0xc0,
23 0x31, 0xd3, 0xc6, 0x86, 0x39, 0x73, 0x92, 0x6e, 0x04, 0x9e, 0x63, 0x7c, 0xb1, 0xb5, 0xf4, 0x0a,
24 0x36, 0xda, 0xc2, 0x8a, 0xf1, 0x76, 0x69, 0x68, 0xc3, 0x0c, 0x23, 0x13, 0xf3, 0xa3, 0x89, 0x04
31 secp256k1_fe_set_b32(&fe, &commit->
data[1]);
32 secp256k1_ge_set_xquad(ge, &fe);
33 if (commit->
data[0] & 1) {
34 secp256k1_ge_neg(ge, ge);
39 secp256k1_fe_normalize(&ge->
x);
40 secp256k1_fe_get_b32(&commit->
data[1], &ge->
x);
41 commit->
data[0] = 9 ^ secp256k1_fe_is_quad_var(&ge->
y);
46 secp256k1_pedersen_commitment_load(&ge, commit);
47 return secp256k1_eckey_pubkey_serialize(&ge, pubkey, length, 1);
52 secp256k1_eckey_pubkey_parse(&ge, pubkey, length);
53 secp256k1_pedersen_commitment_save(commit, &ge);
65 if ((input[0] & 0xFE) != 8 ||
66 !secp256k1_fe_set_b32(&x, &input[1]) ||
67 !secp256k1_ge_set_xquad(&ge, &x)) {
71 secp256k1_ge_neg(&ge, &ge);
73 secp256k1_pedersen_commitment_save(commit, &ge);
84 secp256k1_pedersen_commitment_load(&ge, commit);
86 output[0] = 9 ^ secp256k1_fe_is_quad_var(&ge.
y);
87 secp256k1_fe_normalize_var(&ge.
x);
88 secp256k1_fe_get_b32(&output[1], &ge.
x);
106 secp256k1_generator_load(&value_genp, value_gen);
107 secp256k1_generator_load(&blind_genp, blind_gen);
108 secp256k1_scalar_set_b32(&sec, blind, &overflow);
110 secp256k1_pedersen_ecmult(&rj, &sec, value, &value_genp, &blind_genp);
111 if (!secp256k1_gej_is_infinity(&rj)) {
112 secp256k1_ge_set_gej(&
r, &rj);
113 secp256k1_pedersen_commitment_save(commit, &
r);
116 secp256k1_gej_clear(&rj);
117 secp256k1_ge_clear(&
r);
119 secp256k1_scalar_clear(&sec);
136 secp256k1_scalar_set_int(&acc, 0);
137 for (i = 0; i < n; i++) {
138 secp256k1_scalar_set_b32(&x, blinds[i], &overflow);
142 if (i >= npositive) {
143 secp256k1_scalar_negate(&x, &x);
145 secp256k1_scalar_add(&acc, &acc, &x);
147 secp256k1_scalar_get_b32(blind_out, &acc);
148 secp256k1_scalar_clear(&acc);
149 secp256k1_scalar_clear(&x);
162 secp256k1_gej_set_infinity(&accj);
163 for (i = 0; i < n_neg; i++) {
164 secp256k1_pedersen_commitment_load(&add, neg[i]);
165 secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);
167 secp256k1_gej_neg(&accj, &accj);
168 for (i = 0; i < n_pos; i++) {
169 secp256k1_pedersen_commitment_load(&add, pos[i]);
170 secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);
172 return secp256k1_gej_is_infinity(&accj);
190 secp256k1_gej_set_infinity(&accj);
191 for (i = 0; i < n_neg; i++) {
192 secp256k1_pedersen_commitment_load(&add, neg[i]);
193 secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);
195 secp256k1_gej_neg(&accj, &accj);
196 for (i = 0; i < n_pos; i++) {
197 secp256k1_pedersen_commitment_load(&add, pos[i]);
198 secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);
200 secp256k1_ge_set_gej(&outGe, &accj);
201 secp256k1_pedersen_commitment_save(out, &outGe);
217 secp256k1_gej_set_infinity(&accj);
218 for (i = 0; i < n_pos; i++) {
219 secp256k1_pedersen_commitment_load(&add, pos[i]);
220 secp256k1_gej_add_ge_var(&accj, &accj, &add, NULL);
222 secp256k1_ge_set_gej(&outGe, &accj);
223 secp256k1_pedersen_commitment_save(out, &outGe);
233 ARG_CHECK(n_total == 0 || value != NULL);
234 ARG_CHECK(n_total == 0 || generator_blind != NULL);
235 ARG_CHECK(n_total == 0 || blinding_factor != NULL);
243 secp256k1_scalar_set_int(&sum, 0);
244 for (i = 0; i < n_total; i++) {
247 secp256k1_scalar_set_u64(&addend, value[i]);
249 secp256k1_scalar_set_b32(&tmp, generator_blind[i], &overflow);
251 secp256k1_scalar_clear(&tmp);
252 secp256k1_scalar_clear(&addend);
253 secp256k1_scalar_clear(&sum);
256 secp256k1_scalar_mul(&addend, &addend, &tmp);
258 secp256k1_scalar_set_b32(&tmp, blinding_factor[i], &overflow);
260 secp256k1_scalar_clear(&tmp);
261 secp256k1_scalar_clear(&addend);
262 secp256k1_scalar_clear(&sum);
265 secp256k1_scalar_add(&addend, &addend, &tmp);
266 secp256k1_scalar_cond_negate(&addend, i < n_inputs);
267 secp256k1_scalar_add(&sum, &sum, &addend);
268 secp256k1_scalar_clear(&addend);
272 secp256k1_scalar_negate(&sum, &sum);
273 secp256k1_scalar_add(&tmp, &tmp, &sum);
274 secp256k1_scalar_get_b32(blinding_factor[n_total - 1], &tmp);
276 secp256k1_scalar_clear(&tmp);
277 secp256k1_scalar_clear(&sum);