diff options
author | Anton Gorev <kvirund@gmail.com> | 2017-04-21 15:26:16 -0500 |
---|---|---|
committer | Anton Gorev <kvirund@gmail.com> | 2017-04-21 15:26:16 -0500 |
commit | 72d8cbe9177bade320b51c149aac1c67c4dd13ec (patch) | |
tree | 456f1c7c0f405141c89eb4887891c6b9fa5054e5 /whrlpool.cpp | |
parent | cede0f3fb147e1fed37a914c37d2d31a4e1f99a9 (diff) | |
download | cryptopp-git-72d8cbe9177bade320b51c149aac1c67c4dd13ec.tar.gz |
Some fixes related to SunCC compiler bugs.
Fixes for "invalid address alignment" errors. See https://groups.google.com/d/topic/cryptopp-users/OYaByDEbSI0/discussion for details.
Changed config.h in accordance to Jeffrey Walton's request;
Diffstat (limited to 'whrlpool.cpp')
-rw-r--r-- | whrlpool.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/whrlpool.cpp b/whrlpool.cpp index 1278ad8a..8d065b30 100644 --- a/whrlpool.cpp +++ b/whrlpool.cpp @@ -609,7 +609,15 @@ void Whirlpool::Transform(word64 *digest, const word64 *block) // Compute and apply K^0 to the cipher state
// Also apply part of the Miyaguchi-Preneel compression function
for (int i=0; i<8; i++)
+ {
+#if defined (__SUNPRO_CC)
+ word64 block_i = 0;
+ memcpy(&block_i, &block[i], sizeof(block_i));
+ digest[i] = s[i] = block_i ^ (k[i] = digest[i]);
+#else
digest[i] = s[i] = block[i] ^ (k[i] = digest[i]);
+#endif
+ }
#define KSL(op, i, a, b, c, d) \
t = (word32)k[i];\
|