qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 13/17] crypto/builtin: Move AES_cbc_encrypt into cipher-built


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 13/17] crypto/builtin: Move AES_cbc_encrypt into cipher-builtin.inc.c
Date: Thu, 13 Aug 2020 10:11:25 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

On 8/13/20 5:25 AM, Richard Henderson wrote:
> By making the function private, we will be able to make further
> simplifications.  Re-indent the migrated code and fix the missing
> braces for CODING_STYLE.

Patch easier to review using 'git-diff --color-moved=dimmed-zebra
--color-moved-ws=allow-indentation-change'.

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  include/crypto/aes.h        |  4 ---
>  crypto/aes.c                | 51 ---------------------------------
>  crypto/cipher-builtin.inc.c | 56 +++++++++++++++++++++++++++++++++++++
>  3 files changed, 56 insertions(+), 55 deletions(-)
> 
> diff --git a/include/crypto/aes.h b/include/crypto/aes.h
> index 12fb321b89..ba297d6a73 100644
> --- a/include/crypto/aes.h
> +++ b/include/crypto/aes.h
> @@ -16,7 +16,6 @@ typedef struct aes_key_st AES_KEY;
>  #define AES_set_decrypt_key QEMU_AES_set_decrypt_key
>  #define AES_encrypt QEMU_AES_encrypt
>  #define AES_decrypt QEMU_AES_decrypt
> -#define AES_cbc_encrypt QEMU_AES_cbc_encrypt
>  
>  int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
>       AES_KEY *key);
> @@ -27,9 +26,6 @@ void AES_encrypt(const unsigned char *in, unsigned char 
> *out,
>       const AES_KEY *key);
>  void AES_decrypt(const unsigned char *in, unsigned char *out,
>       const AES_KEY *key);
> -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
> -                  const unsigned long length, const AES_KEY *key,
> -                  unsigned char *ivec, const int enc);
>  
>  extern const uint8_t AES_sbox[256];
>  extern const uint8_t AES_isbox[256];
> diff --git a/crypto/aes.c b/crypto/aes.c
> index 0f6a195af8..159800df65 100644
> --- a/crypto/aes.c
> +++ b/crypto/aes.c
> @@ -1599,54 +1599,3 @@ void AES_decrypt(const unsigned char *in, unsigned 
> char *out,
>  }
>  
>  #endif /* AES_ASM */
> -
> -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
> -                     const unsigned long length, const AES_KEY *key,
> -                     unsigned char *ivec, const int enc)
> -{
> -
> -        unsigned long n;
> -        unsigned long len = length;
> -        unsigned char tmp[AES_BLOCK_SIZE];
> -
> -        assert(in && out && key && ivec);
> -
> -        if (enc) {
> -                while (len >= AES_BLOCK_SIZE) {
> -                        for(n=0; n < AES_BLOCK_SIZE; ++n)
> -                                tmp[n] = in[n] ^ ivec[n];
> -                        AES_encrypt(tmp, out, key);
> -                        memcpy(ivec, out, AES_BLOCK_SIZE);
> -                        len -= AES_BLOCK_SIZE;
> -                        in += AES_BLOCK_SIZE;
> -                        out += AES_BLOCK_SIZE;
> -                }
> -                if (len) {
> -                        for(n=0; n < len; ++n)
> -                                tmp[n] = in[n] ^ ivec[n];
> -                        for(n=len; n < AES_BLOCK_SIZE; ++n)
> -                                tmp[n] = ivec[n];
> -                        AES_encrypt(tmp, tmp, key);
> -                        memcpy(out, tmp, AES_BLOCK_SIZE);
> -                        memcpy(ivec, tmp, AES_BLOCK_SIZE);
> -                }
> -        } else {
> -                while (len >= AES_BLOCK_SIZE) {
> -                        memcpy(tmp, in, AES_BLOCK_SIZE);
> -                        AES_decrypt(in, out, key);
> -                        for(n=0; n < AES_BLOCK_SIZE; ++n)
> -                                out[n] ^= ivec[n];
> -                        memcpy(ivec, tmp, AES_BLOCK_SIZE);
> -                        len -= AES_BLOCK_SIZE;
> -                        in += AES_BLOCK_SIZE;
> -                        out += AES_BLOCK_SIZE;
> -                }
> -                if (len) {
> -                        memcpy(tmp, in, AES_BLOCK_SIZE);
> -                        AES_decrypt(tmp, tmp, key);
> -                        for(n=0; n < len; ++n)
> -                                out[n] = tmp[n] ^ ivec[n];
> -                        memcpy(ivec, tmp, AES_BLOCK_SIZE);
> -                }
> -        }
> -}
> diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c
> index 4d971a2b82..416d44b38e 100644
> --- a/crypto/cipher-builtin.inc.c
> +++ b/crypto/cipher-builtin.inc.c
> @@ -100,6 +100,62 @@ static void do_aes_decrypt_ecb(const void *vctx, size_t 
> len,
>      }
>  }
>  
> +static void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
> +                            const unsigned long length, const AES_KEY *key,
> +                            unsigned char *ivec, const int enc)
> +{
> +    unsigned long n;
> +    unsigned long len = length;
> +    unsigned char tmp[AES_BLOCK_SIZE];
> +
> +    assert(in && out && key && ivec);
> +
> +    if (enc) {
> +        while (len >= AES_BLOCK_SIZE) {
> +            for (n = 0; n < AES_BLOCK_SIZE; ++n) {
> +                tmp[n] = in[n] ^ ivec[n];
> +            }
> +            AES_encrypt(tmp, out, key);
> +            memcpy(ivec, out, AES_BLOCK_SIZE);
> +            len -= AES_BLOCK_SIZE;
> +            in += AES_BLOCK_SIZE;
> +            out += AES_BLOCK_SIZE;
> +        }
> +        if (len) {
> +            for (n = 0; n < len; ++n) {
> +                tmp[n] = in[n] ^ ivec[n];
> +            }
> +            for (n = len; n < AES_BLOCK_SIZE; ++n) {
> +                tmp[n] = ivec[n];
> +            }
> +            AES_encrypt(tmp, tmp, key);
> +            memcpy(out, tmp, AES_BLOCK_SIZE);
> +            memcpy(ivec, tmp, AES_BLOCK_SIZE);
> +        }
> +    } else {
> +        while (len >= AES_BLOCK_SIZE) {
> +            memcpy(tmp, in, AES_BLOCK_SIZE);
> +            AES_decrypt(in, out, key);
> +            for (n = 0; n < AES_BLOCK_SIZE; ++n) {
> +                out[n] ^= ivec[n];
> +            }
> +            memcpy(ivec, tmp, AES_BLOCK_SIZE);
> +            len -= AES_BLOCK_SIZE;
> +            in += AES_BLOCK_SIZE;
> +            out += AES_BLOCK_SIZE;
> +        }
> +        if (len) {
> +            memcpy(tmp, in, AES_BLOCK_SIZE);
> +            AES_decrypt(tmp, tmp, key);
> +            for (n = 0; n < len; ++n) {
> +                out[n] = tmp[n] ^ ivec[n];
> +            }
> +            memcpy(ivec, tmp, AES_BLOCK_SIZE);
> +        }
> +    }
> +}
> +
> +
>  static int qcrypto_cipher_encrypt_aes(QCryptoCipher *cipher,
>                                        const void *in,
>                                        void *out,
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]