Way better key extrapolation
This commit is contained in:
parent
5c73a3b35e
commit
8a336212b5
46
main.cpp
46
main.cpp
@ -32,6 +32,18 @@ Block Feistel(const Block& data, const Keyset& keys, bool reverseKeyOrder = fals
|
|||||||
// Arbitrary cipher function
|
// Arbitrary cipher function
|
||||||
Feistelblock F(Feistelblock m, const Feistelblock& key);
|
Feistelblock F(Feistelblock m, const Feistelblock& key);
|
||||||
|
|
||||||
|
template<std::size_t T>
|
||||||
|
std::bitset<T> Shiftl(const std::bitset<T>& bits, std::size_t amount);
|
||||||
|
|
||||||
|
template<std::size_t T>
|
||||||
|
std::bitset<T> Shiftr(const std::bitset<T>& bits, std::size_t amount);
|
||||||
|
|
||||||
|
int Mod(int numerator, int denominator)
|
||||||
|
{
|
||||||
|
return (denominator + (numerator % denominator)) % denominator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
const std::string asciiMessage = "Guten Abend!";
|
const std::string asciiMessage = "Guten Abend!";
|
||||||
@ -45,6 +57,8 @@ int main()
|
|||||||
//for (std::size_t i = 0; i < roundkeys.size(); i++)
|
//for (std::size_t i = 0; i < roundkeys.size(); i++)
|
||||||
// std::cout << roundkeys[i] << std::endl;
|
// std::cout << roundkeys[i] << std::endl;
|
||||||
//std::cout << "---" << std::endl;
|
//std::cout << "---" << std::endl;
|
||||||
|
//return 0;
|
||||||
|
|
||||||
|
|
||||||
std::cout << "Message ascii: " << asciiMessage << std::endl;
|
std::cout << "Message ascii: " << asciiMessage << std::endl;
|
||||||
|
|
||||||
@ -147,12 +161,38 @@ Block FeistelCombine(const Feistelblock& l, const Feistelblock& r)
|
|||||||
Keyset GenerateRoundkeys(const Feistelblock& seedKey)
|
Keyset GenerateRoundkeys(const Feistelblock& seedKey)
|
||||||
{
|
{
|
||||||
Keyset keys;
|
Keyset keys;
|
||||||
|
|
||||||
keys[0] = seedKey;
|
keys[0] = seedKey;
|
||||||
for (std::size_t i = 1; i < keys.size(); i++)
|
keys[1] = (Shiftl(seedKey, 32) ^ keys[0]);
|
||||||
|
|
||||||
|
for (std::size_t i = 2; i < keys.size(); i++)
|
||||||
{
|
{
|
||||||
keys[i] = std::hash<Feistelblock>{}(keys[i-1]);
|
keys[i] = Shiftl(keys[i-1], i + 32) ^ keys[i-2];
|
||||||
}
|
}
|
||||||
|
|
||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <std::size_t T>
|
||||||
|
std::bitset<T> Shiftl(const std::bitset<T>& bits, std::size_t amount)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
const std::string bitss = bits.to_string();
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < bitss.size(); i++)
|
||||||
|
ss << bitss[Mod((i + amount), bitss.size())];
|
||||||
|
|
||||||
|
return std::bitset<T>(ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <std::size_t T>
|
||||||
|
std::bitset<T> Shiftr(const std::bitset<T>& bits, std::size_t amount)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
const std::string bitss = bits.to_string();
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < bitss.size(); i++)
|
||||||
|
ss << bitss[Mod((i - amount), bitss.size())];
|
||||||
|
|
||||||
|
return std::bitset<T>(ss.str());
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user