Skip to content

Commit a4fa058

Browse files
authored
Merge pull request #147 from SparkiDev/we_ccm_taglen
2 parents ee431d1 + c09d228 commit a4fa058

File tree

4 files changed

+215
-30
lines changed

4 files changed

+215
-30
lines changed

configure.ac

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ AC_CONFIG_HEADERS([include/config.h])
1212
AC_CONFIG_MACRO_DIR([m4])
1313

1414
dnl m4_include([m4/ax_check_openssl.m4])
15+
dnl m4_include([m4/ax_check_wolfssl.m4])
1516

1617
AM_INIT_AUTOMAKE([1.11 -Wall -Werror -Wno-portability foreign tar-ustar subdir-objects no-define color-tests])
1718
LT_INIT([disable-static pic-only])
@@ -41,6 +42,7 @@ AC_SUBST([WOLFENGINE_LIBRARY_VERSION])
4142

4243
LIBS="$LIBS -ldl"
4344

45+
# OpenSSL
4446
AC_CHECK_HEADERS([openssl/engine.h])
4547

4648
AX_CHECK_OPENSSL(
@@ -54,6 +56,18 @@ if test "x$have_openssl" = "xyes"; then
5456
LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS"
5557
fi
5658

59+
# wolfSSL
60+
AX_CHECK_WOLFSSL(
61+
[have_wolfssl=yes],
62+
AC_MSG_FAILURE([could not locate wolfSSL])
63+
)
64+
65+
if test "x$have_wolfssl" = "xyes"; then
66+
LIBS="$LIBS $WOLFSSL_LIBS"
67+
CFLAGS="$CFLAGS $WOLFSSL_INCLUDES"
68+
LDFLAGS="$LDFLAGS $WOLFSSL_LDFLAGS"
69+
fi
70+
5771
# DEBUG
5872
DEBUG_CFLAGS="-g -O0 -DWOLFENGINE_DEBUG"
5973
AX_DEBUG
@@ -653,7 +667,7 @@ AX_HARDEN_CC_COMPILER_FLAGS
653667

654668
OPTION_FLAGS="$CFLAGS $CPPFLAGS $AM_CFLAGS"
655669

656-
LIBS="$LIBS -lwolfssl -ldl -lm"
670+
LIBS="$LIBS -ldl -lm"
657671

658672
if test "$GCC" = "yes"
659673
then

m4/m4_ax_check_wolfssl.m4

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# SYNOPSIS
2+
#
3+
# AX_CHECK_WOLFSSL([action-if-found[, action-if-not-found]])
4+
#
5+
# DESCRIPTION
6+
#
7+
# Look for wolfSSL in a number of default spots, or in a user-selected
8+
# spot (via --with-wolfssl). Sets
9+
#
10+
# WOLFSSL_INCLUDES to the include directives required
11+
# WOLFSSL_LIBS to the -l directives required
12+
# WOLFSSL_LDFLAGS to the -L or -R flags required
13+
#
14+
# and calls ACTION-IF-FOUND or ACTION-IF-NOT-FOUND appropriately
15+
#
16+
# This macro sets WOLFSSL_INCLUDES such that source files should use the
17+
# wolfssl/ directory in include directives:
18+
#
19+
# #include <wolfssl/wolfcrypt/hmac.h>
20+
#
21+
# LICENSE
22+
#
23+
# Copyright (c) 2021 wolfSSL <http://www.wolfssl.com/>
24+
#
25+
# Copying and distribution of this file, with or without modification, are
26+
# permitted in any medium without royalty provided the copyright notice
27+
# and this notice are preserved. This file is offered as-is, without any
28+
# warranty.
29+
30+
#serial 1
31+
32+
AU_ALIAS([CHECK_SSL], [AX_CHECK_WOLFSSL])
33+
AC_DEFUN([AX_CHECK_WOLFSSL], [
34+
found=false
35+
AC_ARG_WITH([wolfssl],
36+
[AS_HELP_STRING([--with-wolfssl=DIR],
37+
[root of the wolfSSL directory])],
38+
[
39+
case "$withval" in
40+
"" | y | ye | yes | n | no)
41+
AC_MSG_ERROR([Invalid --with-wolfssl value])
42+
;;
43+
*) wolfssldirs="$withval"
44+
;;
45+
esac
46+
], [
47+
# if pkg-config is installed and wolfssl has installed a .pc file,
48+
# then use that information and don't search wolfssldirs
49+
AC_CHECK_TOOL([PKG_CONFIG], [pkg-config])
50+
if test x"$PKG_CONFIG" != x""; then
51+
WOLFSSL_LDFLAGS=`$PKG_CONFIG wolfssl --libs-only-L 2>/dev/null`
52+
if test $? = 0; then
53+
WOLFSSL_LIBS=`$PKG_CONFIG wolfssl --libs-only-l 2>/dev/null`
54+
WOLFSSL_INCLUDES=`$PKG_CONFIG wolfssl --cflags-only-I 2>/dev/null`
55+
found=true
56+
fi
57+
fi
58+
59+
# no such luck; use some default wolfssldirs
60+
if ! $found; then
61+
wolfssldirs="/usr/local /usr/lib /usr"
62+
fi
63+
]
64+
)
65+
66+
67+
# note that we #include <wolfssl/foo.h>, so the wolfSSL headers have to be
68+
# in an 'wolfssl' subdirectory
69+
70+
if ! $found; then
71+
WOLFSSL_INCLUDES=
72+
for wolfssldir in $wolfssldirs; do
73+
AC_MSG_CHECKING([for include/wolfssl/ssl.h in $wolfssldir])
74+
if test -f "$wolfssldir/include/wolfssl/ssl.h"; then
75+
WOLFSSL_INCLUDES="-I$wolfssldir/include"
76+
WOLFSSL_LDFLAGS="-L$wolfssldir/lib"
77+
WOLFSSL_LIBS="-lwolfssl"
78+
79+
WOLFSSL_VERSION=$(grep -oP "(?<=define LIBWOLFSSL_VERSION_HEX)\s+0x[[0-9a-fA-F]]+" $wolfssldir/include/wolfssl/version.h)
80+
WOLFSSL_VERSION_DEC=$(printf "%d" $WOLFSSL_VERSION)
81+
82+
found=true
83+
AC_MSG_RESULT([yes])
84+
break
85+
else
86+
AC_MSG_RESULT([no])
87+
fi
88+
done
89+
90+
# if the file wasn't found, well, go ahead and try the link anyway --
91+
# maybe it will just work!
92+
fi
93+
94+
# try the preprocessor and linker with our new flags,
95+
# being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS
96+
97+
AC_MSG_CHECKING([whether compiling and linking against wolfSSL works])
98+
echo "Trying link with WOLFSSL_LDFLAGS=$WOLFSSL_LDFLAGS;" \
99+
"WOLFSSL_LIBS=$WOLFSSL_LIBS; WOLFSSL_INCLUDES=$WOLFSSL_INCLUDES" >&AS_MESSAGE_LOG_FD
100+
101+
save_LIBS="$LIBS"
102+
save_LDFLAGS="$LDFLAGS"
103+
save_CPPFLAGS="$CPPFLAGS"
104+
LDFLAGS="$LDFLAGS $WOLFSSL_LDFLAGS"
105+
LIBS="$WOLFSSL_LIBS $LIBS"
106+
CPPFLAGS="$WOLFSSL_INCLUDES $CPPFLAGS"
107+
AC_LINK_IFELSE(
108+
[AC_LANG_PROGRAM([
109+
#include <wolfssl/options.h>
110+
#include <wolfssl/ssl.h>], [wolfSSL_new(NULL)])],
111+
[
112+
AC_MSG_RESULT([yes])
113+
$1
114+
], [
115+
AC_MSG_RESULT([no])
116+
$2
117+
])
118+
CPPFLAGS="$save_CPPFLAGS"
119+
LDFLAGS="$save_LDFLAGS"
120+
LIBS="$save_LIBS"
121+
122+
AC_SUBST([WOLFSSL_INCLUDES])
123+
AC_SUBST([WOLFSSL_LIBS])
124+
AC_SUBST([WOLFSSL_LDFLAGS])
125+
])

scripts/we-cs-test.sh

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,13 @@ do_trap() {
4242

4343
trap do_trap INT TERM
4444

45+
TLS13_ALL_CIPHERS="TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256"
46+
4547
TLS13_CIPHERS=(
4648
TLS_AES_256_GCM_SHA384
4749
TLS_AES_128_GCM_SHA256
50+
TLS_AES_128_CCM_SHA256
51+
TLS_AES_128_CCM_8_SHA256
4852
)
4953
TLS12_CIPHERS=(
5054
ECDHE-ECDSA-AES256-GCM-SHA384
@@ -53,6 +57,14 @@ TLS12_CIPHERS=(
5357
ECDHE-ECDSA-AES128-GCM-SHA256
5458
ECDHE-RSA-AES128-GCM-SHA256
5559
DHE-RSA-AES128-GCM-SHA256
60+
ECDHE-ECDSA-AES256-CCM8
61+
ECDHE-ECDSA-AES256-CCM
62+
DHE-RSA-AES256-CCM8
63+
DHE-RSA-AES256-CCM
64+
ECDHE-ECDSA-AES128-CCM8
65+
ECDHE-ECDSA-AES128-CCM
66+
DHE-RSA-AES128-CCM8
67+
DHE-RSA-AES128-CCM
5668
ECDHE-ECDSA-AES256-SHA384
5769
ECDHE-RSA-AES256-SHA384
5870
DHE-RSA-AES256-SHA256
@@ -67,6 +79,10 @@ TLS12_CIPHERS=(
6779
DHE-RSA-AES128-SHA
6880
AES256-GCM-SHA384
6981
AES128-GCM-SHA256
82+
AES256-CCM8
83+
AES256-CCM
84+
AES128-CCM8
85+
AES128-CCM
7086
AES256-SHA256
7187
AES128-SHA256
7288
AES256-SHA
@@ -269,22 +285,32 @@ check_log() {
269285
# Check wolfEngine's cipher code was used.
270286
grep we_aes_gcm_cipher $TMP_LOG >/dev/null 2>&1
271287
GCM_GREP=$?
288+
grep we_aes_ccm_cipher $TMP_LOG >/dev/null 2>&1
289+
CCM_GREP=$?
272290
grep we_aes_cbc_cipher $TMP_LOG >/dev/null 2>&1
273291
CBC_GREP=$?
274292
grep we_des3_cbc_cipher $TMP_LOG >/dev/null 2>&1
275293
DES3CBC_GREP=$?
276-
if [ $GCM_GREP != 0 -a $CBC_GREP != 0 -a $DES3CBC_GREP != 0 ]; then
277-
printf "\t\tCipher not wolfEngine...failed\n"
278-
FAIL=$((FAIL+1))
279-
fi
294+
CIPHER_WOLFENGINE=0
280295
if [ $GCM_GREP = 0 ]; then
281296
WE_ALGS="$WE_ALGS AES-GCM"
297+
CIPHER_WOLFENGINE=1
298+
fi
299+
if [ $CCM_GREP = 0 ]; then
300+
WE_ALGS="$WE_ALGS AES-CCM"
301+
CIPHER_WOLFENGINE=1
282302
fi
283303
if [ $CBC_GREP = 0 ]; then
284304
WE_ALGS="$WE_ALGS AES-CBC"
305+
CIPHER_WOLFENGINE=1
285306
fi
286307
if [ $DES3CBC_GREP = 0 ]; then
287308
WE_ALGS="$WE_ALGS DES3-CBC"
309+
CIPHER_WOLFENGINE=1
310+
fi
311+
if [ "$CIPHER_WOLFENGINE" = "0" ]; then
312+
printf "\t\tCipher not wolfEngine...failed\n"
313+
FAIL=$((FAIL+1))
288314
fi
289315

290316
printf "$WE_ALGS\n"
@@ -297,7 +323,7 @@ start_openssl_server() {
297323
($OPENSSL_DIR/apps/openssl s_server -www \
298324
-cert $CERT_DIR/server-cert.pem -key $CERT_DIR/server-key.pem \
299325
-dcert $CERT_DIR/server-ecc.pem -dkey $CERT_DIR/ecc-key.pem \
300-
-accept $OPENSSL_PORT \
326+
-accept $OPENSSL_PORT $OPENSSL_ALL_CIPHERS \
301327
>$LOG_SERVER 2>&1
302328
) &
303329
OPENSSL_SERVER_PID=$!
@@ -318,10 +344,10 @@ start_we_openssl_server() {
318344

319345
(OPENSSL_CONF=engine.conf \
320346
$OPENSSL_DIR/apps/openssl s_server -www \
321-
-engine wolfSSL \
347+
-engine $WOLFENGINE_NAME \
322348
-cert $CERT_DIR/server-cert.pem -key $CERT_DIR/server-key.pem \
323349
-dcert $CERT_DIR/server-ecc.pem -dkey $CERT_DIR/ecc-key.pem \
324-
-accept $WE_OPENSSL_PORT \
350+
-accept $WE_OPENSSL_PORT $OPENSSL_ALL_CIPHERS \
325351
>$LOG_WE_SERVER 2>&1
326352
) &
327353
WE_OPENSSL_SERVER_PID=$!
@@ -344,7 +370,7 @@ do_we_client() {
344370
OPENSSL_CONF=engine.conf \
345371
LD_LIBRARY_PATH="./.libs:$LD_LIBRARY_PATH" \
346372
$OPENSSL_DIR/apps/openssl s_client \
347-
-engine wolfSSL \
373+
-engine $WOLFENGINE_NAME \
348374
-cipher $CIPHER $TLS_VERSION \
349375
-curves $CURVES \
350376
-connect localhost:$OPENSSL_PORT \
@@ -355,7 +381,7 @@ do_we_client() {
355381
OPENSSL_CONF=engine.conf \
356382
LD_LIBRARY_PATH="./.libs:$LD_LIBRARY_PATH" \
357383
$OPENSSL_DIR/apps/openssl s_client \
358-
-engine wolfSSL \
384+
-engine $WOLFENGINE_NAME \
359385
-ciphersuites $CIPHER $TLS_VERSION \
360386
-curves $CURVES \
361387
-connect localhost:$OPENSSL_PORT \
@@ -504,7 +530,7 @@ do_configure() {
504530
printf "Setting up wolfEngine\n"
505531
printf "\tConfigure ... "
506532
./configure LDFLAGS="-L$OPENSSL_DIR" --with-openssl=$OPENSSL_DIR \
507-
--enable-debug &>$LOG_FILE
533+
$WITH_WOLFSSL --enable-debug &>$LOG_FILE
508534
if [ "$?" = "0" ]; then
509535
printf "done\n"
510536
else
@@ -668,6 +694,16 @@ else
668694
VERSIONS="1.0.2 1.1.1"
669695
fi
670696

697+
if [ "$WOLFSSL_DIR" != "" ]; then
698+
WITH_WOLFSSL="--with-wolfssl=$WOLFSSL_DIR"
699+
if [ -d "$WOLFSSL_DIR/lib" ]; then
700+
WOLFSSL_LIBDIR=":$WOLFSSL_DIR/lib"
701+
else
702+
WOLFSSL_LIBDIR=":$WOLFSSL_DIR"
703+
fi
704+
fi
705+
export OPENSSL_ENGINES="$PWD/.libs"
706+
671707
CURVES=prime256v1
672708
for VERSION in $VERSIONS
673709
do
@@ -679,17 +715,23 @@ do
679715
if [ "$VERSION" = "1.0.2" ]; then
680716
setup_openssl_102h
681717
OPENSSL_DIR="${OPENSSL_1_0_2_SOURCE}"
718+
OPENSSL_ALL_CIPHERS="-cipher ALL"
719+
WOLFENGINE_NAME=wolfengine
682720
fi
683721
if [ "$VERSION" = "1.1.0" ]; then
684722
setup_openssl_110j
685723
OPENSSL_DIR="${OPENSSL_1_1_0_SOURCE}"
724+
OPENSSL_ALL_CIPHERS="-cipher ALL"
725+
WOLFENGINE_NAME=libwolfengine
686726
fi
687727
if [ "$VERSION" = "1.1.1" ]; then
688728
setup_openssl_111b
689729
OPENSSL_DIR="${OPENSSL_1_1_1_SOURCE}"
730+
OPENSSL_ALL_CIPHERS="-cipher ALL -ciphersuites $TLS13_ALL_CIPHERS"
731+
WOLFENGINE_NAME=libwolfengine
690732
fi
691733

692-
export LD_LIBRARY_PATH=$OPENSSL_DIR
734+
export LD_LIBRARY_PATH=$OPENSSL_DIR$WOLFSSL_LIBDIR
693735

694736
do_configure
695737
if [ "$NO_TEST_CLIENT" = "" ]; then

0 commit comments

Comments
 (0)