diff options
author | weidai <weidai11@users.noreply.github.com> | 2009-03-10 02:56:19 +0000 |
---|---|---|
committer | weidai <weidai11@users.noreply.github.com> | 2009-03-10 02:56:19 +0000 |
commit | 8ca6148ad5a4943ab05491d7f02152351e650f43 (patch) | |
tree | 1c52d52d455d3b48e60bfc8b075f4d611068be14 /iterhash.cpp | |
parent | da24db2a8b834ba3c3ee5c54041ff3782e9c1984 (diff) | |
download | cryptopp-git-8ca6148ad5a4943ab05491d7f02152351e650f43.tar.gz |
add x86/x64 assembly for SHA-256,
add DEFAULT_CHANNEL and AAD_CHANNEL,
fix macChannel for AuthenticatedEncryptionFilter
Diffstat (limited to 'iterhash.cpp')
-rw-r--r-- | iterhash.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/iterhash.cpp b/iterhash.cpp index 642a7ca2..478950c9 100644 --- a/iterhash.cpp +++ b/iterhash.cpp @@ -132,14 +132,18 @@ template <class T, class BASE> void IteratedHashBase<T, BASE>::TruncatedFinal(by ByteOrder order = this->GetByteOrder(); PadLastBlock(blockSize - 2*sizeof(HashWordType)); - ConditionalByteReverse<HashWordType>(order, dataBuf, dataBuf, blockSize - 2*sizeof(HashWordType)); + dataBuf[blockSize/sizeof(T)-2+order] = ConditionalByteReverse(order, this->GetBitCountLo()); + dataBuf[blockSize/sizeof(T)-1-order] = ConditionalByteReverse(order, this->GetBitCountHi()); - dataBuf[blockSize/sizeof(T)-2] = order ? this->GetBitCountHi() : this->GetBitCountLo(); - dataBuf[blockSize/sizeof(T)-1] = order ? this->GetBitCountLo() : this->GetBitCountHi(); + HashBlock(dataBuf); - HashEndianCorrectedBlock(dataBuf); - ConditionalByteReverse<HashWordType>(order, stateBuf, stateBuf, this->DigestSize()); - memcpy(digest, stateBuf, size); + if (IsAligned<HashWordType>(digest) && size%sizeof(HashWordType)==0) + ConditionalByteReverse<HashWordType>(order, (HashWordType *)digest, stateBuf, size); + else + { + ConditionalByteReverse<HashWordType>(order, stateBuf, stateBuf, this->DigestSize()); + memcpy(digest, stateBuf, size); + } this->Restart(); // reinit for next use } |