mirror of
https://github.com/openbsd/src.git
synced 2026-06-17 23:03:29 +02:00
unit and regression tests for composite PQ ML-DSA44/Ed25519
keys. Includes a new unittests/crypto test that tests basic functionality of the underlying crypto primitives against public test vectors
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: agent.sh,v 1.23 2025/05/06 06:05:48 djm Exp $
|
||||
# $OpenBSD: agent.sh,v 1.24 2026/06/14 04:08:05 djm Exp $
|
||||
# Placed in the Public Domain.
|
||||
|
||||
tid="simple agent test"
|
||||
@@ -84,8 +84,14 @@ if [ $r -ne 52 ]; then
|
||||
fail "ssh connect with failed (exit code $r)"
|
||||
fi
|
||||
|
||||
cp $OBJ/sshd_proxy $OBJ/sshd_proxy.bak
|
||||
cp $OBJ/ssh_proxy $OBJ/ssh_proxy.bak
|
||||
for t in ${SSH_KEYTYPES}; do
|
||||
trace "connect via agent using $t key"
|
||||
grep -vi PubkeyAcceptedAlgorithms $OBJ/sshd_proxy.bak > $OBJ/sshd_proxy
|
||||
echo "PubkeyAcceptedAlgorithms=+$t" >> $OBJ/sshd_proxy
|
||||
grep -vi PubkeyAcceptedAlgorithms $OBJ/ssh_proxy.bak > $OBJ/ssh_proxy
|
||||
echo "PubkeyAcceptedAlgorithms=+$t" >> $OBJ/ssh_proxy
|
||||
${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub -oIdentitiesOnly=yes \
|
||||
somehost exit 52
|
||||
r=$?
|
||||
@@ -93,6 +99,8 @@ for t in ${SSH_KEYTYPES}; do
|
||||
fail "ssh connect with failed (exit code $r)"
|
||||
fi
|
||||
done
|
||||
cp $OBJ/sshd_proxy.bak $OBJ/sshd_proxy
|
||||
cp $OBJ/ssh_proxy.bak $OBJ/ssh_proxy
|
||||
|
||||
trace "agent forwarding"
|
||||
${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
|
||||
@@ -140,6 +148,13 @@ fi
|
||||
> $OBJ/authorized_keys_$USER
|
||||
for t in ${SSH_KEYTYPES}; do
|
||||
trace "connect via agent using $t key"
|
||||
# Accept both keys and certs.
|
||||
BASE=`echo $t | cut -d '@' -f1`
|
||||
ACCEPT=`$SSH -Q key | grep "^$BASE" | paste -sd , -`
|
||||
grep -vi PubkeyAcceptedAlgorithms $OBJ/sshd_proxy.bak > $OBJ/sshd_proxy
|
||||
echo "PubkeyAcceptedAlgorithms=+$ACCEPT" >> $OBJ/sshd_proxy
|
||||
grep -vi PubkeyAcceptedAlgorithms $OBJ/ssh_proxy.bak > $OBJ/ssh_proxy
|
||||
echo "PubkeyAcceptedAlgorithms=+$ACCEPT" >> $OBJ/ssh_proxy
|
||||
${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
|
||||
-oCertificateFile=$OBJ/$t-agent-cert.pub \
|
||||
-oIdentitiesOnly=yes somehost exit 52
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: cert-hostkey.sh,v 1.31 2026/02/11 22:58:23 djm Exp $
|
||||
# $OpenBSD: cert-hostkey.sh,v 1.32 2026/06/14 04:08:05 djm Exp $
|
||||
# Placed in the Public Domain.
|
||||
|
||||
tid="certified host keys"
|
||||
@@ -70,7 +70,18 @@ touch $OBJ/host_revoked_plain
|
||||
touch $OBJ/host_revoked_cert
|
||||
cat $OBJ/host_ca_key.pub $OBJ/host_ca_key2.pub > $OBJ/host_revoked_ca
|
||||
|
||||
PLAIN_TYPES=`echo "$SSH_KEYTYPES" | sed 's/^ssh-//'`
|
||||
PLAIN_TYPES=""
|
||||
for i in $SSH_KEYTYPES; do
|
||||
case "$i" in
|
||||
*@openssh.com*) t="$i" ;;
|
||||
*) t=`echo "$i" | sed 's/^ssh-//'` ;;
|
||||
esac
|
||||
if [ -z "$PLAIN_TYPES" ]; then
|
||||
PLAIN_TYPES="$t"
|
||||
else
|
||||
PLAIN_TYPES="$PLAIN_TYPES $t"
|
||||
fi
|
||||
done
|
||||
|
||||
if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then
|
||||
PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: cert-userkey.sh,v 1.32 2026/02/11 22:58:23 djm Exp $
|
||||
# $OpenBSD: cert-userkey.sh,v 1.33 2026/06/14 04:08:05 djm Exp $
|
||||
# Placed in the Public Domain.
|
||||
|
||||
tid="certified user keys"
|
||||
@@ -10,7 +10,18 @@ cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak
|
||||
grep -v AuthorizedKeysFile $OBJ/sshd_proxy > $OBJ/sshd_proxy_bak
|
||||
echo "AuthorizedKeysFile $OBJ/authorized_keys_%u_*" >> $OBJ/sshd_proxy_bak
|
||||
|
||||
PLAIN_TYPES=`$SSH -Q key-plain | maybe_filter_sk | sed 's/^ssh-//'`
|
||||
PLAIN_TYPES=""
|
||||
for i in `$SSH -Q key-plain | maybe_filter_sk`; do
|
||||
case "$i" in
|
||||
*@openssh.com*) t="$i" ;;
|
||||
*) t=`echo "$i" | sed 's/^ssh-//'` ;;
|
||||
esac
|
||||
if [ -z "$PLAIN_TYPES" ]; then
|
||||
PLAIN_TYPES="$t"
|
||||
else
|
||||
PLAIN_TYPES="$PLAIN_TYPES $t"
|
||||
fi
|
||||
done
|
||||
EXTRA_TYPES=""
|
||||
rsa=""
|
||||
|
||||
@@ -24,6 +35,7 @@ kname() {
|
||||
rsa-sha2-*) n="$1" ;;
|
||||
sk-ecdsa-*) n="sk-ecdsa" ;;
|
||||
sk-ssh-ed25519*) n="sk-ssh-ed25519" ;;
|
||||
ssh-mldsa*) n=`echo "$1" | sed 's/@.*//'` ;;
|
||||
# subshell because some seds will add a newline
|
||||
*) n=$(echo $1 | sed 's/^rsa/ssh-rsa/;s/^ed/ssh-ed/') ;;
|
||||
esac
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: keytype.sh,v 1.12 2025/05/06 06:05:48 djm Exp $
|
||||
# $OpenBSD: keytype.sh,v 1.13 2026/06/14 04:08:05 djm Exp $
|
||||
# Placed in the Public Domain.
|
||||
|
||||
tid="login with different key types"
|
||||
@@ -17,14 +17,15 @@ for i in ${SSH_KEYTYPES}; do
|
||||
ecdsa-sha2-nistp521) ktypes="$ktypes ecdsa-521" ;;
|
||||
sk-ssh-ed25519*) ktypes="$ktypes ed25519-sk" ;;
|
||||
sk-ecdsa-sha2-nistp256*) ktypes="$ktypes ecdsa-sk" ;;
|
||||
ssh-mldsa44-ed25519*) ktypes="$ktypes mldsa44-ed25519" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
for kt in $ktypes; do
|
||||
rm -f $OBJ/key.$kt
|
||||
case "$kt" in
|
||||
*sk) type="$kt"; bits="n/a"; bits_arg="";;
|
||||
*) type=${kt%-*}; bits=${kt#*-}; bits_arg="-b $bits";;
|
||||
mldsa*|*sk) type="$kt"; bits="n/a"; bits_arg="";;
|
||||
*) type=${kt%-*}; bits=${kt#*-}; bits_arg="-b $bits";;
|
||||
esac
|
||||
verbose "keygen $type, $bits bits"
|
||||
${SSHKEYGEN} $bits_arg -q -N '' -t $type -f $OBJ/key.$kt || \
|
||||
@@ -40,6 +41,7 @@ kname_to_ktype() {
|
||||
rsa-*) echo rsa-sha2-512,rsa-sha2-256,ssh-rsa;;
|
||||
ed25519-sk) echo sk-ssh-ed25519@openssh.com;;
|
||||
ecdsa-sk) echo sk-ecdsa-sha2-nistp256@openssh.com;;
|
||||
mldsa44-ed25519) echo ssh-mldsa44-ed25519@openssh.com ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: knownhosts-command.sh,v 1.4 2025/05/06 06:05:48 djm Exp $
|
||||
# $OpenBSD: knownhosts-command.sh,v 1.5 2026/06/14 04:08:05 djm Exp $
|
||||
# Placed in the Public Domain.
|
||||
|
||||
tid="known hosts command "
|
||||
@@ -38,7 +38,10 @@ _EOF
|
||||
chmod a+x $OBJ/knownhosts_command
|
||||
${SSH} -F $OBJ/ssh_proxy x true && fail "ssh connect succeeded with bad exit"
|
||||
|
||||
cp $OBJ/sshd_proxy $OBJ/sshd_proxy.bak
|
||||
for keytype in ${SSH_HOSTKEY_TYPES} ; do
|
||||
grep -vi HostKeyAlgorithms $OBJ/sshd_proxy.bak > $OBJ/sshd_proxy
|
||||
echo "HostKeyAlgorithms=+$keytype" >> $OBJ/sshd_proxy
|
||||
algs=$keytype
|
||||
test "x$keytype" = "xssh-rsa" && algs=ssh-rsa,rsa-sha2-256,rsa-sha2-512
|
||||
verbose "keytype $keytype"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# $OpenBSD: Makefile,v 1.14 2026/05/31 11:39:44 djm Exp $
|
||||
# $OpenBSD: Makefile,v 1.15 2026/06/14 04:08:05 djm Exp $
|
||||
|
||||
SUBDIR= test_helper sshbuf sshkey bitmap kex hostkeys utf8 match conversion
|
||||
SUBDIR+=authopt misc sshsig servconf
|
||||
SUBDIR+=authopt misc sshsig servconf crypto
|
||||
|
||||
.include <bsd.subdir.mk>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.12 2026/02/06 23:39:14 dtucker Exp $
|
||||
# $OpenBSD: Makefile,v 1.13 2026/06/14 04:08:05 djm Exp $
|
||||
|
||||
PROG=test_authopt
|
||||
SRCS=tests.c
|
||||
@@ -14,7 +14,7 @@ SRCS+=addr.c addrmatch.c bitmap.c
|
||||
SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c
|
||||
SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c
|
||||
SRCS+=ssherr-libcrypto.c
|
||||
|
||||
SRCS+=ssh-mldsa-eddsa.c libcrux-mlkem-mldsa.c
|
||||
SRCS+=digest-openssl.c ed25519-openssl.c
|
||||
#SRCS+=digest-libc.c ed25519.c
|
||||
SRCS+=utf8.c
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# $OpenBSD: Makefile,v 1.1 2026/06/14 04:08:05 djm Exp $
|
||||
|
||||
PROG=test_crypto
|
||||
SRCS=tests.c
|
||||
SRCS+=test_mldsa.c
|
||||
SRCS+=test_mlkem.c
|
||||
SRCS+=test_ed25519.c
|
||||
SRCS+=test_mldsa_eddsa.c
|
||||
|
||||
# From usr.bin/ssh
|
||||
SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
|
||||
SRCS+=sshbuf-io.c atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c
|
||||
SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
|
||||
SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
|
||||
SRCS+=addr.c addrmatch.c bitmap.c
|
||||
SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c
|
||||
SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c
|
||||
SRCS+=utf8.c ssherr-libcrypto.c libcrux-mlkem-mldsa.c ssh-mldsa-eddsa.c
|
||||
|
||||
SRCS+=digest-openssl.c ed25519-openssl.c
|
||||
#SRCS+=digest-libc.c ed25519.c
|
||||
|
||||
run-regress-${PROG}: ${PROG}
|
||||
env ${TEST_ENV} ./${PROG} ${UNITTEST_ARGS} -d ${.CURDIR}/testdata
|
||||
|
||||
.include <bsd.regress.mk>
|
||||
@@ -0,0 +1,104 @@
|
||||
/* $OpenBSD: test_ed25519.c,v 1.1 2026/06/14 04:08:05 djm Exp $ */
|
||||
/*
|
||||
* Regress test for Ed25519 keypair from seed
|
||||
*
|
||||
* Placed in the public domain
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../test_helper/test_helper.h"
|
||||
#include "crypto_api.h"
|
||||
#include "xmalloc.h"
|
||||
|
||||
struct ed25519_kat {
|
||||
const char *sk;
|
||||
const char *pk;
|
||||
const char *msg;
|
||||
const char *sig;
|
||||
};
|
||||
|
||||
static const struct ed25519_kat ed25519_kats[] = {
|
||||
{
|
||||
"9d61b19deffd5a60ba844af492ec2cc44449c569"
|
||||
"7b326919703bac031cae7f60",
|
||||
"d75a980182b10ab7d54bfed3c964073a0ee172f3"
|
||||
"daa62325af021a68f707511a",
|
||||
"",
|
||||
"e5564300c360ac729086e2cc806e828a84877f1e"
|
||||
"b8e5d974d873e065224901555fb8821590a33bac"
|
||||
"c61e39701cf9b46bd25bf5f0595bbe2465514143"
|
||||
"8e7a100b"
|
||||
},
|
||||
{
|
||||
"4ccd089b28ff96da9db6c346ec114e0f5b8a319f"
|
||||
"35aba624da8cf6ed4fb8a6fb",
|
||||
"3d4017c3e843895a92b70aa74d1b7ebc9c982ccf"
|
||||
"2ec4968cc0cd55f12af4660c",
|
||||
"72",
|
||||
"92a009a9f0d4cab8720e820b5f642540a2b27b54"
|
||||
"16503f8fb3762223ebdb69da085ac1e43e15996e"
|
||||
"458f3613d0f11d8c387b2eaeb4302aeeb00d2916"
|
||||
"12bb0c00"
|
||||
},
|
||||
{
|
||||
"c5aa8df43f9f837bedb7442f31dcb7b166d38535"
|
||||
"076f094b85ce3a2e0b4458f7",
|
||||
"fc51cd8e6218a1a38da47ed00230f0580816ed13"
|
||||
"ba3303ac5deb911548908025",
|
||||
"af82",
|
||||
"6291d657deec24024827e69c3abe01a30ce548a2"
|
||||
"84743a445e3680d7db5ac3ac18ff9b538d16f290"
|
||||
"ae67f760984dc6594a7c15e9716ed28dc027bece"
|
||||
"ea1ec40a"
|
||||
}
|
||||
};
|
||||
|
||||
void ed25519_tests(void);
|
||||
|
||||
static void
|
||||
hex2bin(uint8_t *bin, const char *hex, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < len; i++)
|
||||
sscanf(hex + i * 2, "%02hhx", &bin[i]);
|
||||
}
|
||||
|
||||
void
|
||||
ed25519_tests(void)
|
||||
{
|
||||
uint8_t pk[32], sk[64], seed[32];
|
||||
uint8_t expected_pk[32], expected_sig[64];
|
||||
uint8_t *msg, *tmp;
|
||||
size_t i, msglen;
|
||||
unsigned long long smlen;
|
||||
|
||||
for (i = 0; i < sizeof(ed25519_kats)/sizeof(ed25519_kats[0]); i++) {
|
||||
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_MEM_EQ(pk, expected_pk, 32);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("Ed25519 sign/verify KAT");
|
||||
msglen = strlen(ed25519_kats[i].msg) / 2;
|
||||
msg = malloc(msglen + 64);
|
||||
tmp = malloc(msglen + 64);
|
||||
hex2bin(msg + 64, 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_open(tmp, &smlen, msg, msglen + 64, pk), 0);
|
||||
ASSERT_INT_EQ(smlen, msglen);
|
||||
free(msg);
|
||||
free(tmp);
|
||||
TEST_DONE();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
/* $OpenBSD: test_mldsa.c,v 1.1 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for ML-DSA
|
||||
*
|
||||
* Placed in the public domain
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../test_helper/test_helper.h"
|
||||
#include "crypto_api.h"
|
||||
#include "xmalloc.h"
|
||||
#include "sshbuf.h"
|
||||
|
||||
/* in tests.c */
|
||||
struct sshbuf *load_text_file(const char *name);
|
||||
char *get_json_string(struct sshbuf *content, const char *key, int consume);
|
||||
|
||||
void mldsa_tests(void);
|
||||
|
||||
struct kat {
|
||||
char *seed;
|
||||
char *pk_hash;
|
||||
char *sk_hash;
|
||||
char *msg;
|
||||
char *rand;
|
||||
char *sig_hash;
|
||||
};
|
||||
|
||||
static void
|
||||
load_kats(const char *file, struct kat ***katsp, size_t *nkatsp)
|
||||
{
|
||||
struct sshbuf *json_buf;
|
||||
struct kat *kat = NULL, **kats = NULL;
|
||||
size_t nkats = 0;
|
||||
|
||||
json_buf = load_text_file(file);
|
||||
while (sshbuf_find(json_buf, 0, "key_generation_seed",
|
||||
strlen("key_generation_seed"), NULL) == 0) {
|
||||
kat = xcalloc(1, sizeof(*kat));
|
||||
kat->seed = get_json_string(json_buf, "key_generation_seed", 1);
|
||||
kat->pk_hash = get_json_string(json_buf,
|
||||
"sha3_256_hash_of_verification_key", 1);
|
||||
kat->sk_hash = get_json_string(json_buf,
|
||||
"sha3_256_hash_of_signing_key", 1);
|
||||
kat->msg = get_json_string(json_buf, "message", 1);
|
||||
kat->rand = get_json_string(json_buf, "signing_randomness", 1);
|
||||
kat->sig_hash = get_json_string(json_buf,
|
||||
"sha3_256_hash_of_signature", 1);
|
||||
kats = xrecallocarray(kats, nkats, nkats + 1, sizeof(*kats));
|
||||
kats[nkats++] = kat;
|
||||
}
|
||||
*katsp = kats;
|
||||
*nkatsp = nkats;
|
||||
sshbuf_free(json_buf);
|
||||
}
|
||||
|
||||
static void
|
||||
free_kats(struct kat **kats, size_t nkats)
|
||||
{
|
||||
size_t i;
|
||||
struct kat *kat;
|
||||
|
||||
for (i = 0; i < nkats; i++) {
|
||||
kat = kats[i];
|
||||
free(kat->seed);
|
||||
free(kat->pk_hash);
|
||||
free(kat->sk_hash);
|
||||
free(kat->msg);
|
||||
free(kat->rand);
|
||||
free(kat->sig_hash);
|
||||
free(kat);
|
||||
}
|
||||
free(kats);
|
||||
}
|
||||
|
||||
static void
|
||||
hex2bin(uint8_t *bin, const char *hex, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < len; i++)
|
||||
sscanf(hex + i * 2, "%02hhx", &bin[i]);
|
||||
}
|
||||
|
||||
void
|
||||
mldsa_tests(void)
|
||||
{
|
||||
uint8_t pk[MLDSA44_PUBLICKEYBYTES];
|
||||
uint8_t sk[MLDSA44_SECRETKEYBYTES];
|
||||
uint8_t sig[MLDSA44_SIGBYTES];
|
||||
uint8_t pk_hash[32], sk_hash[32], sig_hash[32];
|
||||
uint8_t expected_pk_hash[32], expected_sk_hash[32];
|
||||
uint8_t expected_sig_hash[32];
|
||||
uint8_t seed[32], rand[32];
|
||||
uint8_t *msg;
|
||||
size_t nkats, i, msglen;
|
||||
struct kat **kats, *kat;
|
||||
|
||||
TEST_START("ML-DSA 44 KATs");
|
||||
load_kats("nistkats-44.json", &kats, &nkats);
|
||||
for (i = 0; i < nkats; i++) {
|
||||
kat = kats[i];
|
||||
test_subtest_info("vector %zu", i);
|
||||
|
||||
hex2bin(seed, kat->seed, 32);
|
||||
hex2bin(expected_pk_hash, kat->pk_hash, 32);
|
||||
hex2bin(expected_sk_hash, kat->sk_hash, 32);
|
||||
|
||||
/* Keypair generation */
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_keypair_seeded(pk,
|
||||
sk, seed), 0);
|
||||
|
||||
sha3_256(pk_hash, pk, sizeof(pk));
|
||||
sha3_256(sk_hash, sk, sizeof(sk));
|
||||
|
||||
ASSERT_MEM_EQ(pk_hash, expected_pk_hash, 32);
|
||||
ASSERT_MEM_EQ(sk_hash, expected_sk_hash, 32);
|
||||
|
||||
msglen = strlen(kat->msg) / 2;
|
||||
msg = malloc(msglen);
|
||||
hex2bin(msg, kat->msg, msglen);
|
||||
hex2bin(rand, kat->rand, 32);
|
||||
hex2bin(expected_sig_hash, kat->sig_hash, 32);
|
||||
|
||||
/* Signing */
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_seeded(sig, msg,
|
||||
msglen, NULL, 0, sk, rand), 0);
|
||||
|
||||
sha3_256(sig_hash, sig, sizeof(sig));
|
||||
ASSERT_MEM_EQ(sig_hash, expected_sig_hash, 32);
|
||||
|
||||
/* Verification */
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_verify(sig, msg,
|
||||
msglen, NULL, 0, pk), 0);
|
||||
free(msg);
|
||||
}
|
||||
free_kats(kats, nkats);
|
||||
TEST_DONE();
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
/* $OpenBSD: test_mldsa_eddsa.c,v 1.1 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for MLDSA44-Ed25519 composite signature
|
||||
*
|
||||
* Placed in the public domain
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "../test_helper/test_helper.h"
|
||||
#include "crypto_api.h"
|
||||
#include "ssherr.h"
|
||||
#include "sshkey.h"
|
||||
#include "sshbuf.h"
|
||||
#include "log.h"
|
||||
|
||||
/* in tests.c */
|
||||
struct sshbuf *load_text_file(const char *name);
|
||||
char *get_json_string(struct sshbuf *content, const char *key, int consume);
|
||||
|
||||
void mldsa_eddsa_tests(void);
|
||||
|
||||
/*
|
||||
* Simple JSON-ish parser for tvec.json.
|
||||
* Extracts the base64 value for a given key and decodes it into a new sshbuf.
|
||||
* Errors cause ASSERT_* failures.
|
||||
*/
|
||||
static struct sshbuf *
|
||||
get_json_b64(struct sshbuf *content, const char *key)
|
||||
{
|
||||
char *b64;
|
||||
struct sshbuf *ret;
|
||||
|
||||
b64 = get_json_string(content, key, 0);
|
||||
ASSERT_PTR_NE(ret = sshbuf_new(), NULL);
|
||||
ASSERT_INT_EQ(sshbuf_b64tod(ret, b64), 0);
|
||||
free(b64);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
onerror(void *fuzz)
|
||||
{
|
||||
fprintf(stderr, "Failed during fuzz:\n");
|
||||
fuzz_dump((struct fuzz *)fuzz);
|
||||
}
|
||||
|
||||
static void
|
||||
sig_fuzz(const uint8_t *m, size_t m_len, const uint8_t *ctx, size_t ctx_len,
|
||||
const uint8_t *pk, const uint8_t *s)
|
||||
{
|
||||
struct fuzz *fuzz;
|
||||
u_int fuzzers = FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP;
|
||||
|
||||
if (test_is_fast())
|
||||
fuzzers &= ~FUZZ_1_BIT_FLIP;
|
||||
if (test_is_slow())
|
||||
fuzzers |= FUZZ_2_BYTE_FLIP; /* FUZZ_2_BIT_FLIP much too slow */
|
||||
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(s, m, m_len,
|
||||
ctx, ctx_len, pk), 0);
|
||||
fuzz = fuzz_begin(fuzzers, s, MLDSA44_ED25519_SIG_SZ);
|
||||
TEST_ONERROR(onerror, fuzz);
|
||||
for(; !fuzz_done(fuzz); fuzz_next(fuzz)) {
|
||||
/* Ensure 1-bit difference at least */
|
||||
if (fuzz_matches_original(fuzz))
|
||||
continue;
|
||||
ASSERT_INT_NE(crypto_sign_mldsa44_ed25519_verify(fuzz_ptr(fuzz),
|
||||
m, m_len, ctx, ctx_len, pk), 0);
|
||||
}
|
||||
fuzz_cleanup(fuzz);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mldsa_eddsa_tests(void)
|
||||
{
|
||||
uint8_t pk[MLDSA44_ED25519_PK_SZ];
|
||||
uint8_t sk[MLDSA44_ED25519_SK_SZ];
|
||||
uint8_t sig[MLDSA44_ED25519_SIG_SZ];
|
||||
struct sshbuf *b_m = NULL, *b_ctx = NULL, *b_pk = NULL;
|
||||
struct sshbuf *b_sk = NULL, *b_s = NULL, *b_sWithContext = NULL;
|
||||
struct sshbuf *json_buf = NULL;
|
||||
const uint8_t *tvec_m;
|
||||
size_t tvec_m_len;
|
||||
const uint8_t *tvec_ctx;
|
||||
size_t tvec_ctx_len;
|
||||
const uint8_t *tvec_pk;
|
||||
const uint8_t *tvec_sk;
|
||||
const uint8_t *tvec_s;
|
||||
const uint8_t *tvec_sWithContext;
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 load test vectors");
|
||||
json_buf = load_text_file("draft-ietf-lamps-pq-composite-sigs.json");
|
||||
b_m = get_json_b64(json_buf, "m");
|
||||
b_ctx = get_json_b64(json_buf, "ctx");
|
||||
b_pk = get_json_b64(json_buf, "pk");
|
||||
b_sk = get_json_b64(json_buf, "sk");
|
||||
b_s = get_json_b64(json_buf, "s");
|
||||
b_sWithContext = get_json_b64(json_buf, "sWithContext");
|
||||
ASSERT_INT_EQ(sshbuf_len(b_pk), MLDSA44_ED25519_PK_SZ);
|
||||
ASSERT_INT_EQ(sshbuf_len(b_sk), MLDSA44_ED25519_SK_SZ);
|
||||
ASSERT_INT_EQ(sshbuf_len(b_s), MLDSA44_ED25519_SIG_SZ);
|
||||
ASSERT_INT_EQ(sshbuf_len(b_sWithContext), MLDSA44_ED25519_SIG_SZ);
|
||||
TEST_DONE();
|
||||
|
||||
tvec_m = sshbuf_ptr(b_m);
|
||||
tvec_m_len = sshbuf_len(b_m);
|
||||
tvec_ctx = sshbuf_ptr(b_ctx);
|
||||
tvec_ctx_len = sshbuf_len(b_ctx);
|
||||
tvec_pk = sshbuf_ptr(b_pk);
|
||||
tvec_sk = sshbuf_ptr(b_sk);
|
||||
tvec_s = sshbuf_ptr(b_s);
|
||||
tvec_sWithContext = sshbuf_ptr(b_sWithContext);
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw self-consistency");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_keygen(pk, sk), 0);
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_sign(sig,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, sk), 0);
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(sig,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, pk), 0);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw KAT key expansion");
|
||||
uint8_t pk_expanded[MLDSA44_ED25519_PK_SZ];
|
||||
uint8_t sk_expanded[MLDSA44_ED25519_SK_SZ];
|
||||
|
||||
/* Expansion: mldsa_seed (sk[0:32]) and ed25519_seed (sk[32:64]) */
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_keygen_seeded(pk_expanded,
|
||||
sk_expanded, tvec_sk, tvec_sk + 32), 0);
|
||||
ASSERT_MEM_EQ(pk_expanded, tvec_pk, MLDSA44_ED25519_PK_SZ);
|
||||
/* sk_expanded should also match tvec_sk */
|
||||
ASSERT_MEM_EQ(sk_expanded, tvec_sk, MLDSA44_ED25519_SK_SZ);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw KAT verify (no context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(tvec_s, tvec_m,
|
||||
tvec_m_len, NULL, 0, tvec_pk), 0);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw KAT verify (with context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(tvec_sWithContext,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, tvec_pk), 0);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw round-trip (no context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_sign(sig, tvec_m, tvec_m_len,
|
||||
NULL, 0, tvec_sk), 0);
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(sig,
|
||||
tvec_m, tvec_m_len, NULL, 0, tvec_pk), 0);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw round-trip (with context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_sign(sig,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, tvec_sk), 0);
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(sig,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, tvec_pk), 0);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 raw KAT verify (no context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(tvec_s, tvec_m,
|
||||
tvec_m_len, NULL, 0, tvec_pk), 0);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 fuzz raw verify (with context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(tvec_sWithContext,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, tvec_pk), 0);
|
||||
sig_fuzz(tvec_m, tvec_m_len, NULL, 0, tvec_pk, tvec_s);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-Ed25519-SHA512 fuzz raw verify (with context)");
|
||||
ASSERT_INT_EQ(crypto_sign_mldsa44_ed25519_verify(tvec_sWithContext,
|
||||
tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len, tvec_pk), 0);
|
||||
sig_fuzz(tvec_m, tvec_m_len, tvec_ctx, tvec_ctx_len,
|
||||
tvec_pk, tvec_sWithContext);
|
||||
TEST_DONE();
|
||||
|
||||
sshbuf_free(json_buf);
|
||||
sshbuf_free(b_m);
|
||||
sshbuf_free(b_ctx);
|
||||
sshbuf_free(b_pk);
|
||||
sshbuf_free(b_sk);
|
||||
sshbuf_free(b_s);
|
||||
sshbuf_free(b_sWithContext);
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
/* $OpenBSD: test_mlkem.c,v 1.1 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for ML-KEM
|
||||
*
|
||||
* Placed in the public domain
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../test_helper/test_helper.h"
|
||||
#include "crypto_api.h"
|
||||
|
||||
struct mlkem768_kat {
|
||||
const char *seed;
|
||||
const char *pk_hash;
|
||||
const char *sk_hash;
|
||||
const char *enc_seed;
|
||||
const char *ct_hash;
|
||||
const char *shared_secret;
|
||||
};
|
||||
|
||||
static const struct mlkem768_kat mlkem768_kats[] = {
|
||||
{
|
||||
"7c9935a0b07694aa0c6d10e4db6b1add2fd81a25"
|
||||
"ccb148032dcd739936737f2d"
|
||||
"8626ed79d451140800e03b59b956f8210e556067"
|
||||
"407d13dc90fa9e8b872bfb8f",
|
||||
"f57262661358cde8d3ebf990e5fd1d5b896c992c"
|
||||
"cfaadb5256b68bbf5943b132",
|
||||
"7deef44965b03d76de543ad6ef9e74a2772fa5a9"
|
||||
"fa0e761120dac767cf0152ef",
|
||||
"147c03f7a5bebba406c8fae1874d7f13c80efe79"
|
||||
"a3a9a874cc09fe76f6997615",
|
||||
"6e777e2cf8054659136a971d9e70252f30122693"
|
||||
"0c19c470ee0688163a63c15b",
|
||||
"e7184a0975ee3470878d2d159ec83129c8aec253"
|
||||
"d4ee17b4810311d198cd0368"
|
||||
},
|
||||
{
|
||||
"d60b93492a1d8c1c7ba6fc0b733137f3406cee81"
|
||||
"10a93f170e7a78658af326d9"
|
||||
"003271531cf27285b8721ed5cb46853043b346a6"
|
||||
"6cba6cf765f1b0eaa40bf672",
|
||||
"7b00751eb9b1253231213f8a14f06f0fe1b7a4fd"
|
||||
"b7d1cfe44c161e577e5e8f0a",
|
||||
"3a8c009e8e648ac572d5592e4a92907fae0c1767"
|
||||
"be41c544b59dc3ffe61f7ded",
|
||||
"cde797df8ce67231f6c5d15811843e01eb2ab84c"
|
||||
"7490931240822adbddd72046",
|
||||
"bce1bf3450f574130b9561ee11565fa41d599d05"
|
||||
"d2136f10ad2c013eb5d13ca9",
|
||||
"5f0c5d9f39d3e724b5a2bd54e69e360f72ffab5d"
|
||||
"4d6cc5e572fecba80acd4796"
|
||||
},
|
||||
{
|
||||
"4b622de1350119c45a9f2e2ef3dc5df50a759d13"
|
||||
"8cdfbd64c81cc7cc2f513345"
|
||||
"e82fcc97ca60ccb27bf6938c975658aeb8b4d37c"
|
||||
"ffbde25d97e561f36c219ade",
|
||||
"9bda55b63cffa9bf953993918b18cd6595ea6433"
|
||||
"b479e89b5cd3c9339e4468cb",
|
||||
"d5fc96564df6e53622b2db8295a80a44e3bad714"
|
||||
"7696e2ad1f728639c98791b1",
|
||||
"f43f68fbd694f0a6d307297110ecd4739876489f"
|
||||
"df07eb9b03364e2ed0ff96e9",
|
||||
"2a8b5d9bdcac1b7ffb6d655368e15148308eee98"
|
||||
"ae34f4105eaae87f24a008a2",
|
||||
"7f3bcc03a35a0030255264914e5d88a0c93611c7"
|
||||
"ca21f0609678a88ca42ce1c9"
|
||||
},
|
||||
{
|
||||
"050d58f9f757edc1e8180e3808b806f5bbb3586d"
|
||||
"b3470b069826d1bb9a4efc2c"
|
||||
"de950541fd53a8a47aaa8cdfe80d928262a5ef7f"
|
||||
"8129ec3ef92f78d7cc32ef60",
|
||||
"647a81f0f1b3e3dacb6e73e900f7c078cdfaa711"
|
||||
"9a5ede48c7685fdb7e0fe2f5",
|
||||
"1cf686cb8732c73a38b35d73b0b28fb120bc89cd"
|
||||
"a1554d9f12adedc057862081",
|
||||
"ea74fbc3c546500ed684bed6fe3c496d3b86d2d6"
|
||||
"dfaf223969b942e9a8c95e85",
|
||||
"1c51c85ce66d80c1f9bb138e5bce84dd75cee426"
|
||||
"0c8817e06c6f2bd920601530",
|
||||
"c630736985fdb7830d7446e18b6b81fa4a707a60"
|
||||
"58964b99190120de85e7559c"
|
||||
},
|
||||
{
|
||||
"66b79b844e0c2adad694e0478661ac46fe6b6001"
|
||||
"f6a71ff8e2f034b1fd8833d3"
|
||||
"be2d3c64d38269a1ee8660b9a2beaeb9f5ac022e"
|
||||
"8f0a357feebfd13b06813854",
|
||||
"811aea11a24a4b09e428415f82ee836e930c3b77"
|
||||
"867aafc5e6728149e3f2bd1b",
|
||||
"6a1ff1351c538a5661fc3576c29408c19f42da36"
|
||||
"88fa16f9ec5ead6a84420db5",
|
||||
"64efa87a12cb96f98b9b81a7e5128a959c74e533"
|
||||
"2aaab0444fca7b4a5e5e0216",
|
||||
"db4dedc1e4d383acaf974fb50ffbf881bd3938ad"
|
||||
"196fb9aebeeb1bf1ddc94e10",
|
||||
"41e078d0d0c4fe5df5c6683171d5c1c3f1ef152c"
|
||||
"4945f9cb299f74278ce4cc4f"
|
||||
}
|
||||
};
|
||||
|
||||
void mlkem_tests(void);
|
||||
|
||||
static void
|
||||
hex2bin(uint8_t *bin, const char *hex, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < len; i++)
|
||||
sscanf(hex + i * 2, "%02hhx", &bin[i]);
|
||||
}
|
||||
|
||||
void
|
||||
mlkem_tests(void)
|
||||
{
|
||||
uint8_t pk[MLKEM768_PUBLICKEYBYTES];
|
||||
uint8_t sk[MLKEM768_SECRETKEYBYTES];
|
||||
uint8_t ct[MLKEM768_CIPHERTEXTBYTES];
|
||||
uint8_t shared_secret[MLKEM768_BYTES], shared_secret2[MLKEM768_BYTES];
|
||||
uint8_t pk_hash[32], sk_hash[32], ct_hash[32];
|
||||
uint8_t expected_pk_hash[32], expected_sk_hash[32];
|
||||
uint8_t expected_ct_hash[32], expected_shared_secret[32];
|
||||
uint8_t seed[64], enc_seed[32];
|
||||
size_t i;
|
||||
|
||||
TEST_START("ML-KEM 768 KATs");
|
||||
for (i = 0; i < sizeof(mlkem768_kats) / sizeof(mlkem768_kats[0]); i++) {
|
||||
test_subtest_info("vector %zu", i);
|
||||
|
||||
hex2bin(seed, mlkem768_kats[i].seed, 64);
|
||||
hex2bin(expected_pk_hash, mlkem768_kats[i].pk_hash, 32);
|
||||
hex2bin(expected_sk_hash, mlkem768_kats[i].sk_hash, 32);
|
||||
|
||||
/* Keypair generation */
|
||||
ASSERT_INT_EQ(crypto_kem_mlkem768_keypair_seeded(pk, sk, seed), 0);
|
||||
|
||||
sha3_256(pk_hash, pk, sizeof(pk));
|
||||
sha3_256(sk_hash, sk, sizeof(sk));
|
||||
|
||||
ASSERT_MEM_EQ(pk_hash, expected_pk_hash, 32);
|
||||
ASSERT_MEM_EQ(sk_hash, expected_sk_hash, 32);
|
||||
|
||||
hex2bin(enc_seed, mlkem768_kats[i].enc_seed, 32);
|
||||
hex2bin(expected_ct_hash, mlkem768_kats[i].ct_hash, 32);
|
||||
hex2bin(expected_shared_secret,
|
||||
mlkem768_kats[i].shared_secret, 32);
|
||||
|
||||
/* Encapsulation */
|
||||
ASSERT_INT_EQ(crypto_kem_mlkem768_enc_seeded(ct, shared_secret,
|
||||
pk, enc_seed), 0);
|
||||
|
||||
sha3_256(ct_hash, ct, sizeof(ct));
|
||||
ASSERT_MEM_EQ(ct_hash, expected_ct_hash, 32);
|
||||
ASSERT_MEM_EQ(shared_secret, expected_shared_secret, 32);
|
||||
|
||||
/* Decapsulation */
|
||||
ASSERT_INT_EQ(crypto_kem_mlkem768_dec(shared_secret2, ct, sk), 0);
|
||||
ASSERT_MEM_EQ(shared_secret, shared_secret2, 32);
|
||||
}
|
||||
TEST_DONE();
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"m": "VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4=",
|
||||
"ctx": "VGhlIGxldGhhcmdpYywgY29sb3JsZXNzIGRvZyBzYXQgYmVuZWF0aCB0aGUgZW5lcmdldGljLCBzdGF0aW9uYXJ5IGZveC4=",
|
||||
"pk": "FlplaQIgVuYEA04nN9VXyMWK4XDhRhnaGaWO6FqoCtiDr5rL89omEFSIf811XxbbHpKBJzROqBqKfbPgsrMRZjBdHeRn5Oi4pK7bshdjBkXm7yCqPfMC50PkzKI5CFTsw13ikA4UmJuBupSxXDzhEchHLCybpQPBdr++Tr4NKh0cEaDi9GFlDdzLsDP/1d9Dh1N57rHOCPLi/7tjmqPYrCzFspEADbBkKBfwNgPRajzMl8FnQB8qQfMzK5tiO6jKEb+fd0C5UhwOYe4NXLazpqGtsV82Z0IC1DrQvHXNvePyHT/hOASYQQKM7D8MUSs954UFZPYFqvQrh1JyRl+87cFioQGOjfn3tt2uhYpMqzyRyeaywjwq8tyJC4ZAGuTTfDqXr76QdvTB4lKX42llgyIIdBwc4DBjugWYEiVR/PxGmzwyIBSM9PgXPAW+ijfEkyqayX0cPQRFaqi6JKxhg0iWADGTssEK8ofZwz4N711co7LRNSqfcRFb+QT9v3aAQS/VZsxyTybLHLpACDsq9qDCctewHEKZpVazOFRkTZlTIsp/YBd9avMTFWIgaxRjnuKiaLpMek0Hlx9BdvSQM9b7zFlIMGw11HBBtg/R22UfK+x2zNqSZeS3ZN6fylfum2YAm7IrNzn4car8g64DfQ6AMZHePK4eql5d5n8iShRAFTRg8jGv6pkaQBM1OaPcWMba1eDicN5pyCaYgwrhYy2yVN3uTOF4/Z1pxZ8XQ3Dx6zkA79f4P7dNhjGdYnlBH1wAnwTdGeP4epk3aF3jR/JJjRx0MxevLEYKN3DrSE580KWTmGEMM9UQcPz9sJ/+VgNkgRKGRXhw001q8vAzEhriL8mFnZhBaCNvGTbckPTH4ri3qWHbiDpztzjqKg7/bmZflQ7N7y3eX8wWSZ0g0Yh9KDJqwsIc7maoD20LxQRCr2dQZJ8mNOjsr+NonCDPBA4usp9i16WU1bBwRb81p+K6MWrax+wG+m2eBn/n/tkXBYYy1r0fBfiTizFQY6bna0HSzXqHkwwmDYc20ZGo77JE4bBlagKFQ12W74bSe7HwP28DxtvWKW56Is6lMuqZVkg8GQMW4Iz3hX9SKBe6/tw06PegPDbp/RfFAxzq9vcb5FU9kshMdnvTAY6I7OjgVGR8FXN4iZARzU5+BBQa4QblkxDUyiPLSjSSAX3oKkWmu9S9LxmrhsHgd2KOqbZL19EoZrx+eQyseaLjDuF569Da6V133Nqej46CPTZNp6ojwNSAjPY2ai1D0hZ8GQpTaeTRRiVcFUps4UHRCsUbBSTC5RJLVoGqj0eORAhib4xp7DGlKf7s1j88ZH1OgOw/rIbFMsyKSQsKKmI22Bo3FW2iVL/SoPGOKDupMQJvolkieVqK0DjUxsfDLf/VpkrM6fH3FIiw6Dz7vSz3CfUIQ0gDfQi/w08WWCP706VHeDwX1rscAvn2Cc6/q3TbP9bMYoEvS04p5LPGeHtvX/PVyfv9JNqAbrRVmtuTAd1rQhiPNHK5JH5feweblxNOsluNH5iJ2tH70R/3LcbL6jiHS9DfoxzHPnX3arWpVF1ZZ4aZivePAOX8B9J7zbxdhhdU1eUNFt+sEuGyA6VsTsHf8fZeXpbPwy1OBRMmNiJ3wG+VQC7guTMjnhs7kljuWlhZ1MlsnGroX7y51x2l78r3ntwiXkpyfpOBiDezTHPu8kYMNkLaZWeo4bygR04SD75GmjwkYGAXKSvL2XMqT8iCO8wQRrKneIeBgmQKojolj5EQlQIYptCzHjq0kVVout5a",
|
||||
"sk": "AdjfWRUtikTjmiXmd17xigBEsg5YwsQ0asN8J9FSF2xb6mwkVGF7+0hHnrixO3EamBFrc/fsrDD68d2bT6F9aA==",
|
||||
"s": "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",
|
||||
"sWithContext": "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"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,114 @@
|
||||
/* $OpenBSD: tests.c,v 1.1 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for crypto ergonomic API
|
||||
*
|
||||
* Placed in the public domain
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "../test_helper/test_helper.h"
|
||||
#include "sshbuf.h"
|
||||
|
||||
void mldsa_tests(void);
|
||||
void mlkem_tests(void);
|
||||
void ed25519_tests(void);
|
||||
void mldsa_eddsa_tests(void);
|
||||
|
||||
struct sshbuf *load_text_file(const char *name);
|
||||
char *get_json_string(struct sshbuf *content, const char *key, int consume);
|
||||
|
||||
static struct sshbuf *
|
||||
load_file(const char *name)
|
||||
{
|
||||
struct sshbuf *ret = NULL;
|
||||
|
||||
ASSERT_INT_EQ(sshbuf_load_file(test_data_file(name), &ret), 0);
|
||||
ASSERT_PTR_NE(ret, NULL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct sshbuf *
|
||||
load_text_file(const char *name)
|
||||
{
|
||||
struct sshbuf *ret = load_file(name);
|
||||
const u_char *p;
|
||||
size_t len;
|
||||
|
||||
/* Trim whitespace at EOL */
|
||||
for (p = sshbuf_ptr(ret); (len = sshbuf_len(ret)) > 0;) {
|
||||
len--;
|
||||
if (p[len] == '\r' || p[len] == '\t' ||
|
||||
p[len] == ' ' || p[len] == '\n')
|
||||
ASSERT_INT_EQ(sshbuf_consume_end(ret, 1), 0);
|
||||
else
|
||||
break;
|
||||
}
|
||||
/* \0 terminate */
|
||||
ASSERT_INT_EQ(sshbuf_put_u8(ret, 0), 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Simple JSON-ish parser for test vectors.
|
||||
* Extracts the value for a given key.
|
||||
* Errors cause ASSERT_* failures.
|
||||
*/
|
||||
char *
|
||||
get_json_string(struct sshbuf *content, const char *key, int consume)
|
||||
{
|
||||
struct sshbuf *tmp;
|
||||
char *k, *ret;
|
||||
size_t off, end_off;
|
||||
u_char c;
|
||||
|
||||
tmp = sshbuf_fromb(content);
|
||||
ASSERT_PTR_NE(tmp, NULL);
|
||||
ASSERT_INT_GT(asprintf(&k, "\"%s\"", key), 0);
|
||||
if (sshbuf_find(tmp, 0, k, strlen(k), &off) != 0) {
|
||||
fprintf(stderr, "Key %s not found in JSON\n", k);
|
||||
ASSERT_INT_EQ(1, 0);
|
||||
}
|
||||
ASSERT_INT_EQ(sshbuf_consume(tmp, off + strlen(k)), 0);
|
||||
free(k);
|
||||
|
||||
/* Skip colon, spaces, commas */
|
||||
while (sshbuf_len(tmp) > 0) {
|
||||
c = *sshbuf_ptr(tmp);
|
||||
if (isspace(c) || c == ':' || c == ',')
|
||||
ASSERT_INT_EQ(sshbuf_consume(tmp, 1), 0);
|
||||
else
|
||||
break;
|
||||
}
|
||||
/* Expect opening quote */
|
||||
ASSERT_INT_EQ(sshbuf_get_u8(tmp, &c), 0);
|
||||
ASSERT_CHAR_EQ(c, '"');
|
||||
/* Find closing quote */
|
||||
ASSERT_INT_EQ(sshbuf_find(tmp, 0, "\"", 1, &end_off), 0);
|
||||
ASSERT_PTR_NE(ret = malloc(end_off + 1), NULL);
|
||||
memcpy(ret, sshbuf_ptr(tmp), end_off);
|
||||
ret[end_off] = '\0';
|
||||
if (consume) {
|
||||
ASSERT_INT_EQ(sshbuf_consume(tmp, end_off), 0);
|
||||
ASSERT_INT_EQ(sshbuf_consume_upto_child(content, tmp), 0);
|
||||
}
|
||||
sshbuf_free(tmp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
tests(void)
|
||||
{
|
||||
mldsa_tests();
|
||||
mlkem_tests();
|
||||
ed25519_tests();
|
||||
mldsa_eddsa_tests();
|
||||
}
|
||||
|
||||
void
|
||||
benchmarks(void)
|
||||
{
|
||||
/* none */
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.15 2026/02/06 23:39:14 dtucker Exp $
|
||||
# $OpenBSD: Makefile,v 1.16 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
PROG=test_hostkeys
|
||||
SRCS=tests.c test_iterate.c
|
||||
@@ -11,7 +11,7 @@ SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
|
||||
SRCS+=addr.c addrmatch.c bitmap.c hostfile.c
|
||||
SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c
|
||||
SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c ssherr-libcrypto.c
|
||||
|
||||
SRCS+=ssh-mldsa-eddsa.c libcrux-mlkem-mldsa.c
|
||||
SRCS+=digest-openssl.c ed25519-openssl.c
|
||||
#SRCS+=digest-libc.c ed25519.c
|
||||
SRCS+=utf8.c
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.21 2026/02/06 23:39:14 dtucker Exp $
|
||||
# $OpenBSD: Makefile,v 1.22 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
PROG=test_kex
|
||||
SRCS=tests.c test_kex.c test_proposal.c
|
||||
@@ -12,6 +12,7 @@ SRCS+=addr.c addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c
|
||||
SRCS+=compat.c
|
||||
SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c
|
||||
SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c ssherr-libcrypto.c
|
||||
SRCS+=libcrux-mlkem-mldsa.c ssh-mldsa-eddsa.c
|
||||
|
||||
SRCS+= kex.c
|
||||
SRCS+= kex-names.c
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.1 2026/05/31 11:39:44 djm Exp $
|
||||
# $OpenBSD: Makefile,v 1.2 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
PROG=test_servconf
|
||||
SRCS=tests.c
|
||||
@@ -16,6 +16,7 @@ SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c
|
||||
SRCS+=utf8.c ssherr-libcrypto.c
|
||||
SRCS+=kex.c kex-names.c packet.c dispatch.c compat.c canohost.c
|
||||
SRCS+=digest-openssl.c ed25519-openssl.c
|
||||
SRCS+=libcrux-mlkem-mldsa.c ssh-mldsa-eddsa.c
|
||||
|
||||
REGRESS_TARGETS=run-regress-${PROG}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.16 2026/02/06 23:39:14 dtucker Exp $
|
||||
# $OpenBSD: Makefile,v 1.17 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
PROG=test_sshkey
|
||||
SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c
|
||||
@@ -11,7 +11,7 @@ SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
|
||||
SRCS+=addr.c addrmatch.c bitmap.c
|
||||
SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c
|
||||
SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c
|
||||
SRCS+=utf8.c ssherr-libcrypto.c
|
||||
SRCS+=utf8.c ssherr-libcrypto.c libcrux-mlkem-mldsa.c ssh-mldsa-eddsa.c
|
||||
|
||||
SRCS+=digest-openssl.c ed25519-openssl.c
|
||||
#SRCS+=digest-libc.c ed25519.c
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
# $OpenBSD: mktestdata.sh,v 1.12 2025/05/06 06:05:48 djm Exp $
|
||||
# $OpenBSD: mktestdata.sh,v 1.13 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
PW=mekmitasdigoat
|
||||
|
||||
@@ -58,16 +58,17 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -f rsa_1 ecdsa_1 ed25519_1
|
||||
rm -f rsa_2 ecdsa_2 ed25519_2
|
||||
rm -f rsa_1 ecdsa_1 ed25519_1 mldsa44_ed25519_1
|
||||
rm -f rsa_2 ecdsa_2 ed25519_2 mldsa44_ed25519_2
|
||||
rm -f rsa_n ecdsa_n # new-format keys
|
||||
rm -f rsa_1_pw ecdsa_1_pw ed25519_1_pw
|
||||
rm -f rsa_1_pw ecdsa_1_pw ed25519_1_pw mldsa44_ed25519_1_pw
|
||||
rm -f rsa_n_pw ecdsa_n_pw
|
||||
rm -f pw *.pub *.bn.* *.param.* *.fp *.fp.bb
|
||||
|
||||
ssh-keygen -t rsa -b 1024 -C "RSA test key #1" -N "" -f rsa_1 -m PEM
|
||||
ssh-keygen -t ecdsa -b 256 -C "ECDSA test key #1" -N "" -f ecdsa_1 -m PEM
|
||||
ssh-keygen -t ed25519 -C "ED25519 test key #1" -N "" -f ed25519_1
|
||||
ssh-keygen -t ssh-mldsa44-ed25519@openssh.com -C "MLDSA44-ED25519 test key #1" -N "" -f mldsa44_ed25519_1
|
||||
ssh-keygen -w "$SK_DUMMY" -t ecdsa-sk -C "ECDSA-SK test key #1" \
|
||||
-N "" -f ecdsa_sk1
|
||||
ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key #1" \
|
||||
@@ -77,6 +78,7 @@ ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key #1" \
|
||||
ssh-keygen -t rsa -b 2048 -C "RSA test key #2" -N "" -f rsa_2 -m PEM
|
||||
ssh-keygen -t ecdsa -b 521 -C "ECDSA test key #2" -N "" -f ecdsa_2 -m PEM
|
||||
ssh-keygen -t ed25519 -C "ED25519 test key #2" -N "" -f ed25519_2
|
||||
ssh-keygen -t ssh-mldsa44-ed25519@openssh.com -C "MLDSA44-ED25519 test key #2" -N "" -f mldsa44_ed25519_2
|
||||
ssh-keygen -w "$SK_DUMMY" -t ecdsa-sk -C "ECDSA-SK test key #2" \
|
||||
-N "" -f ecdsa_sk2
|
||||
ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key #2" \
|
||||
@@ -91,6 +93,7 @@ ssh-keygen -pf ecdsa_n -N ""
|
||||
cp rsa_1 rsa_1_pw
|
||||
cp ecdsa_1 ecdsa_1_pw
|
||||
cp ed25519_1 ed25519_1_pw
|
||||
cp mldsa44_ed25519_1 mldsa44_ed25519_1_pw
|
||||
cp ecdsa_sk1 ecdsa_sk1_pw
|
||||
cp ed25519_sk1 ed25519_sk1_pw
|
||||
cp rsa_1 rsa_n_pw
|
||||
@@ -99,6 +102,7 @@ cp ecdsa_1 ecdsa_n_pw
|
||||
ssh-keygen -pf rsa_1_pw -m PEM -N "$PW"
|
||||
ssh-keygen -pf ecdsa_1_pw -m PEM -N "$PW"
|
||||
ssh-keygen -pf ed25519_1_pw -N "$PW"
|
||||
ssh-keygen -pf mldsa44_ed25519_1_pw -N "$PW"
|
||||
ssh-keygen -pf ecdsa_sk1_pw -m PEM -N "$PW"
|
||||
ssh-keygen -pf ed25519_sk1_pw -N "$PW"
|
||||
ssh-keygen -pf rsa_n_pw -N "$PW"
|
||||
@@ -119,6 +123,9 @@ ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
|
||||
ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
|
||||
-Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
|
||||
-V 19990101:20110101 -z 4 ed25519_1.pub
|
||||
ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
|
||||
-Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
|
||||
-V 19990101:20110101 -z 4 mldsa44_ed25519_1.pub
|
||||
ssh-keygen -s rsa_2 -I hugo -n user1,user2 \
|
||||
-Oforce-command=/bin/ls -Ono-port-forwarding -Osource-address=10.0.0.0/8 \
|
||||
-V 19990101:20110101 -z 4 ecdsa_sk1.pub
|
||||
@@ -145,6 +152,8 @@ ssh-keygen -s ecdsa_1 -I julius -n host1,host2 -h \
|
||||
-V 19990101:20110101 -z 7 ecdsa_1.pub
|
||||
ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
|
||||
-V 19990101:20110101 -z 8 ed25519_1.pub
|
||||
ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
|
||||
-V 19990101:20110101 -z 8 mldsa44_ed25519_1.pub
|
||||
ssh-keygen -s ecdsa_1 -I julius -n host1,host2 -h \
|
||||
-V 19990101:20110101 -z 7 ecdsa_sk1.pub
|
||||
ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
|
||||
@@ -153,28 +162,33 @@ ssh-keygen -s ed25519_1 -I julius -n host1,host2 -h \
|
||||
ssh-keygen -lf rsa_1 | awk '{print $2}' > rsa_1.fp
|
||||
ssh-keygen -lf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp
|
||||
ssh-keygen -lf ed25519_1 | awk '{print $2}' > ed25519_1.fp
|
||||
ssh-keygen -lf mldsa44_ed25519_1 | awk '{print $2}' > mldsa44_ed25519_1.fp
|
||||
ssh-keygen -lf ecdsa_sk1 | awk '{print $2}' > ecdsa_sk1.fp
|
||||
ssh-keygen -lf ed25519_sk1 | awk '{print $2}' > ed25519_sk1.fp
|
||||
ssh-keygen -lf rsa_2 | awk '{print $2}' > rsa_2.fp
|
||||
ssh-keygen -lf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp
|
||||
ssh-keygen -lf ed25519_2 | awk '{print $2}' > ed25519_2.fp
|
||||
ssh-keygen -lf mldsa44_ed25519_2 | awk '{print $2}' > mldsa44_ed25519_2.fp
|
||||
ssh-keygen -lf ecdsa_sk2 | awk '{print $2}' > ecdsa_sk2.fp
|
||||
ssh-keygen -lf ed25519_sk2 | awk '{print $2}' > ed25519_sk2.fp
|
||||
|
||||
ssh-keygen -lf rsa_1-cert.pub | awk '{print $2}' > rsa_1-cert.fp
|
||||
ssh-keygen -lf ecdsa_1-cert.pub | awk '{print $2}' > ecdsa_1-cert.fp
|
||||
ssh-keygen -lf ed25519_1-cert.pub | awk '{print $2}' > ed25519_1-cert.fp
|
||||
ssh-keygen -lf mldsa44_ed25519_1-cert.pub | awk '{print $2}' > mldsa44_ed25519_1-cert.fp
|
||||
ssh-keygen -lf ecdsa_sk1-cert.pub | awk '{print $2}' > ecdsa_sk1-cert.fp
|
||||
ssh-keygen -lf ed25519_sk1-cert.pub | awk '{print $2}' > ed25519_sk1-cert.fp
|
||||
|
||||
ssh-keygen -Bf rsa_1 | awk '{print $2}' > rsa_1.fp.bb
|
||||
ssh-keygen -Bf ecdsa_1 | awk '{print $2}' > ecdsa_1.fp.bb
|
||||
ssh-keygen -Bf ed25519_1 | awk '{print $2}' > ed25519_1.fp.bb
|
||||
ssh-keygen -Bf mldsa44_ed25519_1 | awk '{print $2}' > mldsa44_ed25519_1.fp.bb
|
||||
ssh-keygen -Bf ecdsa_sk1 | awk '{print $2}' > ecdsa_sk1.fp.bb
|
||||
ssh-keygen -Bf ed25519_sk1 | awk '{print $2}' > ed25519_sk1.fp.bb
|
||||
ssh-keygen -Bf rsa_2 | awk '{print $2}' > rsa_2.fp.bb
|
||||
ssh-keygen -Bf ecdsa_2 | awk '{print $2}' > ecdsa_2.fp.bb
|
||||
ssh-keygen -Bf ed25519_2 | awk '{print $2}' > ed25519_2.fp.bb
|
||||
ssh-keygen -Bf mldsa44_ed25519_2 | awk '{print $2}' > mldsa44_ed25519_2.fp.bb
|
||||
ssh-keygen -Bf ecdsa_sk2 | awk '{print $2}' > ecdsa_sk2.fp.bb
|
||||
ssh-keygen -Bf ed25519_sk2 | awk '{print $2}' > ed25519_sk2.fp.bb
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: test_file.c,v 1.13 2025/05/06 06:05:48 djm Exp $ */
|
||||
/* $OpenBSD: test_file.c,v 1.14 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for sshkey.h key management API
|
||||
*
|
||||
@@ -317,6 +317,71 @@ sshkey_file_tests(void)
|
||||
|
||||
sshkey_free(k1);
|
||||
|
||||
TEST_START("parse MLDSA44-ED25519 from private");
|
||||
buf = load_file("mldsa44_ed25519_1");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
sshbuf_free(buf);
|
||||
ASSERT_PTR_NE(k1, NULL);
|
||||
ASSERT_INT_EQ(k1->type, KEY_MLDSA44_ED25519);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("parse MLDSA44-ED25519 from private w/ passphrase");
|
||||
buf = load_file("mldsa44_ed25519_1_pw");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf,
|
||||
(const char *)sshbuf_ptr(pw), &k2, NULL), 0);
|
||||
sshbuf_free(buf);
|
||||
ASSERT_PTR_NE(k2, NULL);
|
||||
ASSERT_INT_EQ(sshkey_equal(k1, k2), 1);
|
||||
sshkey_free(k2);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("load MLDSA44-ED25519 from public");
|
||||
ASSERT_INT_EQ(sshkey_load_public(
|
||||
test_data_file("mldsa44_ed25519_1.pub"), &k2, NULL), 0);
|
||||
ASSERT_PTR_NE(k2, NULL);
|
||||
ASSERT_INT_EQ(sshkey_equal(k1, k2), 1);
|
||||
sshkey_free(k2);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("load MLDSA44-ED25519 cert");
|
||||
ASSERT_INT_EQ(sshkey_load_cert(
|
||||
test_data_file("mldsa44_ed25519_1"), &k2), 0);
|
||||
ASSERT_PTR_NE(k2, NULL);
|
||||
ASSERT_INT_EQ(k2->type, KEY_MLDSA44_ED25519_CERT);
|
||||
ASSERT_INT_EQ(sshkey_equal(k1, k2), 0);
|
||||
ASSERT_INT_EQ(sshkey_equal_public(k1, k2), 1);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-ED25519 key hex fingerprint");
|
||||
buf = load_text_file("mldsa44_ed25519_1.fp");
|
||||
cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA256, SSH_FP_BASE64);
|
||||
ASSERT_PTR_NE(cp, NULL);
|
||||
ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
|
||||
sshbuf_free(buf);
|
||||
free(cp);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-ED25519 cert hex fingerprint");
|
||||
buf = load_text_file("mldsa44_ed25519_1-cert.fp");
|
||||
cp = sshkey_fingerprint(k2, SSH_DIGEST_SHA256, SSH_FP_BASE64);
|
||||
ASSERT_PTR_NE(cp, NULL);
|
||||
ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
|
||||
sshbuf_free(buf);
|
||||
free(cp);
|
||||
sshkey_free(k2);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("MLDSA44-ED25519 key bubblebabble fingerprint");
|
||||
buf = load_text_file("mldsa44_ed25519_1.fp.bb");
|
||||
cp = sshkey_fingerprint(k1, SSH_DIGEST_SHA1, SSH_FP_BUBBLEBABBLE);
|
||||
ASSERT_PTR_NE(cp, NULL);
|
||||
ASSERT_STRING_EQ(cp, (const char *)sshbuf_ptr(buf));
|
||||
sshbuf_free(buf);
|
||||
free(cp);
|
||||
TEST_DONE();
|
||||
|
||||
sshkey_free(k1);
|
||||
|
||||
TEST_START("parse ECDSA-SK from private");
|
||||
buf = load_file("ecdsa_sk1");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: test_fuzz.c,v 1.15 2025/05/06 06:05:48 djm Exp $ */
|
||||
/* $OpenBSD: test_fuzz.c,v 1.16 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Fuzz tests for key parsing
|
||||
*
|
||||
@@ -46,10 +46,12 @@ public_fuzz(struct sshkey *k)
|
||||
u_int fuzzers = FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP |
|
||||
FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END;
|
||||
|
||||
if (test_is_fast())
|
||||
/* MLDSA44_ED25519 keys are large and slow to fuzz */
|
||||
if (test_is_fast() || sshkey_type_plain(k->type) == KEY_MLDSA44_ED25519)
|
||||
fuzzers &= ~FUZZ_1_BIT_FLIP;
|
||||
if (test_is_slow())
|
||||
fuzzers |= FUZZ_2_BIT_FLIP | FUZZ_2_BYTE_FLIP;
|
||||
|
||||
ASSERT_PTR_NE(buf = sshbuf_new(), NULL);
|
||||
ASSERT_INT_EQ(sshkey_putb(k, buf), 0);
|
||||
fuzz = fuzz_begin(fuzzers, sshbuf_mutable_ptr(buf), sshbuf_len(buf));
|
||||
@@ -74,7 +76,8 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
|
||||
u_int fuzzers = FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
|
||||
FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END;
|
||||
|
||||
if (test_is_fast())
|
||||
/* MLDSA44_ED25519 keys are large and slow to fuzz */
|
||||
if (test_is_fast() || sshkey_type_plain(k->type) == KEY_MLDSA44_ED25519)
|
||||
fuzzers &= ~FUZZ_2_BYTE_FLIP;
|
||||
if (test_is_slow())
|
||||
fuzzers |= FUZZ_2_BIT_FLIP;
|
||||
@@ -218,6 +221,32 @@ sshkey_fuzz_tests(void)
|
||||
fuzz_cleanup(fuzz);
|
||||
TEST_DONE();
|
||||
|
||||
/* MLDSA44-ED25519 are large and slow to fuzz */
|
||||
TEST_START("fuzz MLDSA44-ED25519 private");
|
||||
buf = load_file("mldsa44_ed25519_1");
|
||||
fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf),
|
||||
sshbuf_len(buf));
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
sshkey_free(k1);
|
||||
sshbuf_free(buf);
|
||||
ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
|
||||
TEST_ONERROR(onerror, fuzz);
|
||||
for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
|
||||
r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
|
||||
ASSERT_INT_EQ(r, 0);
|
||||
if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
|
||||
sshkey_free(k1);
|
||||
sshbuf_reset(fuzzed);
|
||||
if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
|
||||
break;
|
||||
/* MLDSA44_ED25519 keys are large and slow to fuzz */
|
||||
if (!test_is_slow() || i >= NUM_FAST_BASE64_TESTS)
|
||||
break;
|
||||
}
|
||||
sshbuf_free(fuzzed);
|
||||
fuzz_cleanup(fuzz);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("fuzz RSA public");
|
||||
buf = load_file("rsa_1");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
@@ -261,6 +290,21 @@ sshkey_fuzz_tests(void)
|
||||
sshkey_free(k1);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("fuzz MLDSA44-ED25519 public");
|
||||
buf = load_file("mldsa44_ed25519_1");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
sshbuf_free(buf);
|
||||
public_fuzz(k1);
|
||||
sshkey_free(k1);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("fuzz MLDSA44-ED25519 cert");
|
||||
ASSERT_INT_EQ(sshkey_load_cert(
|
||||
test_data_file("mldsa44_ed25519_1"), &k1), 0);
|
||||
public_fuzz(k1);
|
||||
sshkey_free(k1);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("fuzz RSA sig");
|
||||
buf = load_file("rsa_1");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
@@ -302,6 +346,14 @@ sshkey_fuzz_tests(void)
|
||||
sshkey_free(k1);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("fuzz MLDSA44-ED25519 sig");
|
||||
buf = load_file("mldsa44_ed25519_1");
|
||||
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
|
||||
sshbuf_free(buf);
|
||||
sig_fuzz(k1, NULL);
|
||||
sshkey_free(k1);
|
||||
TEST_DONE();
|
||||
|
||||
/* XXX fuzz decoded new-format blobs too */
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: test_sshkey.c,v 1.33 2026/03/06 06:57:33 dtucker Exp $ */
|
||||
/* $OpenBSD: test_sshkey.c,v 1.34 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for sshkey.h key management API
|
||||
*
|
||||
@@ -274,6 +274,15 @@ sshkey_tests(void)
|
||||
k1 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("new/free KEY_MLDSA44_ED25519");
|
||||
k1 = sshkey_new(KEY_MLDSA44_ED25519);
|
||||
ASSERT_PTR_NE(k1, NULL);
|
||||
ASSERT_PTR_EQ(k1->mldsa_ed25519_sk, NULL);
|
||||
ASSERT_PTR_EQ(k1->mldsa_ed25519_pk, NULL);
|
||||
sshkey_free(k1);
|
||||
k1 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("generate KEY_RSA too small modulus");
|
||||
ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 128, &k1),
|
||||
SSH_ERR_KEY_LENGTH);
|
||||
@@ -326,6 +335,16 @@ sshkey_tests(void)
|
||||
ASSERT_PTR_NE(kf->ed25519_sk, NULL);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("generate KEY_MLDSA44_ED25519");
|
||||
ASSERT_INT_EQ(sshkey_generate(KEY_MLDSA44_ED25519, 256, &k1), 0);
|
||||
ASSERT_PTR_NE(k1, NULL);
|
||||
ASSERT_INT_EQ(k1->type, KEY_MLDSA44_ED25519);
|
||||
ASSERT_PTR_NE(k1->mldsa_ed25519_pk, NULL);
|
||||
ASSERT_PTR_NE(k1->mldsa_ed25519_sk, NULL);
|
||||
sshkey_free(k1);
|
||||
k1 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("demote KEY_RSA");
|
||||
ASSERT_INT_EQ(sshkey_from_private(kr, &k1), 0);
|
||||
ASSERT_PTR_NE(k1, NULL);
|
||||
@@ -378,6 +397,23 @@ sshkey_tests(void)
|
||||
k1 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("demote KEY_MLDSA44_ED25519");
|
||||
ASSERT_INT_EQ(sshkey_generate(KEY_MLDSA44_ED25519, 256, &k2), 0);
|
||||
ASSERT_INT_EQ(sshkey_from_private(k2, &k1), 0);
|
||||
ASSERT_PTR_NE(k1, NULL);
|
||||
ASSERT_PTR_NE(k2, k1);
|
||||
ASSERT_INT_EQ(k1->type, KEY_MLDSA44_ED25519);
|
||||
ASSERT_PTR_NE(k1->mldsa_ed25519_pk, NULL);
|
||||
ASSERT_PTR_EQ(k1->mldsa_ed25519_sk, NULL);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("equal KEY_MLDSA44_ED25519/demoted KEY_MLDSA44_ED25519");
|
||||
ASSERT_INT_EQ(sshkey_equal(k2, k1), 1);
|
||||
sshkey_free(k1);
|
||||
sshkey_free(k2);
|
||||
k1 = k2 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("equal mismatched key types");
|
||||
ASSERT_INT_EQ(sshkey_equal(kd, kr), 0);
|
||||
ASSERT_INT_EQ(sshkey_equal(kd, ke), 0);
|
||||
@@ -399,6 +435,12 @@ sshkey_tests(void)
|
||||
ASSERT_INT_EQ(sshkey_equal(kf, k1), 0);
|
||||
sshkey_free(k1);
|
||||
k1 = NULL;
|
||||
ASSERT_INT_EQ(sshkey_generate(KEY_MLDSA44_ED25519, 256, &k1), 0);
|
||||
ASSERT_INT_EQ(sshkey_generate(KEY_MLDSA44_ED25519, 256, &k2), 0);
|
||||
ASSERT_INT_EQ(sshkey_equal(k2, k1), 0);
|
||||
sshkey_free(k1);
|
||||
sshkey_free(k2);
|
||||
k1 = k2 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
sshkey_free(kr);
|
||||
@@ -454,6 +496,52 @@ sshkey_tests(void)
|
||||
sshbuf_reset(b);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("certify key MLDSA44-ED25519");
|
||||
ASSERT_INT_EQ(sshkey_load_public(
|
||||
test_data_file("mldsa44_ed25519_1.pub"), &k1, NULL), 0);
|
||||
k2 = get_private("mldsa44_ed25519_2");
|
||||
ASSERT_INT_EQ(sshkey_to_certified(k1), 0);
|
||||
ASSERT_PTR_NE(k1->cert, NULL);
|
||||
k1->cert->type = SSH2_CERT_TYPE_USER;
|
||||
k1->cert->serial = 1234;
|
||||
k1->cert->key_id = strdup("estragon");
|
||||
ASSERT_PTR_NE(k1->cert->key_id, NULL);
|
||||
k1->cert->principals = calloc(4, sizeof(*k1->cert->principals));
|
||||
ASSERT_PTR_NE(k1->cert->principals, NULL);
|
||||
k1->cert->principals[0] = strdup("estragon");
|
||||
k1->cert->principals[1] = strdup("vladimir");
|
||||
k1->cert->principals[2] = strdup("pozzo");
|
||||
k1->cert->principals[3] = strdup("lucky");
|
||||
ASSERT_PTR_NE(k1->cert->principals[0], NULL);
|
||||
ASSERT_PTR_NE(k1->cert->principals[1], NULL);
|
||||
ASSERT_PTR_NE(k1->cert->principals[2], NULL);
|
||||
ASSERT_PTR_NE(k1->cert->principals[3], NULL);
|
||||
k1->cert->nprincipals = 4;
|
||||
k1->cert->valid_after = 0;
|
||||
k1->cert->valid_before = (uint64_t)-1;
|
||||
sshbuf_free(k1->cert->critical);
|
||||
k1->cert->critical = sshbuf_new();
|
||||
ASSERT_PTR_NE(k1->cert->critical, NULL);
|
||||
sshbuf_free(k1->cert->extensions);
|
||||
k1->cert->extensions = sshbuf_new();
|
||||
ASSERT_PTR_NE(k1->cert->extensions, NULL);
|
||||
put_opt(k1->cert->critical, "force-command", "/usr/bin/true");
|
||||
put_opt(k1->cert->critical, "source-address", "127.0.0.1");
|
||||
put_opt(k1->cert->extensions, "permit-X11-forwarding", NULL);
|
||||
put_opt(k1->cert->extensions, "permit-agent-forwarding", NULL);
|
||||
ASSERT_INT_EQ(sshkey_from_private(k2, &k1->cert->signature_key), 0);
|
||||
ASSERT_INT_EQ(sshkey_certify(k1, k2, NULL, NULL, NULL), 0);
|
||||
b = sshbuf_new();
|
||||
ASSERT_PTR_NE(b, NULL);
|
||||
ASSERT_INT_EQ(sshkey_putb(k1, b), 0);
|
||||
ASSERT_INT_EQ(sshkey_from_blob(sshbuf_ptr(b), sshbuf_len(b), &k3), 0);
|
||||
sshkey_free(k1);
|
||||
sshkey_free(k2);
|
||||
sshkey_free(k3);
|
||||
k1 = k2 = k3 = NULL;
|
||||
sshbuf_reset(b);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("sign and verify RSA");
|
||||
k1 = get_private("rsa_1");
|
||||
ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa_2.pub"), &k2,
|
||||
@@ -505,6 +593,16 @@ sshkey_tests(void)
|
||||
k1 = k2 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("sign and verify MLDSA44-ED25519");
|
||||
k1 = get_private("mldsa44_ed25519_1");
|
||||
ASSERT_INT_EQ(sshkey_load_public(
|
||||
test_data_file("mldsa44_ed25519_2.pub"), &k2, NULL), 0);
|
||||
signature_tests(k1, k2, NULL);
|
||||
sshkey_free(k1);
|
||||
sshkey_free(k2);
|
||||
k1 = k2 = NULL;
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("nested certificate");
|
||||
ASSERT_INT_EQ(sshkey_load_cert(test_data_file("rsa_1"), &k1), 0);
|
||||
ASSERT_INT_EQ(sshkey_load_public(test_data_file("rsa_1.pub"), &k2,
|
||||
@@ -584,6 +682,15 @@ sshkey_benchmarks(void)
|
||||
TEST_DONE();
|
||||
BENCH_FINISH("keys");
|
||||
|
||||
BENCH_START("generate MLDSA44-ED25519");
|
||||
TEST_START("generate KEY_MLDSA44_ED25519");
|
||||
ASSERT_INT_EQ(sshkey_generate(KEY_MLDSA44_ED25519, 256, &k), 0);
|
||||
ASSERT_PTR_NE(k, NULL);
|
||||
sshkey_free(k);
|
||||
k = NULL;
|
||||
TEST_DONE();
|
||||
BENCH_FINISH("keys");
|
||||
|
||||
#ifdef WITH_OPENSSL
|
||||
/* sign */
|
||||
signature_benchmark("RSA-1024/SHA1", KEY_RSA, 1024, "ssh-rsa", 0);
|
||||
@@ -596,6 +703,7 @@ sshkey_benchmarks(void)
|
||||
signature_benchmark("ECDSA-384", KEY_ECDSA, 384, NULL, 0);
|
||||
signature_benchmark("ECDSA-521", KEY_ECDSA, 521, NULL, 0);
|
||||
signature_benchmark("ED25519", KEY_ED25519, 0, NULL, 0);
|
||||
signature_benchmark("MLDSA44-ED25519", KEY_MLDSA44_ED25519, 0, NULL, 0);
|
||||
|
||||
/* verify */
|
||||
signature_benchmark("RSA-1024/SHA1", KEY_RSA, 1024, "ssh-rsa", 1);
|
||||
@@ -609,4 +717,5 @@ sshkey_benchmarks(void)
|
||||
signature_benchmark("ECDSA-521", KEY_ECDSA, 521, NULL, 1);
|
||||
#endif /* WITH_OPENSSL */
|
||||
signature_benchmark("ED25519", KEY_ED25519, 0, NULL, 1);
|
||||
signature_benchmark("MLDSA44-ED25519", KEY_MLDSA44_ED25519, 0, NULL, 1);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@@ -0,0 +1 @@
|
||||
SHA256:MHrtMS/Vf35zxTemIBpFyKqv9rT1bd1XMLqM9CnT8WY
|
||||
@@ -0,0 +1 @@
|
||||
ssh-mldsa44-ed25519-cert-v01@openssh.com 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 MLDSA44-ED25519 test key #1
|
||||
@@ -0,0 +1 @@
|
||||
SHA256:MHrtMS/Vf35zxTemIBpFyKqv9rT1bd1XMLqM9CnT8WY
|
||||
@@ -0,0 +1 @@
|
||||
xehik-vycid-vovos-cumor-hydoz-zimyd-pidut-rugyv-keseb-nupyb-ryxux
|
||||
@@ -0,0 +1 @@
|
||||
ssh-mldsa44-ed25519@openssh.com AAAAH3NzaC1tbGRzYTQ0LWVkMjU1MTlAb3BlbnNzaC5jb20AAAVA8QQbc4KQ8kqE9dEtVE6wZo/v4XRmRufNJGj9GlPtJR+5F5Ubvez2tTfW2p4x0BFXxgT1D+BPU2NFqlfEcOgV6YEzPmlU7zHAF0P4vM3U9SBjHyXu7LKTsHcd38m5iK+52URdgvM1gKkzgrcqA/bcXbNtZU3HKYPdh0IAYsy37v6wTVJ3E9yLjxEK7aBoLlUnXHSIOOe3DtYSXqsmrQflSZ8WQUDY1mmELPOaB2bOJ9LMxJHI5ATj0LFke0phWSzIy1bC7218mz9j8zagrAPvybGl/NioRP5Vx61HXND/CUWr3i7H92sWFgKgsaPqs8c6qWggoBzu4HuIb6GtGfMjoVWmfkFWMGjb4jHOaVPmrb9DVppP2ZWL99al2Ax9Rds72hAJUcSBGWk9hpQX2P4aBqBonh6J/xUjaHsGrFah54UWY2M5xOSB5cLobtuzheizUrG1UeWTFWHTPXZrz6FjI3gmhmXZuMJZLrh9xYcVYqbWH8wJWo5tnrkR3k7LKVkJXeeZ+Gu0DNyOhMmnblt1Mcn9P+u5NKAZutNebuzOF91d5y7m+sToM+H9EM+rsHKOrNpvdvcEZ5baN7Y/jqzn94LryOHTdQ3ybl+t17QOy2QiAtKxnsrGLSv+MgMW/q7+/u5vUt82/OjtjQXdEGZmZBugL4BK+Z5bSp7qRq/F9mFAmLsEkNB0pgtcxjEjCRqo1lfTqhZfXJ/cHGeAiRmGKcaFFq+uFw6ayjD5NXAJ4VhaVzKvbCi19mi/QDVotcWN6xX0t883DP7jp1yc+sy1Mtyc3N92+A+m/CBa9y7nXv3iAcLPeoH5aLzepwD/0uk8lVqWNGPMSm136EVSXBd47Sa7bsjqYxEN1evmo/ZgphDji7U2y5jLuBg5JTNfDjbRJdF6Xw3HT4h+mLrZk+iiHzkSKh9XI6UI3AVzoqFZ9S88FpYnqCdhh/qaAruEiYSKjUDr10rJ9Qj57BRo5BFxHNsNr+9Xe3UoYDdh5uhN3OjCYKNC5wVQ1DPaevnCiet9k7TLkAk7eHl4r5kS6rCUJByBXmDp6j1TsRrljCXzSUtOQFXQF3GfVU8OtxWchmoMmj27MD2AhmREQWqepAaehUk5Tq27stTtXJDSOZbTHiTMFBCR/OJKTCkwHWV9IM48oZ6doxW9nWZOaL57p7smNP31PCK7RqOiF0xV+/hrzG3Zdg/7F0S7s7smDUrX9xdUrs/F3gd3EvWg+SKma7NxfUxLjYF3TIqwa3UJw2miUR6VlbEw8Su7NQUPDsD1uRGL9Q8J+L4ie7hSJ3BoyY6AgpnK58T8o+DSywbmbLscY7+UKGBa+SD3xT9OlitNQ0K9GF59wO/svOlzcfDmDxKk6/LWSc55LjWlcD73hYjGgLgQWA0MDDQLrxpeUArCEmbhYvQL2yk90SwgQeX/DieG51R54EHiWXTALWY9HJEZ3+b1gzvsP/YqA+XawDTjoGWL+0rp+P6lMFbnu4wK4m5YLZv/+B8jD0l00al3rQLdVnwiZmNVZFtbgIHUX++lGAa/0S4PS5Wgn7qliXjXH9ObZ8TsFR6useXZDUnlKVuEk3y+wvPGd7M6s/jpdr7+BgjKsYItoszLOhMGUtYqOOFP2hdi+XtKlK6TYQfJT1NcpdT+CnyzNx1vrqdEd4FO9DrqL3TZAOvdEJm1nqSUChlTA4caZ4X1P2pmBJeOC07/0oiR+hHNfmtKcSI+vjBXWNYa92XQ8HhkauyLiVfR4HzDQ/JVAUSuFD4T/7i/kgTTETX6ThIgQbxltm8XE8OoTKcW MLDSA44-ED25519 test key #1
|
||||
@@ -0,0 +1,59 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
SKsHIisqSi1zPyq0OdyZgY/OqsRW3ck8NJc=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@@ -0,0 +1,58 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@@ -0,0 +1 @@
|
||||
SHA256:fkgm6buCjmefUacy+TObQT3vsbO08/z6D8VHKqlMh/4
|
||||
@@ -0,0 +1 @@
|
||||
xobol-manef-nufyk-niteb-gyseb-mugis-myfin-meroc-mypac-fisof-vexex
|
||||
@@ -0,0 +1 @@
|
||||
ssh-mldsa44-ed25519@openssh.com AAAAH3NzaC1tbGRzYTQ0LWVkMjU1MTlAb3BlbnNzaC5jb20AAAVA5zLreQ9ERxvVS2e4P07rMVI6JorQBpoUj4PuKRsTdwQob8fqEAWmV0EGtLV1/l+zeAHjLikKVPllVKZWy6s8y9IOC85vrtPnpE8+59uVcDZAPhgrK22IRMgOqPwW6VMS4vRArnsuqSnZw6wP4XeoI9gOOvvyD1coqAvpalhrQP0tehQKGxTKXDp0MFltTCD+nhf1skWL8JhHSQSE+CSJG9bkQ4PLQ1p+KcJ9D8aF72neJbHvHUWXawFygfYWHE7HUU+ctGo1wymz8ZrEesmWDotRap5vvTRf04dgYiEUSYKVC43VcNKKbEMX9xs5QIOzAdB00oqxeqHz2MEFygEoiIRO6Le7QKZb+wBLk+BjDfzcCRM+tFJQdZlCBeslDCPH9/8pqmwnjCYtKvtXHaQkRA76Y4nIrkrd13jR3xFNaCATFexdUugg2qmWXSqZfPR99WKVP4i5iv5bYvu9K2h8VhSZnDo1/47pmPFPLm+pkL/70pzL2g7iYMB5zsIQ+KoB9f7liNkYVp14j4HxQwGHaT8mZZdZSEtS2nSLbxN/TbkoXODfiQ3ugZlnHZelZdYpfGbUb+8rFeJ6XeecbvblFuouNjEYmpiwIZ4rAXe66c44eyrx0Iu6lyKPZNju/DDObzfdBETpjxNAZwdPW/x7e4Am0zkzuFFTx/PPz8Xicst3Hfrpfl98hDM3zNwVYUdRc/Ek8pLunRpDut9jNptnY06itUbzyg9aHsNl9kgNgoF6QlUc0vZrzQ95+KNVsH/4N4KRqdMlQqNgwarTsiX+LY9cDpr0RVxEqmeKJKSxHBqhzEJMJXNl+egu7ZyuiKMe+RJU2gKoX1zUDCZ3ncbDmVmNvIm8AGa4LWHRDpQ8OwPanW09DzhDBJDULtJCG24MIJ4Q8/oE4YKqFhMHr9MNIllym1oiE2HZs5/bGtGCQcWB530l5gwv5ebVWrM1fYFa9XkSAVW0VWFrbQ92SsgwBm7IhTUh5V8lPrYmOMaxP4YuSlk98CDsVAPoYYzsLO2jinkfnZOvwqFVQwPFu0RmzM4bz1uG8yz+GIRbkZojsZO381h1V1jVofSUX1PXuRE04JGjNf6uhboK/OoBdg5GMxLg6CJhqf/k5+7CM5SEVkGpmby9eMPjo66yQwo7+i5AD8HK8JAc/w7vJCvHx7xSLNamy/D8VRD4xs7DJLGUXZ5pTn+IRQJTfYjK+LhekIVXpeKypJNM1ZRPhyRpzBZOkq1WKSslq9IwFMKUIb94OAlt61PY3uIbMttS0IA3n62LQFsjVHqS40CFy3fU4GTJfbwBiEpJ5HToftndJ6C9AFoeiJj+YUtXS1MOkvpgycFwTPYx6r69xKZp6C+KK2Bfc0iXKo8jPLJUkCiH6XjzcWCvgKgLFxrO0hhTDSMKwRRalI1xc9yCuncYEduouXBuuwT8CsZdep9KD1PzN6JOxVyfpRirAZaeG53JofGSsbnSw/YMxDWn3LDJNPKuRJEc22GN5Aq4zfHx40rhorl+DDTvAXXkBTohxduEkB+Hhfpe131EnP3clvsIpSipIokBshmD1URBeNNrML80k8z3xR4Sy8q2NX5ubC37gadF+17wtxD/jRH4DBEnKrev93bSLQq2/UrigHRUY1ixlkt7Z5eBOCNjADou5t7TV8ZC4o5Q2N2ndtyKefc7xRwx/EoMbNYP6izYFthOUvzNw8QMbK2RJrGtPOxjwKS1ckHBWuYy+maKCtkGl8Z0pcTJWMAMdpUDKjpKvymo6ljuRnkrBzBUOSUybHZlxlhoTl28b2yg MLDSA44-ED25519 test key #2
|
||||
@@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.7 2026/02/06 23:39:14 dtucker Exp $
|
||||
# $OpenBSD: Makefile,v 1.8 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
PROG=test_sshsig
|
||||
SRCS=tests.c
|
||||
@@ -11,7 +11,7 @@ SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
|
||||
SRCS+=addr.c addrmatch.c bitmap.c sshsig.c
|
||||
SRCS+=cipher-chachapoly.c chacha.c poly1305.c ssh-ecdsa-sk.c ssh-sk.c
|
||||
SRCS+=ssh-ed25519-sk.c sk-usbhid.c ssh-pkcs11-client.c ssherr-libcrypto.c
|
||||
|
||||
SRCS+=ssh-mldsa-eddsa.c libcrux-mlkem-mldsa.c
|
||||
SRCS+=digest-openssl.c ed25519-openssl.c
|
||||
#SRCS+=digest-libc.c ed25519.c
|
||||
SRCS+=utf8.c
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
# $OpenBSD: mktestdata.sh,v 1.2 2025/05/06 06:05:48 djm Exp $
|
||||
# $OpenBSD: mktestdata.sh,v 1.3 2026/06/14 04:08:06 djm Exp $
|
||||
|
||||
NAMESPACE=unittest
|
||||
|
||||
@@ -17,8 +17,9 @@ else
|
||||
fi
|
||||
|
||||
rm -f signed-data namespace
|
||||
rm -f rsa ecdsa ed25519 ecdsa_sk ed25519_sk
|
||||
rm -f rsa ecdsa ed25519 ecdsa_sk ed25519_sk mldsa44-ed25519
|
||||
rm -f rsa.sig ecdsa.sig ed25519.sig ecdsa_sk.sig ed25519_sk.sig
|
||||
rm -f mldsa44-ed25519.sig
|
||||
|
||||
printf "This is a test, this is only a test" > signed-data
|
||||
printf "$NAMESPACE" > namespace
|
||||
@@ -26,6 +27,8 @@ printf "$NAMESPACE" > namespace
|
||||
ssh-keygen -t rsa -C "RSA test" -N "" -f rsa -m PEM
|
||||
ssh-keygen -t ecdsa -C "ECDSA test" -N "" -f ecdsa -m PEM
|
||||
ssh-keygen -t ed25519 -C "ED25519 test key" -N "" -f ed25519
|
||||
ssh-keygen -t mldsa44-ed25519 -C "MLDSA44-ED25519 test key" \
|
||||
-N "" -f mldsa44-ed25519
|
||||
ssh-keygen -w "$SK_DUMMY" -t ecdsa-sk -C "ECDSA-SK test key" \
|
||||
-N "" -f ecdsa_sk
|
||||
ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key" \
|
||||
@@ -34,6 +37,8 @@ ssh-keygen -w "$SK_DUMMY" -t ed25519-sk -C "ED25519-SK test key" \
|
||||
ssh-keygen -Y sign -f rsa -n $NAMESPACE - < signed-data > rsa.sig
|
||||
ssh-keygen -Y sign -f ecdsa -n $NAMESPACE - < signed-data > ecdsa.sig
|
||||
ssh-keygen -Y sign -f ed25519 -n $NAMESPACE - < signed-data > ed25519.sig
|
||||
ssh-keygen -Y sign -f mldsa44-ed25519 -n $NAMESPACE - \
|
||||
< signed-data > mldsa44-ed25519.sig
|
||||
ssh-keygen -w "$SK_DUMMY" \
|
||||
-Y sign -f ecdsa_sk -n $NAMESPACE - < signed-data > ecdsa_sk.sig
|
||||
ssh-keygen -w "$SK_DUMMY" \
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@@ -0,0 +1 @@
|
||||
ssh-mldsa44-ed25519@openssh.com AAAAH3NzaC1tbGRzYTQ0LWVkMjU1MTlAb3BlbnNzaC5jb20AAAVAQnJCcNfH++/Q4k9dKNhx6/GYVmdflpO9f4SfdjBLw1vrAkLUKC5rCYk4PsnbMCbPnbnWAgigOuE89VIp1peqXhJSZKK0/0CMpL2XdWzyVvWZvF64S49jZbWNgwFYCvndencKPhfo0SLaCUUhEeeXuU8FTIFUtP7qqZVFhF0b2lNs1H8jLGy4NVDhqdpOU8Ts1yT/MzzpX5uYVuUIaXhQ9vaitSNxFPUg0UfB+cUk7DNAQd0EuS2N93Lq7m5lYKoLxP7NLt+cM96K1qQWg4B5G7DLZIyPKBpTz/iocujIlakfnpzW2b6jKx9mZFnsno7eyEG2gWiEsEyUpz82LRT/a3m2R0KAr57mhSGjBD0I6B6NUzEiBmD8lPe9VJu5sncaqLeRwsa1wJHLM+XuVLcJRv6MUbSwloJlIdYzHsDDeVXkJuOIAgKdCChrmX7D+tfcVYsWYrIUHXcVuwomdU/h41l7VXAHU2+oPdstyUhD9sclHz5gqxVVv2WpS0IjvXUySRzXteaJFoQpoZxORGvTD/mmFRx6uoJa+ri9rzU7UuagF2UvOBEMQuX0F8vKDOJDORqQ7FpTOFnyigkx/zovdBtrSXv5T0x77twN4UYg/u33Uaw8Z+iRZwFyNoJpGKzpjKkYM+1IBfo10H5Q4g8M91aOae6Bwsv7WUo6qgtWntETebVTPYWbZ5GvqbULJQILgCS/hqENyrSo7GleTE/fvMqn5q8mM8okyFWdwfctDsD0PIaTGda0CDz/UcrWU0hv2lMgt3j5zfCUKNVYKjzy6mpsSnrsaqF85aUPPDgcUYfQPSXx6X001nVw/nKumnGUDwt6AhY38RVWWn6o2AsXpuTab2yGNB/LaPkyjvUdNBTVnzGbgjiRgvs27yGOAr/BRMjNony03m6PINtzO2xHrjoGIRgY8ESTHHAxGiafvDua33uKesT1og4FzaUqQk76zvAgtwzVsxp6VtkqoL7nbxcdQRaG8iBpjsJeQ0gEFZIMWnSRfICe2QxodHpW5Mi9l58g1zObmMn779h9GmQN6q6m1OMfm4WcprJXju9AgjjAYB6mX5xaq/kmT7ykkKGLlNNp6IRmGf2kLuWgrT/+cskCt4//BWy4yv65LIvTQ29XwGl/7rxprduf0F4f3NcqkxEp0qIIs5z3gPDbcniwiMmvuoG1pcIlA6FTT6Xk/UlENI2GvRUdEK9v8fX7mAa6rSuzI+Y62f0zSYh8c8rM4rLZlf9Zpjh/4XK1mdGVjU0KUApR/QO0jM2kknS+mNz9nJqicnFo+0mgMqrfuS06tSHuaUUsJXPAzsvLlDi/SHnjZrCfXnHypFru3nR/WuA9MYNINMjId+PnjgLZl548xwXJNAUfrCgLNCv06ObrQJuCMKBPcDkxYUUUMUqUNG71kltKVd3If1XqGWV4oTw25qUJcykh0Rmr8muy4pBMtG7a5YoCm8gYEXtq1kdmLD6Yvmg1Cr7cD48OeshYwAGbbnwzkDr2braLP8WtorCoM0QTCKh5wYAC/r0Tm54xpu8wF48TD3SSH5cLcoqhGVxIYuKQG49lF94g9KzjWMNoT9Ne/zc2TIZSqhocUMWYdDXl0rRkm09sZk1sTvm/ZAqDytTjfz/p1+XuCsShOtdJ/3o2ooTGirw6BkiLxmBP0gtGr3PZU5O6mYdJtP3N/a+ZwMeaY06ytNV/RqOIQKB1u6MUkka4Mc+BwvWGEtsqLfVKiY7Z+9sEBhd32fJ5/znhw1VAwrfYPyHsU4TcMg5Yh6xy0+tTXQT3sU0N98cyxo62 MLDSA44-ED25519 test key
|
||||
@@ -0,0 +1,78 @@
|
||||
-----BEGIN SSH SIGNATURE-----
|
||||
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
|
||||
X21nUV3kRQplF/RQk=
|
||||
-----END SSH SIGNATURE-----
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: tests.c,v 1.6 2025/05/06 06:05:48 djm Exp $ */
|
||||
/* $OpenBSD: tests.c,v 1.7 2026/06/14 04:08:06 djm Exp $ */
|
||||
/*
|
||||
* Regress test for sshbuf.h buffer API
|
||||
*
|
||||
@@ -103,6 +103,10 @@ tests(void)
|
||||
check_sig("ed25519.pub", "ed25519.sig", msg, namespace);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("check MLDSA44-ED25519 signature");
|
||||
check_sig("mldsa44-ed25519.pub", "mldsa44-ed25519.sig", msg, namespace);
|
||||
TEST_DONE();
|
||||
|
||||
TEST_START("check ECDSA-SK signature");
|
||||
check_sig("ecdsa_sk.pub", "ecdsa_sk.sig", msg, namespace);
|
||||
TEST_DONE();
|
||||
|
||||
Reference in New Issue
Block a user