mirror of
https://github.com/QuasarApp/openssl.git
synced 2025-05-10 00:19:40 +00:00
Convert memset calls to OPENSSL_cleanse
Ensure things really do get cleared when we intend them to. Addresses an OCAP Audit issue. Reviewed-by: Andy Polyakov <appro@openssl.org>
This commit is contained in:
parent
6ad8c48291
commit
cb5ebf9613
@ -569,7 +569,7 @@ void BN_clear(BIGNUM *a)
|
|||||||
{
|
{
|
||||||
bn_check_top(a);
|
bn_check_top(a);
|
||||||
if (a->d != NULL)
|
if (a->d != NULL)
|
||||||
memset(a->d, 0, a->dmax * sizeof(a->d[0]));
|
OPENSSL_cleanse(a->d, a->dmax * sizeof(a->d[0]));
|
||||||
a->top = 0;
|
a->top = 0;
|
||||||
a->neg = 0;
|
a->neg = 0;
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,7 @@ int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size)
|
|||||||
ctx->digest->cleanup(ctx);
|
ctx->digest->cleanup(ctx);
|
||||||
EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED);
|
EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED);
|
||||||
}
|
}
|
||||||
memset(ctx->md_data, 0, ctx->digest->ctx_size);
|
OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,6 +219,6 @@ int MD2_Final(unsigned char *md, MD2_CTX *c)
|
|||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
md[i] = (UCHAR) (p1[i] & 0xff);
|
md[i] = (UCHAR) (p1[i] & 0xff);
|
||||||
memset((char *)&c, 0, sizeof(c));
|
OPENSSL_cleanse(c, sizeof(*c));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -109,6 +109,8 @@
|
|||||||
* <appro@fy.chalmers.se>
|
* <appro@fy.chalmers.se>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
|
||||||
#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||||
# error "DATA_ORDER must be defined!"
|
# error "DATA_ORDER must be defined!"
|
||||||
#endif
|
#endif
|
||||||
@ -329,6 +331,12 @@ int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len)
|
|||||||
data += n;
|
data += n;
|
||||||
len -= n;
|
len -= n;
|
||||||
c->num = 0;
|
c->num = 0;
|
||||||
|
/*
|
||||||
|
* We use memset rather than OPENSSL_cleanse() here deliberately.
|
||||||
|
* Using OPENSSL_cleanse() here could be a performance issue. It
|
||||||
|
* will get properly cleansed on finalisation so this isn't a
|
||||||
|
* security problem.
|
||||||
|
*/
|
||||||
memset(p, 0, HASH_CBLOCK); /* keep it zeroed */
|
memset(p, 0, HASH_CBLOCK); /* keep it zeroed */
|
||||||
} else {
|
} else {
|
||||||
memcpy(p + n, data, len);
|
memcpy(p + n, data, len);
|
||||||
@ -384,7 +392,7 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c)
|
|||||||
p -= HASH_CBLOCK;
|
p -= HASH_CBLOCK;
|
||||||
HASH_BLOCK_DATA_ORDER(c, p, 1);
|
HASH_BLOCK_DATA_ORDER(c, p, 1);
|
||||||
c->num = 0;
|
c->num = 0;
|
||||||
memset(p, 0, HASH_CBLOCK);
|
OPENSSL_cleanse(p, HASH_CBLOCK);
|
||||||
|
|
||||||
#ifndef HASH_MAKE_STRING
|
#ifndef HASH_MAKE_STRING
|
||||||
# error "HASH_MAKE_STRING must be defined!"
|
# error "HASH_MAKE_STRING must be defined!"
|
||||||
|
@ -235,7 +235,7 @@ int RAND_poll(void)
|
|||||||
rnd >>= 8;
|
rnd >>= 8;
|
||||||
}
|
}
|
||||||
RAND_add(buf, sizeof(buf), ENTROPY_NEEDED);
|
RAND_add(buf, sizeof(buf), ENTROPY_NEEDED);
|
||||||
memset(buf, 0, sizeof(buf));
|
OPENSSL_cleanse(buf, sizeof(buf));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
* input. This is done for perfomance.
|
* input. This is done for perfomance.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <openssl/crypto.h>
|
||||||
#include "wp_locl.h"
|
#include "wp_locl.h"
|
||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -237,7 +238,7 @@ int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c)
|
|||||||
|
|
||||||
if (md) {
|
if (md) {
|
||||||
memcpy(md, c->H.c, WHIRLPOOL_DIGEST_LENGTH);
|
memcpy(md, c->H.c, WHIRLPOOL_DIGEST_LENGTH);
|
||||||
memset(c, 0, sizeof(*c));
|
OPENSSL_cleanse(c, sizeof(*c));
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user