@@ -356,10 +356,8 @@ QByteArray QAESEncryption::encode(const QByteArray rawText, const QByteArray key
356
356
alignedText.append (getPadding (rawText.size (), m_blocklen), 0 ); // filling the array with zeros
357
357
358
358
// Preparation for CFB
359
- if (m_mode == CFB){
360
- ivTemp = cipher (expandedKey, ivTemp);
361
- ret.append (byteXor (alignedText.mid (0 , m_blocklen), ivTemp));
362
- }
359
+ if (m_mode == CFB)
360
+ ret.append (byteXor (alignedText.mid (0 , m_blocklen), cipher (expandedKey, iv)));
363
361
364
362
// Looping thru all blocks
365
363
for (int i=0 ; i < alignedText.size (); i+= m_blocklen){
@@ -374,8 +372,9 @@ QByteArray QAESEncryption::encode(const QByteArray rawText, const QByteArray key
374
372
ivTemp = ret.mid (i, m_blocklen);
375
373
break ;
376
374
case CFB:
377
- ivTemp = ret.mid (i, m_blocklen);
378
- ret.append (byteXor (alignedText.mid (i, m_blocklen), cipher (expandedKey, ivTemp)));
375
+ if (i+m_blocklen < alignedText.size ())
376
+ ret.append (byteXor (alignedText.mid (i+m_blocklen, m_blocklen),
377
+ cipher (expandedKey, ret.mid (i, m_blocklen))));
379
378
break ;
380
379
default :
381
380
// do nothing
@@ -392,29 +391,28 @@ QByteArray QAESEncryption::decode(const QByteArray rawText, const QByteArray key
392
391
393
392
QByteArray ret;
394
393
QByteArray expandedKey = expandKey (key);
395
- QByteArray alignedText (rawText);
396
394
QByteArray ivTemp (iv);
397
395
398
396
// Preparation for CFB
399
- if (m_mode == CFB){
400
- ivTemp = cipher (expandedKey, ivTemp);
401
- ret.append (byteXor (alignedText.mid (0 , m_blocklen), ivTemp));
402
- }
397
+ if (m_mode == CFB)
398
+ ret.append (byteXor (rawText.mid (0 , m_blocklen), cipher (expandedKey, iv)));
403
399
404
- for (int i=0 ; i < alignedText .size (); i+= m_blocklen){
400
+ for (int i=0 ; i < rawText .size (); i+= m_blocklen){
405
401
switch (m_mode)
406
402
{
407
403
case ECB:
408
- ret.append (invCipher (expandedKey, alignedText .mid (i, m_blocklen)));
404
+ ret.append (invCipher (expandedKey, rawText .mid (i, m_blocklen)));
409
405
break ;
410
406
case CBC:
411
- ret.append (invCipher (expandedKey, alignedText .mid (i, m_blocklen)));
407
+ ret.append (invCipher (expandedKey, rawText .mid (i, m_blocklen)));
412
408
ret.replace (i, m_blocklen, byteXor (ret.mid (i, m_blocklen),ivTemp));
413
- ivTemp = alignedText .mid (i, m_blocklen);
409
+ ivTemp = rawText .mid (i, m_blocklen);
414
410
break ;
415
411
case CFB:
416
- ivTemp = alignedText.mid (i, m_blocklen);
417
- ret.append (byteXor (alignedText.mid (i, m_blocklen), cipher (expandedKey, ivTemp)));
412
+ if (i+m_blocklen < rawText.size ()){
413
+ ret.append (byteXor (rawText.mid (i+m_blocklen, m_blocklen),
414
+ cipher (expandedKey, rawText.mid (i, m_blocklen))));
415
+ }
418
416
break ;
419
417
default :
420
418
// do nothing
0 commit comments