8 #include <botan/internal/openssl_engine.h>
9 #include <openssl/evp.h>
18 class EVP_HashFunction :
public HashFunction
22 std::string name()
const {
return algo_name; }
23 HashFunction* clone()
const;
25 size_t output_length()
const
27 return EVP_MD_size(EVP_MD_CTX_md(&
md));
30 size_t hash_block_size()
const
32 return EVP_MD_block_size(EVP_MD_CTX_md(&
md));
35 EVP_HashFunction(
const EVP_MD*,
const std::string&);
38 void add_data(
const byte[],
size_t);
39 void final_result(
byte[]);
49 void EVP_HashFunction::add_data(
const byte input[],
size_t length)
51 EVP_DigestUpdate(&
md, input, length);
57 void EVP_HashFunction::final_result(
byte output[])
59 EVP_DigestFinal_ex(&
md, output, 0);
60 const EVP_MD* algo = EVP_MD_CTX_md(&
md);
61 EVP_DigestInit_ex(&
md, algo, 0);
67 void EVP_HashFunction::clear()
69 const EVP_MD* algo = EVP_MD_CTX_md(&
md);
70 EVP_DigestInit_ex(&
md, algo, 0);
76 HashFunction* EVP_HashFunction::clone()
const
78 const EVP_MD* algo = EVP_MD_CTX_md(&
md);
79 return new EVP_HashFunction(algo, name());
85 EVP_HashFunction::EVP_HashFunction(
const EVP_MD* algo,
86 const std::string& name) :
90 EVP_DigestInit_ex(&
md, algo, 0);
96 EVP_HashFunction::~EVP_HashFunction()
98 EVP_MD_CTX_cleanup(&
md);
109 #if !defined(OPENSSL_NO_SHA)
111 return new EVP_HashFunction(EVP_sha1(),
"SHA-160");
114 #if !defined(OPENSSL_NO_SHA256)
116 return new EVP_HashFunction(EVP_sha224(),
"SHA-224");
118 return new EVP_HashFunction(EVP_sha256(),
"SHA-256");
121 #if !defined(OPENSSL_NO_SHA512)
123 return new EVP_HashFunction(EVP_sha384(),
"SHA-384");
125 return new EVP_HashFunction(EVP_sha512(),
"SHA-512");
128 #if !defined(OPENSSL_NO_MD2)
130 return new EVP_HashFunction(EVP_md2(),
"MD2");
133 #if !defined(OPENSSL_NO_MD4)
135 return new EVP_HashFunction(EVP_md4(),
"MD4");
138 #if !defined(OPENSSL_NO_MD5)
140 return new EVP_HashFunction(EVP_md5(),
"MD5");
143 #if !defined(OPENSSL_NO_RIPEMD)
145 return new EVP_HashFunction(EVP_ripemd160(),
"RIPEMD-160");
std::string algo_name() const