Skip to content

Commit c9e119d

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 b3f08f3 commit c9e119d

7 files changed

Lines changed: 12365 additions & 25 deletions

File tree

.wolfssl_known_macro_extras

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,7 @@ WOLFSSL_PASSTHRU_ERR
854854
WOLFSSL_PB
855855
WOLFSSL_PEER_ADDRESS_CHANGES
856856
WOLFSSL_PKCS11_RW_TOKENS
857+
WOLFSSL_PPC64_ASM_AES_NO_HARDEN
857858
WOLFSSL_PRCONNECT_PRO
858859
WOLFSSL_PREFIX
859860
WOLFSSL_PSA_NO_AES

configure.ac

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

1396+
if test "$enable_ppc64_asm" = "no"
1397+
then
1398+
AC_MSG_ERROR([--enable-all-asm is incompatible with --disable-ppc64-asm])
1399+
fi
1400+
13961401
case "$host_cpu" in
13971402
*x86_64*|*amd64*)
13981403
if test "$enable_intelasm" = ""
@@ -1423,6 +1428,10 @@ then
14231428
fi
14241429
;;
14251430
*powerpc64*)
1431+
if test "$enable_ppc64_asm" = ""
1432+
then
1433+
enable_ppc64_asm=yes
1434+
fi
14261435
;;
14271436
*powerpc*)
14281437
if test "$enable_ppc32_asm" = ""
@@ -3881,21 +3890,70 @@ then
38813890
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM"
38823891
AC_MSG_NOTICE([32-bit PowerPC assembly for SHA-256])
38833892
ENABLED_PPC32_ASM=yes
3893+
3894+
if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then
3895+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE"
3896+
else
3897+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM"
3898+
fi
3899+
if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then
3900+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3901+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3902+
fi
3903+
if test "$ENABLED_PPC32_ASM_SPE" = "yes"; then
3904+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3905+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3906+
fi
38843907
fi
3885-
if test "$ENABLED_PPC32_ASM_INLINE" = "yes" || test "$ENABLED_PPC32_ASM_INLINE_REG" = "yes"; then
3886-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_INLINE"
3887-
else
3888-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM"
3908+
3909+
# PPC64 Assembly
3910+
AC_ARG_ENABLE([ppc64-asm],
3911+
[AS_HELP_STRING([--enable-ppc64-asm],[Enable wolfSSL PowerPC 64-bit ASM support (default: disabled).])],
3912+
[ ENABLED_PPC64_ASM=$enableval ],
3913+
[ ENABLED_PPC64_ASM=no ]
3914+
)
3915+
3916+
3917+
if test "$ENABLED_PPC64_ASM" != "no" && test "$ENABLED_ASM" = "yes"
3918+
then
3919+
ENABLED_PPC64_ASM_OPTS=$ENABLED_PPC64_ASM
3920+
for v in `echo $ENABLED_PPC64_ASM_OPTS | tr "," " "`
3921+
do
3922+
case $v in
3923+
yes)
3924+
;;
3925+
inline)
3926+
ENABLED_PPC64_ASM_INLINE=yes
3927+
;;
3928+
inline-reg)
3929+
ENABLED_PPC64_ASM_INLINE_REG=yes
3930+
;;
3931+
small)
3932+
ENABLED_PPC64_ASM_SMALL=yes
3933+
;;
3934+
*)
3935+
AC_MSG_ERROR([Invalid RISC-V option [yes,inline,small]: $ENABLED_PPC64_ASM.])
3936+
break
3937+
;;
3938+
esac
3939+
done
3940+
3941+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM"
3942+
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
3943+
AC_MSG_NOTICE([64-bit PowerPC assembly for AES])
3944+
ENABLED_PPC64_ASM=yes
38893945
fi
3890-
if test "$ENABLED_PPC32_ASM_SMALL" = "yes"; then
3891-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3892-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SMALL"
3946+
if test "$ENABLED_PPC64_ASM_INLINE" = "yes" || test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes"; then
3947+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_INLINE"
3948+
else
3949+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM"
38933950
fi
3894-
if test "$ENABLED_PPC32_ASM_SPE" = "yes"; then
3895-
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3896-
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC32_ASM_SPE"
3951+
if test "$ENABLED_PPC64_ASM_SMALL" = "yes"; then
3952+
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PPC64_ASM_SMALL"
3953+
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_PPC64_ASM_SMALL"
38973954
fi
38983955

3956+
38993957
# Xilinx hardened crypto
39003958
AC_ARG_ENABLE([xilinx],
39013959
[AS_HELP_STRING([--enable-xilinx],[Enable wolfSSL support for Xilinx hardened crypto(default: disabled)])],
@@ -11202,6 +11260,9 @@ AM_CONDITIONAL([BUILD_RISCV_ASM],[test "x$ENABLED_RISCV_ASM" = "xyes"])
1120211260
AM_CONDITIONAL([BUILD_PPC32_ASM],[test "x$ENABLED_PPC32_ASM" = "xyes"])
1120311261
AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE],[test "x$ENABLED_PPC32_ASM_INLINE" = "xyes"])
1120411262
AM_CONDITIONAL([BUILD_PPC32_ASM_INLINE_REG],[test "x$ENABLED_PPC32_ASM_INLINE_REG" = "xyes"])
11263+
AM_CONDITIONAL([BUILD_PPC64_ASM],[test "x$ENABLED_PPC64_ASM" = "xyes"])
11264+
AM_CONDITIONAL([BUILD_PPC64_ASM_INLINE],[test "x$ENABLED_PPC64_ASM_INLINE" = "xyes"])
11265+
AM_CONDITIONAL([BUILD_PPC64_ASM_INLINE_REG],[test "x$ENABLED_PPC64_ASM_INLINE_REG" = "xyes"])
1120511266
AM_CONDITIONAL([BUILD_XILINX],[test "x$ENABLED_XILINX" = "xyes"])
1120611267
AM_CONDITIONAL([BUILD_AESNI],[test "x$ENABLED_AESNI" = "xyes"])
1120711268
AM_CONDITIONAL([BUILD_INTELASM],[test "x$ENABLED_INTELASM" = "xyes"])
@@ -11905,6 +11966,15 @@ then
1190511966
ENABLED_PPC32_ASM="inline C Reg"
1190611967
fi
1190711968
echo " * PPC32 ASM $ENABLED_PPC32_ASM"
11969+
if test "$ENABLED_PPC64_ASM_INLINE" = "yes"
11970+
then
11971+
ENABLED_PPC64_ASM="inline C"
11972+
fi
11973+
if test "$ENABLED_PPC64_ASM_INLINE_REG" = "yes"
11974+
then
11975+
ENABLED_PPC64_ASM="inline C Reg"
11976+
fi
11977+
echo " * PPC64 ASM $ENABLED_PPC64_ASM"
1190811978
echo " * Write duplicate: $ENABLED_WRITEDUP"
1190911979
echo " * Xilinx Hardware Acc.: $ENABLED_XILINX"
1191011980
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)