What is the problem with it? Do you see any errors? Also what about your AES engine? Does that work?
-Tera On Wed, Aug 28, 2013 at 9:53 AM, mhnrj79 <[email protected]> wrote: > I have developed an openssl engine which replaces the AES implementation. > Currently, I am trying to replace the HMAC-SHA1 implementation. I would > like > some advice whether my implementation is correct. Below is my sample code: > > /////////////////////////////////////////////////////////// > static int engine_digest_nids [] = { NID_sha1 }; > static int engine_digest_nids_num = 1; > > #define MYENGINE_ID "myengine" > #define MYENGINE_NAME "my custom engine" > > const EVP_MD myengine_sha1 = > { > NID_sha1, > NID_undef, > SHA_DIGEST_LENGTH, > 0, > myengine_digest_init, > myengine_digest_update, > myengine_digest_final, > NULL, > myengine_digest_cleanup, > EVP_PKEY_NULL_method, > SHA_CBLOCK, > sizeof(EVP_MD *) + sizeof(SHA_CTX), > } > > void ENGINE_load_myengine(void) > { > ENGINE *eng = ENGINE_myengine(); > if(!eng) return; > ENGINE_add(eng); > ENGINE_free(eng); > ERR_clear_error(); > } > > static int myengine_finish(ENGINE *e) > { > return 1; > } > > static int myengine_init(ENGINE *e) > { > return 1; > } > > static int myengine_bind_helper(ENGINE *e) > { > if(!ENGINE_set_id(e, MYENGINE_ID) || > !ENGINE_set_name(e, MYENGINE_NAME) || > !ENGINE_set_init_function(e, myengine_init) || > !ENGINE_set_finish(e, myengine_finish) || > !ENGINE_set_ciphers(e, myengine_ciphers) || > !ENGINE_set_digests(e, myengine_engine_digests)) > { > return 0; > } > > return 1; > } > > static ENGINE *ENGINE_myengine(void) > { > ENGINE *eng = ENGINE_new(); > > if(!eng) > { > return NULL; > } > > if(!myengine_bind_helper(eng)) > { > ENGINE_free(eng); > return NULL; > } > > return eng; > } > > static int myengine_digest_init(EVP_MD_CTX *ctx) > { > memset(ctx->md_data, 0, ctx->digest->md_size); > return 1; > } > > static int myengine_digest_update(EVP_MD_CTX *ctx, const void *data, size_t > count) > { > ctx->md_data = OPENSSL_malloc(ctx->digest->md_size); > myengine_hmac_sha1(data, count, ctx->md_data); > return 1; > } > > static int myengine_digest_final(EVP_MD_CTX *ctx, unsigned char *md) > { > memcpy(md, ctx->md_data, ctx->digest->md_size); > return 1; > } > > static int myengine_digest_cleanup(EVP_MD_CTX *ctx) > { > OPENSSL_free(ctx->md_data); > ctx->md_data = NULL; > return 1; > } > > static int myengine_engine_digests(ENGINE *e, const EVP_MD **digest, const > int **nids, int nid) > { > if(!digest) > { > *nids = engine_digest_nids; > return engine_digest_nids_num; > } > > switch(nid) > { > case NID_sha1: > *digest = &myengine_sha1; > break; > > default: > *digest = NULL; > break; > } > return (*digest != NULL); > } > > > > > -- > View this message in context: > http://openssl.6102.n7.nabble.com/Need-guidance-to-replace-HMAC-SHA1-implementation-via-engine-tp46365.html > Sent from the OpenSSL - Dev mailing list archive at Nabble.com. > ______________________________________________________________________ > OpenSSL Project http://www.openssl.org > Development Mailing List [email protected] > Automated List Manager [email protected] >
