mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
linuxkm: completion and stabilization of LKCAPI integration for AES-CBC, AES-CFB, AES-GCM, and AES-XTS:
linuxkm/lkcapi_glue.c (added in earlier commit): implement linuxkm_lkcapi_register() and linuxkm_lkcapi_unregister() with idempotency. add AES-XTS algorithm glue and self-test implementations. add per-algorithm gating: LINUXKM_LKCAPI_REGISTER_AESCBC, _AESCFB, _AESGCM, and _AESXTS. carry forward philljj's implementations for AES-CBC, AES-CFB, and AES-GCM, with various cleanups. linuxkm/module_hooks.c: print the "wolfCrypt container hashes" message only if DEBUG_LINUXKM_PIE_SUPPORT is set. render the FIPS version for the self-test success message using the HAVE_FIPS_VERSION* macros. add a "skipping full wolfcrypt_test() ..." message for --disable-crypttests builds. add CONFIG_FORTIFY_SOURCE gates. configure.ac: add support for --enable-linuxkm-lkcapi-register; add AES-XTS to output config summary; rename --enable-xts to --enable-aesxts (retaining old option for backward compatibility). linuxkm/linuxkm_wc_port.h: add support for CONFIG_FORTIFY_SOURCE. linuxkm/linuxkm_memory.c: fix retvals in save_vector_registers_x86() (wc-style MEMORY_E, not sys-style ENOMEM). add __my_fortify_panic() implementation. linuxkm/Kbuild: for ENABLED_LINUXKM_PIE in rename-pie-text-and-data-sections recipe, create an .rodata.wolfcrypt section. linuxkm/include.am: add linuxkm/lkcapi_glue.c to EXTRA_DIST. wolfcrypt/test/test.c: when defined(HAVE_FIPS_VERSION), inhibit a test clause in aes_xts_128_test() disallowed by FIPS ("FIPS AES-XTS main and tweak keys must differ"). fix out-of-order user message in ecc_test().
This commit is contained in:
53
configure.ac
53
configure.ac
@ -745,7 +745,7 @@ then
|
||||
test "$enable_psk" = "" && enable_psk=yes
|
||||
test "$enable_cmac" = "" && enable_cmac=yes
|
||||
test "$enable_siphash" = "" && enable_siphash=yes
|
||||
test "$enable_xts" = "" && enable_xts=yes
|
||||
test "$enable_aesxts" = "" && enable_aesxts=yes
|
||||
test "$enable_ocsp" = "" && enable_ocsp=yes
|
||||
test "$enable_ocspstapling" = "" && test "$enable_ocsp" != "no" && enable_ocspstapling=yes
|
||||
test "$enable_ocspstapling2" = "" && test "$enable_ocsp" != "no" && enable_ocspstapling2=yes
|
||||
@ -933,7 +933,7 @@ then
|
||||
test "$enable_psk" = "" && enable_psk=yes
|
||||
test "$enable_cmac" = "" && enable_cmac=yes
|
||||
test "$enable_siphash" = "" && enable_siphash=yes
|
||||
test "$enable_xts" = "" && enable_xts=yes
|
||||
test "$enable_aesxts" = "" && enable_aesxts=yes
|
||||
test "$enable_ocsp" = "" && enable_ocsp=yes
|
||||
test "$enable_ocspstapling" = "" && test "$enable_ocsp" != "no" && enable_ocspstapling=yes
|
||||
test "$enable_ocspstapling2" = "" && test "$enable_ocsp" != "no" && enable_ocspstapling2=yes
|
||||
@ -4836,17 +4836,23 @@ AS_IF([test "x$ENABLED_CMAC" = "xyes"],
|
||||
|
||||
|
||||
# AES-XTS
|
||||
AC_ARG_ENABLE([xts],
|
||||
[AS_HELP_STRING([--enable-xts],[Enable XTS (default: disabled)])],
|
||||
[ ENABLED_XTS=$enableval ],
|
||||
[ ENABLED_XTS=no ]
|
||||
AC_ARG_ENABLE([aesxts],
|
||||
[AS_HELP_STRING([--enable-aesxts],[Enable AES XTS (default: disabled)])],
|
||||
[ ENABLED_AESXTS=$enableval ],
|
||||
[ ENABLED_AESXTS=no ]
|
||||
)
|
||||
|
||||
AS_IF([test "x$ENABLED_XTS" = "xyes"],
|
||||
# legacy old option name, for compatibility:
|
||||
AC_ARG_ENABLE([xts],
|
||||
[AS_HELP_STRING([--enable-xts],[Please use --enable-aesxts])],
|
||||
[ ENABLED_AESXTS=$enableval ]
|
||||
)
|
||||
|
||||
AS_IF([test "x$ENABLED_AESXTS" = "xyes"],
|
||||
[AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_XTS -DWOLFSSL_AES_DIRECT"])
|
||||
AS_IF([test "x$ENABLED_XTS" = "xyes" && test "x$ENABLED_INTELASM" = "xyes"],
|
||||
AS_IF([test "x$ENABLED_AESXTS" = "xyes" && test "x$ENABLED_INTELASM" = "xyes"],
|
||||
[AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_AES_XTS"])
|
||||
AS_IF([test "x$ENABLED_XTS" = "xyes" && test "x$ENABLED_AESNI" = "xyes"],
|
||||
AS_IF([test "x$ENABLED_AESXTS" = "xyes" && test "x$ENABLED_AESNI" = "xyes"],
|
||||
[AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_AES_XTS"])
|
||||
|
||||
# Web Server Build
|
||||
@ -8028,6 +8034,32 @@ if test -n "$MPI_MAX_KEY_BITS" -o -n "$WITH_MAX_ECC_BITS"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([linuxkm-lkcapi-register],
|
||||
[AS_HELP_STRING([--enable-linuxkm-lkcapi-register],[Register wolfCrypt implementations with the Linux Kernel Crypto API backplane. Possible values are "none", "all", "cbc(aes)", "cfb(aes)", "gcm(aes)", and "xts(aes)", or a comma-separate combination. (default: none)])],
|
||||
[ENABLED_LINUXKM_LKCAPI_REGISTER=$enableval],
|
||||
[ENABLED_LINUXKM_LKCAPI_REGISTER=none]
|
||||
)
|
||||
if test "$ENABLED_LINUXKM_LKCAPI_REGISTER" != "none"
|
||||
then
|
||||
AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER"
|
||||
for lkcapi_alg in $(echo "$ENABLED_LINUXKM_LKCAPI_REGISTER" | tr ',' ' ')
|
||||
do
|
||||
case "$lkcapi_alg" in
|
||||
all) AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER_ALL" ;;
|
||||
'cbc(aes)') test "$ENABLED_AESCBC" != "no" || AC_MSG_ERROR([linuxkm-lkcapi-register ${lkcapi_alg}: AES-CBC implementation not enabled.])
|
||||
AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER_AESCBC" ;;
|
||||
'cfb(aes)') test "$ENABLED_AESCFB" != "no" || AC_MSG_ERROR([linuxkm-lkcapi-register ${lkcapi_alg}: AES-CFB implementation not enabled.])
|
||||
AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER_AESCFB" ;;
|
||||
'gcm(aes)') test "$ENABLED_AESGCM" != "no" || AC_MSG_ERROR([linuxkm-lkcapi-register ${lkcapi_alg}: AES-GCM implementation not enabled.])
|
||||
test "$ENABLED_AESGCM_STREAM" != "no" || AC_MSG_ERROR([linuxkm-lkcapi-register ${lkcapi_alg}: --enable-aesgcm-stream is required for LKCAPI.])
|
||||
AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER_AESGCM" ;;
|
||||
'xts(aes)') test "$ENABLED_AESXTS" != "no" || AC_MSG_ERROR([linuxkm-lkcapi-register ${lkcapi_alg}: AES-XTS implementation not enabled.])
|
||||
AM_CFLAGS="$AM_CFLAGS -DLINUXKM_LKCAPI_REGISTER_AESXTS" ;;
|
||||
*) AC_MSG_ERROR([Unsupported LKCAPI algorithm "$lkcapi_alg".]) ;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
# Library Suffix
|
||||
LIBSUFFIX=""
|
||||
AC_ARG_WITH([libsuffix],
|
||||
@ -8958,7 +8990,7 @@ AM_CONDITIONAL([BUILD_SNIFFER], [ test "x$ENABLED_SNIFFER" = "xyes" || test "
|
||||
AM_CONDITIONAL([BUILD_SNIFFTEST],[ test "x$ENABLED_SNIFFTEST" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_AESGCM],[test "x$ENABLED_AESGCM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_AESCCM],[test "x$ENABLED_AESCCM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_XTS],[test "x$ENABLED_XTS" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_AESXTS],[test "x$ENABLED_AESXTS" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_ARMASM],[test "x$ENABLED_ARMASM" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_ARMASM_INLINE],[test "x$ENABLED_ARMASM_INLINE" = "xyes"])
|
||||
AM_CONDITIONAL([BUILD_ARMASM_CRYPTO],[test "x$ENABLED_ARMASM_CRYPTO" = "xyes"])
|
||||
@ -9397,6 +9429,7 @@ echo " * AES-CCM: $ENABLED_AESCCM"
|
||||
echo " * AES-CTR: $ENABLED_AESCTR"
|
||||
echo " * AES-CFB: $ENABLED_AESCFB"
|
||||
echo " * AES-OFB: $ENABLED_AESOFB"
|
||||
echo " * AES-XTS: $ENABLED_AESXTS"
|
||||
echo " * AES-SIV: $ENABLED_AESSIV"
|
||||
echo " * AES-EAX: $ENABLED_AESEAX"
|
||||
echo " * AES Bitspliced: $ENABLED_AESBS"
|
||||
|
@ -154,10 +154,10 @@ ifneq "$(quiet)" "silent_"
|
||||
endif
|
||||
@cd "$(obj)" || exit $$?; \
|
||||
for file in $(WOLFCRYPT_PIE_FILES); do \
|
||||
$(OBJCOPY) --rename-section .text=.text.wolfcrypt --rename-section .data=.data.wolfcrypt "$$file" || exit $$?; \
|
||||
$(OBJCOPY) --rename-section .text=.text.wolfcrypt --rename-section .data=.data.wolfcrypt --rename-section .rodata=.rodata.wolfcrypt "$$file" || exit $$?; \
|
||||
done
|
||||
ifneq "$(quiet)" "silent_"
|
||||
@echo ' wolfCrypt .{text,data} sections containerized to .{text,data}.wolfcrypt'
|
||||
@echo ' wolfCrypt .{text,data,rodata} sections containerized to .{text,data,rodata}.wolfcrypt'
|
||||
endif
|
||||
|
||||
$(src)/linuxkm/module_exports.c: rename-pie-text-and-data-sections
|
||||
|
@ -12,4 +12,5 @@ EXTRA_DIST += m4/ax_linuxkm.m4 \
|
||||
linuxkm/pie_redirect_table.c \
|
||||
linuxkm/pie_last.c \
|
||||
linuxkm/linuxkm_memory.c \
|
||||
linuxkm/linuxkm_wc_port.h
|
||||
linuxkm/linuxkm_wc_port.h \
|
||||
linuxkm/lkcapi_glue.c
|
||||
|
@ -275,7 +275,7 @@ WARN_UNUSED_RESULT int save_vector_registers_x86(void)
|
||||
{
|
||||
struct wc_thread_fpu_count_ent *pstate = wc_linuxkm_fpu_state_assoc(1);
|
||||
if (pstate == NULL)
|
||||
return ENOMEM;
|
||||
return MEMORY_E;
|
||||
|
||||
/* allow for nested calls */
|
||||
if (pstate->fpu_state != 0U) {
|
||||
@ -314,7 +314,7 @@ WARN_UNUSED_RESULT int save_vector_registers_x86(void)
|
||||
if (! warned_fpu_forbidden)
|
||||
pr_err("save_vector_registers_x86 called from IRQ handler.\n");
|
||||
wc_linuxkm_fpu_state_release(pstate);
|
||||
return EPERM;
|
||||
return BAD_STATE_E;
|
||||
} else {
|
||||
#if defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT_COUNT) && \
|
||||
(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)) && \
|
||||
@ -380,3 +380,11 @@ void my__show_free_areas(
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__PIE__) && defined(CONFIG_FORTIFY_SOURCE)
|
||||
/* needed because FORTIFY_SOURCE inline implementations call fortify_panic(). */
|
||||
void __my_fortify_panic(const char *name) {
|
||||
pr_emerg("__my_fortify_panic in %s\n", name);
|
||||
BUG();
|
||||
}
|
||||
#endif
|
||||
|
@ -119,8 +119,87 @@
|
||||
#include <linux/kconfig.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
#ifdef CONFIG_FORTIFY_SOURCE
|
||||
#ifdef __PIE__
|
||||
/* the inline definitions in fortify-string.h use non-inline
|
||||
* fortify_panic().
|
||||
*/
|
||||
extern void __my_fortify_panic(const char *name) __noreturn __cold;
|
||||
#define fortify_panic __my_fortify_panic
|
||||
#endif
|
||||
|
||||
/* the _FORTIFY_SOURCE macros and implementations for several string
|
||||
* functions are incompatible with libwolfssl, so just reimplement with
|
||||
* inlines and remap with macros.
|
||||
*/
|
||||
|
||||
#define __ARCH_STRLEN_NO_REDIRECT
|
||||
#define __ARCH_MEMCPY_NO_REDIRECT
|
||||
#define __ARCH_MEMSET_NO_REDIRECT
|
||||
#define __ARCH_MEMMOVE_NO_REDIRECT
|
||||
|
||||
/* the inline definitions in fortify-string.h use non-inline
|
||||
* strlen().
|
||||
*/
|
||||
static inline size_t strlen(const char *s) {
|
||||
const char *s_start = s;
|
||||
while (*s)
|
||||
++s;
|
||||
return (size_t)s - (size_t)s_start;
|
||||
}
|
||||
|
||||
#include <linux/string.h>
|
||||
|
||||
#undef strlen
|
||||
#define strlen(s) \
|
||||
((__builtin_constant_p(s) && __builtin_constant_p(*(s))) ? \
|
||||
(sizeof(s) - 1) : strlen(s))
|
||||
|
||||
static inline void *my_memcpy(void *dest, const void *src, size_t n) {
|
||||
u8 *src_bytes = (u8 *)src,
|
||||
*dest_bytes = (u8 *)dest,
|
||||
*endp = src_bytes + n;
|
||||
while (src_bytes < endp)
|
||||
*dest_bytes++ = *src_bytes++;
|
||||
return dest;
|
||||
}
|
||||
#undef memcpy
|
||||
#define memcpy my_memcpy
|
||||
|
||||
static inline void *my_memset(void *dest, int c, size_t n) {
|
||||
u8 *dest_bytes = (u8 *)dest, *endp = dest_bytes + n;
|
||||
while (dest_bytes < endp)
|
||||
*dest_bytes++ = (u8)c;
|
||||
return dest;
|
||||
}
|
||||
#undef memset
|
||||
#define memset my_memset
|
||||
|
||||
static inline void *my_memmove(void *dest, const void *src, size_t n) {
|
||||
u8 *src_bytes = (u8 *)src, *dest_bytes = (u8 *)dest;
|
||||
if (src_bytes < dest_bytes) {
|
||||
u8 *startp = src_bytes;
|
||||
src_bytes += n - 1;
|
||||
dest_bytes += n - 1;
|
||||
while (src_bytes >= startp)
|
||||
*dest_bytes-- = *src_bytes--;
|
||||
} else if (src_bytes > dest_bytes) {
|
||||
u8 *endp = src_bytes + n;
|
||||
while (src_bytes < endp)
|
||||
*dest_bytes++ = *src_bytes++;
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
#undef memmove
|
||||
#define memmove my_memmove
|
||||
|
||||
#endif /* CONFIG_FORTIFY_SOURCE */
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#ifdef __PIE__
|
||||
/* without this, mm.h brings in static, but not inline, pmd_to_page(),
|
||||
* with direct references to global vmem variables.
|
||||
@ -146,7 +225,7 @@
|
||||
#include <linux/net.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#ifdef LINUXKM_REGISTER_ALG
|
||||
#ifdef LINUXKM_LKCAPI_REGISTER
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <crypto/scatterwalk.h>
|
||||
@ -303,6 +382,11 @@
|
||||
#else
|
||||
typeof(printk) *printk;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FORTIFY_SOURCE
|
||||
typeof(__warn_printk) *__warn_printk;
|
||||
#endif
|
||||
|
||||
typeof(snprintf) *snprintf;
|
||||
|
||||
const unsigned char *_ctype;
|
||||
@ -446,6 +530,11 @@
|
||||
#else
|
||||
#define printk (wolfssl_linuxkm_get_pie_redirect_table()->printk)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FORTIFY_SOURCE
|
||||
#define __warn_printk (wolfssl_linuxkm_get_pie_redirect_table()->__warn_printk)
|
||||
#endif
|
||||
|
||||
#define snprintf (wolfssl_linuxkm_get_pie_redirect_table()->snprintf)
|
||||
|
||||
#define _ctype (wolfssl_linuxkm_get_pie_redirect_table()->_ctype)
|
||||
|
@ -46,10 +46,31 @@
|
||||
#define WOLFKM_AESCFB_NAME "cfb(aes)"
|
||||
#define WOLFKM_AESGCM_NAME "gcm(aes)"
|
||||
#define WOLFKM_AESXTS_NAME "xts(aes)"
|
||||
#define WOLFKM_AESCBC_DRIVER "cbc-aes-wolfcrypt"
|
||||
#define WOLFKM_AESCFB_DRIVER "cfb-aes-wolfcrypt"
|
||||
#define WOLFKM_AESGCM_DRIVER "gcm-aes-wolfcrypt"
|
||||
#define WOLFKM_AESXTS_DRIVER "xts-aes-wolfcrypt"
|
||||
|
||||
#ifdef WOLFSSL_AESNI
|
||||
#define WOLFKM_DRIVER_ISA_EXT "-aesni"
|
||||
#else
|
||||
#define WOLFKM_DRIVER_ISA_EXT ""
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FIPS_VERSION
|
||||
#if HAVE_FIPS_VERSION >= 5
|
||||
#define WOLFKM_DRIVER_FIPS "-fips-140-3"
|
||||
#elif HAVE_FIPS_VERSION == 2
|
||||
#define WOLFKM_DRIVER_FIPS "-fips-140-2"
|
||||
#else
|
||||
#define WOLFKM_DRIVER_FIPS "-fips-140"
|
||||
#endif
|
||||
#else
|
||||
#define WOLFKM_DRIVER_FIPS ""
|
||||
#endif
|
||||
|
||||
#define WOLFKM_DRIVER_SUFFIX WOLFKM_DRIVER_ISA_EXT WOLFKM_DRIVER_FIPS "-wolfcrypt"
|
||||
|
||||
#define WOLFKM_AESCBC_DRIVER ("cbc-aes" WOLFKM_DRIVER_SUFFIX)
|
||||
#define WOLFKM_AESCFB_DRIVER ("cfb-aes" WOLFKM_DRIVER_SUFFIX)
|
||||
#define WOLFKM_AESGCM_DRIVER ("gcm-aes" WOLFKM_DRIVER_SUFFIX)
|
||||
#define WOLFKM_AESXTS_DRIVER ("xts-aes" WOLFKM_DRIVER_SUFFIX)
|
||||
|
||||
#if defined(HAVE_AES_CBC) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESCBC))
|
||||
@ -1509,7 +1530,7 @@ static int aes_xts_128_test(void)
|
||||
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1520,7 +1541,7 @@ static int aes_xts_128_test(void)
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -1536,7 +1557,7 @@ static int aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1547,7 +1568,7 @@ static int aes_xts_128_test(void)
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -1560,7 +1581,7 @@ static int aes_xts_128_test(void)
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1572,7 +1593,7 @@ static int aes_xts_128_test(void)
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -1588,7 +1609,7 @@ static int aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1600,7 +1621,7 @@ static int aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -1613,7 +1634,7 @@ static int aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1625,7 +1646,7 @@ static int aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -1638,7 +1659,7 @@ static int aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c2, sizeof(c2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1652,7 +1673,7 @@ static int aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c2, sizeof(c2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1669,7 +1690,7 @@ static int aes_xts_128_test(void)
|
||||
|
||||
ret = wc_AesXtsEncrypt(aes, buf, buf, sizeof(p3), i3, sizeof(i3));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1681,7 +1702,7 @@ static int aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, buf, sizeof(c3), i3, sizeof(i3));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1717,7 +1738,7 @@ static int aes_xts_128_test(void)
|
||||
ret = wc_AesXtsEncrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -1728,7 +1749,7 @@ static int aes_xts_128_test(void)
|
||||
ret = wc_AesXtsDecrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2062,7 +2083,7 @@ static int aes_xts_256_test(void)
|
||||
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2075,7 +2096,7 @@ static int aes_xts_256_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2086,7 +2107,7 @@ static int aes_xts_256_test(void)
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2098,7 +2119,7 @@ static int aes_xts_256_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2109,7 +2130,7 @@ static int aes_xts_256_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2122,7 +2143,7 @@ static int aes_xts_256_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c2, sizeof(c2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -2362,14 +2383,17 @@ static int linuxkm_lkcapi_register(void)
|
||||
|
||||
#define REGISTER_ALG(alg, installer, tester) do { \
|
||||
if (alg ## _loaded) { \
|
||||
pr_err("ERROR: %s is already registered.\n", (alg).base.cra_driver_name); \
|
||||
pr_err("ERROR: %s is already registered.\n", \
|
||||
(alg).base.cra_driver_name); \
|
||||
return -EEXIST; \
|
||||
} \
|
||||
\
|
||||
ret = (installer)(&(alg)); \
|
||||
\
|
||||
if (ret) { \
|
||||
pr_err("ERROR: " #installer " for %s failed with return code %d.\n", (alg).base.cra_driver_name, ret); \
|
||||
pr_err("ERROR: " #installer " for %s failed " \
|
||||
"with return code %d.\n", \
|
||||
(alg).base.cra_driver_name, ret); \
|
||||
return ret; \
|
||||
} \
|
||||
\
|
||||
@ -2378,33 +2402,43 @@ static int linuxkm_lkcapi_register(void)
|
||||
ret = (tester()); \
|
||||
\
|
||||
if (ret) { \
|
||||
pr_err("ERROR: self-test for %s failed with return code %d.\n", (alg).base.cra_driver_name, ret); \
|
||||
pr_err("ERROR: self-test for %s failed " \
|
||||
"with return code %d.\n", \
|
||||
(alg).base.cra_driver_name, ret); \
|
||||
return ret; \
|
||||
} \
|
||||
pr_info("%s self-test OK -- registered for %s with priority %d.\n", (alg).base.cra_driver_name, (alg).base.cra_name, (alg).base.cra_priority); \
|
||||
pr_info("%s self-test OK -- " \
|
||||
"registered for %s with priority %d.\n", \
|
||||
(alg).base.cra_driver_name, \
|
||||
(alg).base.cra_name, \
|
||||
(alg).base.cra_priority); \
|
||||
} while (0)
|
||||
|
||||
#if defined(HAVE_AES_CBC) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESCBC))
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESCBC))
|
||||
|
||||
REGISTER_ALG(cbcAesAlg, crypto_register_skcipher, linuxkm_test_aescbc);
|
||||
#endif
|
||||
|
||||
#if defined(WOLFSSL_AES_CFB) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESCFB))
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESCFB))
|
||||
|
||||
REGISTER_ALG(cfbAesAlg, crypto_register_skcipher, linuxkm_test_aescfb);
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_AESGCM) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESGCM)) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESGCM)) && \
|
||||
(! (defined(WOLFSSL_AESNI) && defined(WC_AES_C_DYNAMIC_FALLBACK)))
|
||||
|
||||
REGISTER_ALG(gcmAesAead, crypto_register_aead, linuxkm_test_aesgcm);
|
||||
#endif
|
||||
|
||||
#if defined(WOLFSSL_AES_XTS) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESXTS))
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESXTS))
|
||||
|
||||
REGISTER_ALG(xtsAesAlg, crypto_register_skcipher, linuxkm_test_aesxts);
|
||||
#endif
|
||||
@ -2416,33 +2450,38 @@ static int linuxkm_lkcapi_register(void)
|
||||
|
||||
static void linuxkm_lkcapi_unregister(void)
|
||||
{
|
||||
#define UNREGISTER_ALG(alg, uninstaller) do { \
|
||||
if (alg ## _loaded) { \
|
||||
(uninstaller)(&(alg)); \
|
||||
alg ## _loaded = 0; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#if defined(HAVE_AES_CBC) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESCBC))
|
||||
if (cbcAesAlg_loaded) {
|
||||
crypto_unregister_skcipher(&cbcAesAlg);
|
||||
cbcAesAlg_loaded = 0;
|
||||
}
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESCBC))
|
||||
|
||||
UNREGISTER_ALG(cbcAesAlg, crypto_unregister_skcipher);
|
||||
#endif
|
||||
#if defined(WOLFSSL_AES_CFB) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESCFB))
|
||||
if (cfbAesAlg_loaded) {
|
||||
crypto_unregister_skcipher(&cfbAesAlg);
|
||||
cfbAesAlg_loaded = 0;
|
||||
}
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESCFB))
|
||||
|
||||
UNREGISTER_ALG(cfbAesAlg, crypto_unregister_skcipher);
|
||||
#endif
|
||||
#if defined(HAVE_AESGCM) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESGCM)) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESGCM)) && \
|
||||
(! (defined(WOLFSSL_AESNI) && defined(WC_AES_C_DYNAMIC_FALLBACK)))
|
||||
if (gcmAesAead_loaded) {
|
||||
crypto_unregister_aead(&gcmAesAead);
|
||||
gcmAesAead_loaded = 0;
|
||||
}
|
||||
|
||||
UNREGISTER_ALG(gcmAesAead, crypto_unregister_aead);
|
||||
#endif
|
||||
#if defined(WOLFSSL_AES_XTS) && \
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || defined(LINUXKM_LKCAPI_REGISTER_AESXTS))
|
||||
if (xtsAesAlg_loaded) {
|
||||
crypto_unregister_skcipher(&xtsAesAlg);
|
||||
xtsAesAlg_loaded = 0;
|
||||
}
|
||||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESXTS))
|
||||
|
||||
UNREGISTER_ALG(xtsAesAlg, crypto_unregister_skcipher);
|
||||
#endif
|
||||
|
||||
#undef UNREGISTER_ALG
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -12252,6 +12252,14 @@ int wc_AesKeyUnWrap(const byte* key, word32 keySz, const byte* in, word32 inSz,
|
||||
/* Galois Field to use */
|
||||
#define GF_XTS 0x87
|
||||
|
||||
/* Set up keys for encryption and/or decryption.
|
||||
*
|
||||
* aes buffer holding aes subkeys
|
||||
* heap heap hint to use for memory. Can be NULL
|
||||
* devId id to use with async crypto. Can be 0
|
||||
*
|
||||
* return 0 on success
|
||||
*/
|
||||
int wc_AesXtsInit(XtsAes* aes, void* heap, int devId)
|
||||
{
|
||||
int ret = 0;
|
||||
@ -12278,15 +12286,12 @@ int wc_AesXtsInit(XtsAes* aes, void* heap, int devId)
|
||||
|
||||
/* Set up keys for encryption and/or decryption.
|
||||
*
|
||||
* tweak AES key for tweak in XTS
|
||||
* aes AES key for encrypt/decrypt process
|
||||
* key buffer holding aes key | tweak key
|
||||
* aes buffer holding aes subkeys
|
||||
* key AES key for encrypt/decrypt and tweak process (concatenated)
|
||||
* len length of key buffer in bytes. Should be twice that of key size. i.e.
|
||||
* 32 for a 16 byte key.
|
||||
* dir direction: AES_ENCRYPTION, AES_DECRYPTION, or
|
||||
* AES_ENCRYPTION_AND_DECRYPTION
|
||||
* heap heap hint to use for memory. Can be NULL
|
||||
* devId id to use with async crypto. Can be 0
|
||||
*
|
||||
* return 0 on success
|
||||
*/
|
||||
@ -12680,15 +12685,19 @@ int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||
if (xaes->aes_encrypt.use_aesni) {
|
||||
#if defined(HAVE_INTEL_AVX1)
|
||||
if (IS_INTEL_AVX1(intel_flags)) {
|
||||
AES_XTS_encrypt_avx1(in, out, sz, i, (const byte*)xaes->aes_encrypt.key,
|
||||
(const byte*)xaes->tweak.key, (int)xaes->aes_encrypt.rounds);
|
||||
AES_XTS_encrypt_avx1(in, out, sz, i,
|
||||
(const byte*)xaes->aes_encrypt.key,
|
||||
(const byte*)xaes->tweak.key,
|
||||
(int)xaes->aes_encrypt.rounds);
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
AES_XTS_encrypt_aesni(in, out, sz, i, (const byte*)xaes->aes_encrypt.key,
|
||||
(const byte*)xaes->tweak.key, (int)xaes->aes_encrypt.rounds);
|
||||
AES_XTS_encrypt_aesni(in, out, sz, i,
|
||||
(const byte*)xaes->aes_encrypt.key,
|
||||
(const byte*)xaes->tweak.key,
|
||||
(int)xaes->aes_encrypt.rounds);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
@ -12893,15 +12902,19 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||
if (xaes->aes_decrypt.use_aesni) {
|
||||
#if defined(HAVE_INTEL_AVX1)
|
||||
if (IS_INTEL_AVX1(intel_flags)) {
|
||||
AES_XTS_decrypt_avx1(in, out, sz, i, (const byte*)xaes->aes_decrypt.key,
|
||||
(const byte*)xaes->tweak.key, (int)xaes->aes_decrypt.rounds);
|
||||
AES_XTS_decrypt_avx1(in, out, sz, i,
|
||||
(const byte*)xaes->aes_decrypt.key,
|
||||
(const byte*)xaes->tweak.key,
|
||||
(int)xaes->aes_decrypt.rounds);
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
AES_XTS_decrypt_aesni(in, out, sz, i, (const byte*)xaes->aes_decrypt.key,
|
||||
(const byte*)xaes->tweak.key, (int)xaes->aes_decrypt.rounds);
|
||||
AES_XTS_decrypt_aesni(in, out, sz, i,
|
||||
(const byte*)xaes->aes_decrypt.key,
|
||||
(const byte*)xaes->tweak.key,
|
||||
(int)xaes->aes_decrypt.rounds);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
|
@ -1542,27 +1542,40 @@ WOLFSSL_LOCAL int SAVE_VECTOR_REGISTERS2_fuzzer(void) {
|
||||
* fuzz vector register access without the detailed debugging.
|
||||
* this is useful for testing in the kernel module build, where glibc and
|
||||
* thread-local storage are unavailable.
|
||||
*
|
||||
* note this is not a well-behaved PRNG, but is adequate for fuzzing purposes.
|
||||
* the prn sequence is incompressible according to ent and xz, and does not
|
||||
* cycle within 10M iterations with various seeds including zero, but the Chi
|
||||
* square distribution is poor, and the unconditioned lsb bit balance is ~54%
|
||||
* regardless of seed.
|
||||
*/
|
||||
|
||||
WOLFSSL_LOCAL int SAVE_VECTOR_REGISTERS2_fuzzer(void) {
|
||||
static unsigned long prn = WC_DEBUG_VECTOR_REGISTERS_FUZZING_SEED;
|
||||
unsigned long popcount;
|
||||
static int balance_bit = 0;
|
||||
/* access to prn is racey, but it doesn't matter. */
|
||||
unsigned long new_prn = prn ^ 0xba86943da66ee701ul;
|
||||
unsigned long new_prn = prn ^ 0xba86943da66ee701ul; /* note this magic
|
||||
* random number is
|
||||
* bit-balanced.
|
||||
*/
|
||||
/* barrel-roll using the bottom 6 bits. */
|
||||
if (new_prn & 0x3f)
|
||||
new_prn = (new_prn << (new_prn & 0x3f)) | (new_prn >> (0x40 - (new_prn & 0x3f)));
|
||||
__asm__ volatile ("popcnt %1, %0;"
|
||||
:"=r"(popcount)
|
||||
:"r"(new_prn)
|
||||
:
|
||||
);
|
||||
new_prn ^= popcount;
|
||||
prn = new_prn;
|
||||
|
||||
balance_bit = !balance_bit;
|
||||
|
||||
if (balance_bit) {
|
||||
if (prn & 1)
|
||||
return IO_FAILED_E;
|
||||
else
|
||||
return 0;
|
||||
} else {
|
||||
if (prn & 1)
|
||||
return 0;
|
||||
else
|
||||
return IO_FAILED_E;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* DEBUG_VECTOR_REGISTER_ACCESS || DEBUG_VECTOR_REGISTER_ACCESS_FUZZING */
|
||||
|
@ -9438,6 +9438,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
0x77, 0x8a, 0xe8, 0xb4, 0x3c, 0xb9, 0x8d, 0x5a
|
||||
};
|
||||
|
||||
#ifndef HAVE_FIPS_VERSION /* FIPS requires different keys for main and tweak. */
|
||||
WOLFSSL_SMALL_STACK_STATIC unsigned char k3[] = {
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
@ -9462,6 +9463,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
0xA0, 0x85, 0xD2, 0x69, 0x6E, 0x87, 0x0A, 0xBF,
|
||||
0xB5, 0x5A, 0xDD, 0xCB, 0x80, 0xE0, 0xFC, 0xCD
|
||||
};
|
||||
#endif /* HAVE_FIPS_VERSION */
|
||||
|
||||
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||
if ((aes = (XtsAes *)XMALLOC(sizeof *aes, HEAP_HINT, DYNAMIC_TYPE_AES)) == NULL)
|
||||
@ -9490,7 +9492,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9501,7 +9503,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -9517,7 +9519,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9528,7 +9530,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -9541,7 +9543,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9553,7 +9555,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -9569,7 +9571,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9581,7 +9583,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -9594,7 +9596,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9606,7 +9608,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0);
|
||||
if (ret != 0)
|
||||
@ -9619,7 +9621,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c2, sizeof(c2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9633,13 +9635,15 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c2, sizeof(c2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
if (XMEMCMP(p2, buf, sizeof(p2)))
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
|
||||
#ifndef HAVE_FIPS_VERSION
|
||||
|
||||
/* Test ciphertext stealing in-place. */
|
||||
XMEMCPY(buf, p3, sizeof(p3));
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k3, sizeof(k3), AES_ENCRYPTION);
|
||||
@ -9648,7 +9652,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
|
||||
ret = wc_AesXtsEncrypt(aes, buf, buf, sizeof(p3), i3, sizeof(i3));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9660,13 +9664,15 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, buf, sizeof(c3), i3, sizeof(i3));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
if (XMEMCMP(p3, buf, sizeof(p3)))
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
|
||||
#endif /* !HAVE_FIPS_VERSION */
|
||||
|
||||
#if !defined(BENCH_EMBEDDED) && !defined(HAVE_CAVIUM) && \
|
||||
!defined(WOLFSSL_AFALG)
|
||||
{
|
||||
@ -9694,7 +9700,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
ret = wc_AesXtsEncrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9705,7 +9711,7 @@ static wc_test_ret_t aes_xts_128_test(void)
|
||||
ret = wc_AesXtsDecrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9850,7 +9856,7 @@ static wc_test_ret_t aes_xts_256_test(void)
|
||||
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9863,7 +9869,7 @@ static wc_test_ret_t aes_xts_256_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9874,7 +9880,7 @@ static wc_test_ret_t aes_xts_256_test(void)
|
||||
XMEMSET(cipher, 0, sizeof(cipher));
|
||||
ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9886,7 +9892,7 @@ static wc_test_ret_t aes_xts_256_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9897,7 +9903,7 @@ static wc_test_ret_t aes_xts_256_test(void)
|
||||
XMEMSET(buf, 0, sizeof(buf));
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -9910,7 +9916,7 @@ static wc_test_ret_t aes_xts_256_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecrypt(aes, buf, c2, sizeof(c2), i2, sizeof(i2));
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10127,7 +10133,7 @@ static wc_test_ret_t aes_xts_sector_test(void)
|
||||
|
||||
ret = wc_AesXtsEncryptSector(aes, buf, p1, sizeof(p1), s1);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10141,7 +10147,7 @@ static wc_test_ret_t aes_xts_sector_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecryptSector(aes, buf, c1, sizeof(c1), s1);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10155,7 +10161,7 @@ static wc_test_ret_t aes_xts_sector_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsEncryptSector(aes, buf, p2, sizeof(p2), s2);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10169,7 +10175,7 @@ static wc_test_ret_t aes_xts_sector_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecryptSector(aes, buf, c2, sizeof(c2), s2);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10186,7 +10192,7 @@ static wc_test_ret_t aes_xts_sector_test(void)
|
||||
ret = wc_AesXtsEncryptConsecutiveSectors(aes, data, p3,
|
||||
sizeof(p3), s3, sectorSz);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10201,7 +10207,7 @@ static wc_test_ret_t aes_xts_sector_test(void)
|
||||
ret = wc_AesXtsDecryptConsecutiveSectors(aes, data, c3,
|
||||
sizeof(c3), s3, sectorSz);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
@ -10280,14 +10286,14 @@ static wc_test_ret_t aes_xts_args_test(void)
|
||||
|
||||
ret = wc_AesXtsEncryptSector(NULL, buf, p1, sizeof(p1), s1);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret == 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
|
||||
ret = wc_AesXtsEncryptSector(aes, NULL, p1, sizeof(p1), s1);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_encrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret == 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
@ -10298,14 +10304,14 @@ static wc_test_ret_t aes_xts_args_test(void)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_AesXtsDecryptSector(NULL, buf, c1, sizeof(c1), s1);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret == 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
|
||||
ret = wc_AesXtsDecryptSector(aes, NULL, c1, sizeof(c1), s1);
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT)
|
||||
ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
ret = wc_AsyncWait(ret, &aes->aes_decrypt.asyncDev, WC_ASYNC_FLAG_NONE);
|
||||
#endif
|
||||
if (ret == 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
@ -30070,8 +30076,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
|
||||
#endif /* HAVE_ECC160 */
|
||||
#if (defined(HAVE_ECC192) || defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 192
|
||||
ret = ecc_test_curve(&rng, 24, ECC_CURVE_DEF);
|
||||
printf("keySize=24, Default\n");
|
||||
if (ret < 0) {
|
||||
printf("keySize=24, Default\n");
|
||||
goto done;
|
||||
}
|
||||
#endif /* HAVE_ECC192 */
|
||||
|
Reference in New Issue
Block a user