2020#include "testrand_impl.h"
2121#include "util.h"
2222
23- #ifdef ENABLE_OPENSSL_TESTS
24- #include <openssl/bn.h>
25- #include <openssl/ec.h>
26- #include <openssl/ecdsa.h>
27- #include <openssl/obj_mac.h>
28- # if OPENSSL_VERSION_NUMBER < 0x10100000L
29- void ECDSA_SIG_get0 (const ECDSA_SIG * sig , const BIGNUM * * pr , const BIGNUM * * ps ) {* pr = sig -> r ; * ps = sig -> s ;}
30- # endif
31- #endif
32-
3323#include "../contrib/lax_der_parsing.c"
3424#include "../contrib/lax_der_privatekey_parsing.c"
3525
@@ -5685,14 +5675,6 @@ void run_ecdsa_end_to_end(void) {
56855675
56865676int test_ecdsa_der_parse (const unsigned char * sig , size_t siglen , int certainly_der , int certainly_not_der ) {
56875677 static const unsigned char zeroes [32 ] = {0 };
5688- #ifdef ENABLE_OPENSSL_TESTS
5689- static const unsigned char max_scalar [32 ] = {
5690- 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
5691- 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xfe ,
5692- 0xba , 0xae , 0xdc , 0xe6 , 0xaf , 0x48 , 0xa0 , 0x3b ,
5693- 0xbf , 0xd2 , 0x5e , 0x8c , 0xd0 , 0x36 , 0x41 , 0x40
5694- };
5695- #endif
56965678
56975679 int ret = 0 ;
56985680
@@ -5708,15 +5690,6 @@ int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_
57085690 size_t len_der_lax = 2048 ;
57095691 int parsed_der_lax = 0 , valid_der_lax = 0 , roundtrips_der_lax = 0 ;
57105692
5711- #ifdef ENABLE_OPENSSL_TESTS
5712- ECDSA_SIG * sig_openssl ;
5713- const BIGNUM * r = NULL , * s = NULL ;
5714- const unsigned char * sigptr ;
5715- unsigned char roundtrip_openssl [2048 ];
5716- int len_openssl = 2048 ;
5717- int parsed_openssl , valid_openssl = 0 , roundtrips_openssl = 0 ;
5718- #endif
5719-
57205693 parsed_der = secp256k1_ecdsa_signature_parse_der (ctx , & sig_der , sig , siglen );
57215694 if (parsed_der ) {
57225695 ret |= (!secp256k1_ecdsa_signature_serialize_compact (ctx , compact_der , & sig_der )) << 0 ;
@@ -5757,43 +5730,6 @@ int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_
57575730 ret |= (!parsed_der_lax ) << 16 ;
57585731 }
57595732
5760- #ifdef ENABLE_OPENSSL_TESTS
5761- sig_openssl = ECDSA_SIG_new ();
5762- sigptr = sig ;
5763- parsed_openssl = (d2i_ECDSA_SIG (& sig_openssl , & sigptr , siglen ) != NULL );
5764- if (parsed_openssl ) {
5765- ECDSA_SIG_get0 (sig_openssl , & r , & s );
5766- valid_openssl = !BN_is_negative (r ) && !BN_is_negative (s ) && BN_num_bits (r ) > 0 && BN_num_bits (r ) <= 256 && BN_num_bits (s ) > 0 && BN_num_bits (s ) <= 256 ;
5767- if (valid_openssl ) {
5768- unsigned char tmp [32 ] = {0 };
5769- BN_bn2bin (r , tmp + 32 - BN_num_bytes (r ));
5770- valid_openssl = secp256k1_memcmp_var (tmp , max_scalar , 32 ) < 0 ;
5771- }
5772- if (valid_openssl ) {
5773- unsigned char tmp [32 ] = {0 };
5774- BN_bn2bin (s , tmp + 32 - BN_num_bytes (s ));
5775- valid_openssl = secp256k1_memcmp_var (tmp , max_scalar , 32 ) < 0 ;
5776- }
5777- }
5778- len_openssl = i2d_ECDSA_SIG (sig_openssl , NULL );
5779- if (len_openssl <= 2048 ) {
5780- unsigned char * ptr = roundtrip_openssl ;
5781- CHECK (i2d_ECDSA_SIG (sig_openssl , & ptr ) == len_openssl );
5782- roundtrips_openssl = valid_openssl && ((size_t )len_openssl == siglen ) && (secp256k1_memcmp_var (roundtrip_openssl , sig , siglen ) == 0 );
5783- } else {
5784- len_openssl = 0 ;
5785- }
5786- ECDSA_SIG_free (sig_openssl );
5787-
5788- ret |= (parsed_der && !parsed_openssl ) << 4 ;
5789- ret |= (valid_der && !valid_openssl ) << 5 ;
5790- ret |= (roundtrips_openssl && !parsed_der ) << 6 ;
5791- ret |= (roundtrips_der != roundtrips_openssl ) << 7 ;
5792- if (roundtrips_openssl ) {
5793- ret |= (len_der != (size_t )len_openssl ) << 8 ;
5794- ret |= ((len_der != (size_t )len_openssl ) || (secp256k1_memcmp_var (roundtrip_der , roundtrip_openssl , len_der ) != 0 )) << 9 ;
5795- }
5796- #endif
57975733 return ret ;
57985734}
57995735
@@ -6387,62 +6323,6 @@ void run_ecdsa_edge_cases(void) {
63876323 test_ecdsa_edge_cases ();
63886324}
63896325
6390- #ifdef ENABLE_OPENSSL_TESTS
6391- EC_KEY * get_openssl_key (const unsigned char * key32 ) {
6392- unsigned char privkey [300 ];
6393- size_t privkeylen ;
6394- const unsigned char * pbegin = privkey ;
6395- int compr = secp256k1_testrand_bits (1 );
6396- EC_KEY * ec_key = EC_KEY_new_by_curve_name (NID_secp256k1 );
6397- CHECK (ec_privkey_export_der (ctx , privkey , & privkeylen , key32 , compr ));
6398- CHECK (d2i_ECPrivateKey (& ec_key , & pbegin , privkeylen ));
6399- CHECK (EC_KEY_check_key (ec_key ));
6400- return ec_key ;
6401- }
6402-
6403- void test_ecdsa_openssl (void ) {
6404- secp256k1_gej qj ;
6405- secp256k1_ge q ;
6406- secp256k1_scalar sigr , sigs ;
6407- secp256k1_scalar one ;
6408- secp256k1_scalar msg2 ;
6409- secp256k1_scalar key , msg ;
6410- EC_KEY * ec_key ;
6411- unsigned int sigsize = 80 ;
6412- size_t secp_sigsize = 80 ;
6413- unsigned char message [32 ];
6414- unsigned char signature [80 ];
6415- unsigned char key32 [32 ];
6416- secp256k1_testrand256_test (message );
6417- secp256k1_scalar_set_b32 (& msg , message , NULL );
6418- random_scalar_order_test (& key );
6419- secp256k1_scalar_get_b32 (key32 , & key );
6420- secp256k1_ecmult_gen (& ctx -> ecmult_gen_ctx , & qj , & key );
6421- secp256k1_ge_set_gej (& q , & qj );
6422- ec_key = get_openssl_key (key32 );
6423- CHECK (ec_key != NULL );
6424- CHECK (ECDSA_sign (0 , message , sizeof (message ), signature , & sigsize , ec_key ));
6425- CHECK (secp256k1_ecdsa_sig_parse (& sigr , & sigs , signature , sigsize ));
6426- CHECK (secp256k1_ecdsa_sig_verify (& sigr , & sigs , & q , & msg ));
6427- secp256k1_scalar_set_int (& one , 1 );
6428- secp256k1_scalar_add (& msg2 , & msg , & one );
6429- CHECK (!secp256k1_ecdsa_sig_verify (& sigr , & sigs , & q , & msg2 ));
6430-
6431- random_sign (& sigr , & sigs , & key , & msg , NULL );
6432- CHECK (secp256k1_ecdsa_sig_serialize (signature , & secp_sigsize , & sigr , & sigs ));
6433- CHECK (ECDSA_verify (0 , message , sizeof (message ), signature , secp_sigsize , ec_key ) == 1 );
6434-
6435- EC_KEY_free (ec_key );
6436- }
6437-
6438- void run_ecdsa_openssl (void ) {
6439- int i ;
6440- for (i = 0 ; i < 10 * count ; i ++ ) {
6441- test_ecdsa_openssl ();
6442- }
6443- }
6444- #endif
6445-
64466326#ifdef ENABLE_MODULE_ECDH
64476327# include "modules/ecdh/tests_impl.h"
64486328#endif
@@ -6729,9 +6609,6 @@ int main(int argc, char **argv) {
67296609 run_ecdsa_sign_verify ();
67306610 run_ecdsa_end_to_end ();
67316611 run_ecdsa_edge_cases ();
6732- #ifdef ENABLE_OPENSSL_TESTS
6733- run_ecdsa_openssl ();
6734- #endif
67356612
67366613#ifdef ENABLE_MODULE_RECOVERY
67376614 /* ECDSA pubkey recovery tests */
0 commit comments