forked from wolfSSL/wolfssl
Jenkins nighlty fixes
wolfSSL_Rehandshake(): don't set 'ret' unless HAVE_SESSION_TICKET defined (otherwise compiler will complain: warning: Value stored to 'ret' is never read) AES GCM streaming: fix 64-bit word version to compile and pass testing Use '--enable-aesgcm=word' to get the word32 or word64 implementation depending on the availabilty of 64-bit type.
This commit is contained in:
@ -6415,6 +6415,11 @@ fi
|
|||||||
|
|
||||||
if test "$ENABLED_AESGCM" != "no"
|
if test "$ENABLED_AESGCM" != "no"
|
||||||
then
|
then
|
||||||
|
if test "$ENABLED_AESGCM" = "word"
|
||||||
|
then
|
||||||
|
ENABLED_AESGCM=yes
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$ENABLED_AESGCM" = "word32"
|
if test "$ENABLED_AESGCM" = "word32"
|
||||||
then
|
then
|
||||||
AM_CFLAGS="$AM_CFLAGS -DGCM_WORD32"
|
AM_CFLAGS="$AM_CFLAGS -DGCM_WORD32"
|
||||||
|
@ -2912,7 +2912,9 @@ int wolfSSL_Rehandshake(WOLFSSL* ssl)
|
|||||||
if (ssl == NULL)
|
if (ssl == NULL)
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
|
|
||||||
|
#ifdef HAVE_SESSION_TICKET
|
||||||
ret = WOLFSSL_SUCCESS;
|
ret = WOLFSSL_SUCCESS;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ssl->options.side == WOLFSSL_SERVER_END) {
|
if (ssl->options.side == WOLFSSL_SERVER_END) {
|
||||||
/* Reset option to send certificate verify. */
|
/* Reset option to send certificate verify. */
|
||||||
|
@ -5787,11 +5787,11 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
* @param [in, out] aes AES GCM object.
|
* @param [in, out] aes AES GCM object.
|
||||||
* @param [in] block Block of AAD or cipher text.
|
* @param [in] block Block of AAD or cipher text.
|
||||||
*/
|
*/
|
||||||
#define GHASH_ONE_BLOCK(aes, block) \
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
do { \
|
do { \
|
||||||
xorbuf(AES_TAG(aes), block, AES_BLOCK_SIZE); \
|
xorbuf(AES_TAG(aes), block, AES_BLOCK_SIZE); \
|
||||||
GMULT(AES_TAG(aes), aes->H); \
|
GMULT(AES_TAG(aes), aes->H); \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
#endif /* WOLFSSL_AESGCM_STREAM */
|
#endif /* WOLFSSL_AESGCM_STREAM */
|
||||||
/* end GCM_SMALL */
|
/* end GCM_SMALL */
|
||||||
@ -5984,11 +5984,11 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
* @param [in, out] aes AES GCM object.
|
* @param [in, out] aes AES GCM object.
|
||||||
* @param [in] block Block of AAD or cipher text.
|
* @param [in] block Block of AAD or cipher text.
|
||||||
*/
|
*/
|
||||||
#define GHASH_ONE_BLOCK(aes, block) \
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
do { \
|
do { \
|
||||||
xorbuf(AES_TAG(aes), block, AES_BLOCK_SIZE); \
|
xorbuf(AES_TAG(aes), block, AES_BLOCK_SIZE); \
|
||||||
GMULT(AES_TAG(aes), aes->M0); \
|
GMULT(AES_TAG(aes), aes->M0); \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
#endif /* WOLFSSL_AESGCM_STREAM */
|
#endif /* WOLFSSL_AESGCM_STREAM */
|
||||||
/* end GCM_TABLE */
|
/* end GCM_TABLE */
|
||||||
@ -6280,11 +6280,11 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
* @param [in, out] aes AES GCM object.
|
* @param [in, out] aes AES GCM object.
|
||||||
* @param [in] block Block of AAD or cipher text.
|
* @param [in] block Block of AAD or cipher text.
|
||||||
*/
|
*/
|
||||||
#define GHASH_ONE_BLOCK(aes, block) \
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
do { \
|
do { \
|
||||||
xorbuf(AES_TAG(aes), block, AES_BLOCK_SIZE); \
|
xorbuf(AES_TAG(aes), block, AES_BLOCK_SIZE); \
|
||||||
GMULT(AES_TAG(aes), aes->M0); \
|
GMULT(AES_TAG(aes), aes->M0); \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
#endif /* WOLFSSL_AESGCM_STREAM */
|
#endif /* WOLFSSL_AESGCM_STREAM */
|
||||||
#elif defined(WORD64_AVAILABLE) && !defined(GCM_WORD32)
|
#elif defined(WORD64_AVAILABLE) && !defined(GCM_WORD32)
|
||||||
@ -6448,6 +6448,165 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
}
|
}
|
||||||
#endif /* !FREESCALE_LTC_AES_GCM */
|
#endif /* !FREESCALE_LTC_AES_GCM */
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_AESGCM_STREAM
|
||||||
|
|
||||||
|
#ifdef LITTLE_ENDIAN_ORDER
|
||||||
|
|
||||||
|
/* No extra initialization for small implementation.
|
||||||
|
*
|
||||||
|
* @param [in] aes AES GCM object.
|
||||||
|
*/
|
||||||
|
#define GHASH_INIT_EXTRA(aes) \
|
||||||
|
ByteReverseWords64((word64*)aes->H, (word64*)aes->H, AES_BLOCK_SIZE)
|
||||||
|
|
||||||
|
/* GHASH one block of data..
|
||||||
|
*
|
||||||
|
* XOR block into tag and GMULT with H.
|
||||||
|
*
|
||||||
|
* @param [in, out] aes AES GCM object.
|
||||||
|
* @param [in] block Block of AAD or cipher text.
|
||||||
|
*/
|
||||||
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
|
do { \
|
||||||
|
word64* x = (word64*)AES_TAG(aes); \
|
||||||
|
word64* h = (word64*)aes->H; \
|
||||||
|
word64 block64[2]; \
|
||||||
|
XMEMCPY(block64, block, AES_BLOCK_SIZE); \
|
||||||
|
ByteReverseWords64(block64, block64, AES_BLOCK_SIZE); \
|
||||||
|
x[0] ^= block64[0]; \
|
||||||
|
x[1] ^= block64[1]; \
|
||||||
|
GMULT(x, h); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
/* GHASH in AAD and cipher text lengths in bits.
|
||||||
|
*
|
||||||
|
* Convert tag back to little-endian.
|
||||||
|
*
|
||||||
|
* @param [in, out] aes AES GCM object.
|
||||||
|
*/
|
||||||
|
#define GHASH_LEN_BLOCK(aes) \
|
||||||
|
do { \
|
||||||
|
word64* x = (word64*)AES_TAG(aes); \
|
||||||
|
word64* h = (word64*)aes->H; \
|
||||||
|
word64 len[2]; \
|
||||||
|
len[0] = aes->aSz; len[1] = aes->cSz; \
|
||||||
|
if (aes->aadLen) \
|
||||||
|
len[0] = (word64)aes->aadLen; \
|
||||||
|
/* Lengths are in bytes. Convert to bits. */ \
|
||||||
|
len[0] *= 8; \
|
||||||
|
len[1] *= 8; \
|
||||||
|
\
|
||||||
|
x[0] ^= len[0]; \
|
||||||
|
x[1] ^= len[1]; \
|
||||||
|
GMULT(x, h); \
|
||||||
|
ByteReverseWords64(x, x, AES_BLOCK_SIZE); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#else
|
||||||
|
/* GHASH in AAD and cipher text lengths in bits.
|
||||||
|
*
|
||||||
|
* Convert tag back to little-endian.
|
||||||
|
*
|
||||||
|
* @param [in, out] aes AES GCM object.
|
||||||
|
*/
|
||||||
|
#define GHASH_LEN_BLOCK(aes) \
|
||||||
|
do { \
|
||||||
|
word64* x = (word64*)AES_TAG(aes); \
|
||||||
|
word64* h = (word64*)aes->H; \
|
||||||
|
word64 len[2]; \
|
||||||
|
len[0] = aes->aSz; len[1] = aes->cSz; \
|
||||||
|
/* Lengths are in bytes. Convert to bits. */ \
|
||||||
|
len[0] *= 8; \
|
||||||
|
len[1] *= 8; \
|
||||||
|
\
|
||||||
|
x[0] ^= len[0]; \
|
||||||
|
x[1] ^= len[1]; \
|
||||||
|
GMULT(x, h); \
|
||||||
|
ByteReverseWords64(x, x, AES_BLOCK_SIZE); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* No extra initialization for small implementation.
|
||||||
|
*
|
||||||
|
* @param [in] aes AES GCM object.
|
||||||
|
*/
|
||||||
|
#define GHASH_INIT_EXTRA(aes)
|
||||||
|
|
||||||
|
/* GHASH one block of data..
|
||||||
|
*
|
||||||
|
* XOR block into tag and GMULT with H.
|
||||||
|
*
|
||||||
|
* @param [in, out] aes AES GCM object.
|
||||||
|
* @param [in] block Block of AAD or cipher text.
|
||||||
|
*/
|
||||||
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
|
do { \
|
||||||
|
word64* x = (word64*)AES_TAG(aes); \
|
||||||
|
word64* h = (word64*)aes->H; \
|
||||||
|
word64 block64[2]; \
|
||||||
|
XMEMCPY(block64, block, AES_BLOCK_SIZE); \
|
||||||
|
x[0] ^= block64[0]; \
|
||||||
|
x[1] ^= block64[1]; \
|
||||||
|
GMULT(x, h); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#ifdef OPENSSL_EXTRA
|
||||||
|
/* GHASH in AAD and cipher text lengths in bits.
|
||||||
|
*
|
||||||
|
* Convert tag back to little-endian.
|
||||||
|
*
|
||||||
|
* @param [in, out] aes AES GCM object.
|
||||||
|
*/
|
||||||
|
#define GHASH_LEN_BLOCK(aes) \
|
||||||
|
do { \
|
||||||
|
word64* x = (word64*)AES_TAG(aes); \
|
||||||
|
word64* h = (word64*)aes->H; \
|
||||||
|
word64 len[2]; \
|
||||||
|
len[0] = aes->aSz; len[1] = aes->cSz; \
|
||||||
|
if (aes->aadLen) \
|
||||||
|
len[0] = (word64)aes->aadLen; \
|
||||||
|
/* Lengths are in bytes. Convert to bits. */ \
|
||||||
|
len[0] *= 8; \
|
||||||
|
len[1] *= 8; \
|
||||||
|
\
|
||||||
|
x[0] ^= len[0]; \
|
||||||
|
x[1] ^= len[1]; \
|
||||||
|
GMULT(x, h); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#else
|
||||||
|
/* GHASH in AAD and cipher text lengths in bits.
|
||||||
|
*
|
||||||
|
* Convert tag back to little-endian.
|
||||||
|
*
|
||||||
|
* @param [in, out] aes AES GCM object.
|
||||||
|
*/
|
||||||
|
#define GHASH_LEN_BLOCK(aes) \
|
||||||
|
do { \
|
||||||
|
word64* x = (word64*)AES_TAG(aes); \
|
||||||
|
word64* h = (word64*)aes->H; \
|
||||||
|
word64 len[2]; \
|
||||||
|
len[0] = aes->aSz; len[1] = aes->cSz; \
|
||||||
|
/* Lengths are in bytes. Convert to bits. */ \
|
||||||
|
len[0] *= 8; \
|
||||||
|
len[1] *= 8; \
|
||||||
|
\
|
||||||
|
x[0] ^= len[0]; \
|
||||||
|
x[1] ^= len[1]; \
|
||||||
|
GMULT(x, h); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !LITTLE_ENDIAN_ORDER */
|
||||||
|
|
||||||
|
#endif /* WOLFSSL_AESGCM_STREAM */
|
||||||
/* end defined(WORD64_AVAILABLE) && !defined(GCM_WORD32) */
|
/* end defined(WORD64_AVAILABLE) && !defined(GCM_WORD32) */
|
||||||
#else /* GCM_WORD32 */
|
#else /* GCM_WORD32 */
|
||||||
|
|
||||||
@ -6615,7 +6774,7 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
*/
|
*/
|
||||||
#define GHASH_ONE_BLOCK(aes, block) \
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
do { \
|
do { \
|
||||||
word32* x = (word32*)AES_TAG(aes); \
|
word32* x = (word32*)AES_TAG(aes); \
|
||||||
word32* h = (word32*)aes->H; \
|
word32* h = (word32*)aes->H; \
|
||||||
word32 bigEnd[4]; \
|
word32 bigEnd[4]; \
|
||||||
XMEMCPY(bigEnd, block, AES_BLOCK_SIZE); \
|
XMEMCPY(bigEnd, block, AES_BLOCK_SIZE); \
|
||||||
@ -6637,7 +6796,7 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
#define GHASH_LEN_BLOCK(aes) \
|
#define GHASH_LEN_BLOCK(aes) \
|
||||||
do { \
|
do { \
|
||||||
word32 len[4]; \
|
word32 len[4]; \
|
||||||
word32* x = (word32*)AES_TAG(aes); \
|
word32* x = (word32*)AES_TAG(aes); \
|
||||||
word32* h = (word32*)aes->H; \
|
word32* h = (word32*)aes->H; \
|
||||||
len[0] = (aes->aSz >> (8*sizeof(aes->aSz) - 3)); \
|
len[0] = (aes->aSz >> (8*sizeof(aes->aSz) - 3)); \
|
||||||
len[1] = aes->aSz << 3; \
|
len[1] = aes->aSz << 3; \
|
||||||
@ -6667,7 +6826,7 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
*/
|
*/
|
||||||
#define GHASH_ONE_BLOCK(aes, block) \
|
#define GHASH_ONE_BLOCK(aes, block) \
|
||||||
do { \
|
do { \
|
||||||
word32* x = (word32*)AES_TAG(aes); \
|
word32* x = (word32*)AES_TAG(aes); \
|
||||||
word32* h = (word32*)aes->H; \
|
word32* h = (word32*)aes->H; \
|
||||||
word32 block32[4]; \
|
word32 block32[4]; \
|
||||||
XMEMCPY(block32, block, AES_BLOCK_SIZE); \
|
XMEMCPY(block32, block, AES_BLOCK_SIZE); \
|
||||||
@ -6686,7 +6845,7 @@ void GHASH(Aes* aes, const byte* a, word32 aSz, const byte* c,
|
|||||||
#define GHASH_LEN_BLOCK(aes) \
|
#define GHASH_LEN_BLOCK(aes) \
|
||||||
do { \
|
do { \
|
||||||
word32 len[4]; \
|
word32 len[4]; \
|
||||||
word32* x = (word32*)AES_TAG(aes); \
|
word32* x = (word32*)AES_TAG(aes); \
|
||||||
word32* h = (word32*)aes->H; \
|
word32* h = (word32*)aes->H; \
|
||||||
len[0] = (aes->aSz >> (8*sizeof(aes->aSz) - 3)); \
|
len[0] = (aes->aSz >> (8*sizeof(aes->aSz) - 3)); \
|
||||||
len[1] = aes->aSz << 3; \
|
len[1] = aes->aSz << 3; \
|
||||||
|
Reference in New Issue
Block a user