5 #include <openssl/evp.h>
7 #include "libcryptsetup.h"
15 int hash(const char *backend_name, const char *hash_name,
16 char *result, size_t size,
17 const char *passphrase, size_t sizep)
24 OpenSSL_add_all_digests();
25 md = EVP_get_digestbyname(hash_name);
27 set_error("Unknown hash type %s", hash_name);
31 if (EVP_MD_size(md) > size) {
32 set_error("requested hash length (%zd) > key length (%zd)", EVP_MD_size(md), size);
36 pad = size - EVP_MD_size(md);
38 mdctx = EVP_MD_CTX_new();
39 EVP_DigestInit(mdctx, md);
40 EVP_DigestUpdate(mdctx, passphrase, sizep);
41 r = !EVP_DigestFinal(mdctx, result, NULL);
44 memset(result+size, 0, pad);
47 EVP_MD_CTX_free(mdctx);