octeon: add support for hmac_md5 and chachapoly 75/41775/2
authorKishor Dhanawade <[email protected]>
Thu, 26 Sep 2024 10:18:34 +0000 (15:48 +0530)
committerDamjan Marion <[email protected]>
Mon, 11 Nov 2024 12:42:36 +0000 (12:42 +0000)
Added support for following algorithms
  - aes-cbc hmac_md5
  - chacha20_poly1305

Type: feature

Signed-off-by: Kishor Dhanawade <[email protected]>
Signed-off-by: Nithinsen Kaithakadan <[email protected]>
Change-Id: I44702483dad8182d5f15aed39c6bb42f1ca15d3c

src/plugins/dev_octeon/crypto.c
src/plugins/dev_octeon/crypto.h

index 8796704..7d3790f 100644 (file)
@@ -1219,6 +1219,13 @@ oct_crypto_link_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
       auth_type = ROC_SE_SHA2_SHA512;
       digest_len = 32;
       break;
+    case VNET_CRYPTO_ALG_AES_128_CBC_MD5_TAG12:
+    case VNET_CRYPTO_ALG_AES_192_CBC_MD5_TAG12:
+    case VNET_CRYPTO_ALG_AES_256_CBC_MD5_TAG12:
+      enc_type = ROC_SE_AES_CBC;
+      auth_type = ROC_SE_MD5_TYPE;
+      digest_len = 12;
+      break;
     case VNET_CRYPTO_ALG_AES_128_CTR_SHA1_TAG12:
     case VNET_CRYPTO_ALG_AES_192_CTR_SHA1_TAG12:
     case VNET_CRYPTO_ALG_AES_256_CTR_SHA1_TAG12:
@@ -1318,6 +1325,10 @@ oct_crypto_aead_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
       sess->cpt_op = type;
       digest_len = 16;
       break;
+    case VNET_CRYPTO_ALG_CHACHA20_POLY1305:
+      enc_type = ROC_SE_CHACHA20;
+      auth_type = ROC_SE_POLY1305;
+      break;
     default:
       clib_warning (
        "Cryptodev: Undefined cipher algo %u specified. Key index %u",
@@ -1342,6 +1353,9 @@ oct_crypto_aead_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
       return -1;
     }
 
+  if (enc_type == ROC_SE_CHACHA20)
+    sess->cpt_ctx.template_w4.s.opcode_minor |= BIT (5);
+
   return 0;
 }
 
@@ -1566,6 +1580,13 @@ oct_crypto_enqueue_aead_aad_12_enc (vlib_main_t *vm,
   return oct_crypto_enqueue_aead_aad_enc (vm, frame, 12);
 }
 
+int
+oct_crypto_enqueue_aead_aad_0_enc (vlib_main_t *vm,
+                                  vnet_crypto_async_frame_t *frame)
+{
+  return oct_crypto_enqueue_aead_aad_enc (vm, frame, 0);
+}
+
 int
 oct_crypto_enqueue_aead_aad_8_dec (vlib_main_t *vm,
                                   vnet_crypto_async_frame_t *frame)
@@ -1580,6 +1601,13 @@ oct_crypto_enqueue_aead_aad_12_dec (vlib_main_t *vm,
   return oct_crypto_enqueue_aead_aad_dec (vm, frame, 12);
 }
 
+int
+oct_crypto_enqueue_aead_aad_0_dec (vlib_main_t *vm,
+                                  vnet_crypto_async_frame_t *frame)
+{
+  return oct_crypto_enqueue_aead_aad_dec (vm, frame, 0);
+}
+
 vnet_crypto_async_frame_t *
 oct_crypto_frame_dequeue (vlib_main_t *vm, u32 *nb_elts_processed,
                          u32 *enqueue_thread_idx)
index 8d17980..27e1f60 100644 (file)
   _ (AES_192_GCM, 24, 16, 8)                                                  \
   _ (AES_192_GCM, 24, 16, 12)                                                 \
   _ (AES_256_GCM, 32, 16, 8)                                                  \
-  _ (AES_256_GCM, 32, 16, 12)
+  _ (AES_256_GCM, 32, 16, 12)                                                 \
+  _ (CHACHA20_POLY1305, 32, 16, 8)                                            \
+  _ (CHACHA20_POLY1305, 32, 16, 12)                                           \
+  _ (CHACHA20_POLY1305, 32, 16, 0)
 
 /* CRYPTO_ID, INTEG_ID, KEY_LENGTH_IN_BYTES, DIGEST_LEN */
 #define foreach_oct_crypto_link_async_alg                                     \
@@ -36,6 +39,9 @@
   _ (AES_128_CBC, SHA512, 16, 32)                                             \
   _ (AES_192_CBC, SHA512, 24, 32)                                             \
   _ (AES_256_CBC, SHA512, 32, 32)                                             \
+  _ (AES_128_CBC, MD5, 16, 12)                                                \
+  _ (AES_192_CBC, MD5, 24, 12)                                                \
+  _ (AES_256_CBC, MD5, 32, 12)                                                \
   _ (3DES_CBC, MD5, 24, 12)                                                   \
   _ (3DES_CBC, SHA1, 24, 12)                                                  \
   _ (3DES_CBC, SHA256, 24, 16)                                                \
@@ -162,10 +168,14 @@ int oct_crypto_enqueue_aead_aad_8_enc (vlib_main_t *vm,
                                       vnet_crypto_async_frame_t *frame);
 int oct_crypto_enqueue_aead_aad_12_enc (vlib_main_t *vm,
                                        vnet_crypto_async_frame_t *frame);
+int oct_crypto_enqueue_aead_aad_0_enc (vlib_main_t *vm,
+                                      vnet_crypto_async_frame_t *frame);
 int oct_crypto_enqueue_aead_aad_8_dec (vlib_main_t *vm,
                                       vnet_crypto_async_frame_t *frame);
 int oct_crypto_enqueue_aead_aad_12_dec (vlib_main_t *vm,
                                        vnet_crypto_async_frame_t *frame);
+int oct_crypto_enqueue_aead_aad_0_dec (vlib_main_t *vm,
+                                      vnet_crypto_async_frame_t *frame);
 vnet_crypto_async_frame_t *oct_crypto_frame_dequeue (vlib_main_t *vm,
                                                     u32 *nb_elts_processed,
                                                     u32 *enqueue_thread_idx);