Browse Source

ltc: ctr: update pt and ct after acceleration

Problem occurs in the condition of the following case:

1st decryption:
Decrypt a ciphertext whose length is a multiple of the block size (16B)
(len = n * block_size)
2nd decryption:
Decrypt the continuing ciphertext whose length is not a multiple of the
block size
(len = m * block_size + l)

In this case accel_ctr_encrypt() is firstly used at the 2nd decryption.
If pt and ct are not updated, the top (l = len % block_size) bytes of
decryption result are sometimes destroyed.

From: Tetsuya Yoshizaki <[email protected]>
Signed-off-by: Tetsuya Yoshizaki <[email protected]>
Signed-off-by: Victor Chong <[email protected]>
(cherry picked from commit d1d3ae2d1e705f36e7d313aa4a9b61c0a146ee44)
Tetsuya Yoshizaki 7 years ago
parent
commit
144839a8db
1 changed files with 2 additions and 0 deletions
  1. 2 0
      src/modes/ctr/ctr_encrypt.c

+ 2 - 0
src/modes/ctr/ctr_encrypt.c

@@ -53,6 +53,8 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
       if ((err = cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key)) != CRYPT_OK) {
          return err;
       }
+      pt += (len / ctr->blocklen) * ctr->blocklen;
+      ct += (len / ctr->blocklen) * ctr->blocklen;
       len %= ctr->blocklen;
    }