20 # include <openssl/evp.h>
45 #define MAIN_ERR_PREFIX "DIGEST: "
61 static int digest_openssl(
enum digest_alg alg,
const char* text,
62 size_t text_len,
unsigned char* md)
66 EVP_MD_CTX* (*openssl_evp_md_ctx_new)(void);
67 void (*openssl_evp_md_ctx_free)(EVP_MD_CTX*);
70 size_t md_len_check = 1;
71 unsigned int md_len = 0;
75 #if CFG_USE_OPENSSL_API_1_1
76 openssl_evp_md_ctx_new = EVP_MD_CTX_new;
77 openssl_evp_md_ctx_free = EVP_MD_CTX_free;
79 openssl_evp_md_ctx_new = EVP_MD_CTX_create;
80 openssl_evp_md_ctx_free = EVP_MD_CTX_destroy;
86 case DIGEST_ALG_SHA1_160:
92 case DIGEST_ALG_SHA2_256:
108 ctx = openssl_evp_md_ctx_new();
109 if(NULL == ctx) {
PRINT_ERROR(
"Creating context failed"); }
111 else if(!(POSIX_INT_MAX >= text_len))
118 rv = EVP_DigestInit_ex(ctx, md_id, NULL);
121 rv = EVP_DigestUpdate(ctx, (
void*) text, text_len);
124 rv = EVP_DigestFinal_ex(ctx, md, &md_len);
125 if(1 == rv && md_len_check == (
size_t) md_len)
134 if(NULL != ctx) { openssl_evp_md_ctx_free(ctx); }
161 return(digest_openssl(DIGEST_ALG_SHA1_160, text, text_len, md));
184 return(digest_openssl(DIGEST_ALG_SHA2_256, text, text_len, md));