diff options
author | markus@openbsd.org <markus@openbsd.org> | 2019-11-13 22:00:21 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2019-11-15 08:50:10 +1100 |
commit | 4f5e331cb8e11face3025aa6578662dde489c3ad (patch) | |
tree | 99d5eb9e25458673cdcd386f6dfdada871c45e4b /sshkey.c | |
parent | dffd02e297e6c2a4e86775f293eb1b0ff01fb3df (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.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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 */ |