fix PKCS7 when text size is a multiple of block size

This commit is contained in:
Matteo Brichese 2019-03-27 21:04:58 -07:00
parent 3d4c882683
commit 4a06e8728a
3 changed files with 27 additions and 7 deletions

View File

@ -34,7 +34,7 @@ QByteArray QAESEncryption::RemovePadding(const QByteArray &rawText, QAESEncrypti
ret.remove(ret.length()-1, 1);
break;
case Padding::PKCS7:
ret.remove(ret.length() - ret.at(ret.length()-1), ret.at(ret.length()-1));
ret.remove(ret.length() - ret.back(), ret.back());
break;
case Padding::ISO:
{
@ -129,23 +129,25 @@ QAESEncryption::QAESEncryption(Aes level, Mode mode,
QByteArray QAESEncryption::getPadding(int currSize, int alignment)
{
int size = (alignment - currSize % alignment) % alignment;
if (size == 0) return QByteArray();
switch(m_padding)
{
case Padding::ZERO:
return QByteArray(size, 0x00);
break;
case Padding::PKCS7:
return QByteArray(size,size);
if (size == 0)
size = alignment;
return QByteArray(size, size);
break;
case Padding::ISO:
return QByteArray (size-1, 0x00).prepend(0x80);
if (size > 0)
return QByteArray (size - 1, 0x00).prepend(0x80);
break;
default:
return QByteArray(size, 0x00);
break;
}
return QByteArray(size, 0x00);
return QByteArray();
}
QByteArray QAESEncryption::expandKey(const QByteArray &key)

View File

@ -197,7 +197,7 @@ void AesTest::OFB256String()
QCOMPARE(inputStr, QString(decodedText));
}
void AesTest::CBC256StringEven()
void AesTest::CBC256StringEvenISO()
{
QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC);
@ -214,3 +214,20 @@ void AesTest::CBC256StringEven()
QCOMPARE(QString(decodeText), decodedString);
}
void AesTest::CBC256StringEvenPKCS7()
{
QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC, QAESEncryption::PKCS7);
//16 byte string
QString inputStr("1234567890123456");
int blockLen = inputStr.length();
QString key("123456789123");
QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
QByteArray encodeText = encryption.encode(inputStr.toLocal8Bit(), hashKey, iv);
QByteArray decodeText = encryption.decode(encodeText, hashKey, iv);
QByteArray padding = decodeText.remove(0, encryption.removePadding(decodeText).length());
QCOMPARE(padding.size(), blockLen);
}

View File

@ -32,7 +32,8 @@ private slots:
void OFB128Crypt();
void OFB256String();
void CBC256StringEven();
void CBC256StringEvenISO();
void CBC256StringEvenPKCS7();
void cleanupTestCase(){}