Checkpatch issue with this part:

WARNING: Missing a blank line after declarations
#38: FILE: platform/linux-generic/include/odp_crypto_internal.h:66:
+ uint32_t bytes;
+ const EVP_MD *evp_md;

total: 0 errors, 1 warnings, 0 checks, 205 lines checked

NOTE: Ignored message types: BIT_MACRO COMPARISON_TO_NULL
DEPRECATED_VARIABLE NEW_TYPEDEFS SPLIT_STRING SSCANF_TO_KSTRTO

0005-linux-generic-crypto-unify-auth-code.patch has style problems, please
review.

On Wed, Mar 8, 2017 at 10:45 AM, Dmitry Eremin-Solenikov <
[email protected]> wrote:

> Authentication code contains similar functions. Instead of replicating
> them further (e.g. for SHA-1 or SHA-3) factor out common code blocks,
> moving all difference to session data.
>
> Signed-off-by: Dmitry Eremin-Solenikov <[email protected]>
> ---
>  .../linux-generic/include/odp_crypto_internal.h    |  14 +--
>  platform/linux-generic/odp_crypto.c                | 126
> ++++-----------------
>  2 files changed, 28 insertions(+), 112 deletions(-)
>
> diff --git a/platform/linux-generic/include/odp_crypto_internal.h
> b/platform/linux-generic/include/odp_crypto_internal.h
> index f85b76ea..515cefaa 100644
> --- a/platform/linux-generic/include/odp_crypto_internal.h
> +++ b/platform/linux-generic/include/odp_crypto_internal.h
> @@ -60,16 +60,10 @@ struct odp_crypto_generic_session {
>         } cipher;
>
>         struct {
> -               union {
> -                       struct {
> -                               uint8_t  key[16];
> -                               uint32_t bytes;
> -                       } md5;
> -                       struct {
> -                               uint8_t  key[32];
> -                               uint32_t bytes;
> -                       } sha256;
> -               } data;
> +               uint8_t  key[EVP_MAX_KEY_LENGTH];
> +               uint32_t key_length;
> +               uint32_t bytes;
> +               const EVP_MD *evp_md;
>                 crypto_func_t func;
>         } auth;
>  };
> diff --git a/platform/linux-generic/odp_crypto.c
> b/platform/linux-generic/odp_crypto.c
> index 2ba504b2..4d59b827 100644
> --- a/platform/linux-generic/odp_crypto.c
> +++ b/platform/linux-generic/odp_crypto.c
> @@ -110,8 +110,8 @@ null_crypto_routine(odp_crypto_op_param_t *param
> ODP_UNUSED,
>  }
>
>  static
> -odp_crypto_alg_err_t md5_gen(odp_crypto_op_param_t *param,
> -                            odp_crypto_generic_session_t *session)
> +odp_crypto_alg_err_t auth_gen(odp_crypto_op_param_t *param,
> +                             odp_crypto_generic_session_t *session)
>  {
>         uint8_t *data  = odp_packet_data(param->out_pkt);
>         uint8_t *icv   = data;
> @@ -123,94 +123,28 @@ odp_crypto_alg_err_t md5_gen(odp_crypto_op_param_t
> *param,
>         icv  += param->hash_result_offset;
>
>         /* Hash it */
> -       HMAC(EVP_md5(),
> -            session->auth.data.md5.key,
> -            16,
> +       HMAC(session->auth.evp_md,
> +            session->auth.key,
> +            session->auth.key_length,
>              data,
>              len,
>              hash,
>              NULL);
>
>         /* Copy to the output location */
> -       memcpy(icv, hash, session->auth.data.md5.bytes);
> +       memcpy(icv, hash, session->auth.bytes);
>
>         return ODP_CRYPTO_ALG_ERR_NONE;
>  }
>
>  static
> -odp_crypto_alg_err_t md5_check(odp_crypto_op_param_t *param,
> -                              odp_crypto_generic_session_t *session)
> -{
> -       uint8_t *data  = odp_packet_data(param->out_pkt);
> -       uint8_t *icv   = data;
> -       uint32_t len   = param->auth_range.length;
> -       uint32_t bytes = session->auth.data.md5.bytes;
> -       uint8_t  hash_in[EVP_MAX_MD_SIZE];
> -       uint8_t  hash_out[EVP_MAX_MD_SIZE];
> -
> -       /* Adjust pointer for beginning of area to auth */
> -       data += param->auth_range.offset;
> -       icv  += param->hash_result_offset;
> -
> -       /* Copy current value out and clear it before authentication */
> -       memset(hash_in, 0, sizeof(hash_in));
> -       memcpy(hash_in, icv, bytes);
> -       memset(icv, 0, bytes);
> -       memset(hash_out, 0, sizeof(hash_out));
> -
> -       /* Hash it */
> -       HMAC(EVP_md5(),
> -            session->auth.data.md5.key,
> -            16,
> -            data,
> -            len,
> -            hash_out,
> -            NULL);
> -
> -       /* Verify match */
> -       if (0 != memcmp(hash_in, hash_out, bytes))
> -               return ODP_CRYPTO_ALG_ERR_ICV_CHECK;
> -
> -       /* Matched */
> -       return ODP_CRYPTO_ALG_ERR_NONE;
> -}
> -
> -static
> -odp_crypto_alg_err_t sha256_gen(odp_crypto_op_param_t *param,
> +odp_crypto_alg_err_t auth_check(odp_crypto_op_param_t *param,
>                                 odp_crypto_generic_session_t *session)
>  {
>         uint8_t *data  = odp_packet_data(param->out_pkt);
>         uint8_t *icv   = data;
>         uint32_t len   = param->auth_range.length;
> -       uint8_t  hash[EVP_MAX_MD_SIZE];
> -
> -       /* Adjust pointer for beginning of area to auth */
> -       data += param->auth_range.offset;
> -       icv  += param->hash_result_offset;
> -
> -       /* Hash it */
> -       HMAC(EVP_sha256(),
> -            session->auth.data.sha256.key,
> -            32,
> -            data,
> -            len,
> -            hash,
> -            NULL);
> -
> -       /* Copy to the output location */
> -       memcpy(icv, hash, session->auth.data.sha256.bytes);
> -
> -       return ODP_CRYPTO_ALG_ERR_NONE;
> -}
> -
> -static
> -odp_crypto_alg_err_t sha256_check(odp_crypto_op_param_t *param,
> -                                 odp_crypto_generic_session_t *session)
> -{
> -       uint8_t *data  = odp_packet_data(param->out_pkt);
> -       uint8_t *icv   = data;
> -       uint32_t len   = param->auth_range.length;
> -       uint32_t bytes = session->auth.data.sha256.bytes;
> +       uint32_t bytes = session->auth.bytes;
>         uint8_t  hash_in[EVP_MAX_MD_SIZE];
>         uint8_t  hash_out[EVP_MAX_MD_SIZE];
>
> @@ -225,9 +159,9 @@ odp_crypto_alg_err_t sha256_check(odp_crypto_op_param_t
> *param,
>         memset(hash_out, 0, sizeof(hash_out));
>
>         /* Hash it */
> -       HMAC(EVP_sha256(),
> -            session->auth.data.sha256.key,
> -            32,
> +       HMAC(session->auth.evp_md,
> +            session->auth.key,
> +            session->auth.key_length,
>              data,
>              len,
>              hash_out,
> @@ -587,38 +521,26 @@ static int 
> process_des_param(odp_crypto_generic_session_t
> *session)
>         return 0;
>  }
>
> -static int process_md5_param(odp_crypto_generic_session_t *session,
> -                            uint32_t bits)
> +static int process_auth_param(odp_crypto_generic_session_t *session,
> +                             uint32_t bits,
> +                             uint32_t key_length,
> +                             const EVP_MD *evp_md)
>  {
>         /* Set function */
>         if (ODP_CRYPTO_OP_ENCODE == session->p.op)
> -               session->auth.func = md5_gen;
> +               session->auth.func = auth_gen;
>         else
> -               session->auth.func = md5_check;
> -
> -       /* Number of valid bytes */
> -       session->auth.data.md5.bytes = bits / 8;
> -
> -       /* Convert keys */
> -       memcpy(session->auth.data.md5.key, session->p.auth_key.data, 16);
> -
> -       return 0;
> -}
> +               session->auth.func = auth_check;
>
> -static int process_sha256_param(odp_crypto_generic_session_t *session,
> -                               uint32_t bits)
> -{
> -       /* Set function */
> -       if (ODP_CRYPTO_OP_ENCODE == session->p.op)
> -               session->auth.func = sha256_gen;
> -       else
> -               session->auth.func = sha256_check;
> +       session->auth.evp_md = evp_md;
>
>         /* Number of valid bytes */
> -       session->auth.data.sha256.bytes = bits / 8;
> +       session->auth.bytes = bits / 8;
>
>         /* Convert keys */
> -       memcpy(session->auth.data.sha256.key, session->p.auth_key.data,
> 32);
> +       session->auth.key_length = key_length;
> +       memcpy(session->auth.key, session->p.auth_key.data,
> +              session->auth.key_length);
>
>         return 0;
>  }
> @@ -816,12 +738,12 @@ odp_crypto_session_create(odp_crypto_session_param_t
> *param,
>         case ODP_AUTH_ALG_MD5_HMAC:
>              /* deprecated */
>         case ODP_AUTH_ALG_MD5_96:
> -               rc = process_md5_param(session, 96);
> +               rc = process_auth_param(session, 96, 16, EVP_md5());
>                 break;
>         case ODP_AUTH_ALG_SHA256_HMAC:
>              /* deprecated */
>         case ODP_AUTH_ALG_SHA256_128:
> -               rc = process_sha256_param(session, 128);
> +               rc = process_auth_param(session, 128, 32, EVP_sha256());
>                 break;
>         case ODP_AUTH_ALG_AES_GCM:
>              /* deprecated */
> --
> 2.11.0
>
>

Reply via email to