Skip to content

Commit d7ec4bb

Browse files
committed
Soft Disable AES-CBC
1. By default, soft disable AES-CBC. It isn't offered as a default encrypt algorithm, but may be set at runtime. 2. Add guard where AES-CBC can be added back as a default. 3. Add option to example client to run it with a custom encrypt algorithm list. 4. In the client, add macro to add items to the arg lists while checking the number of items in the list.
1 parent ee9bc3b commit d7ec4bb

File tree

3 files changed

+54
-23
lines changed

3 files changed

+54
-23
lines changed

examples/client/client.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ static void ShowUsage(void)
126126
printf(" -X Ignore IP checks on peer vs peer certificate\n");
127127
#endif
128128
printf(" -E List all possible algos\n");
129-
printf(" -k set the list of key algos to use\n");
129+
printf(" -k set the list of key algos\n");
130+
printf(" -C set the list of encrypt algos");
130131
printf(" -q turn off debugging output\n");
131132
}
132133

@@ -651,6 +652,7 @@ THREAD_RETURN WOLFSSH_THREAD client_test(void* args)
651652
const char* cmd = NULL;
652653
const char* privKeyName = NULL;
653654
const char* keyList = NULL;
655+
const char* cipherList = NULL;
654656
byte imExit = 0;
655657
byte listAlgos = 0;
656658
byte nonBlock = 0;
@@ -669,7 +671,7 @@ THREAD_RETURN WOLFSSH_THREAD client_test(void* args)
669671

670672
(void)keepOpen;
671673

672-
while ((ch = mygetopt(argc, argv, "?ac:h:i:j:p:tu:xzNP:RJ:A:XeEk:qK:")) != -1) {
674+
while ((ch = mygetopt(argc, argv, "?ac:C:h:i:j:p:tu:xzNP:RJ:A:XeEk:qK:")) != -1) {
673675
switch (ch) {
674676
case 'h':
675677
host = myoptarg;
@@ -750,6 +752,10 @@ THREAD_RETURN WOLFSSH_THREAD client_test(void* args)
750752
keyList = myoptarg;
751753
break;
752754

755+
case 'C':
756+
cipherList = myoptarg;
757+
break;
758+
753759
#if !defined(SINGLE_THREADED) && !defined(WOLFSSL_NUCLEUS)
754760
case 'c':
755761
cmd = myoptarg;
@@ -841,6 +847,11 @@ THREAD_RETURN WOLFSSH_THREAD client_test(void* args)
841847
err_sys("Error setting key list.\n");
842848
}
843849
}
850+
if (cipherList) {
851+
if (wolfSSH_CTX_SetAlgoListCipher(ctx, cipherList) != WS_SUCCESS) {
852+
err_sys("Error setting cipher list.\n");
853+
}
854+
}
844855

845856
if (((func_args*)args)->user_auth == NULL)
846857
wolfSSH_SetUserAuth(ctx, ClientUserAuth);

src/internal.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@
147147
WOLFSSH_NO_NISTP256_MLKEM768_SHA256
148148
Set when ML-KEM is disabled in wolfssl. Set to disable use of ECDHE with
149149
prime NISTP256 hybridized with post-quantum ML-KEM 768.
150+
WOLFSSH_NO_AES_CBC_SOFT_DISABLE
151+
AES-CBC is normally soft-disabled. The default configuration will not
152+
advertise the availability of AES-CBC algorithms during KEX. AES-CBC
153+
algorithms still work. Setting this flag will advertise AES-CBC
154+
algorithms during KEX by default.
150155
WOLFSSH_NO_AES_CBC
151156
Set when AES or AES-CBC are disabled. Set to disable use of AES-CBC
152157
encryption.
@@ -804,10 +809,12 @@ static const char cannedEncAlgoNames[] =
804809
"aes128-ctr,"
805810
#endif
806811
#if !defined(WOLFSSH_NO_AES_CBC)
807-
"aes256-cbc,"
808-
"aes192-cbc,"
809-
"aes128-cbc,"
810-
#endif
812+
#if defined(WOLFSSH_NO_AES_CBC_SOFT_DISABLE)
813+
"aes256-cbc,"
814+
"aes192-cbc,"
815+
"aes128-cbc,"
816+
#endif
817+
#endif /* WOLFSSH_NO_AES_CBC */
811818
"";
812819

813820
static const char cannedMacAlgoNames[] =

tests/kex.c

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,16 @@ static int tsClientUserAuth(byte authType, WS_UserAuthData* authData, void* ctx)
163163
#define NUMARGS 12
164164
#define ARGLEN 32
165165

166+
#define ADD_ARG(argList,argListCount,arg) do { \
167+
if ((argListCount) < NUMARGS) \
168+
WSTRNCPY((argList)[(argListCount)++], (arg), ARGLEN); \
169+
} while (0)
170+
#define ADD_ARG_INT(argList,argListCount,arg) do { \
171+
if ((argListCount) < NUMARGS) \
172+
WSNPRINTF((argList)[(argListCount)++], ARGLEN, "%d", (arg)); \
173+
} while (0)
174+
175+
166176
static int wolfSSH_wolfSSH_Group16_512(void)
167177
{
168178
tcp_ready ready;
@@ -175,7 +185,8 @@ static int wolfSSH_wolfSSH_Group16_512(void)
175185
sA[10], sA[11] };
176186
char cA[NUMARGS][ARGLEN];
177187
char *clientArgv[NUMARGS] =
178-
{ cA[0], cA[1], cA[2], cA[3], cA[4] };
188+
{ cA[0], cA[1], cA[2], cA[3], cA[4], cA[5], cA[6], cA[7], cA[8], cA[9],
189+
cA[10], cA[11] };
179190
int serverArgc = 0;
180191
int clientArgc = 0;
181192

@@ -202,19 +213,19 @@ static int wolfSSH_wolfSSH_Group16_512(void)
202213

203214
InitTcpReady(&ready);
204215

205-
WSTRNCPY(serverArgv[serverArgc++], "echoserver", ARGLEN);
206-
WSTRNCPY(serverArgv[serverArgc++], "-1", ARGLEN);
207-
WSTRNCPY(serverArgv[serverArgc++], "-f", ARGLEN);
216+
ADD_ARG(serverArgv, serverArgc, "echoserver");
217+
ADD_ARG(serverArgv, serverArgc, "-1");
218+
ADD_ARG(serverArgv, serverArgc, "-f");
208219
#if !defined(USE_WINDOWS_API) && !defined(WOLFSSH_ZEPHYR)
209-
WSTRNCPY(serverArgv[serverArgc++], "-p", ARGLEN);
210-
WSTRNCPY(serverArgv[serverArgc++], "-0", ARGLEN);
220+
ADD_ARG(serverArgv, serverArgc, "-p");
221+
ADD_ARG(serverArgv, serverArgc, "-0");
211222
#endif
212-
WSTRNCPY(serverArgv[serverArgc++], "-x", ARGLEN);
213-
WSTRNCPY(serverArgv[serverArgc++], "diffie-hellman-group16-sha512", ARGLEN);
214-
WSTRNCPY(serverArgv[serverArgc++], "-m", ARGLEN);
215-
WSTRNCPY(serverArgv[serverArgc++], "hmac-sha2-512", ARGLEN);
216-
WSTRNCPY(serverArgv[serverArgc++], "-c", ARGLEN);
217-
WSTRNCPY(serverArgv[serverArgc++], "aes256-cbc", ARGLEN);
223+
ADD_ARG(serverArgv, serverArgc, "-x");
224+
ADD_ARG(serverArgv, serverArgc, "diffie-hellman-group16-sha512");
225+
ADD_ARG(serverArgv, serverArgc, "-m");
226+
ADD_ARG(serverArgv, serverArgc, "hmac-sha2-512");
227+
ADD_ARG(serverArgv, serverArgc, "-c");
228+
ADD_ARG(serverArgv, serverArgc, "aes256-cbc");
218229

219230
serverArgs.argc = serverArgc;
220231
serverArgs.argv = serverArgv;
@@ -224,12 +235,14 @@ static int wolfSSH_wolfSSH_Group16_512(void)
224235
ThreadStart(echoserver_test, &serverArgs, &serverThread);
225236
WaitTcpReady(&ready);
226237

227-
WSTRNCPY(cA[clientArgc++], "client", ARGLEN);
228-
WSTRNCPY(cA[clientArgc++], "-u", ARGLEN);
229-
WSTRNCPY(cA[clientArgc++], "jill", ARGLEN);
238+
ADD_ARG(clientArgv, clientArgc, "client");
239+
ADD_ARG(clientArgv, clientArgc, "-u");
240+
ADD_ARG(clientArgv, clientArgc, "jill");
241+
ADD_ARG(clientArgv, clientArgc, "-C");
242+
ADD_ARG(clientArgv, clientArgc, "aes256-cbc");
230243
#if !defined(USE_WINDOWS_API) && !defined(WOLFSSH_ZEPHYR)
231-
WSTRNCPY(cA[clientArgc++], "-p", ARGLEN);
232-
WSNPRINTF(cA[clientArgc++], ARGLEN, "%d", ready.port);
244+
ADD_ARG(clientArgv, clientArgc, "-p");
245+
ADD_ARG_INT(clientArgv, clientArgc, ready.port);
233246
#endif
234247

235248
clientArgs.argc = clientArgc;

0 commit comments

Comments
 (0)