From 81b57141d48c86ee8ba12fdce7cff2c12504b813 Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 6 May 2014 13:26:28 -0400 Subject: [PATCH] encrypt/decrypt same buffer --- aes.cpp | 20 +++++++++++++++++++- aes.h | 2 ++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/aes.cpp b/aes.cpp index 5f791271..14a5b762 100644 --- a/aes.cpp +++ b/aes.cpp @@ -1,3 +1,4 @@ +#include #include "aes.h" namespace i2p @@ -15,16 +16,33 @@ namespace crypto } } + bool CBCEncryption::Encrypt (const uint8_t * in, std::size_t len, uint8_t * out) + { + div_t d = div (len, 16); + if (d.rem) return false; // len is not multipple of 16 + Encrypt (d.quot, (const ChipherBlock *)in, (ChipherBlock *)out); + return true; + } + void CBCDecryption::Decrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out) { for (int i = 0; i < numBlocks; i++) { + ChipherBlock tmp = in[i]; m_ECBDecryption.ProcessData (out[i].buf, in[i].buf, 16); out[i].ll[0] ^= m_IV.ll[0]; out[i].ll[1] ^= m_IV.ll[1]; - m_IV = in[i]; + m_IV = tmp; } } + + bool CBCDecryption::Decrypt (const uint8_t * in, std::size_t len, uint8_t * out) + { + div_t d = div (len, 16); + if (d.rem) return false; // len is not multipple of 16 + Decrypt (d.quot, (const ChipherBlock *)in, (ChipherBlock *)out); + return true; + } } } diff --git a/aes.h b/aes.h index 3d71ebed..763b22eb 100644 --- a/aes.h +++ b/aes.h @@ -25,6 +25,7 @@ namespace crypto void SetIV (uint8_t * iv) { memcpy (m_LastBlock.buf, iv, 16); }; // 16 bytes void Encrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out); + bool Encrypt (const uint8_t * in, std::size_t len, uint8_t * out); private: @@ -42,6 +43,7 @@ namespace crypto void SetIV (uint8_t * iv) { memcpy (m_IV.buf, iv, 16); }; // 16 bytes void Decrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out); + bool Decrypt (const uint8_t * in, std::size_t len, uint8_t * out); private: