[openssh-commits] [openssh] 13/14: upstream: adapt to libsodium ed25519 implementation

git+noreply at mindrot.org git+noreply at mindrot.org
Wed Sep 16 11:16:07 AEST 2026


This is an automated email from the git hooks/post-receive script.

djm pushed a commit to branch master
in repository openssh.

commit fc5bed4b1c71441db27b8040bfcae237f1786656
Author: djm at openbsd.org <djm at openbsd.org>
AuthorDate: Wed Sep 16 00:45:03 2026 +0000

    upstream: adapt to libsodium ed25519 implementation
    
    OpenBSD-Regress-ID: d084e761416cea1f00d4f295aa92b737b28cebae
---
 regress/misc/sk-dummy/sk-dummy.c        | 18 ++++++++----------
 regress/unittests/crypto/test_ed25519.c | 24 ++++++++++++------------
 2 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/regress/misc/sk-dummy/sk-dummy.c b/regress/misc/sk-dummy/sk-dummy.c
index cbbba7459..f96747288 100644
--- a/regress/misc/sk-dummy/sk-dummy.c
+++ b/regress/misc/sk-dummy/sk-dummy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sk-dummy.c,v 1.16 2025/06/17 01:24:32 djm Exp $ */
+/* $OpenBSD: sk-dummy.c,v 1.17 2026/09/16 00:45:03 djm Exp $ */
 /*
  * Copyright (c) 2019 Markus Friedl
  *
@@ -411,8 +411,8 @@ sig_ed25519(const uint8_t *message, size_t message_len,
 	uint8_t	apphash[SHA256_DIGEST_LENGTH];
 	uint8_t signbuf[sizeof(apphash) + sizeof(flags) +
 	    sizeof(counter) + SHA256_DIGEST_LENGTH];
-	uint8_t sig[crypto_sign_ed25519_BYTES + sizeof(signbuf)];
-	unsigned long long smlen;
+	uint8_t sig[crypto_sign_ed25519_BYTES];
+	unsigned long long siglen = 0;
 
 	if (key_handle_len != crypto_sign_ed25519_SECRETKEYBYTES) {
 		skdebug(__func__, "bad key handle length %zu", key_handle_len);
@@ -446,18 +446,16 @@ sig_ed25519(const uint8_t *message, size_t message_len,
 	}
 	dump("signbuf", signbuf, sizeof(signbuf));
 	/* create and encode signature */
-	smlen = sizeof(signbuf);
-	if (crypto_sign_ed25519(sig, &smlen, signbuf, sizeof(signbuf),
+	if (crypto_sign_ed25519_detached(sig, &siglen, signbuf, sizeof(signbuf),
 	    key_handle) != 0) {
-		skdebug(__func__, "crypto_sign_ed25519 failed");
+		skdebug(__func__, "crypto_sign_ed25519_detached failed");
 		goto out;
 	}
-	if (smlen <= sizeof(signbuf)) {
-		skdebug(__func__, "bad sign smlen %llu, expected min %zu",
-		    smlen, sizeof(signbuf) + 1);
+	if (siglen != sizeof(sig)) {
+		skdebug(__func__, "bad signature length %llu", siglen);
 		goto out;
 	}
-	response->sig_r_len = (size_t)(smlen - sizeof(signbuf));
+	response->sig_r_len = sizeof(sig);
 	if ((response->sig_r = calloc(1, response->sig_r_len)) == NULL) {
 		skdebug(__func__, "calloc signature failed");
 		goto out;
diff --git a/regress/unittests/crypto/test_ed25519.c b/regress/unittests/crypto/test_ed25519.c
index 94a482ff2..2a2e57522 100644
--- a/regress/unittests/crypto/test_ed25519.c
+++ b/regress/unittests/crypto/test_ed25519.c
@@ -1,4 +1,4 @@
-/* 	$OpenBSD: test_ed25519.c,v 1.4 2026/06/22 12:28:48 dtucker Exp $ */
+/* 	$OpenBSD: test_ed25519.c,v 1.5 2026/09/16 00:45:04 djm Exp $ */
 /*
  * Regress test for Ed25519 keypair from seed
  *
@@ -66,9 +66,9 @@ void ed25519_tests(void);
 void
 ed25519_tests(void)
 {
-	uint8_t pk[32], sk[64], seed[32];
+	uint8_t pk[32], sk[64], seed[32], sig[64];
 	uint8_t expected_pk[32], expected_sig[64];
-	uint8_t *msg, *tmp;
+	uint8_t *msg;
 	size_t i, msglen;
 	unsigned long long smlen;
 
@@ -76,24 +76,24 @@ ed25519_tests(void)
 		TEST_START("Ed25519 keypair from seed");
 		hex2bin(seed, ed25519_kats[i].sk, 32);
 		hex2bin(expected_pk, ed25519_kats[i].pk, 32);
-		ASSERT_INT_EQ(crypto_sign_ed25519_keypair_from_seed(pk, sk, seed), 0);
+		ASSERT_INT_EQ(crypto_sign_ed25519_seed_keypair(pk, sk, seed), 0);
 		ASSERT_MEM_EQ(pk, expected_pk, 32);
 		TEST_DONE();
 
 		TEST_START("Ed25519 sign/verify KAT");
 		msglen = strlen(ed25519_kats[i].msg) / 2;
-		ASSERT_PTR_NE(msg = malloc(msglen + 64), NULL);
-		ASSERT_PTR_NE(tmp = malloc(msglen + 64), NULL);
-		hex2bin(msg + 64, ed25519_kats[i].msg, msglen);
+		ASSERT_PTR_NE(msg = malloc(msglen == 0 ? 1 : msglen), NULL);
+		hex2bin(msg, ed25519_kats[i].msg, msglen);
 		hex2bin(expected_sig, ed25519_kats[i].sig, 64);
 
-		ASSERT_INT_EQ(crypto_sign_ed25519(msg, &smlen, msg + 64, msglen, sk), 0);
-		ASSERT_MEM_EQ(msg, expected_sig, 64);
+		ASSERT_INT_EQ(crypto_sign_ed25519_detached(sig, &smlen,
+		    msg, msglen, sk), 0);
+		ASSERT_INT_EQ(smlen, 64);
+		ASSERT_MEM_EQ(sig, expected_sig, 64);
 
-		ASSERT_INT_EQ(crypto_sign_ed25519_open(tmp, &smlen, msg, msglen + 64, pk), 0);
-		ASSERT_INT_EQ(smlen, msglen);
+		ASSERT_INT_EQ(crypto_sign_ed25519_verify_detached(sig,
+		    msg, msglen, pk), 0);
 		free(msg);
-		free(tmp);
 		TEST_DONE();
 	}
 }

-- 
To stop receiving notification emails like this one, please contact
djm at mindrot.org.


More information about the openssh-commits mailing list