Write the remaining buffer in reset().

This commit is contained in:
Felix Geyer 2010-09-18 17:13:28 +02:00
parent c2bdfab158
commit 36d974649e
2 changed files with 11 additions and 3 deletions

View File

@ -29,11 +29,18 @@ SymmetricCipherStream::SymmetricCipherStream(QIODevice* baseDevice, SymmetricCip
bool SymmetricCipherStream::reset()
{
if (isWritable()) {
if (!writeBlock()) {
return false;
}
}
m_buffer.clear();
m_bufferPos = 0;
m_bufferFilling = false;
m_error = false;
m_cipher->reset();
return true;
}
@ -133,6 +140,7 @@ bool SymmetricCipherStream::writeBlock()
return true;
}
else if (m_buffer.size() != m_cipher->blockSize()) {
// PKCS7 padding
int padLen = m_cipher->blockSize() - m_buffer.size();
for (int i=m_buffer.size(); i<m_cipher->blockSize(); i++) {
m_buffer.append(static_cast<char>(padLen));

View File

@ -59,21 +59,21 @@ void TestSymmetricCipher::testAes256CbcEncryption()
buffer.open(QIODevice::WriteOnly);
stream.open(QIODevice::WriteOnly);
QVERIFY(stream.reset());
buffer.reset();
buffer.buffer().clear();
stream.reset();
stream.write(plainText.left(16));
QCOMPARE(QString(buffer.data().toHex()), QString(cipherText.left(16).toHex()));
QVERIFY(stream.reset());
buffer.reset();
buffer.buffer().clear();
stream.reset();
stream.write(plainText.left(10));
QCOMPARE(QString(buffer.data().toHex()), QString());
QVERIFY(stream.reset());
buffer.reset();
buffer.buffer().clear();
stream.reset();
stream.write(plainText.left(10));
stream.close();
QCOMPARE(buffer.data().size(), 16);