@@ -204,6 +204,9 @@ static int X509_up_ref(X509* cert) {
204
204
CRYPTO_add (&cert->references , 1 , CRYPTO_LOCK_X509);
205
205
return 1 ;
206
206
}
207
+
208
+ #define EVP_MD_CTX_new EVP_MD_CTX_create
209
+ #define EVP_MD_CTX_free EVP_MD_CTX_destroy
207
210
#endif // OPENSSL_VERSION_NUMBER < 0x10100000L
208
211
209
212
// Subject DER of CNNIC ROOT CA and CNNIC EV ROOT CA are taken from
@@ -3937,6 +3940,11 @@ void Hmac::HmacDigest(const FunctionCallbackInfo<Value>& args) {
3937
3940
}
3938
3941
3939
3942
3943
+ Hash::~Hash () {
3944
+ EVP_MD_CTX_free (mdctx_);
3945
+ }
3946
+
3947
+
3940
3948
void Hash::Initialize (Environment* env, v8::Local<v8::Object> target) {
3941
3949
Local<FunctionTemplate> t = env->NewFunctionTemplate (New);
3942
3950
@@ -3966,20 +3974,22 @@ bool Hash::HashInit(const char* hash_type) {
3966
3974
const EVP_MD* md = EVP_get_digestbyname (hash_type);
3967
3975
if (md == nullptr )
3968
3976
return false ;
3969
- EVP_MD_CTX_init (&mdctx_);
3970
- if (EVP_DigestInit_ex (&mdctx_, md, nullptr ) <= 0 ) {
3977
+ mdctx_ = EVP_MD_CTX_new ();
3978
+ if (mdctx_ == nullptr ||
3979
+ EVP_DigestInit_ex (mdctx_, md, nullptr ) <= 0 ) {
3980
+ EVP_MD_CTX_free (mdctx_);
3981
+ mdctx_ = nullptr ;
3971
3982
return false ;
3972
3983
}
3973
- initialised_ = true ;
3974
3984
finalized_ = false ;
3975
3985
return true ;
3976
3986
}
3977
3987
3978
3988
3979
3989
bool Hash::HashUpdate (const char * data, int len) {
3980
- if (!initialised_ )
3990
+ if (mdctx_ == nullptr )
3981
3991
return false ;
3982
- EVP_DigestUpdate (& mdctx_, data, len);
3992
+ EVP_DigestUpdate (mdctx_, data, len);
3983
3993
return true ;
3984
3994
}
3985
3995
@@ -4023,8 +4033,7 @@ void Hash::HashDigest(const FunctionCallbackInfo<Value>& args) {
4023
4033
unsigned char md_value[EVP_MAX_MD_SIZE];
4024
4034
unsigned int md_len;
4025
4035
4026
- EVP_DigestFinal_ex (&hash->mdctx_ , md_value, &md_len);
4027
- EVP_MD_CTX_cleanup (&hash->mdctx_ );
4036
+ EVP_DigestFinal_ex (hash->mdctx_ , md_value, &md_len);
4028
4037
hash->finalized_ = true ;
4029
4038
4030
4039
Local<Value> error;
0 commit comments