wolfssl: enable CPU crypto instructions
authorEneas U de Queiroz <cotequeiroz@gmail.com>
Tue, 19 Apr 2022 15:02:09 +0000 (12:02 -0300)
committerChristian 'Ansuel' Marangi <ansuelsmth@gmail.com>
Tue, 7 Jun 2022 08:56:49 +0000 (10:56 +0200)
This enables AES & SHA CPU instructions for compatible armv8, and x86_64
architectures.  Add this to the hardware acceleration choice, since they
can't be enabled at the same time.

The package was marked non-shared, since the arm CPUs may or may not
have crypto extensions enabled based on licensing; bcm27xx does not
enable them.  There is no run-time detection of this for arm.

NOTE:
Should this be backported to a release branch, it must be done shortly
before a new minor release, because the change to nonshared will remove
libwolfssl from the shared packages, but the nonshared are only built in
a subsequent release!

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
package/libs/wolfssl/Config.in
package/libs/wolfssl/Makefile

index b32d5ab6cbe631c5d42a47ad3b044c6d4b97ef9f..f495a90ff608b4308d02c5db04466239acb615ef 100644 (file)
@@ -62,13 +62,25 @@ config WOLFSSL_ALT_NAMES
 config WOLFSSL_HAS_DEVCRYPTO
        bool
 
+config WOLFSSL_ASM_CAPABLE
+       bool
+       default x86_64 || (aarch64 && !TARGET_bcm27xx)
+
 choice
        prompt "Hardware Acceleration"
+       default WOLFSSL_HAS_CPU_CRYPTO if WOLFSSL_ASM_CAPABLE
        default WOLFSSL_HAS_NO_HW
 
        config WOLFSSL_HAS_NO_HW
                bool "None"
 
+       config WOLFSSL_HAS_CPU_CRYPTO
+               bool "Use CPU crypto instructions"
+               depends on WOLFSSL_ASM_CAPABLE
+               help
+               This will use Intel AESNI insturctions or armv8 Crypto Extensions.
+               Either of them should easily outperform hardware crypto in WolfSSL.
+
        config WOLFSSL_HAS_AFALG
                bool "AF_ALG"
 
index 928373754223e4eb03638aa9d0308f73bfd3218f..3edd526364041d646a41c4990c4a765d31882e94 100644 (file)
@@ -43,6 +43,7 @@ PKG_ABI_VERSION:=$(patsubst %-stable,%,$(PKG_VERSION)).$(call version_abbrev,$(c
 
 PKG_CONFIG_DEPENDS+=\
        CONFIG_WOLFSSL_HAS_AFALG \
+       CONFIG_WOLFSSL_HAS_CPU_CRYPTO \
        CONFIG_WOLFSSL_HAS_DEVCRYPTO_AES \
        CONFIG_WOLFSSL_HAS_DEVCRYPTO_CBC \
        CONFIG_WOLFSSL_HAS_DEVCRYPTO_FULL
@@ -59,6 +60,7 @@ endef
 define Package/libwolfssl
 $(call Package/libwolfssl/Default)
   TITLE:=wolfSSL library
+  PKGFLAGS:=nonshared
   MENU:=1
   PROVIDES:=libcyassl
   DEPENDS:=+WOLFSSL_HAS_DEVCRYPTO:kmod-cryptodev +WOLFSSL_HAS_AFALG:kmod-crypto-user
@@ -133,6 +135,15 @@ CONFIGURE_ARGS += \
        --enable-wpas --enable-fortress --enable-fastmath
 endif
 
+ifdef CONFIG_WOLFSSL_HAS_CPU_CRYPTO
+    ifdef CONFIG_aarch64
+       CONFIGURE_ARGS += --enable-armasm
+       TARGET_CFLAGS:=$(TARGET_CFLAGS:-mcpu%=-mcpu%+crypto)
+    else ifdef CONFIG_TARGET_x86_64
+       CONFIGURE_ARGS += --enable-intelasm
+    endif
+endif
+
 define Build/InstallDev
        $(INSTALL_DIR) $(1)/usr/include $(1)/usr/lib/pkgconfig
        $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/