@@ -4809,6 +4809,55 @@ void test_random_pubkeys(void) {
4809
4809
}
4810
4810
}
4811
4811
4812
+ void run_pubkey_comparison (void ) {
4813
+ unsigned char pk1_ser [33 ] = {
4814
+ 0x02 ,
4815
+ 0x58 , 0x84 , 0xb3 , 0xa2 , 0x4b , 0x97 , 0x37 , 0x88 , 0x92 , 0x38 , 0xa6 , 0x26 , 0x62 , 0x52 , 0x35 , 0x11 ,
4816
+ 0xd0 , 0x9a , 0xa1 , 0x1b , 0x80 , 0x0b , 0x5e , 0x93 , 0x80 , 0x26 , 0x11 , 0xef , 0x67 , 0x4b , 0xd9 , 0x23
4817
+ };
4818
+ const unsigned char pk2_ser [33 ] = {
4819
+ 0x02 ,
4820
+ 0xde , 0x36 , 0x0e , 0x87 , 0x59 , 0x8f , 0x3c , 0x01 , 0x36 , 0x2a , 0x2a , 0xb8 , 0xc6 , 0xf4 , 0x5e , 0x4d ,
4821
+ 0xb2 , 0xc2 , 0xd5 , 0x03 , 0xa7 , 0xf9 , 0xf1 , 0x4f , 0xa8 , 0xfa , 0x95 , 0xa8 , 0xe9 , 0x69 , 0x76 , 0x1c
4822
+ };
4823
+ secp256k1_pubkey pk1 ;
4824
+ secp256k1_pubkey pk2 ;
4825
+ int32_t ecount = 0 ;
4826
+
4827
+ CHECK (secp256k1_ec_pubkey_parse (ctx , & pk1 , pk1_ser , sizeof (pk1_ser )) == 1 );
4828
+ CHECK (secp256k1_ec_pubkey_parse (ctx , & pk2 , pk2_ser , sizeof (pk2_ser )) == 1 );
4829
+
4830
+ secp256k1_context_set_illegal_callback (ctx , counting_illegal_callback_fn , & ecount );
4831
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , NULL , & pk2 ) < 0 );
4832
+ CHECK (ecount == 1 );
4833
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , NULL ) > 0 );
4834
+ CHECK (ecount == 2 );
4835
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , & pk2 ) < 0 );
4836
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk1 ) > 0 );
4837
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , & pk1 ) == 0 );
4838
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk2 ) == 0 );
4839
+ CHECK (ecount == 2 );
4840
+ {
4841
+ secp256k1_pubkey pk_tmp ;
4842
+ memset (& pk_tmp , 0 , sizeof (pk_tmp )); /* illegal pubkey */
4843
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk_tmp , & pk2 ) < 0 );
4844
+ CHECK (ecount == 3 );
4845
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk_tmp , & pk_tmp ) == 0 );
4846
+ CHECK (ecount == 5 );
4847
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk_tmp ) > 0 );
4848
+ CHECK (ecount == 6 );
4849
+ }
4850
+
4851
+ secp256k1_context_set_illegal_callback (ctx , NULL , NULL );
4852
+
4853
+ /* Make pk2 the same as pk1 but with 3 rather than 2. Note that in
4854
+ * an uncompressed encoding, these would have the opposite ordering */
4855
+ pk1_ser [0 ] = 3 ;
4856
+ CHECK (secp256k1_ec_pubkey_parse (ctx , & pk2 , pk1_ser , sizeof (pk1_ser )) == 1 );
4857
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk1 , & pk2 ) < 0 );
4858
+ CHECK (secp256k1_ec_pubkey_cmp (ctx , & pk2 , & pk1 ) > 0 );
4859
+ }
4860
+
4812
4861
void run_random_pubkeys (void ) {
4813
4862
int i ;
4814
4863
for (i = 0 ; i < 10 * count ; i ++ ) {
@@ -5860,6 +5909,7 @@ int main(int argc, char **argv) {
5860
5909
#endif
5861
5910
5862
5911
/* ecdsa tests */
5912
+ run_pubkey_comparison ();
5863
5913
run_random_pubkeys ();
5864
5914
run_ecdsa_der_parse ();
5865
5915
run_ecdsa_sign_verify ();
0 commit comments