summaryrefslogtreecommitdiff
path: root/cham.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2020-12-02 19:53:13 -0500
committerJeffrey Walton <noloader@gmail.com>2020-12-02 19:53:13 -0500
commitc1d8d81e8540f106d9754e0bbb4aa9205fa3067c (patch)
tree2e7fa71d9e693676ae14c2f4e2e2edf7f8d1ae83 /cham.cpp
parentf51dc25c121c13de0f97f5d7b97b1f368c035b8f (diff)
downloadcryptopp-git-c1d8d81e8540f106d9754e0bbb4aa9205fa3067c.tar.gz
Update CHAM64 and CHAM128 key setup
Diffstat (limited to 'cham.cpp')
-rw-r--r--cham.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/cham.cpp b/cham.cpp
index d3866919..7894095a 100644
--- a/cham.cpp
+++ b/cham.cpp
@@ -112,23 +112,26 @@ extern size_t CHAM128_Dec_AdvancedProcessBlocks_SSSE3(const word32* subKeys, siz
# endif // CRYPTOPP_SSSE3_AVAILABLE
#endif // CRYPTOPP_CHAM128_ADVANCED_PROCESS_BLOCKS
-std::string CHAM64::Base::AlgorithmProvider() const
-{
- return "C++";
-}
-
void CHAM64::Base::UncheckedSetKey(const byte *userKey, unsigned int keyLength, const NameValuePairs &params)
{
CRYPTOPP_UNUSED(params);
m_kw = keyLength/sizeof(word16);
m_rk.New(2*m_kw);
- for (size_t i = 0; i < m_kw; ++i, userKey += sizeof(word16))
+ for (size_t i = 0; i < m_kw; userKey += sizeof(word32))
{
// Do not cast the buffer. It will SIGBUS on some ARM and SPARC.
- const word16 rk = GetWord<word16>(false, BIG_ENDIAN_ORDER, userKey);
- m_rk[i] = rk ^ rotlConstant<1>(rk) ^ rotlConstant<8>(rk);
- m_rk[(i + m_kw) ^ 1] = rk ^ rotlConstant<1>(rk) ^ rotlConstant<11>(rk);
+ const word32 rk = GetWord<word32>(false, BIG_ENDIAN_ORDER, userKey);
+
+ const word16 rk1 = rk >> 16;
+ m_rk[i] = rk1 ^ rotlConstant<1>(rk1) ^ rotlConstant<8>(rk1);
+ m_rk[(i + m_kw) ^ 1] = rk1 ^ rotlConstant<1>(rk1) ^ rotlConstant<11>(rk1);
+ i++;
+
+ const word16 rk2 = rk & 0xffff;
+ m_rk[i] = rk2 ^ rotlConstant<1>(rk2) ^ rotlConstant<8>(rk2);
+ m_rk[(i + m_kw) ^ 1] = rk2 ^ rotlConstant<1>(rk2) ^ rotlConstant<11>(rk2);
+ i++;
}
}
@@ -209,12 +212,13 @@ void CHAM128::Base::UncheckedSetKey(const byte *userKey, unsigned int keyLength,
m_kw = keyLength/sizeof(word32);
m_rk.New(2*m_kw);
- for (size_t i = 0; i < m_kw; ++i, userKey += sizeof(word32))
+ for (size_t i = 0; i < m_kw; userKey += sizeof(word32))
{
// Do not cast the buffer. It will SIGBUS on some ARM and SPARC.
const word32 rk = GetWord<word32>(false, BIG_ENDIAN_ORDER, userKey);
m_rk[i] = rk ^ rotlConstant<1>(rk) ^ rotlConstant<8>(rk);
m_rk[(i + m_kw) ^ 1] = rk ^ rotlConstant<1>(rk) ^ rotlConstant<11>(rk);
+ i++;
}
}