10
10
11
11
#include <stdio.h>
12
12
#include <stdlib.h>
13
+ #include <string.h>
13
14
14
15
#include <time.h>
15
16
@@ -135,6 +136,7 @@ void random_scalar_order(secp256k1_scalar *num) {
135
136
136
137
void run_context_tests (void ) {
137
138
secp256k1_pubkey pubkey ;
139
+ secp256k1_pubkey zero_pubkey ;
138
140
secp256k1_ecdsa_signature sig ;
139
141
unsigned char ctmp [32 ];
140
142
int32_t ecount ;
@@ -149,6 +151,8 @@ void run_context_tests(void) {
149
151
secp256k1_scalar msg , key , nonce ;
150
152
secp256k1_scalar sigr , sigs ;
151
153
154
+ memset (& zero_pubkey , 0 , sizeof (zero_pubkey ));
155
+
152
156
ecount = 0 ;
153
157
ecount2 = 10 ;
154
158
secp256k1_context_set_illegal_callback (vrfy , counting_illegal_callback_fn , & ecount );
@@ -201,12 +205,20 @@ void run_context_tests(void) {
201
205
CHECK (ecount == 2 );
202
206
CHECK (secp256k1_ec_pubkey_tweak_mul (sign , & pubkey , ctmp ) == 0 );
203
207
CHECK (ecount2 == 13 );
204
- CHECK (secp256k1_ec_pubkey_tweak_mul (vrfy , & pubkey , ctmp ) == 1 );
208
+ CHECK (secp256k1_ec_pubkey_negate (vrfy , & pubkey ) == 1 );
205
209
CHECK (ecount == 2 );
206
- CHECK (secp256k1_context_randomize (vrfy , ctmp ) == 0 );
210
+ CHECK (secp256k1_ec_pubkey_negate (sign , & pubkey ) == 1 );
211
+ CHECK (ecount == 2 );
212
+ CHECK (secp256k1_ec_pubkey_negate (sign , NULL ) == 0 );
213
+ CHECK (ecount2 == 14 );
214
+ CHECK (secp256k1_ec_pubkey_negate (vrfy , & zero_pubkey ) == 0 );
215
+ CHECK (ecount == 3 );
216
+ CHECK (secp256k1_ec_pubkey_tweak_mul (vrfy , & pubkey , ctmp ) == 1 );
207
217
CHECK (ecount == 3 );
218
+ CHECK (secp256k1_context_randomize (vrfy , ctmp ) == 0 );
219
+ CHECK (ecount == 4 );
208
220
CHECK (secp256k1_context_randomize (sign , NULL ) == 1 );
209
- CHECK (ecount2 == 13 );
221
+ CHECK (ecount2 == 14 );
210
222
secp256k1_context_set_illegal_callback (vrfy , NULL , NULL );
211
223
secp256k1_context_set_illegal_callback (sign , NULL , NULL );
212
224
@@ -3436,6 +3448,7 @@ void test_ecdsa_end_to_end(void) {
3436
3448
unsigned char pubkeyc [65 ];
3437
3449
size_t pubkeyclen = 65 ;
3438
3450
secp256k1_pubkey pubkey ;
3451
+ secp256k1_pubkey pubkey_tmp ;
3439
3452
unsigned char seckey [300 ];
3440
3453
size_t seckeylen = 300 ;
3441
3454
@@ -3457,6 +3470,13 @@ void test_ecdsa_end_to_end(void) {
3457
3470
memset (& pubkey , 0 , sizeof (pubkey ));
3458
3471
CHECK (secp256k1_ec_pubkey_parse (ctx , & pubkey , pubkeyc , pubkeyclen ) == 1 );
3459
3472
3473
+ /* Verify negation changes the key and changes it back */
3474
+ memcpy (& pubkey_tmp , & pubkey , sizeof (pubkey ));
3475
+ CHECK (secp256k1_ec_pubkey_negate (ctx , & pubkey_tmp ) == 1 );
3476
+ CHECK (memcmp (& pubkey_tmp , & pubkey , sizeof (pubkey )) != 0 );
3477
+ CHECK (secp256k1_ec_pubkey_negate (ctx , & pubkey_tmp ) == 1 );
3478
+ CHECK (memcmp (& pubkey_tmp , & pubkey , sizeof (pubkey )) == 0 );
3479
+
3460
3480
/* Verify private key import and export. */
3461
3481
CHECK (ec_privkey_export_der (ctx , seckey , & seckeylen , privkey , secp256k1_rand_bits (1 ) == 1 ));
3462
3482
CHECK (ec_privkey_import_der (ctx , privkey2 , seckey , seckeylen ) == 1 );
0 commit comments