@ -23,6 +23,9 @@
@@ -23,6 +23,9 @@
# include "openssl/ec.h"
# include "openssl/ecdsa.h"
# include "openssl/obj_mac.h"
# if OPENSSL_VERSION_NUMBER < 0x10100000L
void ECDSA_SIG_get0 ( const ECDSA_SIG * sig , const BIGNUM * * pr , const BIGNUM * * ps ) { * pr = sig - > r ; * ps = sig - > s ; }
# endif
# endif
# include "contrib/lax_der_parsing.c"
@ -4150,6 +4153,7 @@ int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_
@@ -4150,6 +4153,7 @@ int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_
# ifdef ENABLE_OPENSSL_TESTS
ECDSA_SIG * sig_openssl ;
const BIGNUM * r = NULL , * s = NULL ;
const unsigned char * sigptr ;
unsigned char roundtrip_openssl [ 2048 ] ;
int len_openssl = 2048 ;
@ -4201,15 +4205,16 @@ int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_
@@ -4201,15 +4205,16 @@ int test_ecdsa_der_parse(const unsigned char *sig, size_t siglen, int certainly_
sigptr = sig ;
parsed_openssl = ( d2i_ECDSA_SIG ( & sig_openssl , & sigptr , siglen ) ! = NULL ) ;
if ( parsed_openssl ) {
valid_openssl = ! BN_is_negative ( sig_openssl - > r ) & & ! BN_is_negative ( sig_openssl - > s ) & & BN_num_bits ( sig_openssl - > r ) > 0 & & BN_num_bits ( sig_openssl - > r ) < = 256 & & BN_num_bits ( sig_openssl - > s ) > 0 & & BN_num_bits ( sig_openssl - > s ) < = 256 ;
ECDSA_SIG_get0 ( sig_openssl , & r , & s ) ;
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 ;
if ( valid_openssl ) {
unsigned char tmp [ 32 ] = { 0 } ;
BN_bn2bin ( sig_openssl - > r , tmp + 32 - BN_num_bytes ( sig_openssl - > r ) ) ;
BN_bn2bin ( r , tmp + 32 - BN_num_bytes ( r ) ) ;
valid_openssl = memcmp ( tmp , max_scalar , 32 ) < 0 ;
}
if ( valid_openssl ) {
unsigned char tmp [ 32 ] = { 0 } ;
BN_bn2bin ( sig_openssl - > s , tmp + 32 - BN_num_bytes ( sig_openssl - > s ) ) ;
BN_bn2bin ( s , tmp + 32 - BN_num_bytes ( s ) ) ;
valid_openssl = memcmp ( tmp , max_scalar , 32 ) < 0 ;
}
}