24#ifdef FUN_WITH_OPENSSL
25#include <openssl/evp.h>
28#ifndef EVP_MD_get_size
45 static const char hexdig[] =
"0123456789abcdef";
46 if (!data &&
len != 0)
return NULL;
47#ifdef FUN_WITH_OPENSSL
48 const EVP_MD *md = EVP_md5();
51 if (dlen <= 0)
return NULL;
52 unsigned char *digest = (
unsigned char *)malloc((
size_t)dlen);
53 if (!digest)
return NULL;
54 unsigned int out_len = 0;
58 ok = EVP_Digest(NULL, 0, digest, &out_len, md, NULL);
60 ok = EVP_Digest(data,
len, digest, &out_len, md, NULL);
62 if (
ok != 1 || (
int)out_len != dlen) {
66 char *
hex = (
char *)malloc((
size_t)dlen * 2 + 1);
71 for (
int i = 0; i < dlen; ++i) {
72 hex[2 * i] =
hexdig[(digest[i] >> 4) & 0xF];
79 char *
hex = (
char *)malloc(1);
95 static const char hexdig[] =
"0123456789abcdef";
96 if (!data &&
len != 0)
return NULL;
97#ifdef FUN_WITH_OPENSSL
98 const EVP_MD *md = EVP_sha256();
101 if (dlen <= 0)
return NULL;
102 unsigned char *digest = (
unsigned char *)malloc((
size_t)dlen);
103 if (!digest)
return NULL;
104 unsigned int out_len = 0;
107 ok = EVP_Digest(NULL, 0, digest, &out_len, md, NULL);
109 ok = EVP_Digest(data,
len, digest, &out_len, md, NULL);
111 if (
ok != 1 || (
int)out_len != dlen) {
115 char *
hex = (
char *)malloc((
size_t)dlen * 2 + 1);
120 for (
int i = 0; i < dlen; ++i) {
121 hex[2 * i] =
hexdig[(digest[i] >> 4) & 0xF];
122 hex[2 * i + 1] =
hexdig[digest[i] & 0xF];
124 hex[dlen * 2] =
'\0';
128 char *
hex = (
char *)malloc(1);
144 static const char hexdig[] =
"0123456789abcdef";
145 if (!data &&
len != 0)
return NULL;
146#ifdef FUN_WITH_OPENSSL
147 const EVP_MD *md = EVP_sha512();
148 if (!md)
return NULL;
150 if (dlen <= 0)
return NULL;
151 unsigned char *digest = (
unsigned char *)malloc((
size_t)dlen);
152 if (!digest)
return NULL;
153 unsigned int out_len = 0;
156 ok = EVP_Digest(NULL, 0, digest, &out_len, md, NULL);
158 ok = EVP_Digest(data,
len, digest, &out_len, md, NULL);
160 if (
ok != 1 || (
int)out_len != dlen) {
164 char *
hex = (
char *)malloc((
size_t)dlen * 2 + 1);
169 for (
int i = 0; i < dlen; ++i) {
170 hex[2 * i] =
hexdig[(digest[i] >> 4) & 0xF];
171 hex[2 * i + 1] =
hexdig[digest[i] & 0xF];
173 hex[dlen * 2] =
'\0';
177 char *
hex = (
char *)malloc(1);
197 static const char hexdig[] =
"0123456789abcdef";
198 if (!data &&
len != 0)
return NULL;
199#ifdef FUN_WITH_OPENSSL
200 const EVP_MD *md = EVP_ripemd160();
201 if (!md)
return NULL;
203 if (dlen <= 0)
return NULL;
204 unsigned char *digest = (
unsigned char *)malloc((
size_t)dlen);
205 if (!digest)
return NULL;
206 unsigned int out_len = 0;
209 ok = EVP_Digest(NULL, 0, digest, &out_len, md, NULL);
211 ok = EVP_Digest(data,
len, digest, &out_len, md, NULL);
213 if (
ok != 1 || (
int)out_len != dlen) {
217 char *
hex = (
char *)malloc((
size_t)dlen * 2 + 1);
222 for (
int i = 0; i < dlen; ++i) {
223 hex[2 * i] =
hexdig[(digest[i] >> 4) & 0xF];
224 hex[2 * i + 1] =
hexdig[digest[i] & 0xF];
226 hex[dlen * 2] =
'\0';
230 char *
hex = (
char *)malloc(1);
static char * fun_openssl_sha512_hex(const unsigned char *data, size_t len)
Compute SHA-512 digest and return it as a lowercase hex string.
static char * fun_openssl_ripemd160_hex(const unsigned char *data, size_t len)
Compute RIPEMD-160 digest and return it as a lowercase hex string.
static char * fun_openssl_sha256_hex(const unsigned char *data, size_t len)
Compute SHA-256 digest and return it as a lowercase hex string.
static char * fun_openssl_md5_hex(const unsigned char *data, size_t len)
Compute MD5 digest and return it as a lowercase hex string.
int EVP_MD_get_size(const EVP_MD *md)
static const char hexdig[]