Skip to content

Commit 91546d4

Browse files
Add kex integration test for ed25519 server key
1 parent 85cf3e7 commit 91546d4

5 files changed

Lines changed: 131 additions & 1 deletion

File tree

examples/echoserver/echoserver.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,6 +1737,26 @@ static int load_key(byte isEcc, byte* buf, word32 bufSz)
17371737
}
17381738

17391739

1740+
#ifndef WOLFSSH_NO_ED25519
1741+
/* returns buffer size on success */
1742+
static int load_key_ed25519(byte* buf, word32 bufSz)
1743+
{
1744+
word32 sz = 0;
1745+
1746+
#ifndef NO_FILESYSTEM
1747+
sz = load_file("./keys/server-key-ed25519.der", buf, &bufSz);
1748+
#else
1749+
if (sizeof_ed25519_key_der_ssh > bufSz)
1750+
return 0;
1751+
WMEMCPY(buf, ed25519_key_der_ssh, sizeof_ed25519_key_der_ssh);
1752+
sz = sizeof_ed25519_key_der_ssh;
1753+
#endif
1754+
1755+
return sz;
1756+
}
1757+
#endif /* WOLFSSH_NO_ED25519 */
1758+
1759+
17401760
typedef struct StrList {
17411761
const char* str;
17421762
struct StrList* next;
@@ -2954,6 +2974,18 @@ THREAD_RETURN WOLFSSH_THREAD echoserver_test(void* args)
29542974
}
29552975
#endif
29562976

2977+
#ifndef WOLFSSH_NO_ED25519
2978+
bufSz = EXAMPLE_KEYLOAD_BUFFER_SZ;
2979+
bufSz = load_key_ed25519(keyLoadBuf, bufSz);
2980+
if (bufSz == 0) {
2981+
ES_ERROR("Couldn't load Ed25519 key file.\n");
2982+
}
2983+
if (wolfSSH_CTX_UsePrivateKey_buffer(ctx, keyLoadBuf, bufSz,
2984+
WOLFSSH_FORMAT_ASN1) < 0) {
2985+
ES_ERROR("Couldn't use Ed25519 key buffer.\n");
2986+
}
2987+
#endif /* WOLFSSH_NO_ED25519 */
2988+
29572989
#ifndef NO_FILESYSTEM
29582990
if (userPubKey) {
29592991
byte* userBuf = NULL;

keys/server-key-ed25519.der

82 Bytes
Binary file not shown.

keys/server-key-ed25519.pem

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MFACAQAwBQYDK2VwBCIEIGpn8w5k6lL+9K1lTUVgYThYEQeE8AOUkxR7ezMauvYZ
3+
gSAPVgyffXpih/AmFhkx5LId6b3uSn9VriYtoSXk7kpRAA==
4+
-----END PRIVATE KEY-----

tests/kex.c

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@
142142

143143
#if !defined(WOLFSSH_NO_DH_GROUP16_SHA512) \
144144
|| !defined(WOLFSSH_NO_CURVE25519_MLKEM768_SHA256) \
145-
|| !defined(WOLFSSH_NO_NISTP384_MLKEM1024_SHA384)
145+
|| !defined(WOLFSSH_NO_NISTP384_MLKEM1024_SHA384) \
146+
|| !defined(WOLFSSH_NO_ED25519)
146147

147148
#define KEXTEST_AVAILABLE
148149
#endif
@@ -305,6 +306,81 @@ static int wolfSSH_KexTest_Connect(const char* kex)
305306
return EXIT_SUCCESS;
306307
}
307308

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

310386
int wolfSSH_KexTest(int argc, char** argv)
@@ -353,6 +429,9 @@ int wolfSSH_KexTest(int argc, char** argv)
353429
AssertIntEQ(wolfSSH_KexTest_Connect("mlkem1024nistp384-sha384"),
354430
EXIT_SUCCESS);
355431
#endif
432+
#ifndef WOLFSSH_NO_ED25519
433+
AssertIntEQ(wolfSSH_KexTest_Ed25519HostKey(), EXIT_SUCCESS);
434+
#endif
356435

357436
AssertIntEQ(wolfSSH_Cleanup(), WS_SUCCESS);
358437

wolfssh/certs_test.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,21 @@ static const unsigned char ecc_key_der_521_ssh[] =
229229
};
230230
#define sizeof_ecc_key_der_521_ssh (sizeof(ecc_key_der_521_ssh))
231231

232+
#ifndef WOLFSSH_NO_ED25519
233+
/* ./keys/server-key-ed25519.der (private+public) */
234+
static const unsigned char ed25519_key_der_ssh[] =
235+
{
236+
0x30, 0x50, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70,
237+
0x04, 0x22, 0x04, 0x20, 0x6a, 0x67, 0xf3, 0x0e, 0x64, 0xea, 0x52, 0xfe,
238+
0xf4, 0xad, 0x65, 0x4d, 0x45, 0x60, 0x61, 0x38, 0x58, 0x11, 0x07, 0x84,
239+
0xf0, 0x03, 0x94, 0x93, 0x14, 0x7b, 0x7b, 0x33, 0x1a, 0xba, 0xf6, 0x19,
240+
0x81, 0x20, 0x0f, 0x56, 0x0c, 0x9f, 0x7d, 0x7a, 0x62, 0x87, 0xf0, 0x26,
241+
0x16, 0x19, 0x31, 0xe4, 0xb2, 0x1d, 0xe9, 0xbd, 0xee, 0x4a, 0x7f, 0x55,
242+
0xae, 0x26, 0x2d, 0xa1, 0x25, 0xe4, 0xee, 0x4a, 0x51, 0x00
243+
};
244+
#define sizeof_ed25519_key_der_ssh (sizeof(ed25519_key_der_ssh))
245+
#endif /* WOLFSSH_NO_ED25519 */
246+
232247
#endif /* NO_FILESYSTEM */
233248

234249
#endif /* _WOLFSSL_CERTS_TEST_H_ */

0 commit comments

Comments
 (0)