Add a cleanup function for MDs.
This commit is contained in:
parent
7d34470458
commit
e8330cf5ac
@ -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);
|
||||||
|
@ -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)();
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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 *),
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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),
|
||||||
|
@ -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);
|
||||||
|
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;
|
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),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user