Removed alignment asserts

Rijndael class will assert when it detects a problem.
pull/489/head
Jeffrey Walton 2017-09-04 20:35:15 -04:00
parent efe88c043b
commit e2933070b6
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
1 changed files with 42 additions and 20 deletions

View File

@ -23,6 +23,12 @@
NAMESPACE_BEGIN(CryptoPP) NAMESPACE_BEGIN(CryptoPP)
#if CRYPTOPP_BOOL_ALIGN16
const unsigned int s_alignment = 16;
#else
const unsigned int s_alignment = GetAlignmentOf<word32>();
#endif
Filter::Filter(BufferedTransformation *attachment) Filter::Filter(BufferedTransformation *attachment)
: m_attachment(attachment), m_inputPosition(0), m_continueAt(0) : m_attachment(attachment), m_inputPosition(0), m_continueAt(0)
{ {
@ -286,29 +292,29 @@ byte *FilterWithBufferedInput::BlockQueue::GetContigousBlocks(size_t &numberOfBy
size_t FilterWithBufferedInput::BlockQueue::GetAll(byte *outString) size_t FilterWithBufferedInput::BlockQueue::GetAll(byte *outString)
{ {
// Avoid passing NULL pointer to memcpy // Avoid passing NULL pointer to std::memcpy
if (!outString) return 0; if (!outString) return 0;
size_t size = m_size; size_t size = m_size;
size_t numberOfBytes = m_maxBlocks*m_blockSize; size_t numberOfBytes = m_maxBlocks*m_blockSize;
const byte *ptr = GetContigousBlocks(numberOfBytes); const byte *ptr = GetContigousBlocks(numberOfBytes);
memcpy(outString, ptr, numberOfBytes); std::memcpy(outString, ptr, numberOfBytes);
memcpy(outString+numberOfBytes, m_begin, m_size); std::memcpy(outString+numberOfBytes, m_begin, m_size);
m_size = 0; m_size = 0;
return size; return size;
} }
void FilterWithBufferedInput::BlockQueue::Put(const byte *inString, size_t length) void FilterWithBufferedInput::BlockQueue::Put(const byte *inString, size_t length)
{ {
// Avoid passing NULL pointer to memcpy // Avoid passing NULL pointer to std::memcpy
if (!inString || !length) return; if (!inString || !length) return;
CRYPTOPP_ASSERT(m_size + length <= m_buffer.size()); CRYPTOPP_ASSERT(m_size + length <= m_buffer.size());
byte *end = (m_size < size_t(m_buffer.end()-m_begin)) ? m_begin + m_size : m_begin + m_size - m_buffer.size(); byte *end = (m_size < size_t(m_buffer.end()-m_begin)) ? m_begin + m_size : m_begin + m_size - m_buffer.size();
size_t len = STDMIN(length, size_t(m_buffer.end()-end)); const size_t len = STDMIN(length, size_t(m_buffer.end()-end));
memcpy(end, inString, len); std::memcpy(end, inString, len);
if (len < length) if (len < length)
memcpy(m_buffer, inString+len, length-len); std::memcpy(m_buffer, inString+len, length-len);
m_size += length; m_size += length;
} }
@ -383,8 +389,16 @@ size_t FilterWithBufferedInput::PutMaybeModifiable(byte *inString, size_t length
if (newLength > m_lastSize) if (newLength > m_lastSize)
{ {
size_t len = newLength - m_lastSize; const size_t len = newLength - m_lastSize;
if (IsAlignedOn(inString, s_alignment))
{
NextPutMaybeModifiable(inString, len, modifiable); NextPutMaybeModifiable(inString, len, modifiable);
}
else
{
AlignedSecByteBlock block(inString, len);
NextPutMaybeModifiable(block, block.size(), modifiable);
}
inString += len; inString += len;
newLength -= len; newLength -= len;
} }
@ -400,7 +414,7 @@ size_t FilterWithBufferedInput::PutMaybeModifiable(byte *inString, size_t length
if (newLength >= m_blockSize + m_lastSize && m_queue.CurrentSize() > 0) if (newLength >= m_blockSize + m_lastSize && m_queue.CurrentSize() > 0)
{ {
CRYPTOPP_ASSERT(m_queue.CurrentSize() < m_blockSize); CRYPTOPP_ASSERT(m_queue.CurrentSize() < m_blockSize);
size_t len = m_blockSize - m_queue.CurrentSize(); const size_t len = m_blockSize - m_queue.CurrentSize();
m_queue.Put(inString, len); m_queue.Put(inString, len);
inString += len; inString += len;
NextPutModifiable(m_queue.GetBlock(), m_blockSize); NextPutModifiable(m_queue.GetBlock(), m_blockSize);
@ -409,8 +423,16 @@ size_t FilterWithBufferedInput::PutMaybeModifiable(byte *inString, size_t length
if (newLength >= m_blockSize + m_lastSize) if (newLength >= m_blockSize + m_lastSize)
{ {
size_t len = RoundDownToMultipleOf(newLength - m_lastSize, m_blockSize); const size_t len = RoundDownToMultipleOf(newLength - m_lastSize, m_blockSize);
if (IsAlignedOn(inString, s_alignment))
{
NextPutMaybeModifiable(inString, len, modifiable); NextPutMaybeModifiable(inString, len, modifiable);
}
else
{
AlignedSecByteBlock block(inString, len);
NextPutMaybeModifiable(block, block.size(), modifiable);
}
inString += len; inString += len;
newLength -= len; newLength -= len;
} }
@ -450,7 +472,7 @@ void FilterWithBufferedInput::ForceNextPut()
} }
else else
{ {
size_t len; size_t len = 0;
while ((len = m_queue.CurrentSize()) > 0) while ((len = m_queue.CurrentSize()) > 0)
NextPutModifiable(m_queue.GetContigousBlocks(len), len); NextPutModifiable(m_queue.GetContigousBlocks(len), len);
} }
@ -535,7 +557,7 @@ size_t ArraySink::Put2(const byte *begin, size_t length, int messageEnd, bool bl
{ {
CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);
// Avoid passing NULL pointer to memcpy. Using memmove due to // Avoid passing NULL pointer to std::memcpy. Using memmove due to
// Valgrind finding on overlapping buffers. // Valgrind finding on overlapping buffers.
size_t copied = 0; size_t copied = 0;
if (m_buf && begin) if (m_buf && begin)
@ -684,7 +706,7 @@ void StreamTransformationFilter::LastPut(const byte *inString, size_t length)
// do padding // do padding
size_t blockSize = STDMAX(minLastBlockSize, (size_t)m_cipher.MandatoryBlockSize()); size_t blockSize = STDMAX(minLastBlockSize, (size_t)m_cipher.MandatoryBlockSize());
space = HelpCreatePutSpace(*AttachedTransformation(), DEFAULT_CHANNEL, blockSize); space = HelpCreatePutSpace(*AttachedTransformation(), DEFAULT_CHANNEL, blockSize);
if (inString) {memcpy(space, inString, length);} if (inString) {std::memcpy(space, inString, length);}
memset(space + length, 0, blockSize - length); memset(space + length, 0, blockSize - length);
m_cipher.ProcessLastBlock(space, space, blockSize); m_cipher.ProcessLastBlock(space, space, blockSize);
AttachedTransformation()->Put(space, blockSize); AttachedTransformation()->Put(space, blockSize);
@ -716,7 +738,7 @@ void StreamTransformationFilter::LastPut(const byte *inString, size_t length)
if (m_cipher.IsForwardTransformation()) if (m_cipher.IsForwardTransformation())
{ {
CRYPTOPP_ASSERT(length < s); CRYPTOPP_ASSERT(length < s);
if (inString) {memcpy(space, inString, length);} if (inString) {std::memcpy(space, inString, length);}
if (m_padding == PKCS_PADDING) if (m_padding == PKCS_PADDING)
{ {
CRYPTOPP_ASSERT(s < 256); CRYPTOPP_ASSERT(s < 256);
@ -833,7 +855,7 @@ void HashVerificationFilter::FirstPut(const byte *inString)
if (m_flags & HASH_AT_BEGIN) if (m_flags & HASH_AT_BEGIN)
{ {
m_expectedHash.New(m_digestSize); m_expectedHash.New(m_digestSize);
if (inString) {memcpy(m_expectedHash, inString, m_expectedHash.size());} if (inString) {std::memcpy(m_expectedHash, inString, m_expectedHash.size());}
if (m_flags & PUT_HASH) if (m_flags & PUT_HASH)
AttachedTransformation()->Put(inString, m_expectedHash.size()); AttachedTransformation()->Put(inString, m_expectedHash.size());
} }
@ -1028,7 +1050,7 @@ void SignatureVerificationFilter::FirstPut(const byte *inString)
else else
{ {
m_signature.New(m_verifier.SignatureLength()); m_signature.New(m_verifier.SignatureLength());
if (inString) {memcpy(m_signature, inString, m_signature.size());} if (inString) {std::memcpy(m_signature, inString, m_signature.size());}
} }
if (m_flags & PUT_SIGNATURE) if (m_flags & PUT_SIGNATURE)
@ -1128,7 +1150,7 @@ size_t StringStore::TransferTo2(BufferedTransformation &target, lword &transferB
size_t StringStore::CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end, const std::string &channel, bool blocking) const size_t StringStore::CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end, const std::string &channel, bool blocking) const
{ {
size_t i = UnsignedMin(m_length, m_count+begin); size_t i = UnsignedMin(m_length, m_count+begin);
size_t len = UnsignedMin(m_length-i, end-begin); const size_t len = UnsignedMin(m_length-i, end-begin);
size_t blockedBytes = target.ChannelPut2(channel, m_store+i, len, 0, blocking); size_t blockedBytes = target.ChannelPut2(channel, m_store+i, len, 0, blocking);
if (!blockedBytes) if (!blockedBytes)
begin += len; begin += len;
@ -1160,7 +1182,7 @@ size_t NullStore::CopyRangeTo2(BufferedTransformation &target, lword &begin, lwo
static const byte nullBytes[128] = {0}; static const byte nullBytes[128] = {0};
while (begin < end) while (begin < end)
{ {
size_t len = (size_t)STDMIN(end-begin, lword(128)); const size_t len = (size_t)STDMIN(end-begin, lword(128));
size_t blockedBytes = target.ChannelPut2(channel, nullBytes, len, 0, blocking); size_t blockedBytes = target.ChannelPut2(channel, nullBytes, len, 0, blocking);
if (blockedBytes) if (blockedBytes)
return blockedBytes; return blockedBytes;