Skip to content

Commit e0a1bdd

Browse files
authored
Merge pull request #804 from ejohnstown/vvv
Soft Disable AES-CBC
2 parents 597a71b + 0f65078 commit e0a1bdd

File tree

3 files changed

+85
-20
lines changed

3 files changed

+85
-20
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\n");
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: 6 additions & 1 deletion
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.
@@ -803,7 +808,7 @@ static const char cannedEncAlgoNames[] =
803808
"aes192-ctr,"
804809
"aes128-ctr,"
805810
#endif
806-
#if !defined(WOLFSSH_NO_AES_CBC)
811+
#if !defined(WOLFSSH_NO_AES_CBC) && defined(WOLFSSH_NO_AES_CBC_SOFT_DISABLE)
807812
"aes256-cbc,"
808813
"aes192-cbc,"
809814
"aes128-cbc,"

tests/kex.c

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

166+
/*
167+
* Macro: ADD_ARG
168+
* Purpose: Adds a string argument to the argument list.
169+
* Parameters:
170+
* - argList: The array of argument strings.
171+
* - argListCount: The current count of arguments in the list (modified
172+
* by the macro).
173+
* - arg: The string argument to add.
174+
* Behavior:
175+
* - Copies the string `arg` into the next available slot in `argList`.
176+
* - Increments `argListCount` if the operation is successful.
177+
* Constraints:
178+
* - The total number of arguments must not exceed `NUMARGS`.
179+
* - Each argument string must not exceed `ARGLEN` characters.
180+
* Side effects:
181+
* - Modifies `argList` and increments `argListCount`.
182+
*/
183+
#define ADD_ARG(argList,argListCount,arg) do { \
184+
if ((argListCount) < NUMARGS) \
185+
WSTRNCPY((argList)[(argListCount)++], (arg), ARGLEN); \
186+
} while (0)
187+
188+
/*
189+
* Macro: ADD_ARG_INT
190+
* Purpose: Adds an integer argument to the argument list as a string.
191+
* Parameters:
192+
* - argList: The array of argument strings.
193+
* - argListCount: The current count of arguments in the list (modified
194+
* by the macro).
195+
* - arg: The integer argument to add.
196+
* Behavior:
197+
* - Converts the integer `arg` to a string and stores it in the next
198+
* available slot in `argList`.
199+
* - Increments `argListCount` if the operation is successful.
200+
* Constraints:
201+
* - The total number of arguments must not exceed `NUMARGS`.
202+
* - Each argument string must not exceed `ARGLEN` characters.
203+
* Side effects:
204+
* - Modifies `argList` and increments `argListCount`.
205+
*/
206+
#define ADD_ARG_INT(argList,argListCount,arg) do { \
207+
if ((argListCount) < NUMARGS) \
208+
WSNPRINTF((argList)[(argListCount)++], ARGLEN, "%d", (arg)); \
209+
} while (0)
210+
211+
166212
static int wolfSSH_wolfSSH_Group16_512(void)
167213
{
168214
tcp_ready ready;
@@ -175,7 +221,8 @@ static int wolfSSH_wolfSSH_Group16_512(void)
175221
sA[10], sA[11] };
176222
char cA[NUMARGS][ARGLEN];
177223
char *clientArgv[NUMARGS] =
178-
{ cA[0], cA[1], cA[2], cA[3], cA[4] };
224+
{ cA[0], cA[1], cA[2], cA[3], cA[4], cA[5], cA[6], cA[7], cA[8], cA[9],
225+
cA[10], cA[11] };
179226
int serverArgc = 0;
180227
int clientArgc = 0;
181228

@@ -202,19 +249,19 @@ static int wolfSSH_wolfSSH_Group16_512(void)
202249

203250
InitTcpReady(&ready);
204251

205-
WSTRNCPY(serverArgv[serverArgc++], "echoserver", ARGLEN);
206-
WSTRNCPY(serverArgv[serverArgc++], "-1", ARGLEN);
207-
WSTRNCPY(serverArgv[serverArgc++], "-f", ARGLEN);
252+
ADD_ARG(serverArgv, serverArgc, "echoserver");
253+
ADD_ARG(serverArgv, serverArgc, "-1");
254+
ADD_ARG(serverArgv, serverArgc, "-f");
208255
#if !defined(USE_WINDOWS_API) && !defined(WOLFSSH_ZEPHYR)
209-
WSTRNCPY(serverArgv[serverArgc++], "-p", ARGLEN);
210-
WSTRNCPY(serverArgv[serverArgc++], "-0", ARGLEN);
256+
ADD_ARG(serverArgv, serverArgc, "-p");
257+
ADD_ARG(serverArgv, serverArgc, "-0");
211258
#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);
259+
ADD_ARG(serverArgv, serverArgc, "-x");
260+
ADD_ARG(serverArgv, serverArgc, "diffie-hellman-group16-sha512");
261+
ADD_ARG(serverArgv, serverArgc, "-m");
262+
ADD_ARG(serverArgv, serverArgc, "hmac-sha2-512");
263+
ADD_ARG(serverArgv, serverArgc, "-c");
264+
ADD_ARG(serverArgv, serverArgc, "aes256-cbc");
218265

219266
serverArgs.argc = serverArgc;
220267
serverArgs.argv = serverArgv;
@@ -224,12 +271,14 @@ static int wolfSSH_wolfSSH_Group16_512(void)
224271
ThreadStart(echoserver_test, &serverArgs, &serverThread);
225272
WaitTcpReady(&ready);
226273

227-
WSTRNCPY(cA[clientArgc++], "client", ARGLEN);
228-
WSTRNCPY(cA[clientArgc++], "-u", ARGLEN);
229-
WSTRNCPY(cA[clientArgc++], "jill", ARGLEN);
274+
ADD_ARG(clientArgv, clientArgc, "client");
275+
ADD_ARG(clientArgv, clientArgc, "-u");
276+
ADD_ARG(clientArgv, clientArgc, "jill");
277+
ADD_ARG(clientArgv, clientArgc, "-C");
278+
ADD_ARG(clientArgv, clientArgc, "aes256-cbc");
230279
#if !defined(USE_WINDOWS_API) && !defined(WOLFSSH_ZEPHYR)
231-
WSTRNCPY(cA[clientArgc++], "-p", ARGLEN);
232-
WSNPRINTF(cA[clientArgc++], ARGLEN, "%d", ready.port);
280+
ADD_ARG(clientArgv, clientArgc, "-p");
281+
ADD_ARG_INT(clientArgv, clientArgc, ready.port);
233282
#endif
234283

235284
clientArgs.argc = clientArgc;

0 commit comments

Comments
 (0)