@@ -205,6 +205,9 @@ static int X509_up_ref(X509* cert) {
205
205
CRYPTO_add (&cert->references , 1 , CRYPTO_LOCK_X509);
206
206
return 1 ;
207
207
}
208
+
209
+ #define EVP_MD_CTX_new EVP_MD_CTX_create
210
+ #define EVP_MD_CTX_free EVP_MD_CTX_destroy
208
211
#endif // OPENSSL_VERSION_NUMBER < 0x10100000L
209
212
210
213
// Subject DER of CNNIC ROOT CA and CNNIC EV ROOT CA are taken from
@@ -3955,6 +3958,11 @@ void Hmac::HmacDigest(const FunctionCallbackInfo<Value>& args) {
3955
3958
}
3956
3959
3957
3960
3961
+ Hash::~Hash () {
3962
+ EVP_MD_CTX_free (mdctx_);
3963
+ }
3964
+
3965
+
3958
3966
void Hash::Initialize (Environment* env, v8::Local<v8::Object> target) {
3959
3967
Local<FunctionTemplate> t = env->NewFunctionTemplate (New);
3960
3968
@@ -3989,20 +3997,22 @@ bool Hash::HashInit(const char* hash_type) {
3989
3997
const EVP_MD* md = EVP_get_digestbyname (hash_type);
3990
3998
if (md == nullptr )
3991
3999
return false ;
3992
- EVP_MD_CTX_init (&mdctx_);
3993
- if (EVP_DigestInit_ex (&mdctx_, md, nullptr ) <= 0 ) {
4000
+ mdctx_ = EVP_MD_CTX_new ();
4001
+ if (mdctx_ == nullptr ||
4002
+ EVP_DigestInit_ex (mdctx_, md, nullptr ) <= 0 ) {
4003
+ EVP_MD_CTX_free (mdctx_);
4004
+ mdctx_ = nullptr ;
3994
4005
return false ;
3995
4006
}
3996
- initialised_ = true ;
3997
4007
finalized_ = false ;
3998
4008
return true ;
3999
4009
}
4000
4010
4001
4011
4002
4012
bool Hash::HashUpdate (const char * data, int len) {
4003
- if (!initialised_ )
4013
+ if (mdctx_ == nullptr )
4004
4014
return false ;
4005
- EVP_DigestUpdate (& mdctx_, data, len);
4015
+ EVP_DigestUpdate (mdctx_, data, len);
4006
4016
return true ;
4007
4017
}
4008
4018
@@ -4067,8 +4077,7 @@ void Hash::HashDigest(const FunctionCallbackInfo<Value>& args) {
4067
4077
unsigned char md_value[EVP_MAX_MD_SIZE];
4068
4078
unsigned int md_len;
4069
4079
4070
- EVP_DigestFinal_ex (&hash->mdctx_ , md_value, &md_len);
4071
- EVP_MD_CTX_cleanup (&hash->mdctx_ );
4080
+ EVP_DigestFinal_ex (hash->mdctx_ , md_value, &md_len);
4072
4081
hash->finalized_ = true ;
4073
4082
4074
4083
Local<Value> error;
0 commit comments