mirror of
https://github.com/QuasarApp/Qt-AES.git
synced 2025-05-10 12:09:34 +00:00
cleanup plus static/instance methods for padding removal
This commit is contained in:
parent
b616caf7c1
commit
80574a11a9
1
main.cpp
1
main.cpp
@ -2,7 +2,6 @@
|
|||||||
#include <QTest>
|
#include <QTest>
|
||||||
#include "unit_test/aestest.h"
|
#include "unit_test/aestest.h"
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QCoreApplication a(argc, argv);
|
QCoreApplication a(argc, argv);
|
||||||
|
@ -3,20 +3,45 @@
|
|||||||
/*
|
/*
|
||||||
* Static Functions
|
* 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)
|
QByteArray QAESEncryption::ExpandKey(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &key)
|
||||||
{
|
{
|
||||||
return QAESEncryption(level, mode).expandKey(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
|
* End Static function declarations
|
||||||
* */
|
* */
|
||||||
@ -159,29 +184,6 @@ QByteArray QAESEncryption::expandKey(const QByteArray &key)
|
|||||||
return roundKey;
|
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.
|
// This function adds the round key to state.
|
||||||
// The round key is added to the state by an XOR function.
|
// The round key is added to the state by an XOR function.
|
||||||
void QAESEncryption::addRoundKey(const quint8 round, const QByteArray expKey)
|
void QAESEncryption::addRoundKey(const quint8 round, const QByteArray expKey)
|
||||||
@ -465,3 +467,26 @@ QByteArray QAESEncryption::decode(const QByteArray &rawText, const QByteArray &k
|
|||||||
}
|
}
|
||||||
return ret;
|
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;
|
||||||
|
}
|
||||||
|
@ -26,15 +26,18 @@ public:
|
|||||||
ISO
|
ISO
|
||||||
};
|
};
|
||||||
|
|
||||||
static QByteArray Crypt(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,
|
||||||
static QByteArray Decrypt(QAESEncryption::AES level, QAESEncryption::MODE mode, const QByteArray &rawText, const QByteArray &key, const QByteArray &iv = NULL);
|
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 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);
|
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 encode(const QByteArray &rawText, const QByteArray &key, const QByteArray &iv = NULL);
|
||||||
QByteArray decode(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);
|
QByteArray expandKey(const QByteArray &key);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@ -112,7 +112,7 @@ void AesTest::ECB256String()
|
|||||||
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
|
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
|
||||||
|
|
||||||
QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey);
|
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);
|
QCOMPARE(QString(decodedText), inputStr);
|
||||||
}
|
}
|
||||||
@ -148,6 +148,6 @@ void AesTest::CFB256String()
|
|||||||
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
|
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
|
||||||
|
|
||||||
QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey, iv);
|
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);
|
QCOMPARE(QString(decodedText), inputStr);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user