summaryrefslogtreecommitdiff
path: root/whrlpool.cpp
diff options
context:
space:
mode:
authorAnton Gorev <kvirund@gmail.com>2017-04-21 15:26:16 -0500
committerAnton Gorev <kvirund@gmail.com>2017-04-21 15:26:16 -0500
commit72d8cbe9177bade320b51c149aac1c67c4dd13ec (patch)
tree456f1c7c0f405141c89eb4887891c6b9fa5054e5 /whrlpool.cpp
parentcede0f3fb147e1fed37a914c37d2d31a4e1f99a9 (diff)
downloadcryptopp-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.cpp8
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];\