]> www.infradead.org Git - mtd-utils.git/commitdiff
mkfs.ubifs: Correctly use iv lengths in aes-cts mode
authorRichard Weinberger <richard@nod.at>
Thu, 18 Oct 2018 14:37:08 +0000 (16:37 +0200)
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Thu, 1 Nov 2018 11:41:25 +0000 (12:41 +0100)
The key length can be very long, for example in xts mode.
So we have to use the right sizes for block and iv lengths.

Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
ubifs-utils/mkfs.ubifs/crypto.c

index bd3273767a5bc6ab8596b64fc28b1d9c0f7c884d..8d113f198bb283ecade7a542ad3dd5a2d959152f 100644 (file)
@@ -207,32 +207,32 @@ static ssize_t encrypt_cbc_cts(const void *plaintext, size_t size,
 
        memset(iv, 0, ivsize);
 
-       diff = size % key_len;
+       diff = size % ivsize;
 
        if (diff) {
-               padded_size = size - diff + key_len;
+               padded_size = size - diff + ivsize;
                padded = size > 256 ? malloc(padded_size) : alloca(padded_size);
 
                memcpy(padded, plaintext, size);
                memset(padded + size, 0, padded_size - size);
 
                ret = do_encrypt(cipher, padded, padded_size, key, key_len,
-                                iv, sizeof(iv), ciphertext);
+                                iv, ivsize, ciphertext);
 
                if (size > 256)
                        free(padded);
        } else {
                ret = do_encrypt(cipher, plaintext, size, key, key_len,
-                                iv, sizeof(iv), ciphertext);
+                                iv, ivsize, ciphertext);
        }
 
        if (ret < 0)
                return ret;
 
-       count = ret / key_len;
+       count = ret / ivsize;
 
        if (count > 1)
-               block_swap(ciphertext, count - 2, count - 1, key_len);
+               block_swap(ciphertext, count - 2, count - 1, ivsize);
 
        return size;
 }