crypto: marvell/cesa - fix the bit length endianness
The endianness of the bit length used in the final stage depends on the endianness of the algorithm - md5 hashes need it to be in little endian format, whereas SHA hashes need it in big endian format. Use the previously added algorithm endianness flag to control this. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
a9eb678f8a
commit
51954a968b
1 changed files with 8 additions and 2 deletions
|
@ -179,7 +179,6 @@ static int mv_cesa_ahash_pad_len(struct mv_cesa_ahash_req *creq)
|
||||||
|
|
||||||
static int mv_cesa_ahash_pad_req(struct mv_cesa_ahash_req *creq, u8 *buf)
|
static int mv_cesa_ahash_pad_req(struct mv_cesa_ahash_req *creq, u8 *buf)
|
||||||
{
|
{
|
||||||
__be64 bits = cpu_to_be64(creq->len << 3);
|
|
||||||
unsigned int index, padlen;
|
unsigned int index, padlen;
|
||||||
|
|
||||||
buf[0] = 0x80;
|
buf[0] = 0x80;
|
||||||
|
@ -187,7 +186,14 @@ static int mv_cesa_ahash_pad_req(struct mv_cesa_ahash_req *creq, u8 *buf)
|
||||||
index = creq->len & CESA_HASH_BLOCK_SIZE_MSK;
|
index = creq->len & CESA_HASH_BLOCK_SIZE_MSK;
|
||||||
padlen = mv_cesa_ahash_pad_len(creq);
|
padlen = mv_cesa_ahash_pad_len(creq);
|
||||||
memset(buf + 1, 0, padlen - 1);
|
memset(buf + 1, 0, padlen - 1);
|
||||||
|
|
||||||
|
if (creq->algo_le) {
|
||||||
|
__le64 bits = cpu_to_le64(creq->len << 3);
|
||||||
memcpy(buf + padlen, &bits, sizeof(bits));
|
memcpy(buf + padlen, &bits, sizeof(bits));
|
||||||
|
} else {
|
||||||
|
__be64 bits = cpu_to_be64(creq->len << 3);
|
||||||
|
memcpy(buf + padlen, &bits, sizeof(bits));
|
||||||
|
}
|
||||||
|
|
||||||
return padlen + 8;
|
return padlen + 8;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue