security: deduplicate RAII wrapper class for EVP_MD_CTX

Change-Id: I256588a8bc601b06548f7ec45aee020ddabb9597
diff --git a/src/security/detail/openssl-helper.cpp b/src/security/detail/openssl-helper.cpp
index d854776..865bc36 100644
--- a/src/security/detail/openssl-helper.cpp
+++ b/src/security/detail/openssl-helper.cpp
@@ -47,6 +47,26 @@
 #endif // OPENSSL_VERSION_NUMBER < 0x1010000fL
 }
 
+EvpMdCtx::EvpMdCtx()
+#if OPENSSL_VERSION_NUMBER < 0x1010000fL
+  : m_ctx(EVP_MD_CTX_create())
+#else
+  : m_ctx(EVP_MD_CTX_new())
+#endif
+{
+  if (m_ctx == nullptr)
+    BOOST_THROW_EXCEPTION(std::runtime_error("EVP_MD_CTX creation failed"));
+}
+
+EvpMdCtx::~EvpMdCtx()
+{
+#if OPENSSL_VERSION_NUMBER < 0x1010000fL
+  EVP_MD_CTX_destroy(m_ctx);
+#else
+  EVP_MD_CTX_free(m_ctx);
+#endif
+}
+
 EvpPkeyCtx::EvpPkeyCtx(EVP_PKEY* key)
   : m_ctx(EVP_PKEY_CTX_new(key, nullptr))
 {