@@ -137,6 +137,43 @@ void test_xonly_pubkey(void) {
137137 secp256k1_context_destroy (verify );
138138}
139139
140+ void test_xonly_pubkey_comparison (void ) {
141+ unsigned char pk1_ser [32 ] = {
142+ 0x58 , 0x84 , 0xb3 , 0xa2 , 0x4b , 0x97 , 0x37 , 0x88 , 0x92 , 0x38 , 0xa6 , 0x26 , 0x62 , 0x52 , 0x35 , 0x11 ,
143+ 0xd0 , 0x9a , 0xa1 , 0x1b , 0x80 , 0x0b , 0x5e , 0x93 , 0x80 , 0x26 , 0x11 , 0xef , 0x67 , 0x4b , 0xd9 , 0x23
144+ };
145+ const unsigned char pk2_ser [32 ] = {
146+ 0xde , 0x36 , 0x0e , 0x87 , 0x59 , 0x8f , 0x3c , 0x01 , 0x36 , 0x2a , 0x2a , 0xb8 , 0xc6 , 0xf4 , 0x5e , 0x4d ,
147+ 0xb2 , 0xc2 , 0xd5 , 0x03 , 0xa7 , 0xf9 , 0xf1 , 0x4f , 0xa8 , 0xfa , 0x95 , 0xa8 , 0xe9 , 0x69 , 0x76 , 0x1c
148+ };
149+ secp256k1_xonly_pubkey pk1 ;
150+ secp256k1_xonly_pubkey pk2 ;
151+ int ecount = 0 ;
152+ secp256k1_context * none = api_test_context (SECP256K1_CONTEXT_NONE , & ecount );
153+
154+ CHECK (secp256k1_xonly_pubkey_parse (none , & pk1 , pk1_ser ) == 1 );
155+ CHECK (secp256k1_xonly_pubkey_parse (none , & pk2 , pk2_ser ) == 1 );
156+
157+ CHECK (secp256k1_xonly_pubkey_cmp (none , NULL , & pk2 ) < 0 );
158+ CHECK (ecount == 1 );
159+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk1 , NULL ) > 0 );
160+ CHECK (ecount == 2 );
161+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk1 , & pk2 ) < 0 );
162+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk2 , & pk1 ) > 0 );
163+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk1 , & pk1 ) == 0 );
164+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk2 , & pk2 ) == 0 );
165+ CHECK (ecount == 2 );
166+ memset (& pk1 , 0 , sizeof (pk1 )); /* illegal pubkey */
167+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk1 , & pk2 ) < 0 );
168+ CHECK (ecount == 3 );
169+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk1 , & pk1 ) == 0 );
170+ CHECK (ecount == 5 );
171+ CHECK (secp256k1_xonly_pubkey_cmp (none , & pk2 , & pk1 ) > 0 );
172+ CHECK (ecount == 6 );
173+
174+ secp256k1_context_destroy (none );
175+ }
176+
140177void test_xonly_pubkey_tweak (void ) {
141178 unsigned char zeros64 [64 ] = { 0 };
142179 unsigned char overflows [32 ];
@@ -540,6 +577,7 @@ void run_extrakeys_tests(void) {
540577 test_xonly_pubkey_tweak ();
541578 test_xonly_pubkey_tweak_check ();
542579 test_xonly_pubkey_tweak_recursive ();
580+ test_xonly_pubkey_comparison ();
543581
544582 /* keypair tests */
545583 test_keypair ();
0 commit comments