Introduce stateful DesCrypt::Encryptor class, remove static DesCrypt::EncryptBlock()
This commit is contained in:
@@ -207,8 +207,15 @@ public:
|
|||||||
Inner_::RawKey Key_;
|
Inner_::RawKey Key_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Encryptor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Encryptor(const Key & key)
|
||||||
|
: Schedule_(key.Key_)
|
||||||
|
{ }
|
||||||
|
|
||||||
template<typename OutputIt, typename InputIt>
|
template<typename OutputIt, typename InputIt>
|
||||||
static void EncryptBlock(OutputIt out, InputIt inBegin, InputIt inEnd, const Key & key)
|
void EncryptBlock(OutputIt out, InputIt inBegin, InputIt inEnd)
|
||||||
{
|
{
|
||||||
RawBlockArray block;
|
RawBlockArray block;
|
||||||
|
|
||||||
@@ -218,12 +225,15 @@ public:
|
|||||||
block[i] = *in;
|
block[i] = *in;
|
||||||
}
|
}
|
||||||
|
|
||||||
Inner_::KeySchedule schedule(key.Key_);
|
Block encrypted = DesCrypt::EncryptBlock(Inner_::Bitwise::PackUInt64(block.Begin(), block.End()), Schedule_);
|
||||||
Block encrypted = EncryptBlock(Inner_::Bitwise::PackUInt64(block.Begin(), block.End()), schedule);
|
|
||||||
|
|
||||||
Inner_::Bitwise::CrunchUInt64(out, encrypted);
|
Inner_::Bitwise::CrunchUInt64(out, encrypted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Inner_::KeySchedule Schedule_;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
using Block = uint64_t;
|
using Block = uint64_t;
|
||||||
using BlockHalf = uint32_t;
|
using BlockHalf = uint32_t;
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ TEST(DesCryptTests, EncryptTest)
|
|||||||
result.fill(0);
|
result.fill(0);
|
||||||
|
|
||||||
DesCrypt::Key desKey(key.begin(), key.end());
|
DesCrypt::Key desKey(key.begin(), key.end());
|
||||||
DesCrypt::EncryptBlock(result.begin(), data.begin(), data.end(), desKey);
|
DesCrypt::Encryptor enc(desKey);
|
||||||
|
enc.EncryptBlock(result.begin(), data.begin(), data.end());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -95,7 +96,8 @@ TEST(DesCryptTests, EncryptShortDataTest)
|
|||||||
result.resize(8, 0);
|
result.resize(8, 0);
|
||||||
|
|
||||||
DesCrypt::Key desKey(key.begin(), key.end());
|
DesCrypt::Key desKey(key.begin(), key.end());
|
||||||
DesCrypt::EncryptBlock(result.begin(), data.begin(), data.end(), desKey);
|
DesCrypt::Encryptor enc(desKey);
|
||||||
|
enc.EncryptBlock(result.begin(), data.begin(), data.end());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -128,7 +130,8 @@ TEST(DesCryptTests, EncryptLongDataTest)
|
|||||||
result.resize(8, 0);
|
result.resize(8, 0);
|
||||||
|
|
||||||
DesCrypt::Key desKey(key.begin(), key.end());
|
DesCrypt::Key desKey(key.begin(), key.end());
|
||||||
DesCrypt::EncryptBlock(result.begin(), data.begin(), data.end(), desKey);
|
DesCrypt::Encryptor enc(desKey);
|
||||||
|
enc.EncryptBlock(result.begin(), data.begin(), data.end());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -203,7 +206,8 @@ TEST(DesCryptTests, OutIteratorUsageTest)
|
|||||||
OutputItMock it(asteriskCalls, incrementCalls);
|
OutputItMock it(asteriskCalls, incrementCalls);
|
||||||
|
|
||||||
DesCrypt::Key desKey(key.begin(), key.end());
|
DesCrypt::Key desKey(key.begin(), key.end());
|
||||||
DesCrypt::EncryptBlock(it, data.begin(), data.end(), desKey);
|
DesCrypt::Encryptor enc(desKey);
|
||||||
|
enc.EncryptBlock(it, data.begin(), data.end());
|
||||||
|
|
||||||
ASSERT_EQ(8, asteriskCalls);
|
ASSERT_EQ(8, asteriskCalls);
|
||||||
ASSERT_EQ(8, incrementCalls);
|
ASSERT_EQ(8, incrementCalls);
|
||||||
@@ -218,7 +222,8 @@ TEST(DesCryptTests, OutIteratorUsageTest)
|
|||||||
OutputItMock it(asteriskCalls, incrementCalls);
|
OutputItMock it(asteriskCalls, incrementCalls);
|
||||||
|
|
||||||
DesCrypt::Key desKey(key.begin(), key.end());
|
DesCrypt::Key desKey(key.begin(), key.end());
|
||||||
DesCrypt::EncryptBlock(it, data.begin(), data.end(), desKey);
|
DesCrypt::Encryptor enc(desKey);
|
||||||
|
enc.EncryptBlock(it, data.begin(), data.end());
|
||||||
|
|
||||||
ASSERT_EQ(8, asteriskCalls);
|
ASSERT_EQ(8, asteriskCalls);
|
||||||
ASSERT_EQ(8, incrementCalls);
|
ASSERT_EQ(8, incrementCalls);
|
||||||
|
|||||||
Reference in New Issue
Block a user