diff options
Diffstat (limited to 'sshkey.c')
-rw-r--r-- | sshkey.c | 63 |
1 files changed, 7 insertions, 56 deletions
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sshkey.c,v 1.47 2017/04/30 23:15:04 djm Exp $ */ | 1 | /* $OpenBSD: sshkey.c,v 1.48 2017/04/30 23:18:44 djm 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. |
@@ -235,10 +235,6 @@ sshkey_names_valid2(const char *names, int allow_wildcard) | |||
235 | for ((p = strsep(&cp, ",")); p && *p != '\0'; | 235 | for ((p = strsep(&cp, ",")); p && *p != '\0'; |
236 | (p = strsep(&cp, ","))) { | 236 | (p = strsep(&cp, ","))) { |
237 | type = sshkey_type_from_name(p); | 237 | type = sshkey_type_from_name(p); |
238 | if (type == KEY_RSA1) { | ||
239 | free(s); | ||
240 | return 0; | ||
241 | } | ||
242 | if (type == KEY_UNSPEC) { | 238 | if (type == KEY_UNSPEC) { |
243 | if (allow_wildcard) { | 239 | if (allow_wildcard) { |
244 | /* | 240 | /* |
@@ -247,8 +243,6 @@ sshkey_names_valid2(const char *names, int allow_wildcard) | |||
247 | * the component is accepted. | 243 | * the component is accepted. |
248 | */ | 244 | */ |
249 | for (kt = keytypes; kt->type != -1; kt++) { | 245 | for (kt = keytypes; kt->type != -1; kt++) { |
250 | if (kt->type == KEY_RSA1) | ||
251 | continue; | ||
252 | if (match_pattern_list(kt->name, | 246 | if (match_pattern_list(kt->name, |
253 | p, 0) != 0) | 247 | p, 0) != 0) |
254 | break; | 248 | break; |
@@ -269,7 +263,6 @@ sshkey_size(const struct sshkey *k) | |||
269 | { | 263 | { |
270 | switch (k->type) { | 264 | switch (k->type) { |
271 | #ifdef WITH_OPENSSL | 265 | #ifdef WITH_OPENSSL |
272 | case KEY_RSA1: | ||
273 | case KEY_RSA: | 266 | case KEY_RSA: |
274 | case KEY_RSA_CERT: | 267 | case KEY_RSA_CERT: |
275 | return BN_num_bits(k->rsa->n); | 268 | return BN_num_bits(k->rsa->n); |
@@ -472,7 +465,6 @@ sshkey_new(int type) | |||
472 | k->ed25519_pk = NULL; | 465 | k->ed25519_pk = NULL; |
473 | switch (k->type) { | 466 | switch (k->type) { |
474 | #ifdef WITH_OPENSSL | 467 | #ifdef WITH_OPENSSL |
475 | case KEY_RSA1: | ||
476 | case KEY_RSA: | 468 | case KEY_RSA: |
477 | case KEY_RSA_CERT: | 469 | case KEY_RSA_CERT: |
478 | if ((rsa = RSA_new()) == NULL || | 470 | if ((rsa = RSA_new()) == NULL || |
@@ -530,7 +522,6 @@ sshkey_add_private(struct sshkey *k) | |||
530 | { | 522 | { |
531 | switch (k->type) { | 523 | switch (k->type) { |
532 | #ifdef WITH_OPENSSL | 524 | #ifdef WITH_OPENSSL |
533 | case KEY_RSA1: | ||
534 | case KEY_RSA: | 525 | case KEY_RSA: |
535 | case KEY_RSA_CERT: | 526 | case KEY_RSA_CERT: |
536 | #define bn_maybe_alloc_failed(p) (p == NULL && (p = BN_new()) == NULL) | 527 | #define bn_maybe_alloc_failed(p) (p == NULL && (p = BN_new()) == NULL) |
@@ -586,7 +577,6 @@ sshkey_free(struct sshkey *k) | |||
586 | return; | 577 | return; |
587 | switch (k->type) { | 578 | switch (k->type) { |
588 | #ifdef WITH_OPENSSL | 579 | #ifdef WITH_OPENSSL |
589 | case KEY_RSA1: | ||
590 | case KEY_RSA: | 580 | case KEY_RSA: |
591 | case KEY_RSA_CERT: | 581 | case KEY_RSA_CERT: |
592 | if (k->rsa != NULL) | 582 | if (k->rsa != NULL) |
@@ -664,7 +654,6 @@ sshkey_equal_public(const struct sshkey *a, const struct sshkey *b) | |||
664 | 654 | ||
665 | switch (a->type) { | 655 | switch (a->type) { |
666 | #ifdef WITH_OPENSSL | 656 | #ifdef WITH_OPENSSL |
667 | case KEY_RSA1: | ||
668 | case KEY_RSA_CERT: | 657 | case KEY_RSA_CERT: |
669 | case KEY_RSA: | 658 | case KEY_RSA: |
670 | return a->rsa != NULL && b->rsa != NULL && | 659 | return a->rsa != NULL && b->rsa != NULL && |
@@ -881,25 +870,7 @@ sshkey_fingerprint_raw(const struct sshkey *k, int dgst_alg, | |||
881 | r = SSH_ERR_INVALID_ARGUMENT; | 870 | r = SSH_ERR_INVALID_ARGUMENT; |
882 | goto out; | 871 | goto out; |
883 | } | 872 | } |
884 | 873 | if ((r = to_blob(k, &blob, &blob_len, 1)) != 0) | |
885 | if (k->type == KEY_RSA1) { | ||
886 | #ifdef WITH_OPENSSL | ||
887 | int nlen = BN_num_bytes(k->rsa->n); | ||
888 | int elen = BN_num_bytes(k->rsa->e); | ||
889 | |||
890 | if (nlen < 0 || elen < 0 || nlen >= INT_MAX - elen) { | ||
891 | r = SSH_ERR_INVALID_FORMAT; | ||
892 | goto out; | ||
893 | } | ||
894 | blob_len = nlen + elen; | ||
895 | if ((blob = malloc(blob_len)) == NULL) { | ||
896 | r = SSH_ERR_ALLOC_FAIL; | ||
897 | goto out; | ||
898 | } | ||
899 | BN_bn2bin(k->rsa->n, blob); | ||
900 | BN_bn2bin(k->rsa->e, blob + nlen); | ||
901 | #endif /* WITH_OPENSSL */ | ||
902 | } else if ((r = to_blob(k, &blob, &blob_len, 1)) != 0) | ||
903 | goto out; | 874 | goto out; |
904 | if ((ret = calloc(1, SSH_DIGEST_MAX_LENGTH)) == NULL) { | 875 | if ((ret = calloc(1, SSH_DIGEST_MAX_LENGTH)) == NULL) { |
905 | r = SSH_ERR_ALLOC_FAIL; | 876 | r = SSH_ERR_ALLOC_FAIL; |
@@ -1208,8 +1179,6 @@ sshkey_read(struct sshkey *ret, char **cpp) | |||
1208 | cp = *cpp; | 1179 | cp = *cpp; |
1209 | 1180 | ||
1210 | switch (ret->type) { | 1181 | switch (ret->type) { |
1211 | case KEY_RSA1: | ||
1212 | break; | ||
1213 | case KEY_UNSPEC: | 1182 | case KEY_UNSPEC: |
1214 | case KEY_RSA: | 1183 | case KEY_RSA: |
1215 | case KEY_DSA: | 1184 | case KEY_DSA: |
@@ -1363,30 +1332,16 @@ sshkey_to_base64(const struct sshkey *key, char **b64p) | |||
1363 | } | 1332 | } |
1364 | 1333 | ||
1365 | static int | 1334 | static int |
1366 | sshkey_format_rsa1(const struct sshkey *key, struct sshbuf *b) | ||
1367 | { | ||
1368 | int r = SSH_ERR_INTERNAL_ERROR; | ||
1369 | |||
1370 | return r; | ||
1371 | } | ||
1372 | |||
1373 | static int | ||
1374 | sshkey_format_text(const struct sshkey *key, struct sshbuf *b) | 1335 | sshkey_format_text(const struct sshkey *key, struct sshbuf *b) |
1375 | { | 1336 | { |
1376 | int r = SSH_ERR_INTERNAL_ERROR; | 1337 | int r = SSH_ERR_INTERNAL_ERROR; |
1377 | char *uu = NULL; | 1338 | char *uu = NULL; |
1378 | 1339 | ||
1379 | if (key->type == KEY_RSA1) { | 1340 | if ((r = sshkey_to_base64(key, &uu)) != 0) |
1380 | if ((r = sshkey_format_rsa1(key, b)) != 0) | 1341 | goto out; |
1381 | goto out; | 1342 | if ((r = sshbuf_putf(b, "%s %s", |
1382 | } else { | 1343 | sshkey_ssh_name(key), uu)) != 0) |
1383 | /* Unsupported key types handled in sshkey_to_base64() */ | 1344 | goto out; |
1384 | if ((r = sshkey_to_base64(key, &uu)) != 0) | ||
1385 | goto out; | ||
1386 | if ((r = sshbuf_putf(b, "%s %s", | ||
1387 | sshkey_ssh_name(key), uu)) != 0) | ||
1388 | goto out; | ||
1389 | } | ||
1390 | r = 0; | 1345 | r = 0; |
1391 | out: | 1346 | out: |
1392 | free(uu); | 1347 | free(uu); |
@@ -1602,7 +1557,6 @@ sshkey_generate(int type, u_int bits, struct sshkey **keyp) | |||
1602 | break; | 1557 | break; |
1603 | # endif /* OPENSSL_HAS_ECC */ | 1558 | # endif /* OPENSSL_HAS_ECC */ |
1604 | case KEY_RSA: | 1559 | case KEY_RSA: |
1605 | case KEY_RSA1: | ||
1606 | ret = rsa_generate_private_key(bits, &k->rsa); | 1560 | ret = rsa_generate_private_key(bits, &k->rsa); |
1607 | break; | 1561 | break; |
1608 | #endif /* WITH_OPENSSL */ | 1562 | #endif /* WITH_OPENSSL */ |
@@ -1713,7 +1667,6 @@ sshkey_from_private(const struct sshkey *k, struct sshkey **pkp) | |||
1713 | break; | 1667 | break; |
1714 | # endif /* OPENSSL_HAS_ECC */ | 1668 | # endif /* OPENSSL_HAS_ECC */ |
1715 | case KEY_RSA: | 1669 | case KEY_RSA: |
1716 | case KEY_RSA1: | ||
1717 | case KEY_RSA_CERT: | 1670 | case KEY_RSA_CERT: |
1718 | if ((n = sshkey_new(k->type)) == NULL) | 1671 | if ((n = sshkey_new(k->type)) == NULL) |
1719 | return SSH_ERR_ALLOC_FAIL; | 1672 | return SSH_ERR_ALLOC_FAIL; |
@@ -2183,7 +2136,6 @@ sshkey_demote(const struct sshkey *k, struct sshkey **dkp) | |||
2183 | if ((ret = sshkey_cert_copy(k, pk)) != 0) | 2136 | if ((ret = sshkey_cert_copy(k, pk)) != 0) |
2184 | goto fail; | 2137 | goto fail; |
2185 | /* FALLTHROUGH */ | 2138 | /* FALLTHROUGH */ |
2186 | case KEY_RSA1: | ||
2187 | case KEY_RSA: | 2139 | case KEY_RSA: |
2188 | if ((pk->rsa = RSA_new()) == NULL || | 2140 | if ((pk->rsa = RSA_new()) == NULL || |
2189 | (pk->rsa->e = BN_dup(k->rsa->e)) == NULL || | 2141 | (pk->rsa->e = BN_dup(k->rsa->e)) == NULL || |
@@ -2742,7 +2694,6 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) | |||
2742 | switch (k->type) { | 2694 | switch (k->type) { |
2743 | case KEY_RSA: | 2695 | case KEY_RSA: |
2744 | case KEY_RSA_CERT: | 2696 | case KEY_RSA_CERT: |
2745 | case KEY_RSA1: | ||
2746 | if (RSA_blinding_on(k->rsa, NULL) != 1) { | 2697 | if (RSA_blinding_on(k->rsa, NULL) != 1) { |
2747 | r = SSH_ERR_LIBCRYPTO_ERROR; | 2698 | r = SSH_ERR_LIBCRYPTO_ERROR; |
2748 | goto out; | 2699 | goto out; |