Eliminate duplicate ct memcmp

Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
This commit is contained in:
Dave Rodgman 2023-09-11 18:25:16 +01:00
parent 8a7fb2d799
commit d26a3d6da7
3 changed files with 6 additions and 14 deletions

View File

@ -33,6 +33,7 @@
#include "mbedtls/ccm.h" #include "mbedtls/ccm.h"
#include "mbedtls/platform_util.h" #include "mbedtls/platform_util.h"
#include "mbedtls/error.h" #include "mbedtls/error.h"
#include "mbedtls/constant_time.h"
#include <string.h> #include <string.h>
@ -533,13 +534,8 @@ static int mbedtls_ccm_compare_tags(const unsigned char *tag1,
const unsigned char *tag2, const unsigned char *tag2,
size_t tag_len) size_t tag_len)
{ {
unsigned char i;
int diff;
/* Check tag in "constant-time" */ /* Check tag in "constant-time" */
for (diff = 0, i = 0; i < tag_len; i++) { int diff = mbedtls_ct_memcmp(tag1, tag2, tag_len);
diff |= tag1[i] ^ tag2[i];
}
if (diff != 0) { if (diff != 0) {
return MBEDTLS_ERR_CCM_AUTH_FAILED; return MBEDTLS_ERR_CCM_AUTH_FAILED;

View File

@ -25,6 +25,7 @@
#include "mbedtls/chachapoly.h" #include "mbedtls/chachapoly.h"
#include "mbedtls/platform_util.h" #include "mbedtls/platform_util.h"
#include "mbedtls/error.h" #include "mbedtls/error.h"
#include "mbedtls/constant_time.h"
#include <string.h> #include <string.h>
@ -310,7 +311,6 @@ int mbedtls_chachapoly_auth_decrypt(mbedtls_chachapoly_context *ctx,
{ {
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
unsigned char check_tag[16]; unsigned char check_tag[16];
size_t i;
int diff; int diff;
if ((ret = chachapoly_crypt_and_tag(ctx, if ((ret = chachapoly_crypt_and_tag(ctx,
@ -320,9 +320,7 @@ int mbedtls_chachapoly_auth_decrypt(mbedtls_chachapoly_context *ctx,
} }
/* Check tag in "constant-time" */ /* Check tag in "constant-time" */
for (diff = 0, i = 0; i < sizeof(check_tag); i++) { diff = mbedtls_ct_memcmp(tag, check_tag, sizeof(check_tag));
diff |= tag[i] ^ check_tag[i];
}
if (diff != 0) { if (diff != 0) {
mbedtls_platform_zeroize(output, length); mbedtls_platform_zeroize(output, length);

View File

@ -35,6 +35,7 @@
#include "mbedtls/platform.h" #include "mbedtls/platform.h"
#include "mbedtls/platform_util.h" #include "mbedtls/platform_util.h"
#include "mbedtls/error.h" #include "mbedtls/error.h"
#include "mbedtls/constant_time.h"
#include <string.h> #include <string.h>
@ -601,7 +602,6 @@ int mbedtls_gcm_auth_decrypt(mbedtls_gcm_context *ctx,
{ {
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
unsigned char check_tag[16]; unsigned char check_tag[16];
size_t i;
int diff; int diff;
if ((ret = mbedtls_gcm_crypt_and_tag(ctx, MBEDTLS_GCM_DECRYPT, length, if ((ret = mbedtls_gcm_crypt_and_tag(ctx, MBEDTLS_GCM_DECRYPT, length,
@ -611,9 +611,7 @@ int mbedtls_gcm_auth_decrypt(mbedtls_gcm_context *ctx,
} }
/* Check tag in "constant-time" */ /* Check tag in "constant-time" */
for (diff = 0, i = 0; i < tag_len; i++) { diff = mbedtls_ct_memcmp(tag, check_tag, tag_len);
diff |= tag[i] ^ check_tag[i];
}
if (diff != 0) { if (diff != 0) {
mbedtls_platform_zeroize(output, length); mbedtls_platform_zeroize(output, length);