Add a cleanup function for MDs.

This commit is contained in:
Ben Laurie 2001-09-07 12:03:24 +00:00
parent 7d34470458
commit e8330cf5ac
13 changed files with 39 additions and 7 deletions

View file

@ -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);

View file

@ -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)();

View file

@ -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),

View file

@ -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),

View file

@ -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),

View file

@ -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),

View file

@ -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),

View file

@ -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),

View file

@ -81,6 +81,7 @@ static const EVP_MD null_md=
update,
final,
NULL,
NULL,
EVP_PKEY_NULL_method,
0,
sizeof(EVP_MD *),

View file

@ -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),

View file

@ -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),

View file

@ -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),

View file

@ -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),