@@ -40,7 +40,7 @@ static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
4040
4141static int do_raw_keyop (int pkey_op , EVP_MD_CTX * mctx ,
4242 EVP_PKEY * pkey , BIO * in ,
43- int filesize , unsigned char * sig , int siglen ,
43+ int filesize , unsigned char * sig , size_t siglen ,
4444 unsigned char * * out , size_t * poutlen );
4545
4646static int only_nomd (EVP_PKEY * pkey )
@@ -158,7 +158,7 @@ int pkeyutl_main(int argc, char **argv)
158158 char hexdump = 0 , asn1parse = 0 , rev = 0 , * prog ;
159159 unsigned char * buf_in = NULL , * buf_out = NULL , * sig = NULL , * secret = NULL ;
160160 OPTION_CHOICE o ;
161- int buf_inlen = 0 , siglen = -1 ;
161+ size_t buf_inlen = 0 , siglen = 0 ;
162162 int keyform = FORMAT_UNDEF , peerform = FORMAT_UNDEF ;
163163 int keysize = -1 , pkey_op = EVP_PKEY_OP_SIGN , key_type = KEY_PRIVKEY ;
164164 int engine_impl = 0 ;
@@ -508,31 +508,31 @@ int pkeyutl_main(int argc, char **argv)
508508
509509 if (sigfile != NULL ) {
510510 BIO * sigbio = BIO_new_file (sigfile , "rb" );
511+ size_t maxsiglen = 16 * 1024 * 1024 ;
511512
512513 if (sigbio == NULL ) {
513514 BIO_printf (bio_err , "Can't open signature file %s\n" , sigfile );
514515 goto end ;
515516 }
516- siglen = bio_to_mem (& sig , keysize * 10 , sigbio );
517- BIO_free (sigbio );
518- if (siglen < 0 ) {
517+ if (!bio_to_mem (& sig , & siglen , maxsiglen , sigbio )) {
518+ BIO_free (sigbio );
519519 BIO_printf (bio_err , "Error reading signature data\n" );
520520 goto end ;
521521 }
522+ BIO_free (sigbio );
522523 }
523524
524525 /* Raw input data is handled elsewhere */
525526 if (in != NULL && !rawin ) {
526527 /* Read the input data */
527- buf_inlen = bio_to_mem (& buf_in , -1 , in );
528- if (buf_inlen < 0 ) {
528+ if (!bio_to_mem (& buf_in , & buf_inlen , 0 , in )) {
529529 BIO_printf (bio_err , "Error reading input Data\n" );
530530 goto end ;
531531 }
532532 if (rev ) {
533533 size_t i ;
534534 unsigned char ctmp ;
535- size_t l = ( size_t ) buf_inlen ;
535+ size_t l = buf_inlen ;
536536
537537 for (i = 0 ; i < l / 2 ; i ++ ) {
538538 ctmp = buf_in [i ];
@@ -547,7 +547,8 @@ int pkeyutl_main(int argc, char **argv)
547547 && (pkey_op == EVP_PKEY_OP_SIGN || pkey_op == EVP_PKEY_OP_VERIFY )) {
548548 if (buf_inlen > EVP_MAX_MD_SIZE ) {
549549 BIO_printf (bio_err ,
550- "Error: The non-raw input data length %d is too long - max supported hashed size is %d\n" ,
550+ "Error: The non-raw input data length %zd is too long - "
551+ "max supported hashed size is %d\n" ,
551552 buf_inlen , EVP_MAX_MD_SIZE );
552553 goto end ;
553554 }
@@ -558,8 +559,7 @@ int pkeyutl_main(int argc, char **argv)
558559 rv = do_raw_keyop (pkey_op , mctx , pkey , in , filesize , sig , siglen ,
559560 NULL , 0 );
560561 } else {
561- rv = EVP_PKEY_verify (ctx , sig , (size_t )siglen ,
562- buf_in , (size_t )buf_inlen );
562+ rv = EVP_PKEY_verify (ctx , sig , siglen , buf_in , buf_inlen );
563563 }
564564 if (rv == 1 ) {
565565 BIO_puts (out , "Signature Verified Successfully\n" );
@@ -578,8 +578,8 @@ int pkeyutl_main(int argc, char **argv)
578578 buf_outlen = kdflen ;
579579 rv = 1 ;
580580 } else {
581- rv = do_keyop (ctx , pkey_op , NULL , ( size_t * ) & buf_outlen ,
582- buf_in , ( size_t ) buf_inlen , NULL , ( size_t * ) & secretlen );
581+ rv = do_keyop (ctx , pkey_op , NULL , & buf_outlen ,
582+ buf_in , buf_inlen , NULL , & secretlen );
583583 }
584584 if (rv > 0
585585 && (secretlen > 0 || (pkey_op != EVP_PKEY_OP_ENCAPSULATE && pkey_op != EVP_PKEY_OP_DECAPSULATE ))
@@ -589,8 +589,8 @@ int pkeyutl_main(int argc, char **argv)
589589 if (secretlen > 0 )
590590 secret = app_malloc (secretlen , "secret output" );
591591 rv = do_keyop (ctx , pkey_op ,
592- buf_out , ( size_t * ) & buf_outlen ,
593- buf_in , ( size_t ) buf_inlen , secret , ( size_t * ) & secretlen );
592+ buf_out , & buf_outlen ,
593+ buf_in , buf_inlen , secret , & secretlen );
594594 }
595595 }
596596 if (rv <= 0 ) {
@@ -857,7 +857,7 @@ static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
857857
858858static int do_raw_keyop (int pkey_op , EVP_MD_CTX * mctx ,
859859 EVP_PKEY * pkey , BIO * in ,
860- int filesize , unsigned char * sig , int siglen ,
860+ int filesize , unsigned char * sig , size_t siglen ,
861861 unsigned char * * out , size_t * poutlen )
862862{
863863 int rv = 0 ;
@@ -880,7 +880,7 @@ static int do_raw_keyop(int pkey_op, EVP_MD_CTX *mctx,
880880 BIO_printf (bio_err , "Error reading raw input data\n" );
881881 goto end ;
882882 }
883- rv = EVP_DigestVerify (mctx , sig , ( size_t ) siglen , mbuf , buf_len );
883+ rv = EVP_DigestVerify (mctx , sig , siglen , mbuf , buf_len );
884884 break ;
885885 case EVP_PKEY_OP_SIGN :
886886 buf_len = BIO_read (in , mbuf , filesize );
@@ -914,7 +914,7 @@ static int do_raw_keyop(int pkey_op, EVP_MD_CTX *mctx,
914914 goto end ;
915915 }
916916 }
917- rv = EVP_DigestVerifyFinal (mctx , sig , ( size_t ) siglen );
917+ rv = EVP_DigestVerifyFinal (mctx , sig , siglen );
918918 break ;
919919 case EVP_PKEY_OP_SIGN :
920920 for (;;) {
0 commit comments