Re: [PATCH 1/2] crypto: arm64/crc32: bring in line with generic CRC32

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4 May 2015 at 10:00, Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote:
> The arm64 CRC32 (not CRC32c) implementation was not quite doing
> the same thing as the generic one. Fix that.

Thanks Ard,
I agree the bitwise inverse at the end is applicable to Castagnoli,
but not to the vanilla CRC-32 in the kernel.

>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>
Acked-by: Steve Capper <steve.capper@xxxxxxxxxx>

Cheers,
--
Steve

> ---
>  arch/arm64/crypto/crc32-arm64.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/crypto/crc32-arm64.c b/arch/arm64/crypto/crc32-arm64.c
> index 9499199924ae..6a37c3c6b11d 100644
> --- a/arch/arm64/crypto/crc32-arm64.c
> +++ b/arch/arm64/crypto/crc32-arm64.c
> @@ -147,13 +147,21 @@ static int chksum_final(struct shash_desc *desc, u8 *out)
>  {
>         struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
>
> +       put_unaligned_le32(ctx->crc, out);
> +       return 0;
> +}
> +
> +static int chksumc_final(struct shash_desc *desc, u8 *out)
> +{
> +       struct chksum_desc_ctx *ctx = shash_desc_ctx(desc);
> +
>         put_unaligned_le32(~ctx->crc, out);
>         return 0;
>  }
>
>  static int __chksum_finup(u32 crc, const u8 *data, unsigned int len, u8 *out)
>  {
> -       put_unaligned_le32(~crc32_arm64_le_hw(crc, data, len), out);
> +       put_unaligned_le32(crc32_arm64_le_hw(crc, data, len), out);
>         return 0;
>  }
>
> @@ -199,6 +207,14 @@ static int crc32_cra_init(struct crypto_tfm *tfm)
>  {
>         struct chksum_ctx *mctx = crypto_tfm_ctx(tfm);
>
> +       mctx->key = 0;
> +       return 0;
> +}
> +
> +static int crc32c_cra_init(struct crypto_tfm *tfm)
> +{
> +       struct chksum_ctx *mctx = crypto_tfm_ctx(tfm);
> +
>         mctx->key = ~0;
>         return 0;
>  }
> @@ -229,7 +245,7 @@ static struct shash_alg crc32c_alg = {
>         .setkey                 =       chksum_setkey,
>         .init                   =       chksum_init,
>         .update                 =       chksumc_update,
> -       .final                  =       chksum_final,
> +       .final                  =       chksumc_final,
>         .finup                  =       chksumc_finup,
>         .digest                 =       chksumc_digest,
>         .descsize               =       sizeof(struct chksum_desc_ctx),
> @@ -241,7 +257,7 @@ static struct shash_alg crc32c_alg = {
>                 .cra_alignmask          =       0,
>                 .cra_ctxsize            =       sizeof(struct chksum_ctx),
>                 .cra_module             =       THIS_MODULE,
> -               .cra_init               =       crc32_cra_init,
> +               .cra_init               =       crc32c_cra_init,
>         }
>  };
>
> --
> 1.9.1
>
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux