EVPCTX evp_init(int nid) { EVPCTX ctx = NULL; int rc; mbedtls_md_type_t algo = nid_to_md_algo(nid); const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(algo); if (md_info == NULL) { return NULL; } ctx = malloc(sizeof(mbedtls_md_context_t)); if (ctx == NULL) { return NULL; } mbedtls_md_init(ctx); rc = mbedtls_md_setup(ctx, md_info, 0); if (rc != 0) { SAFE_FREE(ctx); return NULL; } rc = mbedtls_md_starts(ctx); if (rc != 0) { SAFE_FREE(ctx); return NULL; } return ctx; }
void evp(int nid, unsigned char *digest, int len, unsigned char *hash, unsigned int *hlen) { int algo = nid_to_md_algo(nid); /* Note: What gcrypt calls 'hash' is called 'digest' here and vice-versa. */ gcry_md_hash_buffer(algo, hash, digest, len); *hlen = gcry_md_get_algo_dlen(algo); }
void evp(int nid, unsigned char *digest, int len, unsigned char *hash, unsigned int *hlen) { mbedtls_md_type_t algo = nid_to_md_algo(nid); const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type(algo); if (md_info != NULL) { *hlen = mbedtls_md_get_size(md_info); mbedtls_md(md_info, digest, len, hash); } }
EVPCTX evp_init(int nid) { gcry_error_t err; int algo = nid_to_md_algo(nid); EVPCTX ctx; err = gcry_md_open(&ctx, algo, 0); if (err) { return NULL; } return ctx; }