@@ -5448,6 +5448,55 @@ void test_random_pubkeys(void) {
54485448 }
54495449}
54505450
5451+ void run_pubkey_comparison (void ) {
5452+ unsigned char pk1_ser [33 ] = {
5453+ 0x02 ,
5454+ 0x58 , 0x84 , 0xb3 , 0xa2 , 0x4b , 0x97 , 0x37 , 0x88 , 0x92 , 0x38 , 0xa6 , 0x26 , 0x62 , 0x52 , 0x35 , 0x11 ,
5455+ 0xd0 , 0x9a , 0xa1 , 0x1b , 0x80 , 0x0b , 0x5e , 0x93 , 0x80 , 0x26 , 0x11 , 0xef , 0x67 , 0x4b , 0xd9 , 0x23
5456+ };
5457+ const unsigned char pk2_ser [33 ] = {
5458+ 0x02 ,
5459+ 0xde , 0x36 , 0x0e , 0x87 , 0x59 , 0x8f , 0x3c , 0x01 , 0x36 , 0x2a , 0x2a , 0xb8 , 0xc6 , 0xf4 , 0x5e , 0x4d ,
5460+ 0xb2 , 0xc2 , 0xd5 , 0x03 , 0xa7 , 0xf9 , 0xf1 , 0x4f , 0xa8 , 0xfa , 0x95 , 0xa8 , 0xe9 , 0x69 , 0x76 , 0x1c
5461+ };
5462+ secp256k1_pubkey pk1 ;
5463+ secp256k1_pubkey pk2 ;
5464+ int32_t ecount = 0 ;
5465+
5466+ CHECK (secp256k1_ec_pubkey_parse (ctx , & pk1 , pk1_ser , sizeof (pk1_ser )) == 1 );
5467+ CHECK (secp256k1_ec_pubkey_parse (ctx , & pk2 , pk2_ser , sizeof (pk2_ser )) == 1 );
5468+
5469+ secp256k1_context_set_illegal_callback (ctx , counting_illegal_callback_fn , & ecount );
5470+ CHECK (secp256k1_ec_pubkey_cmp (ctx , NULL , & pk2 ) < 0 );
5471+ CHECK (ecount == 1 );
5472+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , NULL ) > 0 );
5473+ CHECK (ecount == 2 );
5474+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , & pk2 ) < 0 );
5475+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk1 ) > 0 );
5476+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , & pk1 ) == 0 );
5477+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk2 ) == 0 );
5478+ CHECK (ecount == 2 );
5479+ {
5480+ secp256k1_pubkey pk_tmp ;
5481+ memset (& pk_tmp , 0 , sizeof (pk_tmp )); /* illegal pubkey */
5482+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk_tmp , & pk2 ) < 0 );
5483+ CHECK (ecount == 3 );
5484+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk_tmp , & pk_tmp ) == 0 );
5485+ CHECK (ecount == 5 );
5486+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk_tmp ) > 0 );
5487+ CHECK (ecount == 6 );
5488+ }
5489+
5490+ secp256k1_context_set_illegal_callback (ctx , NULL , NULL );
5491+
5492+ /* Make pk2 the same as pk1 but with 3 rather than 2. Note that in
5493+ * an uncompressed encoding, these would have the opposite ordering */
5494+ pk1_ser [0 ] = 3 ;
5495+ CHECK (secp256k1_ec_pubkey_parse (ctx , & pk2 , pk1_ser , sizeof (pk1_ser )) == 1 );
5496+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , & pk2 ) < 0 );
5497+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk1 ) > 0 );
5498+ }
5499+
54515500void run_random_pubkeys (void ) {
54525501 int i ;
54535502 for (i = 0 ; i < 10 * count ; i ++ ) {
@@ -6499,6 +6548,7 @@ int main(int argc, char **argv) {
64996548#endif
65006549
65016550 /* ecdsa tests */
6551+ run_pubkey_comparison ();
65026552 run_random_pubkeys ();
65036553 run_ecdsa_der_parse ();
65046554 run_ecdsa_sign_verify ();
0 commit comments