Merge remote-tracking branch 'origin/development' into support_cipher_encrypt_only
This commit is contained in:
commit
4b6595aa83
4 changed files with 147 additions and 110 deletions
2
3rdparty/Makefile.inc
vendored
2
3rdparty/Makefile.inc
vendored
|
@ -1,3 +1,3 @@
|
||||||
THIRDPARTY_DIR = $(dir $(word 2, $(MAKEFILE_LIST)))
|
THIRDPARTY_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||||
include $(THIRDPARTY_DIR)/everest/Makefile.inc
|
include $(THIRDPARTY_DIR)/everest/Makefile.inc
|
||||||
include $(THIRDPARTY_DIR)/p256-m/Makefile.inc
|
include $(THIRDPARTY_DIR)/p256-m/Makefile.inc
|
||||||
|
|
102
library/aes.c
102
library/aes.c
|
@ -66,11 +66,6 @@
|
||||||
|
|
||||||
#include "mbedtls/platform.h"
|
#include "mbedtls/platform.h"
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_ENCRYPT_ALT) || !defined(MBEDTLS_AES_SETKEY_ENC_ALT) || \
|
|
||||||
(!defined(MBEDTLS_AES_SETKEY_DEC_ALT) && !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY))
|
|
||||||
#define MBEDTLS_AES_NEED_FORWARD_S_BOXES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (!defined(MBEDTLS_AES_DECRYPT_ALT) || !defined(MBEDTLS_AES_SETKEY_DEC_ALT)) && \
|
#if (!defined(MBEDTLS_AES_DECRYPT_ALT) || !defined(MBEDTLS_AES_SETKEY_DEC_ALT)) && \
|
||||||
!defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
|
!defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
|
||||||
#define MBEDTLS_AES_NEED_REVERSE_TABLES
|
#define MBEDTLS_AES_NEED_REVERSE_TABLES
|
||||||
|
@ -86,8 +81,7 @@ static int aes_padlock_ace = -1;
|
||||||
/*
|
/*
|
||||||
* Forward S-box
|
* Forward S-box
|
||||||
*/
|
*/
|
||||||
#if defined(MBEDTLS_AES_NEED_FORWARD_S_BOXES)
|
MBEDTLS_MAYBE_UNUSED static const unsigned char FSb[256] =
|
||||||
static const unsigned char FSb[256] =
|
|
||||||
{
|
{
|
||||||
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
|
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
|
||||||
0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
|
0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
|
||||||
|
@ -122,7 +116,6 @@ static const unsigned char FSb[256] =
|
||||||
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
|
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
|
||||||
0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
|
0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
|
||||||
};
|
};
|
||||||
#endif /* MBEDTLS_AES_NEED_FORWARD_S_BOXES */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Forward tables
|
* Forward tables
|
||||||
|
@ -194,36 +187,28 @@ static const unsigned char FSb[256] =
|
||||||
V(C3, 41, 41, 82), V(B0, 99, 99, 29), V(77, 2D, 2D, 5A), V(11, 0F, 0F, 1E), \
|
V(C3, 41, 41, 82), V(B0, 99, 99, 29), V(77, 2D, 2D, 5A), V(11, 0F, 0F, 1E), \
|
||||||
V(CB, B0, B0, 7B), V(FC, 54, 54, A8), V(D6, BB, BB, 6D), V(3A, 16, 16, 2C)
|
V(CB, B0, B0, 7B), V(FC, 54, 54, A8), V(D6, BB, BB, 6D), V(3A, 16, 16, 2C)
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_ENCRYPT_ALT)
|
|
||||||
#define V(a, b, c, d) 0x##a##b##c##d
|
#define V(a, b, c, d) 0x##a##b##c##d
|
||||||
static const uint32_t FT0[256] = { FT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t FT0[256] = { FT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_FEWER_TABLES)
|
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##b##c##d##a
|
#define V(a, b, c, d) 0x##b##c##d##a
|
||||||
static const uint32_t FT1[256] = { FT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t FT1[256] = { FT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##c##d##a##b
|
#define V(a, b, c, d) 0x##c##d##a##b
|
||||||
static const uint32_t FT2[256] = { FT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t FT2[256] = { FT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##d##a##b##c
|
#define V(a, b, c, d) 0x##d##a##b##c
|
||||||
static const uint32_t FT3[256] = { FT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t FT3[256] = { FT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#endif /* !MBEDTLS_AES_FEWER_TABLES */
|
|
||||||
|
|
||||||
#endif /* !MBEDTLS_AES_ENCRYPT_ALT */
|
|
||||||
|
|
||||||
#undef FT
|
#undef FT
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_DECRYPT_ALT) && !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
|
|
||||||
/*
|
/*
|
||||||
* Reverse S-box
|
* Reverse S-box
|
||||||
*/
|
*/
|
||||||
static const unsigned char RSb[256] =
|
MBEDTLS_MAYBE_UNUSED static const unsigned char RSb[256] =
|
||||||
{
|
{
|
||||||
0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
|
0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
|
||||||
0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
|
0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
|
||||||
|
@ -258,7 +243,6 @@ static const unsigned char RSb[256] =
|
||||||
0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
|
0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
|
||||||
0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
|
0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
|
||||||
};
|
};
|
||||||
#endif /* !MBEDTLS_AES_DECRYPT_ALT && !MBEDTLS_CIPHER_ENCRYPT_ONLY */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reverse tables
|
* Reverse tables
|
||||||
|
@ -330,84 +314,60 @@ static const unsigned char RSb[256] =
|
||||||
V(71, 01, A8, 39), V(DE, B3, 0C, 08), V(9C, E4, B4, D8), V(90, C1, 56, 64), \
|
V(71, 01, A8, 39), V(DE, B3, 0C, 08), V(9C, E4, B4, D8), V(90, C1, 56, 64), \
|
||||||
V(61, 84, CB, 7B), V(70, B6, 32, D5), V(74, 5C, 6C, 48), V(42, 57, B8, D0)
|
V(61, 84, CB, 7B), V(70, B6, 32, D5), V(74, 5C, 6C, 48), V(42, 57, B8, D0)
|
||||||
|
|
||||||
#if defined(MBEDTLS_AES_NEED_REVERSE_TABLES)
|
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##a##b##c##d
|
#define V(a, b, c, d) 0x##a##b##c##d
|
||||||
static const uint32_t RT0[256] = { RT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t RT0[256] = { RT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_FEWER_TABLES)
|
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##b##c##d##a
|
#define V(a, b, c, d) 0x##b##c##d##a
|
||||||
static const uint32_t RT1[256] = { RT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t RT1[256] = { RT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##c##d##a##b
|
#define V(a, b, c, d) 0x##c##d##a##b
|
||||||
static const uint32_t RT2[256] = { RT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t RT2[256] = { RT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#define V(a, b, c, d) 0x##d##a##b##c
|
#define V(a, b, c, d) 0x##d##a##b##c
|
||||||
static const uint32_t RT3[256] = { RT };
|
MBEDTLS_MAYBE_UNUSED static const uint32_t RT3[256] = { RT };
|
||||||
#undef V
|
#undef V
|
||||||
|
|
||||||
#endif /* !MBEDTLS_AES_FEWER_TABLES */
|
|
||||||
#endif /* MBEDTLS_AES_NEED_REVERSE_TABLES */
|
|
||||||
|
|
||||||
#undef RT
|
#undef RT
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_SETKEY_ENC_ALT)
|
|
||||||
/*
|
/*
|
||||||
* Round constants
|
* Round constants
|
||||||
*/
|
*/
|
||||||
static const uint32_t round_constants[10] =
|
MBEDTLS_MAYBE_UNUSED static const uint32_t round_constants[10] =
|
||||||
{
|
{
|
||||||
0x00000001, 0x00000002, 0x00000004, 0x00000008,
|
0x00000001, 0x00000002, 0x00000004, 0x00000008,
|
||||||
0x00000010, 0x00000020, 0x00000040, 0x00000080,
|
0x00000010, 0x00000020, 0x00000040, 0x00000080,
|
||||||
0x0000001B, 0x00000036
|
0x0000001B, 0x00000036
|
||||||
};
|
};
|
||||||
#endif /* !MBEDTLS_AES_SETKEY_ENC_ALT */
|
|
||||||
|
|
||||||
#else /* MBEDTLS_AES_ROM_TABLES */
|
#else /* MBEDTLS_AES_ROM_TABLES */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Forward S-box & tables
|
* Forward S-box & tables
|
||||||
*/
|
*/
|
||||||
#if defined(MBEDTLS_AES_NEED_FORWARD_S_BOXES)
|
MBEDTLS_MAYBE_UNUSED static unsigned char FSb[256];
|
||||||
static unsigned char FSb[256];
|
MBEDTLS_MAYBE_UNUSED static uint32_t FT0[256];
|
||||||
#endif
|
MBEDTLS_MAYBE_UNUSED static uint32_t FT1[256];
|
||||||
#if !defined(MBEDTLS_AES_ENCRYPT_ALT) || !defined(MBEDTLS_AES_SETKEY_ENC_ALT)
|
MBEDTLS_MAYBE_UNUSED static uint32_t FT2[256];
|
||||||
static uint32_t FT0[256];
|
MBEDTLS_MAYBE_UNUSED static uint32_t FT3[256];
|
||||||
#if !defined(MBEDTLS_AES_FEWER_TABLES)
|
|
||||||
static uint32_t FT1[256];
|
|
||||||
static uint32_t FT2[256];
|
|
||||||
static uint32_t FT3[256];
|
|
||||||
#endif /* !MBEDTLS_AES_FEWER_TABLES */
|
|
||||||
#endif /* !MBEDTLS_AES_ENCRYPT_ALT || !MBEDTLS_AES_SETKEY_ENC_ALT */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reverse S-box & tables
|
* Reverse S-box & tables
|
||||||
*/
|
*/
|
||||||
#if !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY)
|
MBEDTLS_MAYBE_UNUSED static unsigned char RSb[256];
|
||||||
#if (!defined(MBEDTLS_AES_SETKEY_ENC_ALT) && !defined(MBEDTLS_AES_SETKEY_DEC_ALT)) || \
|
|
||||||
!defined(MBEDTLS_AES_DECRYPT_ALT)
|
|
||||||
static unsigned char RSb[256];
|
|
||||||
#endif
|
|
||||||
#endif /* !MBEDTLS_CIPHER_ENCRYPT_ONLY */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_AES_NEED_REVERSE_TABLES)
|
MBEDTLS_MAYBE_UNUSED static uint32_t RT0[256];
|
||||||
static uint32_t RT0[256];
|
MBEDTLS_MAYBE_UNUSED static uint32_t RT1[256];
|
||||||
#if !defined(MBEDTLS_AES_FEWER_TABLES)
|
MBEDTLS_MAYBE_UNUSED static uint32_t RT2[256];
|
||||||
static uint32_t RT1[256];
|
MBEDTLS_MAYBE_UNUSED static uint32_t RT3[256];
|
||||||
static uint32_t RT2[256];
|
|
||||||
static uint32_t RT3[256];
|
|
||||||
#endif /* !MBEDTLS_AES_FEWER_TABLES */
|
|
||||||
#endif /* MBEDTLS_AES_NEED_REVERSE_TABLES */
|
|
||||||
|
|
||||||
#if !defined(MBEDTLS_AES_SETKEY_ENC_ALT)
|
|
||||||
/*
|
/*
|
||||||
* Round constants
|
* Round constants
|
||||||
*/
|
*/
|
||||||
static uint32_t round_constants[10];
|
MBEDTLS_MAYBE_UNUSED static uint32_t round_constants[10];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tables generation code
|
* Tables generation code
|
||||||
|
@ -416,9 +376,9 @@ static uint32_t round_constants[10];
|
||||||
#define XTIME(x) (((x) << 1) ^ (((x) & 0x80) ? 0x1B : 0x00))
|
#define XTIME(x) (((x) << 1) ^ (((x) & 0x80) ? 0x1B : 0x00))
|
||||||
#define MUL(x, y) (((x) && (y)) ? pow[(log[(x)]+log[(y)]) % 255] : 0)
|
#define MUL(x, y) (((x) && (y)) ? pow[(log[(x)]+log[(y)]) % 255] : 0)
|
||||||
|
|
||||||
static int aes_init_done = 0;
|
MBEDTLS_MAYBE_UNUSED static int aes_init_done = 0;
|
||||||
|
|
||||||
static void aes_gen_tables(void)
|
MBEDTLS_MAYBE_UNUSED static void aes_gen_tables(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint8_t x, y, z;
|
uint8_t x, y, z;
|
||||||
|
@ -487,6 +447,7 @@ static void aes_gen_tables(void)
|
||||||
#if defined(MBEDTLS_AES_NEED_REVERSE_TABLES)
|
#if defined(MBEDTLS_AES_NEED_REVERSE_TABLES)
|
||||||
x = RSb[i];
|
x = RSb[i];
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_AES_USE_HARDWARE_ONLY)
|
||||||
RT0[i] = ((uint32_t) MUL(0x0E, x)) ^
|
RT0[i] = ((uint32_t) MUL(0x0E, x)) ^
|
||||||
((uint32_t) MUL(0x09, x) << 8) ^
|
((uint32_t) MUL(0x09, x) << 8) ^
|
||||||
((uint32_t) MUL(0x0D, x) << 16) ^
|
((uint32_t) MUL(0x0D, x) << 16) ^
|
||||||
|
@ -497,12 +458,11 @@ static void aes_gen_tables(void)
|
||||||
RT2[i] = ROTL8(RT1[i]);
|
RT2[i] = ROTL8(RT1[i]);
|
||||||
RT3[i] = ROTL8(RT2[i]);
|
RT3[i] = ROTL8(RT2[i]);
|
||||||
#endif /* !MBEDTLS_AES_FEWER_TABLES */
|
#endif /* !MBEDTLS_AES_FEWER_TABLES */
|
||||||
|
#endif /* !MBEDTLS_AES_USE_HARDWARE_ONLY */
|
||||||
#endif /* MBEDTLS_AES_NEED_REVERSE_TABLES */
|
#endif /* MBEDTLS_AES_NEED_REVERSE_TABLES */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !MBEDTLS_AES_SETKEY_ENC_ALT */
|
|
||||||
|
|
||||||
#undef ROTL8
|
#undef ROTL8
|
||||||
|
|
||||||
#endif /* MBEDTLS_AES_ROM_TABLES */
|
#endif /* MBEDTLS_AES_ROM_TABLES */
|
||||||
|
@ -580,9 +540,7 @@ void mbedtls_aes_xts_free(mbedtls_aes_xts_context *ctx)
|
||||||
#define MAY_NEED_TO_ALIGN
|
#define MAY_NEED_TO_ALIGN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MAY_NEED_TO_ALIGN) || !defined(MBEDTLS_AES_SETKEY_ENC_ALT) || \
|
MBEDTLS_MAYBE_UNUSED static unsigned mbedtls_aes_rk_offset(uint32_t *buf)
|
||||||
(!defined(MBEDTLS_AES_SETKEY_DEC_ALT) && !defined(MBEDTLS_CIPHER_ENCRYPT_ONLY))
|
|
||||||
static unsigned mbedtls_aes_rk_offset(uint32_t *buf)
|
|
||||||
{
|
{
|
||||||
#if defined(MAY_NEED_TO_ALIGN)
|
#if defined(MAY_NEED_TO_ALIGN)
|
||||||
int align_16_bytes = 0;
|
int align_16_bytes = 0;
|
||||||
|
@ -618,8 +576,6 @@ static unsigned mbedtls_aes_rk_offset(uint32_t *buf)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* MAY_NEED_TO_ALIGN || !MBEDTLS_AES_SETKEY_ENC_ALT ||
|
|
||||||
(!MBEDTLS_AES_SETKEY_DEC_ALT && !MBEDTLS_CIPHER_ENCRYPT_ONLY) */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AES key schedule (encryption)
|
* AES key schedule (encryption)
|
||||||
|
@ -1052,7 +1008,6 @@ int mbedtls_internal_aes_decrypt(mbedtls_aes_context *ctx,
|
||||||
}
|
}
|
||||||
#endif /* !MBEDTLS_AES_DECRYPT_ALT && !MBEDTLS_CIPHER_ENCRYPT_ONLY */
|
#endif /* !MBEDTLS_AES_DECRYPT_ALT && !MBEDTLS_CIPHER_ENCRYPT_ONLY */
|
||||||
|
|
||||||
#if defined(MAY_NEED_TO_ALIGN)
|
|
||||||
/* VIA Padlock and our intrinsics-based implementation of AESNI require
|
/* VIA Padlock and our intrinsics-based implementation of AESNI require
|
||||||
* the round keys to be aligned on a 16-byte boundary. We take care of this
|
* the round keys to be aligned on a 16-byte boundary. We take care of this
|
||||||
* before creating them, but the AES context may have moved (this can happen
|
* before creating them, but the AES context may have moved (this can happen
|
||||||
|
@ -1060,7 +1015,7 @@ int mbedtls_internal_aes_decrypt(mbedtls_aes_context *ctx,
|
||||||
* calls it might have a different alignment with respect to 16-byte memory.
|
* calls it might have a different alignment with respect to 16-byte memory.
|
||||||
* So we may need to realign.
|
* So we may need to realign.
|
||||||
*/
|
*/
|
||||||
static void aes_maybe_realign(mbedtls_aes_context *ctx)
|
MBEDTLS_MAYBE_UNUSED static void aes_maybe_realign(mbedtls_aes_context *ctx)
|
||||||
{
|
{
|
||||||
unsigned new_offset = mbedtls_aes_rk_offset(ctx->buf);
|
unsigned new_offset = mbedtls_aes_rk_offset(ctx->buf);
|
||||||
if (new_offset != ctx->rk_offset) {
|
if (new_offset != ctx->rk_offset) {
|
||||||
|
@ -1070,7 +1025,6 @@ static void aes_maybe_realign(mbedtls_aes_context *ctx)
|
||||||
ctx->rk_offset = new_offset;
|
ctx->rk_offset = new_offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AES-ECB block encryption/decryption
|
* AES-ECB block encryption/decryption
|
||||||
|
|
|
@ -334,4 +334,25 @@ static inline void mbedtls_xor_no_simd(unsigned char *r,
|
||||||
#define MBEDTLS_OPTIMIZE_FOR_PERFORMANCE
|
#define MBEDTLS_OPTIMIZE_FOR_PERFORMANCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Suppress compiler warnings for unused functions and variables. */
|
||||||
|
#if !defined(MBEDTLS_MAYBE_UNUSED) && defined(__has_attribute)
|
||||||
|
# if __has_attribute(unused)
|
||||||
|
# define MBEDTLS_MAYBE_UNUSED __attribute__((unused))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined(MBEDTLS_MAYBE_UNUSED) && defined(__GNUC__)
|
||||||
|
# define MBEDTLS_MAYBE_UNUSED __attribute__((unused))
|
||||||
|
#endif
|
||||||
|
#if !defined(MBEDTLS_MAYBE_UNUSED) && defined(__IAR_SYSTEMS_ICC__) && defined(__VER__)
|
||||||
|
# if (__VER__ >= 8010000) // IAR 8.1 or later
|
||||||
|
# define MBEDTLS_MAYBE_UNUSED __attribute__((unused))
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined(MBEDTLS_MAYBE_UNUSED) && defined(_MSC_VER)
|
||||||
|
# define MBEDTLS_MAYBE_UNUSED __pragma(warning(suppress:4189))
|
||||||
|
#endif
|
||||||
|
#if !defined(MBEDTLS_MAYBE_UNUSED)
|
||||||
|
# define MBEDTLS_MAYBE_UNUSED
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* MBEDTLS_LIBRARY_COMMON_H */
|
#endif /* MBEDTLS_LIBRARY_COMMON_H */
|
||||||
|
|
|
@ -3917,45 +3917,107 @@ component_build_tfm() {
|
||||||
make lib CC="gcc" CFLAGS="-Os -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wformat-signedness -Wlogical-op -I../tests/include/spe"
|
make lib CC="gcc" CFLAGS="-Os -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wformat-signedness -Wlogical-op -I../tests/include/spe"
|
||||||
}
|
}
|
||||||
|
|
||||||
component_build_aes_variations() { # ~45s
|
# Test that the given .o file builds with all (valid) combinations of the given options.
|
||||||
|
#
|
||||||
|
# Syntax: build_test_config_combos FILE VALIDATOR_FUNCTION OPT1 OPT2 ...
|
||||||
|
#
|
||||||
|
# The validator function is the name of a function to validate the combination of options.
|
||||||
|
# It may be "" if all combinations are valid.
|
||||||
|
# It receives a string containing a combination of options, as passed to the compiler,
|
||||||
|
# e.g. "-DOPT1 -DOPT2 ...". It must return 0 iff the combination is valid, non-zero if invalid.
|
||||||
|
build_test_config_combos() {
|
||||||
|
file=$1
|
||||||
|
shift
|
||||||
|
validate_options=$1
|
||||||
|
shift
|
||||||
|
options=("$@")
|
||||||
|
|
||||||
|
# clear all of the options so that they can be overridden on the clang commandline
|
||||||
|
for opt in "${options[@]}"; do
|
||||||
|
./scripts/config.py unset ${opt}
|
||||||
|
done
|
||||||
|
|
||||||
|
# enter the directory containing the target file & strip the dir from the filename
|
||||||
|
cd $(dirname ${file})
|
||||||
|
file=$(basename ${file})
|
||||||
|
|
||||||
|
# The most common issue is unused variables/functions, so ensure -Wunused is set.
|
||||||
|
warning_flags="-Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wasm-operand-widths -Wunused"
|
||||||
|
|
||||||
|
# Extract the command generated by the Makefile to build the target file.
|
||||||
|
# This ensures that we have any include paths, macro definitions, etc
|
||||||
|
# that may be applied by make.
|
||||||
|
# Add -fsyntax-only as we only want a syntax check and don't need to generate a file.
|
||||||
|
compile_cmd="clang \$(LOCAL_CFLAGS) ${warning_flags} -fsyntax-only -c"
|
||||||
|
|
||||||
|
makefile=$(TMPDIR=. mktemp)
|
||||||
|
deps=""
|
||||||
|
|
||||||
|
len=${#options[@]}
|
||||||
|
source_file=${file%.o}.c
|
||||||
|
|
||||||
|
targets=0
|
||||||
|
echo 'include Makefile' >${makefile}
|
||||||
|
|
||||||
|
for ((i = 0; i < $((2**${len})); i++)); do
|
||||||
|
# generate each of 2^n combinations of options
|
||||||
|
# each bit of $i is used to determine if options[i] will be set or not
|
||||||
|
target="t"
|
||||||
|
clang_args=""
|
||||||
|
for ((j = 0; j < ${len}; j++)); do
|
||||||
|
if (((i >> j) & 1)); then
|
||||||
|
opt=-D${options[$j]}
|
||||||
|
clang_args="${clang_args} ${opt}"
|
||||||
|
target="${target}${opt}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# if combination is not known to be invalid, add it to the makefile
|
||||||
|
if [[ -z $validate_options ]] || $validate_options "${clang_args}"; then
|
||||||
|
cmd="${compile_cmd} ${clang_args}"
|
||||||
|
echo "${target}: ${source_file}; $cmd ${source_file}" >> ${makefile}
|
||||||
|
|
||||||
|
deps="${deps} ${target}"
|
||||||
|
((++targets))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "build_test_config_combos: ${deps}" >> ${makefile}
|
||||||
|
|
||||||
|
# execute all of the commands via Make (probably in parallel)
|
||||||
|
make -s -f ${makefile} build_test_config_combos
|
||||||
|
echo "$targets targets checked"
|
||||||
|
|
||||||
|
# clean up the temporary makefile
|
||||||
|
rm ${makefile}
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_aes_config_variations() {
|
||||||
|
if [[ "$1" == *"MBEDTLS_AES_USE_HARDWARE_ONLY"* ]]; then
|
||||||
|
if [[ "$1" == *"MBEDTLS_PADLOCK_C"* ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ !(("$HOSTTYPE" == "aarch64" && "$1" != *"MBEDTLS_AESCE_C"*) || \
|
||||||
|
("$HOSTTYPE" == "x86_64" && "$1" != *"MBEDTLS_AESNI_C"*)) ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
component_build_aes_variations() {
|
||||||
|
# 18s - around 90ms per clang invocation on M1 Pro
|
||||||
|
#
|
||||||
# aes.o has many #if defined(...) guards that intersect in complex ways.
|
# aes.o has many #if defined(...) guards that intersect in complex ways.
|
||||||
# Test that all the combinations build cleanly. The most common issue is
|
# Test that all the combinations build cleanly.
|
||||||
# unused variables/functions, so ensure -Wunused is set.
|
|
||||||
|
|
||||||
msg "build: aes.o for all combinations of relevant config options"
|
msg "build: aes.o for all combinations of relevant config options"
|
||||||
|
|
||||||
for a in set unset; do
|
build_test_config_combos library/aes.o validate_aes_config_variations \
|
||||||
for b in set unset; do
|
"MBEDTLS_AES_SETKEY_ENC_ALT" "MBEDTLS_AES_DECRYPT_ALT" \
|
||||||
for c in set unset; do
|
"MBEDTLS_AES_ROM_TABLES" "MBEDTLS_AES_ENCRYPT_ALT" "MBEDTLS_AES_SETKEY_DEC_ALT" \
|
||||||
for d in set unset; do
|
"MBEDTLS_AES_FEWER_TABLES" "MBEDTLS_PADLOCK_C" "MBEDTLS_AES_USE_HARDWARE_ONLY" \
|
||||||
for e in set unset; do
|
"MBEDTLS_AESNI_C" "MBEDTLS_AESCE_C" "MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH"
|
||||||
for f in set unset; do
|
|
||||||
for g in set unset; do
|
|
||||||
echo ./scripts/config.py $a MBEDTLS_AES_SETKEY_ENC_ALT
|
|
||||||
echo ./scripts/config.py $b MBEDTLS_AES_DECRYPT_ALT
|
|
||||||
echo ./scripts/config.py $c MBEDTLS_AES_ROM_TABLES
|
|
||||||
echo ./scripts/config.py $d MBEDTLS_AES_ENCRYPT_ALT
|
|
||||||
echo ./scripts/config.py $e MBEDTLS_AES_SETKEY_DEC_ALT
|
|
||||||
echo ./scripts/config.py $f MBEDTLS_AES_FEWER_TABLES
|
|
||||||
echo ./scripts/config.py $g MBEDTLS_PADLOCK_C
|
|
||||||
|
|
||||||
./scripts/config.py $a MBEDTLS_AES_SETKEY_ENC_ALT
|
|
||||||
./scripts/config.py $b MBEDTLS_AES_DECRYPT_ALT
|
|
||||||
./scripts/config.py $c MBEDTLS_AES_ROM_TABLES
|
|
||||||
./scripts/config.py $d MBEDTLS_AES_ENCRYPT_ALT
|
|
||||||
./scripts/config.py $e MBEDTLS_AES_SETKEY_DEC_ALT
|
|
||||||
./scripts/config.py $f MBEDTLS_AES_FEWER_TABLES
|
|
||||||
./scripts/config.py $g MBEDTLS_PADLOCK_C
|
|
||||||
|
|
||||||
rm -f library/aes.o
|
|
||||||
make -C library aes.o CC="clang" CFLAGS="-O0 -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wasm-operand-widths -Wunused"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
component_test_no_platform () {
|
component_test_no_platform () {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue