@@ -305,6 +305,81 @@ static int wolfSSH_KexTest_Connect(const char* kex)
305305 return EXIT_SUCCESS ;
306306}
307307
308+
309+ #ifndef WOLFSSH_NO_ED25519
310+ static int wolfSSH_KexTest_Ed25519HostKey (void )
311+ {
312+ tcp_ready ready ;
313+ THREAD_TYPE serverThread ;
314+ func_args serverArgs ;
315+ func_args clientArgs ;
316+ char sA [NUMARGS ][ARGLEN ];
317+ char * serverArgv [NUMARGS ] =
318+ { sA [0 ], sA [1 ], sA [2 ], sA [3 ], sA [4 ], sA [5 ], sA [6 ], sA [7 ], sA [8 ],
319+ sA [9 ], sA [10 ], sA [11 ] };
320+ char cA [NUMARGS ][ARGLEN ];
321+ char * clientArgv [NUMARGS ] =
322+ { cA [0 ], cA [1 ], cA [2 ], cA [3 ], cA [4 ], cA [5 ], cA [6 ], cA [7 ], cA [8 ],
323+ cA [9 ], cA [10 ], cA [11 ] };
324+ int serverArgc = 0 ;
325+ int clientArgc = 0 ;
326+
327+ InitTcpReady (& ready );
328+
329+ ADD_ARG (serverArgv , serverArgc , "echoserver" );
330+ ADD_ARG (serverArgv , serverArgc , "-1" );
331+ ADD_ARG (serverArgv , serverArgc , "-f" );
332+ #if !defined(USE_WINDOWS_API ) && !defined(WOLFSSH_ZEPHYR )
333+ ADD_ARG (serverArgv , serverArgc , "-p" );
334+ ADD_ARG (serverArgv , serverArgc , "-0" );
335+ #endif
336+ ADD_ARG (serverArgv , serverArgc , "-k" );
337+ ADD_ARG (serverArgv , serverArgc , "ssh-ed25519" );
338+
339+ serverArgs .argc = serverArgc ;
340+ serverArgs .argv = serverArgv ;
341+ serverArgs .return_code = EXIT_SUCCESS ;
342+ serverArgs .signal = & ready ;
343+ serverArgs .user_auth = NULL ;
344+ ThreadStart (echoserver_test , & serverArgs , & serverThread );
345+ WaitTcpReady (& ready );
346+
347+ ADD_ARG (clientArgv , clientArgc , "client" );
348+ ADD_ARG (clientArgv , clientArgc , "-u" );
349+ ADD_ARG (clientArgv , clientArgc , "jill" );
350+ #if !defined(USE_WINDOWS_API ) && !defined(WOLFSSH_ZEPHYR )
351+ ADD_ARG (clientArgv , clientArgc , "-p" );
352+ ADD_ARG_INT (clientArgv , clientArgc , ready .port );
353+ #endif
354+
355+ clientArgs .argc = clientArgc ;
356+ clientArgs .argv = clientArgv ;
357+ clientArgs .return_code = EXIT_SUCCESS ;
358+ clientArgs .signal = & ready ;
359+ clientArgs .user_auth = tsClientUserAuth ;
360+
361+ client_test (& clientArgs );
362+
363+ #ifdef WOLFSSH_ZEPHYR
364+ k_sleep (Z_TIMEOUT_TICKS (100 ));
365+ #endif
366+ ThreadJoin (serverThread );
367+
368+ if (clientArgs .return_code == WS_SOCKET_ERROR_E ) {
369+ clientArgs .return_code = WS_SUCCESS ;
370+ }
371+ if (serverArgs .return_code == WS_SOCKET_ERROR_E ) {
372+ serverArgs .return_code = WS_SUCCESS ;
373+ }
374+ AssertIntEQ (WS_SUCCESS , clientArgs .return_code );
375+ AssertIntEQ (WS_SUCCESS , serverArgs .return_code );
376+
377+ FreeTcpReady (& ready );
378+
379+ return EXIT_SUCCESS ;
380+ }
381+ #endif /* WOLFSSH_NO_ED25519 */
382+
308383#endif /* KEXTEST_AVAILABLE */
309384
310385int wolfSSH_KexTest (int argc , char * * argv )
@@ -353,6 +428,9 @@ int wolfSSH_KexTest(int argc, char** argv)
353428 AssertIntEQ (wolfSSH_KexTest_Connect ("mlkem1024nistp384-sha384" ),
354429 EXIT_SUCCESS );
355430#endif
431+ #ifndef WOLFSSH_NO_ED25519
432+ AssertIntEQ (wolfSSH_KexTest_Ed25519HostKey (), EXIT_SUCCESS );
433+ #endif
356434
357435 AssertIntEQ (wolfSSH_Cleanup (), WS_SUCCESS );
358436
0 commit comments