Add a cleanup function for MDs.
This commit is contained in:
parent
7d34470458
commit
e8330cf5ac
13 changed files with 39 additions and 7 deletions
|
@ -165,6 +165,8 @@ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
|
|||
/* Don't assume ctx->md_data was cleaned in EVP_Digest_Final,
|
||||
* because sometimes only copies of the context are ever finalised.
|
||||
*/
|
||||
if(ctx->digest && ctx->digest->cleanup)
|
||||
ctx->digest->cleanup(ctx);
|
||||
if(ctx->digest && ctx->digest->ctx_size && ctx->md_data)
|
||||
{
|
||||
memset(ctx->md_data,0,ctx->digest->ctx_size);
|
||||
|
|
|
@ -222,6 +222,7 @@ struct env_md_st
|
|||
int (*update)(EVP_MD_CTX *ctx,const void *data,unsigned long count);
|
||||
int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
|
||||
int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
|
||||
int (*cleanup)(EVP_MD_CTX *ctx);
|
||||
|
||||
/* FIXME: prototype these some day */
|
||||
int (*sign)();
|
||||
|
|
|
@ -82,6 +82,7 @@ static const EVP_MD dsa_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_DSA_method,
|
||||
SHA_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(SHA_CTX),
|
||||
|
|
|
@ -82,6 +82,7 @@ static const EVP_MD dss1_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_DSA_method,
|
||||
SHA_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(SHA_CTX),
|
||||
|
|
|
@ -83,6 +83,7 @@ static const EVP_MD md2_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_method,
|
||||
MD2_BLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(MD2_CTX),
|
||||
|
|
|
@ -83,6 +83,7 @@ static const EVP_MD md4_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_method,
|
||||
MD4_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(MD4_CTX),
|
||||
|
|
|
@ -83,6 +83,7 @@ static const EVP_MD md5_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_method,
|
||||
MD5_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(MD5_CTX),
|
||||
|
|
|
@ -83,6 +83,7 @@ static const EVP_MD mdc2_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_ASN1_OCTET_STRING_method,
|
||||
MDC2_BLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(MDC2_CTX),
|
||||
|
|
|
@ -81,6 +81,7 @@ static const EVP_MD null_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_NULL_method,
|
||||
0,
|
||||
sizeof(EVP_MD *),
|
||||
|
|
|
@ -83,6 +83,7 @@ static const EVP_MD ripemd160_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_method,
|
||||
RIPEMD160_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(RIPEMD160_CTX),
|
||||
|
|
|
@ -82,6 +82,7 @@ static const EVP_MD sha_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_method,
|
||||
SHA_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(SHA_CTX),
|
||||
|
|
|
@ -82,6 +82,7 @@ static const EVP_MD sha1_md=
|
|||
update,
|
||||
final,
|
||||
NULL,
|
||||
NULL,
|
||||
EVP_PKEY_RSA_method,
|
||||
SHA_CBLOCK,
|
||||
sizeof(EVP_MD *)+sizeof(SHA_CTX),
|
||||
|
|
|
@ -291,6 +291,17 @@ static int dev_crypto_init_digest(MD_DATA *md_data,int mac)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int dev_crypto_cleanup_digest(MD_DATA *md_data)
|
||||
{
|
||||
if (ioctl(fd,CIOCFSESSION,&md_data->sess.ses) == -1)
|
||||
{
|
||||
err("CIOCFSESSION failed");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* FIXME: if device can do chained MACs, then don't accumulate */
|
||||
/* FIXME: move accumulation to the framework */
|
||||
static int dev_crypto_md5_init(EVP_MD_CTX *ctx)
|
||||
|
@ -346,7 +357,7 @@ static int do_digest(int ses,unsigned char *md,const void *data,int len)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
printf("done\n");
|
||||
// printf("done\n");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -374,13 +385,15 @@ static int dev_crypto_md5_final(EVP_MD_CTX *ctx,unsigned char *md)
|
|||
if(ctx->flags&EVP_MD_CTX_FLAG_ONESHOT)
|
||||
{
|
||||
memcpy(md,md_data->md,MD5_DIGEST_LENGTH);
|
||||
return 1;
|
||||
ret=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret=do_digest(md_data->sess.ses,md,md_data->data,md_data->len);
|
||||
OPENSSL_free(md_data->data);
|
||||
md_data->data=NULL;
|
||||
md_data->len=0;
|
||||
}
|
||||
|
||||
ret=do_digest(md_data->sess.ses,md,md_data->data,md_data->len);
|
||||
OPENSSL_free(md_data->data);
|
||||
md_data->data=NULL;
|
||||
md_data->len=0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -399,6 +412,11 @@ static int dev_crypto_md5_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int dev_crypto_md5_cleanup(EVP_MD_CTX *ctx)
|
||||
{
|
||||
return dev_crypto_cleanup_digest(ctx->md_data);
|
||||
}
|
||||
|
||||
static const EVP_MD md5_md=
|
||||
{
|
||||
NID_md5,
|
||||
|
@ -409,6 +427,7 @@ static const EVP_MD md5_md=
|
|||
dev_crypto_md5_update,
|
||||
dev_crypto_md5_final,
|
||||
dev_crypto_md5_copy,
|
||||
dev_crypto_md5_cleanup,
|
||||
EVP_PKEY_RSA_method,
|
||||
MD5_CBLOCK,
|
||||
sizeof(MD_DATA),
|
||||
|
|
Loading…
Reference in a new issue