@@ -719,6 +719,26 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data)
719
719
EVP_MD_CTX_free (ctx );
720
720
ossl_raise (ePKeyError , "EVP_DigestSignInit" );
721
721
}
722
+ #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER )
723
+ if (EVP_DigestSign (ctx , NULL , & siglen , (unsigned char * )RSTRING_PTR (data ),
724
+ RSTRING_LEN (data )) < 1 ) {
725
+ EVP_MD_CTX_free (ctx );
726
+ ossl_raise (ePKeyError , "EVP_DigestSign" );
727
+ }
728
+ if (siglen > LONG_MAX )
729
+ rb_raise (ePKeyError , "signature would be too large" );
730
+ sig = ossl_str_new (NULL , (long )siglen , & state );
731
+ if (state ) {
732
+ EVP_MD_CTX_free (ctx );
733
+ rb_jump_tag (state );
734
+ }
735
+ if (EVP_DigestSign (ctx , (unsigned char * )RSTRING_PTR (sig ), & siglen ,
736
+ (unsigned char * )RSTRING_PTR (data ),
737
+ RSTRING_LEN (data )) < 1 ) {
738
+ EVP_MD_CTX_free (ctx );
739
+ ossl_raise (ePKeyError , "EVP_DigestSign" );
740
+ }
741
+ #else
722
742
if (EVP_DigestSignUpdate (ctx , RSTRING_PTR (data ), RSTRING_LEN (data )) < 1 ) {
723
743
EVP_MD_CTX_free (ctx );
724
744
ossl_raise (ePKeyError , "EVP_DigestSignUpdate" );
@@ -739,6 +759,7 @@ ossl_pkey_sign(VALUE self, VALUE digest, VALUE data)
739
759
EVP_MD_CTX_free (ctx );
740
760
ossl_raise (ePKeyError , "EVP_DigestSignFinal" );
741
761
}
762
+ #endif
742
763
EVP_MD_CTX_free (ctx );
743
764
rb_str_set_len (sig , siglen );
744
765
return sig ;
@@ -787,6 +808,14 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data)
787
808
EVP_MD_CTX_free (ctx );
788
809
ossl_raise (ePKeyError , "EVP_DigestVerifyInit" );
789
810
}
811
+ #if OPENSSL_VERSION_NUMBER >= 0x10101000 && !defined(LIBRESSL_VERSION_NUMBER )
812
+ ret = EVP_DigestVerify (ctx , (unsigned char * )RSTRING_PTR (sig ),
813
+ RSTRING_LEN (sig ), (unsigned char * )RSTRING_PTR (data ),
814
+ RSTRING_LEN (data ));
815
+ EVP_MD_CTX_free (ctx );
816
+ if (ret < 0 )
817
+ ossl_raise (ePKeyError , "EVP_DigestVerify" );
818
+ #else
790
819
if (EVP_DigestVerifyUpdate (ctx , RSTRING_PTR (data ), RSTRING_LEN (data )) < 1 ) {
791
820
EVP_MD_CTX_free (ctx );
792
821
ossl_raise (ePKeyError , "EVP_DigestVerifyUpdate" );
@@ -796,6 +825,7 @@ ossl_pkey_verify(VALUE self, VALUE digest, VALUE sig, VALUE data)
796
825
EVP_MD_CTX_free (ctx );
797
826
if (ret < 0 )
798
827
ossl_raise (ePKeyError , "EVP_DigestVerifyFinal" );
828
+ #endif
799
829
if (ret )
800
830
return Qtrue ;
801
831
else {
0 commit comments