cleanup plus static/instance methods for padding removal

This commit is contained in:
Matteo Brichese 2018-03-28 17:59:11 -07:00
parent b616caf7c1
commit 80574a11a9
4 changed files with 60 additions and 33 deletions

View File

@ -2,7 +2,6 @@
#include <QTest>
#include "unit_test/aestest.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

View File

@ -3,20 +3,45 @@
/*
* Static Functions
* */
QByteArray QAESEncryption::Crypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key, const QByteArray &iv)
QByteArray QAESEncryption::Crypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText,
const QByteArray &key, const QByteArray &iv, QAESEncryption::PADDING padding)
{
return QAESEncryption(level, mode).encode(rawText, key, iv);
return QAESEncryption(level, mode, padding).encode(rawText, key, iv);
}
QByteArray QAESEncryption::Decrypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key, const QByteArray &iv)
QByteArray QAESEncryption::Decrypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText,
const QByteArray &key, const QByteArray &iv, QAESEncryption::PADDING padding)
{
return QAESEncryption(level, mode).decode(rawText, key, iv);
return QAESEncryption(level, mode, padding).decode(rawText, key, iv);
}
QByteArray QAESEncryption::ExpandKey(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &key)
{
return QAESEncryption(level, mode).expandKey(key);
}
QByteArray QAESEncryption::RemovePadding(const QByteArray &rawText, QAESEncryption::PADDING padding)
{
QByteArray ret(rawText);
switch (padding)
{
case PADDING::ZERO:
//Works only if the last byte of the decoded array is not zero
while (ret.at(ret.length()-1) == 0x00)
ret.remove(ret.length()-1, 1);
break;
case PADDING::PKCS7:
ret.remove(ret.length() - ret.at(ret.length()-1), ret.at(ret.length()-1));
break;
case PADDING::ISO:
ret.truncate(ret.lastIndexOf(0x80));
break;
default:
//do nothing
break;
}
return ret;
}
/*
* End Static function declarations
* */
@ -159,29 +184,6 @@ QByteArray QAESEncryption::expandKey(const QByteArray &key)
return roundKey;
}
QByteArray QAESEncryption::RemovePadding(const QByteArray &rawText, QAESEncryption::PADDING padding)
{
QByteArray ret(rawText);
switch (padding)
{
case PADDING::ZERO:
//Works only if the last byte of the decoded array is not zero
while (ret.at(ret.length()-1) == 0x00)
ret.remove(ret.length()-1, 1);
break;
case PADDING::PKCS7:
ret.remove(ret.length() - ret.at(ret.length()-1), ret.at(ret.length()-1));
break;
case PADDING::ISO:
ret.truncate(ret.lastIndexOf(0x80));
break;
default:
//do nothing
break;
}
return ret;
}
// This function adds the round key to state.
// The round key is added to the state by an XOR function.
void QAESEncryption::addRoundKey(const quint8 round, const QByteArray expKey)
@ -465,3 +467,26 @@ QByteArray QAESEncryption::decode(const QByteArray &rawText, const QByteArray &k
}
return ret;
}
QByteArray QAESEncryption::removePadding(const QByteArray &rawText)
{
QByteArray ret(rawText);
switch (m_padding)
{
case PADDING::ZERO:
//Works only if the last byte of the decoded array is not zero
while (ret.at(ret.length()-1) == 0x00)
ret.remove(ret.length()-1, 1);
break;
case PADDING::PKCS7:
ret.remove(ret.length() - ret.at(ret.length()-1), ret.at(ret.length()-1));
break;
case PADDING::ISO:
ret.truncate(ret.lastIndexOf(0x80));
break;
default:
//do nothing
break;
}
return ret;
}

View File

@ -26,15 +26,18 @@ public:
ISO
};
static QByteArray Crypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key, const QByteArray &iv = NULL);
static QByteArray Decrypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key, const QByteArray &iv = NULL);
static QByteArray Crypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key,
const QByteArray &iv = NULL, QAESEncryption::PADDING padding = QAESEncryption::ISO);
static QByteArray Decrypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key,
const QByteArray &iv = NULL, QAESEncryption::PADDING padding = QAESEncryption::ISO);
static QByteArray ExpandKey(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &key);
static QByteArray RemovePadding(const QByteArray &rawText, QAESEncryption::PADDING padding = PADDING::ISO);
static QByteArray RemovePadding(const QByteArray &rawText, QAESEncryption::PADDING padding);
QAESEncryption(QAESEncryption::AES level, QAESEncryption::MODE mode, QAESEncryption::PADDING padding = QAESEncryption::ISO);
QByteArray encode(const QByteArray &rawText, const QByteArray &key, const QByteArray &iv = NULL);
QByteArray decode(const QByteArray &rawText, const QByteArray &key, const QByteArray &iv = NULL);
QByteArray removePadding(const QByteArray &rawText);
QByteArray expandKey(const QByteArray &key);
signals:

View File

@ -112,7 +112,7 @@ void AesTest::ECB256String()
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey);
QByteArray decodedText = QAESEncryption::RemovePadding(encryption.decode(encodeText, hashKey), QAESEncryption::PADDING::ISO);
QByteArray decodedText = encryption.removePadding(encryption.decode(encodeText, hashKey));
QCOMPARE(QString(decodedText), inputStr);
}
@ -148,6 +148,6 @@ void AesTest::CFB256String()
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey, iv);
QByteArray decodedText = QAESEncryption::RemovePadding(encryption.decode(encodeText, hashKey, iv));
QByteArray decodedText = encryption.removePadding(encryption.decode(encodeText, hashKey, iv));
QCOMPARE(QString(decodedText), inputStr);
}