crypto: gf128mul - switch gf128mul_x_ble to le128
Currently, gf128mul_x_ble works with pointers to be128, even though it actually interprets the words as little-endian. Consequently, it uses cpu_to_le64/le64_to_cpu on fields of type __be64, which is incorrect. This patch fixes that by changing the function to accept pointers to le128 and updating all users accordingly. Signed-off-by: Ondrej Mosnacek <omosnacek@gmail.com> Reviewd-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:

committed by
Herbert Xu

parent
acb9b159c7
commit
e55318c84f
@@ -205,16 +205,16 @@ static inline void gf128mul_x_bbe(be128 *r, const be128 *x)
|
||||
}
|
||||
|
||||
/* needed by XTS */
|
||||
static inline void gf128mul_x_ble(be128 *r, const be128 *x)
|
||||
static inline void gf128mul_x_ble(le128 *r, const le128 *x)
|
||||
{
|
||||
u64 a = le64_to_cpu(x->a);
|
||||
u64 b = le64_to_cpu(x->b);
|
||||
|
||||
/* equivalent to gf128mul_table_be[b >> 63] (see crypto/gf128mul.c): */
|
||||
u64 _tt = gf128mul_mask_from_bit(b, 63) & 0x87;
|
||||
u64 _tt = gf128mul_mask_from_bit(a, 63) & 0x87;
|
||||
|
||||
r->a = cpu_to_le64((a << 1) ^ _tt);
|
||||
r->b = cpu_to_le64((b << 1) | (a >> 63));
|
||||
r->a = cpu_to_le64((a << 1) | (b >> 63));
|
||||
r->b = cpu_to_le64((b << 1) ^ _tt);
|
||||
}
|
||||
|
||||
/* 4k table optimization */
|
||||
|
@@ -11,7 +11,7 @@ struct blkcipher_desc;
|
||||
#define XTS_BLOCK_SIZE 16
|
||||
|
||||
struct xts_crypt_req {
|
||||
be128 *tbuf;
|
||||
le128 *tbuf;
|
||||
unsigned int tbuflen;
|
||||
|
||||
void *tweak_ctx;
|
||||
|
Reference in New Issue
Block a user