> -731,6 +808,67 @@ aesni_mb_set_session_aead_parameters(IMB_MGR
> *mb_mgr,
>               sess->template_job.enc_keys = &sess->cipher.gcm_key;
>               sess->template_job.dec_keys = &sess->cipher.gcm_key;
>               break;
> +#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM
> +     case RTE_CRYPTO_AEAD_SNOW5G_NCA4:
> +             sess->template_job.cipher_mode =
> IMB_CIPHER_SNOW5G_NCA4;
> +             sess->template_job.hash_alg = IMB_AUTH_SNOW5G_NCA4;
> +             sess->template_job.u.GCM.aad_len_in_bytes = xform-
> >aead.aad_length;
> +             if (xform->aead.key.length != 32) {
> +                     IPSEC_MB_LOG(ERR, "Invalid key length");
> +                     return -EINVAL;
> +             }
> +             sess->template_job.key_len_in_bytes = 32;
> +             memcpy(sess->cipher.nxa_cipher_key, xform->aead.key.data,
> 32);
> +             sess->template_job.enc_keys = sess->cipher.nxa_cipher_key;
> +             sess->template_job.dec_keys = sess->cipher.nxa_cipher_key;
> +             /* digest size must be between 4 and 16 */
> +             if (sess->auth.req_digest_len < 4 ||
> +                             sess->auth.req_digest_len > 16) {
> +                     IPSEC_MB_LOG(ERR, "Invalid digest size");
> +                     return -EINVAL;
> +             }
> +             break;
> +     case RTE_CRYPTO_AEAD_AES_NCA5:
> +             sess->template_job.cipher_mode = IMB_CIPHER_AES_NCA5;
> +             sess->template_job.hash_alg = IMB_AUTH_AES_NCA5;
> +             sess->template_job.u.GCM.aad_len_in_bytes = xform-
> >aead.aad_length;
Should be setting u.NCA.aad_len_in_bytes and u.NCA.aad, instead of u.GCM.
Same for other NCA algos.

> @@ -1775,6 +1947,31 @@ set_mb_job_params(IMB_JOB *job, struct
> ipsec_mb_qp *qp,
>               job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,
>                               session->iv.offset);
>               break;
> +#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM
> +     case IMB_AUTH_SNOW5G_NCA4:
> +     case IMB_AUTH_AES_NCA5:
> +     case IMB_AUTH_ZUC_NCA6:
> +             job->hash_start_src_offset_in_bytes =
> +                             op->sym->aead.data.offset;
> +             job->msg_len_to_hash_in_bytes =
> +                             op->sym->aead.data.length;
> +             job->cipher_start_src_offset_in_bytes =
> +                     op->sym->aead.data.offset;
> +             job->msg_len_to_cipher_in_bytes = op->sym-
> >aead.data.length;
> +             job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,
> +                     session->iv.offset);
> +             break;
> +     case IMB_AUTH_SNOW5G_NIA4:
> +     case IMB_AUTH_AES_NIA5:
> +     case IMB_AUTH_ZUC_NIA6:
> +             job->hash_start_src_offset_in_bytes =
> +                             op->sym->auth.data.offset >> 3;
> +             job->msg_len_to_hash_in_bytes =
> +                             op->sym->auth.data.length >> 3;
> +             job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,
> +                     session->iv.offset);
> +             break;
> +#endif
Should use job->u.NIA._iv instead of job->iv for NIA algos.

> 
>       default:
>               job->hash_start_src_offset_in_bytes = auth_start_offset( @@
> -1831,6 +2028,15 @@ set_mb_job_params(IMB_JOB *job, struct
> ipsec_mb_qp *qp,
>       case IMB_CIPHER_SM4_GCM:
>               job->msg_len_to_cipher_in_bytes = op->sym-
> >aead.data.length;
>               break;
> +#if IMB_VERSION(3, 0, 0) <= IMB_VERSION_NUM
> +     case IMB_CIPHER_SNOW5G_NCA4:
> +     case IMB_CIPHER_AES_NCA5:
> +     case IMB_CIPHER_ZUC_NCA6:
> +             job->cipher_start_src_offset_in_bytes =
> +                     op->sym->aead.data.offset;
> +             job->msg_len_to_cipher_in_bytes = op->sym-
> >aead.data.length;
> +             break;
> +#endif
>       default:
>               job->cipher_start_src_offset_in_bytes =
>                                       op->sym->cipher.data.offset;
Does the default case need to be converted bytes for 3.0? All algos now expect 
byte len messages and offsets.

> @@ -1048,6 +1275,8 @@ struct __rte_cache_aligned aesni_mb_session {
>                       /* *< Expanded GCM key */
>                       uint8_t zuc_cipher_key[32];
>                       /* *< ZUC cipher key */
> +                     uint8_t nxa_cipher_key[32];
> +                     /* *< NxA cipher key */
>                       snow3g_key_schedule_t pKeySched_snow3g_cipher;
>                       /* *< SNOW3G scheduled cipher key */
>                       kasumi_key_sched_t pKeySched_kasumi_cipher; @@
> -1101,6 +1330,8 @@ struct __rte_cache_aligned aesni_mb_session {
>                       /* *< Expanded XCBC authentication keys */
>                       uint8_t zuc_auth_key[32];
>                       /* *< ZUC authentication key */
> +                     uint8_t snow5g_auth_key[32];
> +                     /* *< SNOW5G authentication key */
>                       snow3g_key_schedule_t pKeySched_snow3g_auth;
>                       /* *< SNOW3G scheduled authentication key */
>                       kasumi_key_sched_t pKeySched_kasumi_auth;
> --
Should there be a separate expanded_aes_keys in the auth struct for NIA5? 
Currently it's using cipher.expanded_key which may not work for chaining AES 
cipher with NIA5 auth. 

Reply via email to