summaryrefslogtreecommitdiff
path: root/rabbit.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2018-07-29 12:11:45 -0400
committerJeffrey Walton <noloader@gmail.com>2018-07-29 12:11:45 -0400
commit375b38554e7d8b8a2da8571eede97f3e52b57906 (patch)
tree56824a39f8c261bed1cbada969c13471f546d95c /rabbit.cpp
parent32d2ad1ca5e7f07186e149490f4dde62df65184e (diff)
downloadcryptopp-git-375b38554e7d8b8a2da8571eede97f3e52b57906.tar.gz
Use 64-bit multiply for Rabbit
Diffstat (limited to 'rabbit.cpp')
-rw-r--r--rabbit.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/rabbit.cpp b/rabbit.cpp
index 2c32f4f0..8bc4a499 100644
--- a/rabbit.cpp
+++ b/rabbit.cpp
@@ -15,10 +15,12 @@
ANONYMOUS_NAMESPACE_BEGIN
using CryptoPP::word32;
+using CryptoPP::word64;
using CryptoPP::rotlConstant;
word32 G_func(word32 x)
{
+#if 0
/* Temporary variables */
word32 a, b, h, l;
@@ -32,6 +34,12 @@ word32 G_func(word32 x)
/* Return high XOR low */
return static_cast<word32>(h^l);
+#endif
+
+ // Thanks to Jack Lloyd for suggesting the 64-bit multiply.
+ word64 z = x;
+ z *= x;
+ return static_cast<word32>((z >> 32) ^ z);
}
word32 NextState(word32 c[8], word32 x[8], word32 carry)