Skip to content

Commit 6d09901

Browse files
authored
Merge pull request #924 from yosuke-wolfssl/f_2485
Add kex integration test for ed25519 server key
2 parents a608f19 + 651e4ca commit 6d09901

6 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 ((word32)sizeof_ed25519_key_der_ssh > bufSz)
1750+
return 0;
1751+
WMEMCPY(buf, ed25519_key_der_ssh, sizeof_ed25519_key_der_ssh);
1752+
sz = (word32)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/include.am

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ EXTRA_DIST+= \
2323
keys/fred-cert.der keys/fred-cert.pem \
2424
keys/server-key.pem keys/fred-key.der keys/fred-key.pem \
2525
keys/id_ecdsa keys/id_ecdsa.pub keys/id_rsa keys/id_rsa.pub \
26-
keys/renewcerts.sh keys/renewcerts.cnf
26+
keys/renewcerts.sh keys/renewcerts.cnf \
27+
keys/server-key-ed25519.der keys/server-key-ed25519.pem
2728

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: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

310385
int 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

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)