Warn of under-aligned buffers when using AES in debug mode

This commit supports the upcoming AltiVec and Power8 processor. This commit affects a number of classes due to the ubiquitous use of AES. The commit adds debug asserts to warn of under-aligned and misaligned buffers in debug builds.
pull/489/head
Jeffrey Walton 2017-09-04 12:01:44 -04:00
parent 75aef9bded
commit fe0a5ee8e8
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
1 changed files with 20 additions and 0 deletions

View File

@ -351,6 +351,11 @@ void Rijndael::Base::UncheckedSetKey(const byte *userKey, unsigned int keyLen, c
void Rijndael::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
{
CRYPTOPP_ASSERT(IsAlignedOn( m_key, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn( inBlock, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(xorBlock, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(outBlock, OptimalDataAlignment()));
#if CRYPTOPP_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE) || CRYPTOPP_AESNI_AVAILABLE
# if (CRYPTOPP_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE)) && !defined(CRYPTOPP_DISABLE_RIJNDAEL_ASM)
if (HasSSE2())
@ -441,6 +446,11 @@ void Rijndael::Enc::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock
void Rijndael::Dec::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
{
CRYPTOPP_ASSERT(IsAlignedOn( m_key, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn( inBlock, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(xorBlock, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(outBlock, OptimalDataAlignment()));
#if CRYPTOPP_AESNI_AVAILABLE
if (HasAESNI())
{
@ -1088,6 +1098,11 @@ Rijndael::Enc::Enc() { }
#if CRYPTOPP_ENABLE_ADVANCED_PROCESS_BLOCKS
size_t Rijndael::Enc::AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const
{
CRYPTOPP_ASSERT(IsAlignedOn( m_key, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn( inBlocks, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(xorBlocks, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(outBlocks, OptimalDataAlignment()));
#if CRYPTOPP_AESNI_AVAILABLE
if (HasAESNI())
return Rijndael_Enc_AdvancedProcessBlocks_AESNI(m_key, m_rounds, inBlocks, xorBlocks, outBlocks, length, flags);
@ -1151,6 +1166,11 @@ size_t Rijndael::Enc::AdvancedProcessBlocks(const byte *inBlocks, const byte *xo
size_t Rijndael::Dec::AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const
{
CRYPTOPP_ASSERT(IsAlignedOn( m_key, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn( inBlocks, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(xorBlocks, OptimalDataAlignment()));
CRYPTOPP_ASSERT(IsAlignedOn(outBlocks, OptimalDataAlignment()));
#if CRYPTOPP_AESNI_AVAILABLE
if (HasAESNI())
return Rijndael_Dec_AdvancedProcessBlocks_AESNI(m_key, m_rounds, inBlocks, xorBlocks, outBlocks, length, flags);