#include <stdio.h>
#include <openssl/evp.h>
#include <string.h>

int main()
{
    const char *message = "Rafael Grether";
    unsigned char digest[EVP_MAX_MD_SIZE];
    unsigned int digest_len;
    
    EVP_MD_CTX *mdctx;
    if ((mdctx = EVP_MD_CTX_new()) == NULL)
    {
        fprintf(stderr, "Error EVP_MD_CTX_new \n");
        return 1;
    }

    if (EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL) != 1)
    {
        fprintf(stderr, "Error EVP_DigestInit_ex \n");
        EVP_MD_CTX_free(mdctx);
	return 1;
    }

    if (EVP_DigestUpdate(mdctx, message, strlen(message)) != 1)
    {
        fprintf(stderr, "Error EVP_DigestUpdate \n");
        EVP_MD_CTX_free(mdctx);
        return 1;
    }

    if (EVP_DigestFinal_ex(mdctx, digest, &digest_len) != 1)
    {
        fprintf(stderr, "Error EVP_DigestFinal_ex \n");
        EVP_MD_CTX_free(mdctx);
        return 1;
    }

    for (unsigned int i = 0; i < digest_len; i++)
    {
        printf("%02x", digest[i]);
    }
    
    EVP_MD_CTX_free(mdctx);

    return 0;
}