Skip to content

Commit 3fc2145

Browse files
committed
PPC64 ASM: AES-ECB/CBC/CTR/GCM/XTS
To turn on assembly: --enable-ppc64-asm To build C code: --enable-ppc64-asm=inline To disable hardening (when physical access to device is not possible): WOLFSSL_PPC64_ASM_AES_NO_HARDEN AES-GCM works with either 4-bit (default) or table: --enable-aesgcm=table Using 'table' is faster for encryption/decryption.
1 parent a50a540 commit 3fc2145

7 files changed

Lines changed: 15680 additions & 29 deletions

File tree

.wolfssl_known_macro_extras

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,7 @@ WOLFSSL_PASSTHRU_ERR
850850
WOLFSSL_PB
851851
WOLFSSL_PEER_ADDRESS_CHANGES
852852
WOLFSSL_PKCS11_RW_TOKENS
853+
WOLFSSL_PPC64_ASM_AES_NO_HARDEN
853854
WOLFSSL_PRCONNECT_PRO
854855
WOLFSSL_PREFIX
855856
WOLFSSL_PSA_NO_AES
@@ -957,6 +958,7 @@ XSECURE_CACHE_DISABLE
957958
_ABI64
958959
_ABIO64
959960
_ARCH_PPC64
961+
_ARCH_PWR8
960962
_COMPILER_VERSION
961963
_INTPTR_T_DECLARED
962964
_LINUX_REFCOUNT_H
@@ -985,6 +987,7 @@ __32MZ2048ECM144__
985987
__32MZ2048EFM144__
986988
__ANDROID__
987989
__APPLE__
990+
__ARCH_PWR8
988991
__ARCH_STRCASECMP_NO_REDIRECT
989992
__ARCH_STRCMP_NO_REDIRECT
990993
__ARCH_STRNCASECMP_NO_REDIRECT

configure.ac

Lines changed: 80 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,11 @@ then
14001400
AC_MSG_ERROR([--enable-all-asm is incompatible with --disable-ppc32-asm])
14011401
fi
14021402

1403+
if test "$enable_ppc64_asm" = "no"
1404+
then
1405+
AC_MSG_ERROR([--enable-all-asm is incompatible with --disable-ppc64-asm])
1406+
fi
1407+
14031408
case "$host_cpu" in
14041409
*x86_64*|*amd64*)
14051410
if test "$enable_intelasm" = ""
@@ -1430,6 +1435,10 @@ then
14301435
fi
14311436
;;
14321437
*powerpc64*)
1438+
if test "$enable_ppc64_asm" = ""
1439+
then
1440+
enable_ppc64_asm=yes
1441+
fi
14331442
;;
14341443
*powerpc*)
14351444
if test "$enable_ppc32_asm" = ""
@@ -3909,21 +3918,70 @@ then
39093918
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM"
39103919
AC_MSG_NOTICE([32-bit PowerPC assembly for SHA-256])
39113920
ENABLED_PPC32_ASM=yes
3921+
3922+
if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then
3923+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE"
3924+
else
3925+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM"
3926+
fi
3927+
if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then
3928+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3929+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3930+
fi
3931+
if test "$ENABLED_PPC32_ASM_SPE" = "yes"; then
3932+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3933+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3934+
fi
39123935
fi
3913-
if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then
3914-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE"
3915-
else
3916-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM"
3936+
3937+
# PPC64 Assembly
3938+
AC_ARG_ENABLE([ppc64-asm],
3939+
[AS_HELP_STRING([--enable-ppc64-asm],[Enable wolfSSL PowerPC 64-bit ASM support (default: disabled).])],
3940+
[ ENABLED_PPC64_ASM=$enableval ],
3941+
[ ENABLED_PPC64_ASM=no ]
3942+
)
3943+
3944+
3945+
if test "$ENABLED_PPC64_ASM" != "no" && test "$ENABLED_ASM" = "yes"
3946+
then
3947+
ENABLED_PPC64_ASM_OPTS=$ENABLED_PPC64_ASM
3948+
for v in `echo $ENABLED_PPC64_ASM_OPTS | tr "," " "`
3949+
do
3950+
case $v in
3951+
yes)
3952+
;;
3953+
inline)
3954+
ENABLED_PPC64_ASM_INLINE=yes
3955+
;;
3956+
inline-reg)
3957+
ENABLED_PPC64_ASM_INLINE_REG=yes
3958+
;;
3959+
small)
3960+
ENABLED_PPC64_ASM_SMALL=yes
3961+
;;
3962+
*)
3963+
AC_MSG_ERROR([Invalid RISC-V option [yes,inline,small]: $ENABLED_PPC64_ASM.])
3964+
break
3965+
;;
3966+
esac
3967+
done
3968+
3969+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM"
3970+
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
3971+
AC_MSG_NOTICE([64-bit PowerPC assembly for AES])
3972+
ENABLED_PPC64_ASM=yes
39173973
fi
3918-
if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then
3919-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3920-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3974+
if test "$ENABLED_PPC64_ASM_INLINE" = "yes" || test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes"; then
3975+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_INLINE"
3976+
else
3977+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM"
39213978
fi
3922-
if test "$ENABLED_PPC32_ASM_SPE" = "yes"; then
3923-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3924-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3979+
if test "$ENABLED_PPC64_ASM_SMALL" = "yes"; then
3980+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_SMALL"
3981+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM_SMALL"
39253982
fi
39263983

3984+
39273985
# Xilinx hardened crypto
39283986
AC_ARG_ENABLE([xilinx],
39293987
[AS_HELP_STRING([--enable-xilinx],[Enable wolfSSL support for Xilinx hardened crypto(default: disabled)])],
@@ -11485,6 +11543,9 @@ AM_CONDITIONAL([BUILD_RISCV_ASM],[test "x$ENABLED_RISCV_ASM" = "xyes"])
1148511543
AM_CONDITIONAL([BUILD_PPC32_ASM],[test "x$ENABLED_PPC32_ASM" = "xyes"])
1148611544
AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE],[test "x$ENABLED_PPC32_ASM_INLINE" = "xyes"])
1148711545
AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE_REG],[test "x$ENABLED_PPC32_ASM_INLINE_REG" = "xyes"])
11546+
AM_CONDITIONAL([BUILD_PPC64_ASM],[test "x$ENABLED_PPC64_ASM" = "xyes"])
11547+
AM_CONDITIONAL([BUILD_PPC64_ASM_INLINE],[test "x$ENABLED_PPC64_ASM_INLINE" = "xyes"])
11548+
AM_CONDITIONAL([BUILD_PPC64_ASM_INLINE_REG],[test "x$ENABLED_PPC64_ASM_INLINE_REG" = "xyes"])
1148811549
AM_CONDITIONAL([BUILD_XILINX],[test "x$ENABLED_XILINX" = "xyes"])
1148911550
AM_CONDITIONAL([BUILD_AESNI],[test "x$ENABLED_AESNI" = "xyes"])
1149011551
AM_CONDITIONAL([BUILD_INTELASM],[test "x$ENABLED_INTELASM" = "xyes"])
@@ -12192,6 +12253,15 @@ then
1219212253
ENABLED_PPC32_ASM="inline C Reg"
1219312254
fi
1219412255
echo " * PPC32 ASM $ENABLED_PPC32_ASM"
12256+
if test "$ENABLED_PPC64_ASM_INLINE" = "yes"
12257+
then
12258+
ENABLED_PPC64_ASM="inline C"
12259+
fi
12260+
if test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes"
12261+
then
12262+
ENABLED_PPC64_ASM="inline C Reg"
12263+
fi
12264+
echo " * PPC64 ASM $ENABLED_PPC64_ASM"
1219512265
echo " * Write duplicate: $ENABLED_WRITEDUP"
1219612266
echo " * Xilinx Hardware Acc.: $ENABLED_XILINX"
1219712267
echo " * C89: $ENABLED_C89"

src/include.am

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,14 @@ endif !BUILD_ARMASM_INLINE
243243
endif BUILD_ARMASM
244244
endif !BUILD_ARMASM_NEON
245245

246+
if BUILD_PPC64_ASM
247+
if BUILD_PPC64_ASM_INLINE
248+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c
249+
else
250+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S
251+
endif !BUILD_PPC64_ASM_INLINE
252+
endif BUILD_PPC64_ASM
253+
246254
if BUILD_AESNI
247255
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes_asm.S
248256
if BUILD_X86_ASM
@@ -504,6 +512,14 @@ endif BUILD_ARMASM
504512
endif !BUILD_ARMASM_NEON
505513
endif BUILD_AES
506514

515+
if BUILD_PPC64_ASM
516+
if BUILD_PPC64_ASM_INLINE
517+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c
518+
else
519+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S
520+
endif !BUILD_PPC64_ASM_INLINE
521+
endif BUILD_PPC64_ASM
522+
507523
if BUILD_AESNI
508524
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes_asm.S
509525
if BUILD_X86_ASM
@@ -991,6 +1007,14 @@ endif !BUILD_ARMASM_INLINE
9911007
endif BUILD_ARMASM
9921008
endif !BUILD_ARMASM_NEON
9931009

1010+
if BUILD_PPC64_ASM
1011+
if BUILD_PPC64_ASM_INLINE
1012+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c
1013+
else
1014+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S
1015+
endif !BUILD_PPC64_ASM_INLINE
1016+
endif BUILD_PPC64_ASM
1017+
9941018
if BUILD_AFALG
9951019
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/af_alg/afalg_aes.c
9961020
endif BUILD_AFALG

0 commit comments

Comments
 (0)