mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 19:24:42 +02:00
Restrict AES-GCM IV minimum size to 96-bits for newer FIPS builds.
This commit is contained in:
@@ -7387,14 +7387,23 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
|
|||||||
* functions */
|
* functions */
|
||||||
#ifndef WC_NO_RNG
|
#ifndef WC_NO_RNG
|
||||||
|
|
||||||
|
static WC_INLINE int CheckAesGcmIvSize(int ivSz) {
|
||||||
|
#if defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 4)
|
||||||
|
return (ivSz == GCM_NONCE_MID_SZ ||
|
||||||
|
ivSz == GCM_NONCE_MAX_SZ);
|
||||||
|
#else
|
||||||
|
return (ivSz == GCM_NONCE_MIN_SZ ||
|
||||||
|
ivSz == GCM_NONCE_MID_SZ ||
|
||||||
|
ivSz == GCM_NONCE_MAX_SZ);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int wc_AesGcmSetExtIV(Aes* aes, const byte* iv, word32 ivSz)
|
int wc_AesGcmSetExtIV(Aes* aes, const byte* iv, word32 ivSz)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (aes == NULL || iv == NULL ||
|
if (aes == NULL || iv == NULL || !CheckAesGcmIvSize(ivSz)) {
|
||||||
(ivSz != GCM_NONCE_MIN_SZ && ivSz != GCM_NONCE_MID_SZ &&
|
|
||||||
ivSz != GCM_NONCE_MAX_SZ)) {
|
|
||||||
|
|
||||||
ret = BAD_FUNC_ARG;
|
ret = BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7419,9 +7428,7 @@ int wc_AesGcmSetIV(Aes* aes, word32 ivSz,
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (aes == NULL || rng == NULL ||
|
if (aes == NULL || rng == NULL || !CheckAesGcmIvSize(ivSz) ||
|
||||||
(ivSz != GCM_NONCE_MIN_SZ && ivSz != GCM_NONCE_MID_SZ &&
|
|
||||||
ivSz != GCM_NONCE_MAX_SZ) ||
|
|
||||||
(ivFixed == NULL && ivFixedSz != 0) ||
|
(ivFixed == NULL && ivFixedSz != 0) ||
|
||||||
(ivFixed != NULL && ivFixedSz != AES_IV_FIXED_SZ)) {
|
(ivFixed != NULL && ivFixedSz != AES_IV_FIXED_SZ)) {
|
||||||
|
|
||||||
|
@@ -131,7 +131,7 @@ enum {
|
|||||||
KEYWRAP_BLOCK_SIZE = 8,
|
KEYWRAP_BLOCK_SIZE = 8,
|
||||||
|
|
||||||
GCM_NONCE_MAX_SZ = 16, /* wolfCrypt's maximum nonce size allowed. */
|
GCM_NONCE_MAX_SZ = 16, /* wolfCrypt's maximum nonce size allowed. */
|
||||||
GCM_NONCE_MID_SZ = 12, /* The usual default nonce size for AES-GCM. */
|
GCM_NONCE_MID_SZ = 12, /* The default nonce size for AES-GCM. */
|
||||||
GCM_NONCE_MIN_SZ = 8, /* wolfCrypt's minimum nonce size allowed. */
|
GCM_NONCE_MIN_SZ = 8, /* wolfCrypt's minimum nonce size allowed. */
|
||||||
CCM_NONCE_MIN_SZ = 7,
|
CCM_NONCE_MIN_SZ = 7,
|
||||||
CCM_NONCE_MAX_SZ = 13,
|
CCM_NONCE_MAX_SZ = 13,
|
||||||
|
Reference in New Issue
Block a user