crypto: bails out early for unsupported key type
[vpp.git] / src / plugins / crypto_native / main.c
index d338ab6..32bbbb1 100644 (file)
@@ -29,6 +29,10 @@ crypto_native_key_handler (vlib_main_t * vm, vnet_crypto_key_op_t kop,
   vnet_crypto_key_t *key = vnet_crypto_get_key (idx);
   crypto_native_main_t *cm = &crypto_native_main;
 
+  /** TODO: add linked alg support **/
+  if (key->type == VNET_CRYPTO_KEY_TYPE_LINK)
+    return;
+
   if (cm->key_fn[key->alg] == 0)
     return;
 
@@ -73,36 +77,50 @@ crypto_native_init (vlib_main_t * vm)
     vnet_crypto_register_engine (vm, "native", 100,
                                 "Native ISA Optimized Crypto");
 
+  if (0);
 #if __x86_64__
-  if (clib_cpu_supports_vaes ())
-    error = crypto_native_aes_cbc_init_vaes (vm);
-  else if (clib_cpu_supports_avx512f ())
-    error = crypto_native_aes_cbc_init_avx512 (vm);
-  else if (clib_cpu_supports_avx2 ())
-    error = crypto_native_aes_cbc_init_avx2 (vm);
+  else if (crypto_native_aes_cbc_init_icl && clib_cpu_supports_vaes ())
+    error = crypto_native_aes_cbc_init_icl (vm);
+  else if (crypto_native_aes_cbc_init_skx && clib_cpu_supports_avx512f ())
+    error = crypto_native_aes_cbc_init_skx (vm);
+  else if (crypto_native_aes_cbc_init_hsw && clib_cpu_supports_avx2 ())
+    error = crypto_native_aes_cbc_init_hsw (vm);
+  else if (crypto_native_aes_cbc_init_slm)
+    error = crypto_native_aes_cbc_init_slm (vm);
+#endif
+#if __aarch64__
+  else if (crypto_native_aes_cbc_init_neon)
+    error = crypto_native_aes_cbc_init_neon (vm);
+#endif
   else
-    error = crypto_native_aes_cbc_init_sse42 (vm);
+    error = clib_error_return (0, "No AES CBC implemenation available");
 
   if (error)
     goto error;
 
+#if __x86_64__
   if (clib_cpu_supports_pclmulqdq ())
     {
-      if (clib_cpu_supports_vaes ())
-       error = crypto_native_aes_gcm_init_vaes (vm);
-      else if (clib_cpu_supports_avx512f ())
-       error = crypto_native_aes_gcm_init_avx512 (vm);
-      else if (clib_cpu_supports_avx2 ())
-       error = crypto_native_aes_gcm_init_avx2 (vm);
+      if (crypto_native_aes_gcm_init_icl && clib_cpu_supports_vaes ())
+       error = crypto_native_aes_gcm_init_icl (vm);
+      else if (crypto_native_aes_gcm_init_skx && clib_cpu_supports_avx512f ())
+       error = crypto_native_aes_gcm_init_skx (vm);
+      else if (crypto_native_aes_gcm_init_hsw && clib_cpu_supports_avx2 ())
+       error = crypto_native_aes_gcm_init_hsw (vm);
+      else if (crypto_native_aes_gcm_init_slm)
+       error = crypto_native_aes_gcm_init_slm (vm);
       else
-       error = crypto_native_aes_gcm_init_sse42 (vm);
+       error = clib_error_return (0, "No AES GCM implemenation available");
 
       if (error)
        goto error;
     }
 #endif
 #if __aarch64__
-  error = crypto_native_aes_cbc_init_neon (vm);
+  if (crypto_native_aes_gcm_init_neon)
+    error = crypto_native_aes_gcm_init_neon (vm);
+  else
+    error = clib_error_return (0, "No AES GCM implemenation available");
 
   if (error)
     goto error;