=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh-ed25519.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- src/usr.bin/ssh/ssh-ed25519.c 2022/10/28 00:35:40 1.11 +++ src/usr.bin/ssh/ssh-ed25519.c 2022/10/28 00:36:31 1.12 @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-ed25519.c,v 1.11 2022/10/28 00:35:40 djm Exp $ */ +/* $OpenBSD: ssh-ed25519.c,v 1.12 2022/10/28 00:36:31 djm Exp $ */ /* * Copyright (c) 2013 Markus Friedl * @@ -38,6 +38,16 @@ k->ed25519_sk = NULL; } +static int +ssh_ed25519_equal(const struct sshkey *a, const struct sshkey *b) +{ + if (a->ed25519_pk == NULL || b->ed25519_pk == NULL) + return 0; + if (memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) != 0) + return 0; + return 1; +} + int ssh_ed25519_sign(const struct sshkey *key, u_char **sigp, size_t *lenp, const u_char *data, size_t datalen, u_int compat) @@ -165,10 +175,12 @@ return r; } -static const struct sshkey_impl_funcs sshkey_ed25519_funcs = { +/* NB. not static; used by ED25519-SK */ +const struct sshkey_impl_funcs sshkey_ed25519_funcs = { /* .size = */ NULL, /* .alloc = */ NULL, /* .cleanup = */ ssh_ed25519_cleanup, + /* .equal = */ ssh_ed25519_equal, }; const struct sshkey_impl sshkey_ed25519_impl = {