Improve AesIgeState.
GitOrigin-RevId: b0a1d8bad4be32e4f6fa9ff36f5a5bef2c464b26
This commit is contained in:
parent
e1515226be
commit
40ee207854
@ -348,8 +348,8 @@ int main() {
|
|||||||
|
|
||||||
td::bench(AesIgeEncryptBench());
|
td::bench(AesIgeEncryptBench());
|
||||||
td::bench(AesIgeDecryptBench());
|
td::bench(AesIgeDecryptBench());
|
||||||
td::bench(AesCtrBench());
|
|
||||||
td::bench(AesEcbBench());
|
td::bench(AesEcbBench());
|
||||||
|
td::bench(AesCtrBench());
|
||||||
td::bench(AesIgeShortBench());
|
td::bench(AesIgeShortBench());
|
||||||
|
|
||||||
td::bench(Pbkdf2Bench());
|
td::bench(Pbkdf2Bench());
|
||||||
|
@ -453,8 +453,8 @@ void aes_ige_decrypt(Slice aes_key, MutableSlice aes_iv, Slice from, MutableSlic
|
|||||||
class AesIgeState::Impl {
|
class AesIgeState::Impl {
|
||||||
public:
|
public:
|
||||||
AesState state;
|
AesState state;
|
||||||
AesBlock iv;
|
AesBlock encrypted_iv;
|
||||||
AesBlock iv2;
|
AesBlock plaintext_iv;
|
||||||
|
|
||||||
void encrypt(Slice from, MutableSlice to) {
|
void encrypt(Slice from, MutableSlice to) {
|
||||||
CHECK(from.size() % AES_BLOCK_SIZE == 0);
|
CHECK(from.size() % AES_BLOCK_SIZE == 0);
|
||||||
@ -463,18 +463,18 @@ class AesIgeState::Impl {
|
|||||||
auto in = from.ubegin();
|
auto in = from.ubegin();
|
||||||
auto out = to.ubegin();
|
auto out = to.ubegin();
|
||||||
|
|
||||||
AesBlock tmp;
|
AesBlock plaintext;
|
||||||
AesBlock tmp2;
|
|
||||||
|
|
||||||
while (len) {
|
while (len) {
|
||||||
tmp.load(in);
|
plaintext.load(in);
|
||||||
tmp2 = tmp ^ iv;
|
|
||||||
state.encrypt(tmp2.raw(), tmp2.raw(), AES_BLOCK_SIZE);
|
encrypted_iv ^= plaintext;
|
||||||
|
state.encrypt(encrypted_iv.raw(), encrypted_iv.raw(), AES_BLOCK_SIZE);
|
||||||
|
encrypted_iv ^= plaintext_iv;
|
||||||
|
|
||||||
|
encrypted_iv.store(out);
|
||||||
|
plaintext_iv = plaintext;
|
||||||
|
|
||||||
tmp2 ^= iv2;
|
|
||||||
tmp2.store(out);
|
|
||||||
iv = tmp2;
|
|
||||||
iv2 = tmp;
|
|
||||||
--len;
|
--len;
|
||||||
in += AES_BLOCK_SIZE;
|
in += AES_BLOCK_SIZE;
|
||||||
out += AES_BLOCK_SIZE;
|
out += AES_BLOCK_SIZE;
|
||||||
@ -488,18 +488,18 @@ class AesIgeState::Impl {
|
|||||||
auto in = from.ubegin();
|
auto in = from.ubegin();
|
||||||
auto out = to.ubegin();
|
auto out = to.ubegin();
|
||||||
|
|
||||||
AesBlock tmp;
|
AesBlock encrypted;
|
||||||
AesBlock tmp2;
|
|
||||||
|
|
||||||
while (len) {
|
while (len) {
|
||||||
tmp.load(in);
|
encrypted.load(in);
|
||||||
tmp2 = tmp;
|
|
||||||
tmp ^= iv2;
|
plaintext_iv ^= encrypted;
|
||||||
state.decrypt(tmp.raw(), tmp.raw(), AES_BLOCK_SIZE);
|
state.decrypt(plaintext_iv.raw(), plaintext_iv.raw(), AES_BLOCK_SIZE);
|
||||||
tmp ^= iv;
|
plaintext_iv ^= encrypted_iv;
|
||||||
tmp.store(out);
|
|
||||||
iv = tmp2;
|
plaintext_iv.store(out);
|
||||||
iv2 = tmp;
|
encrypted_iv = encrypted;
|
||||||
|
|
||||||
--len;
|
--len;
|
||||||
in += AES_BLOCK_SIZE;
|
in += AES_BLOCK_SIZE;
|
||||||
out += AES_BLOCK_SIZE;
|
out += AES_BLOCK_SIZE;
|
||||||
@ -517,8 +517,8 @@ void AesIgeState::init(Slice key, Slice iv, bool encrypt) {
|
|||||||
impl_ = make_unique<Impl>();
|
impl_ = make_unique<Impl>();
|
||||||
}
|
}
|
||||||
impl_->state.init(key, encrypt);
|
impl_->state.init(key, encrypt);
|
||||||
impl_->iv.load(iv.ubegin());
|
impl_->encrypted_iv.load(iv.ubegin());
|
||||||
impl_->iv2.load(iv.ubegin() + AES_BLOCK_SIZE);
|
impl_->plaintext_iv.load(iv.ubegin() + AES_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AesIgeState::encrypt(Slice from, MutableSlice to) {
|
void AesIgeState::encrypt(Slice from, MutableSlice to) {
|
||||||
|
Loading…
Reference in New Issue
Block a user