diff options
author | Jeffrey Walton <noloader@gmail.com> | 2020-12-02 19:53:13 -0500 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2020-12-02 19:53:13 -0500 |
commit | c1d8d81e8540f106d9754e0bbb4aa9205fa3067c (patch) | |
tree | 2e7fa71d9e693676ae14c2f4e2e2edf7f8d1ae83 /cham.cpp | |
parent | f51dc25c121c13de0f97f5d7b97b1f368c035b8f (diff) | |
download | cryptopp-git-c1d8d81e8540f106d9754e0bbb4aa9205fa3067c.tar.gz |
Update CHAM64 and CHAM128 key setup
Diffstat (limited to 'cham.cpp')
-rw-r--r-- | cham.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -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 ¶ms)
{
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++;
}
}
|