Skip to content

Commit b606231

Browse files
committed
PPC64 ASM: AES-ECB/CBC/CTR/GCM
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 2c0c28d commit b606231

7 files changed

Lines changed: 12867 additions & 25 deletions

File tree

.wolfssl_known_macro_extras

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,7 @@ WOLFSSL_PASSTHRU_ERR
846846
WOLFSSL_PB
847847
WOLFSSL_PEER_ADDRESS_CHANGES
848848
WOLFSSL_PKCS11_RW_TOKENS
849+
WOLFSSL_PPC64_ASM_AES_NO_HARDEN
849850
WOLFSSL_PRCONNECT_PRO
850851
WOLFSSL_PREFIX
851852
WOLFSSL_PSA_NO_AES

configure.ac

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

1373+
if test "$enable_ppc64_asm" = "no"
1374+
then
1375+
AC_MSG_ERROR([--enable-all-asm is incompatible with --disable-ppc64-asm])
1376+
fi
1377+
13731378
case "$host_cpu" in
13741379
*x86_64*|*amd64*)
13751380
if test "$enable_intelasm" = ""
@@ -1400,6 +1405,10 @@ then
14001405
fi
14011406
;;
14021407
*powerpc64*)
1408+
if test "$enable_ppc64_asm" = ""
1409+
then
1410+
enable_ppc64_asm=yes
1411+
fi
14031412
;;
14041413
*powerpc*)
14051414
if test "$enable_ppc32_asm" = ""
@@ -3818,21 +3827,70 @@ then
38183827
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM"
38193828
AC_MSG_NOTICE([32-bit PowerPC assembly for SHA-256])
38203829
ENABLED_PPC32_ASM=yes
3830+
3831+
if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then
3832+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE"
3833+
else
3834+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM"
3835+
fi
3836+
if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then
3837+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3838+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3839+
fi
3840+
if test "$ENABLED_PPC32_ASM_SPE" = "yes"; then
3841+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3842+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3843+
fi
38213844
fi
3822-
if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then
3823-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE"
3824-
else
3825-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM"
3845+
3846+
# PPC64 Assembly
3847+
AC_ARG_ENABLE([ppc64-asm],
3848+
[AS_HELP_STRING([--enable-ppc64-asm],[Enable wolfSSL PowerPC 64-bit ASM support (default: disabled).])],
3849+
[ ENABLED_PPC64_ASM=$enableval ],
3850+
[ ENABLED_PPC64_ASM=no ]
3851+
)
3852+
3853+
3854+
if test "$ENABLED_PPC64_ASM" != "no" && test "$ENABLED_ASM" = "yes"
3855+
then
3856+
ENABLED_PPC64_ASM_OPTS=$ENABLED_PPC64_ASM
3857+
for v in `echo $ENABLED_PPC64_ASM_OPTS | tr "," " "`
3858+
do
3859+
case $v in
3860+
yes)
3861+
;;
3862+
inline)
3863+
ENABLED_PPC64_ASM_INLINE=yes
3864+
;;
3865+
inline-reg)
3866+
ENABLED_PPC64_ASM_INLINE_REG=yes
3867+
;;
3868+
small)
3869+
ENABLED_PPC64_ASM_SMALL=yes
3870+
;;
3871+
*)
3872+
AC_MSG_ERROR([Invalid RISC-V option [yes,inline,small]: $ENABLED_PPC64_ASM.])
3873+
break
3874+
;;
3875+
esac
3876+
done
3877+
3878+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM"
3879+
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
3880+
AC_MSG_NOTICE([64-bit PowerPC assembly for AES])
3881+
ENABLED_PPC64_ASM=yes
38263882
fi
3827-
if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then
3828-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3829-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3883+
if test "$ENABLED_PPC64_ASM_INLINE" = "yes" || test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes"; then
3884+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_INLINE"
3885+
else
3886+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM"
38303887
fi
3831-
if test "$ENABLED_PPC32_ASM_SPE" = "yes"; then
3832-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3833-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3888+
if test "$ENABLED_PPC64_ASM_SMALL" = "yes"; then
3889+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_SMALL"
3890+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM_SMALL"
38343891
fi
38353892

3893+
38363894
# Xilinx hardened crypto
38373895
AC_ARG_ENABLE([xilinx],
38383896
[AS_HELP_STRING([--enable-xilinx],[Enable wolfSSL support for Xilinx hardened crypto(default: disabled)])],
@@ -11132,6 +11190,9 @@ AM_CONDITIONAL([BUILD_RISCV_ASM],[test "x$ENABLED_RISCV_ASM" = "xyes"])
1113211190
AM_CONDITIONAL([BUILD_PPC32_ASM],[test "x$ENABLED_PPC32_ASM" = "xyes"])
1113311191
AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE],[test "x$ENABLED_PPC32_ASM_INLINE" = "xyes"])
1113411192
AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE_REG],[test "x$ENABLED_PPC32_ASM_INLINE_REG" = "xyes"])
11193+
AM_CONDITIONAL([BUILD_PPC64_ASM],[test "x$ENABLED_PPC64_ASM" = "xyes"])
11194+
AM_CONDITIONAL([BUILD_PPC64_ASM_INLINE],[test "x$ENABLED_PPC64_ASM_INLINE" = "xyes"])
11195+
AM_CONDITIONAL([BUILD_PPC64_ASM_INLINE_REG],[test "x$ENABLED_PPC64_ASM_INLINE_REG" = "xyes"])
1113511196
AM_CONDITIONAL([BUILD_XILINX],[test "x$ENABLED_XILINX" = "xyes"])
1113611197
AM_CONDITIONAL([BUILD_AESNI],[test "x$ENABLED_AESNI" = "xyes"])
1113711198
AM_CONDITIONAL([BUILD_INTELASM],[test "x$ENABLED_INTELASM" = "xyes"])
@@ -11835,6 +11896,15 @@ then
1183511896
ENABLED_PPC32_ASM="inline C Reg"
1183611897
fi
1183711898
echo " * PPC32 ASM $ENABLED_PPC32_ASM"
11899+
if test "$ENABLED_PPC64_ASM_INLINE" = "yes"
11900+
then
11901+
ENABLED_PPC64_ASM="inline C"
11902+
fi
11903+
if test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes"
11904+
then
11905+
ENABLED_PPC64_ASM="inline C Reg"
11906+
fi
11907+
echo " * PPC64 ASM $ENABLED_PPC64_ASM"
1183811908
echo " * Write duplicate: $ENABLED_WRITEDUP"
1183911909
echo " * Xilinx Hardware Acc.: $ENABLED_XILINX"
1184011910
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
@@ -494,6 +502,14 @@ endif BUILD_ARMASM
494502
endif !BUILD_ARMASM_NEON
495503
endif BUILD_AES
496504

505+
if BUILD_PPC64_ASM
506+
if BUILD_PPC64_ASM_INLINE
507+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c
508+
else
509+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S
510+
endif !BUILD_PPC64_ASM_INLINE
511+
endif BUILD_PPC64_ASM
512+
497513
if BUILD_AESNI
498514
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/aes_asm.S
499515
if BUILD_X86_ASM
@@ -981,6 +997,14 @@ endif !BUILD_ARMASM_INLINE
981997
endif BUILD_ARMASM
982998
endif !BUILD_ARMASM_NEON
983999

1000+
if BUILD_PPC64_ASM
1001+
if BUILD_PPC64_ASM_INLINE
1002+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm_c.c
1003+
else
1004+
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/ppc64/ppc64-aes-asm.S
1005+
endif !BUILD_PPC64_ASM_INLINE
1006+
endif BUILD_PPC64_ASM
1007+
9841008
if BUILD_AFALG
9851009
src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/af_alg/afalg_aes.c
9861010
endif BUILD_AFALG

0 commit comments

Comments
 (0)