summaryrefslogtreecommitdiff
path: root/sshkey.c
diff options
context:
space:
mode:
authormarkus@openbsd.org <markus@openbsd.org>2019-11-13 22:00:21 +0000
committerDamien Miller <djm@mindrot.org>2019-11-15 08:50:10 +1100
commit4f5e331cb8e11face3025aa6578662dde489c3ad (patch)
tree99d5eb9e25458673cdcd386f6dfdada871c45e4b /sshkey.c
parentdffd02e297e6c2a4e86775f293eb1b0ff01fb3df (diff)
upstream: in order to be able to figure out the number of
signatures left on a shielded key, we need to transfer the number of signatures left from the private to the public key. ok djm@ OpenBSD-Commit-ID: 8a5d0d260aeace47d372695fdae383ce9b962574
Diffstat (limited to 'sshkey.c')
-rw-r--r--sshkey.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sshkey.c b/sshkey.c
index 190426e28..8db947436 100644
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.c,v 1.91 2019/11/13 07:53:10 markus Exp $ */ 1/* $OpenBSD: sshkey.c,v 1.92 2019/11/13 22:00:21 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2008 Alexander von Gernler. All rights reserved. 4 * Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@@ -1951,6 +1951,7 @@ sshkey_from_private(const struct sshkey *k, struct sshkey **pkp)
1951 if ((r = sshkey_xmss_init(n, k->xmss_name)) != 0) 1951 if ((r = sshkey_xmss_init(n, k->xmss_name)) != 0)
1952 goto out; 1952 goto out;
1953 if (k->xmss_pk != NULL) { 1953 if (k->xmss_pk != NULL) {
1954 u_int32_t left;
1954 size_t pklen = sshkey_xmss_pklen(k); 1955 size_t pklen = sshkey_xmss_pklen(k);
1955 if (pklen == 0 || sshkey_xmss_pklen(n) != pklen) { 1956 if (pklen == 0 || sshkey_xmss_pklen(n) != pklen) {
1956 r = SSH_ERR_INTERNAL_ERROR; 1957 r = SSH_ERR_INTERNAL_ERROR;
@@ -1961,6 +1962,10 @@ sshkey_from_private(const struct sshkey *k, struct sshkey **pkp)
1961 goto out; 1962 goto out;
1962 } 1963 }
1963 memcpy(n->xmss_pk, k->xmss_pk, pklen); 1964 memcpy(n->xmss_pk, k->xmss_pk, pklen);
1965 /* simulate number of signatures left on pubkey */
1966 left = sshkey_xmss_signatures_left(k);
1967 if (left)
1968 sshkey_xmss_enable_maxsign(n, left);
1964 } 1969 }
1965 break; 1970 break;
1966#endif /* WITH_XMSS */ 1971#endif /* WITH_XMSS */