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, /* Don't assume ctx->md_data was cleaned in EVP_Digest_Final,
* because sometimes only copies of the context are ever finalised. * 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) if(ctx->digest && ctx->digest->ctx_size && ctx->md_data)
{ {
memset(ctx->md_data,0,ctx->digest->ctx_size); 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 (*update)(EVP_MD_CTX *ctx,const void *data,unsigned long count);
int (*final)(EVP_MD_CTX *ctx,unsigned char *md); int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from); int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
int (*cleanup)(EVP_MD_CTX *ctx);
/* FIXME: prototype these some day */ /* FIXME: prototype these some day */
int (*sign)(); int (*sign)();

View File

@ -82,6 +82,7 @@ static const EVP_MD dsa_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_DSA_method, EVP_PKEY_DSA_method,
SHA_CBLOCK, SHA_CBLOCK,
sizeof(EVP_MD *)+sizeof(SHA_CTX), sizeof(EVP_MD *)+sizeof(SHA_CTX),

View File

@ -82,6 +82,7 @@ static const EVP_MD dss1_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_DSA_method, EVP_PKEY_DSA_method,
SHA_CBLOCK, SHA_CBLOCK,
sizeof(EVP_MD *)+sizeof(SHA_CTX), sizeof(EVP_MD *)+sizeof(SHA_CTX),

View File

@ -83,6 +83,7 @@ static const EVP_MD md2_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
MD2_BLOCK, MD2_BLOCK,
sizeof(EVP_MD *)+sizeof(MD2_CTX), sizeof(EVP_MD *)+sizeof(MD2_CTX),

View File

@ -83,6 +83,7 @@ static const EVP_MD md4_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
MD4_CBLOCK, MD4_CBLOCK,
sizeof(EVP_MD *)+sizeof(MD4_CTX), sizeof(EVP_MD *)+sizeof(MD4_CTX),

View File

@ -83,6 +83,7 @@ static const EVP_MD md5_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
MD5_CBLOCK, MD5_CBLOCK,
sizeof(EVP_MD *)+sizeof(MD5_CTX), sizeof(EVP_MD *)+sizeof(MD5_CTX),

View File

@ -83,6 +83,7 @@ static const EVP_MD mdc2_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_ASN1_OCTET_STRING_method, EVP_PKEY_RSA_ASN1_OCTET_STRING_method,
MDC2_BLOCK, MDC2_BLOCK,
sizeof(EVP_MD *)+sizeof(MDC2_CTX), sizeof(EVP_MD *)+sizeof(MDC2_CTX),

View File

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

View File

@ -83,6 +83,7 @@ static const EVP_MD ripemd160_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
RIPEMD160_CBLOCK, RIPEMD160_CBLOCK,
sizeof(EVP_MD *)+sizeof(RIPEMD160_CTX), sizeof(EVP_MD *)+sizeof(RIPEMD160_CTX),

View File

@ -82,6 +82,7 @@ static const EVP_MD sha_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
SHA_CBLOCK, SHA_CBLOCK,
sizeof(EVP_MD *)+sizeof(SHA_CTX), sizeof(EVP_MD *)+sizeof(SHA_CTX),

View File

@ -82,6 +82,7 @@ static const EVP_MD sha1_md=
update, update,
final, final,
NULL, NULL,
NULL,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
SHA_CBLOCK, SHA_CBLOCK,
sizeof(EVP_MD *)+sizeof(SHA_CTX), 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; 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: if device can do chained MACs, then don't accumulate */
/* FIXME: move accumulation to the framework */ /* FIXME: move accumulation to the framework */
static int dev_crypto_md5_init(EVP_MD_CTX *ctx) 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; return 0;
} }
} }
printf("done\n"); // printf("done\n");
return 1; 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) if(ctx->flags&EVP_MD_CTX_FLAG_ONESHOT)
{ {
memcpy(md,md_data->md,MD5_DIGEST_LENGTH); 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); ret=do_digest(md_data->sess.ses,md,md_data->data,md_data->len);
OPENSSL_free(md_data->data); OPENSSL_free(md_data->data);
md_data->data=NULL; md_data->data=NULL;
md_data->len=0; md_data->len=0;
}
return ret; return ret;
} }
@ -399,6 +412,11 @@ static int dev_crypto_md5_copy(EVP_MD_CTX *to,const EVP_MD_CTX *from)
return 1; 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= static const EVP_MD md5_md=
{ {
NID_md5, NID_md5,
@ -409,6 +427,7 @@ static const EVP_MD md5_md=
dev_crypto_md5_update, dev_crypto_md5_update,
dev_crypto_md5_final, dev_crypto_md5_final,
dev_crypto_md5_copy, dev_crypto_md5_copy,
dev_crypto_md5_cleanup,
EVP_PKEY_RSA_method, EVP_PKEY_RSA_method,
MD5_CBLOCK, MD5_CBLOCK,
sizeof(MD_DATA), sizeof(MD_DATA),