|
Lines 85-93
struct keytype {
Link Here
|
| 85 |
int cert; |
85 |
int cert; |
| 86 |
}; |
86 |
}; |
| 87 |
static const struct keytype keytypes[] = { |
87 |
static const struct keytype keytypes[] = { |
|
|
88 |
#ifndef WITHOUT_ED25519 |
| 88 |
{ "ssh-ed25519", "ED25519", KEY_ED25519, 0, 0 }, |
89 |
{ "ssh-ed25519", "ED25519", KEY_ED25519, 0, 0 }, |
| 89 |
{ "ssh-ed25519-cert-v01@openssh.com", "ED25519-CERT", |
90 |
{ "ssh-ed25519-cert-v01@openssh.com", "ED25519-CERT", |
| 90 |
KEY_ED25519_CERT, 0, 1 }, |
91 |
KEY_ED25519_CERT, 0, 1 }, |
|
|
92 |
#endif /* WITHOUT_ED25519 */ |
| 91 |
#ifdef WITH_OPENSSL |
93 |
#ifdef WITH_OPENSSL |
| 92 |
{ NULL, "RSA1", KEY_RSA1, 0, 0 }, |
94 |
{ NULL, "RSA1", KEY_RSA1, 0, 0 }, |
| 93 |
{ "ssh-rsa", "RSA", KEY_RSA, 0, 0 }, |
95 |
{ "ssh-rsa", "RSA", KEY_RSA, 0, 0 }, |
|
Lines 283-290
sshkey_size(const struct sshkey *k)
Link Here
|
| 283 |
case KEY_ECDSA_CERT: |
285 |
case KEY_ECDSA_CERT: |
| 284 |
return sshkey_curve_nid_to_bits(k->ecdsa_nid); |
286 |
return sshkey_curve_nid_to_bits(k->ecdsa_nid); |
| 285 |
#endif /* WITH_OPENSSL */ |
287 |
#endif /* WITH_OPENSSL */ |
|
|
288 |
#ifndef WITHOUT_ED25519 |
| 286 |
case KEY_ED25519: |
289 |
case KEY_ED25519: |
| 287 |
case KEY_ED25519_CERT: |
290 |
case KEY_ED25519_CERT: |
|
|
291 |
#endif /* WITHOUT_ED25519 */ |
| 288 |
return 256; /* XXX */ |
292 |
return 256; /* XXX */ |
| 289 |
} |
293 |
} |
| 290 |
return 0; |
294 |
return 0; |
|
Lines 309-315
sshkey_type_is_valid_ca(int type)
Link Here
|
| 309 |
case KEY_RSA: |
313 |
case KEY_RSA: |
| 310 |
case KEY_DSA: |
314 |
case KEY_DSA: |
| 311 |
case KEY_ECDSA: |
315 |
case KEY_ECDSA: |
|
|
316 |
#ifndef WITHOUT_ED25519 |
| 312 |
case KEY_ED25519: |
317 |
case KEY_ED25519: |
|
|
318 |
#endif /* WITHOUT_ED25519 */ |
| 313 |
return 1; |
319 |
return 1; |
| 314 |
default: |
320 |
default: |
| 315 |
return 0; |
321 |
return 0; |
|
Lines 337-344
sshkey_type_plain(int type)
Link Here
|
| 337 |
return KEY_DSA; |
343 |
return KEY_DSA; |
| 338 |
case KEY_ECDSA_CERT: |
344 |
case KEY_ECDSA_CERT: |
| 339 |
return KEY_ECDSA; |
345 |
return KEY_ECDSA; |
|
|
346 |
#ifndef WITHOUT_ED25519 |
| 340 |
case KEY_ED25519_CERT: |
347 |
case KEY_ED25519_CERT: |
| 341 |
return KEY_ED25519; |
348 |
return KEY_ED25519; |
|
|
349 |
#endif /* WITHOUT_ED25519 */ |
| 342 |
default: |
350 |
default: |
| 343 |
return type; |
351 |
return type; |
| 344 |
} |
352 |
} |
|
Lines 491-498
sshkey_new(int type)
Link Here
|
| 491 |
k->dsa = NULL; |
499 |
k->dsa = NULL; |
| 492 |
k->rsa = NULL; |
500 |
k->rsa = NULL; |
| 493 |
k->cert = NULL; |
501 |
k->cert = NULL; |
|
|
502 |
#ifndef WITHOUT_ED25519 |
| 494 |
k->ed25519_sk = NULL; |
503 |
k->ed25519_sk = NULL; |
| 495 |
k->ed25519_pk = NULL; |
504 |
k->ed25519_pk = NULL; |
|
|
505 |
#endif /* WITHOUT_ED25519 */ |
| 496 |
switch (k->type) { |
506 |
switch (k->type) { |
| 497 |
#ifdef WITH_OPENSSL |
507 |
#ifdef WITH_OPENSSL |
| 498 |
case KEY_RSA1: |
508 |
case KEY_RSA1: |
|
Lines 529-538
sshkey_new(int type)
Link Here
|
| 529 |
/* Cannot do anything until we know the group */ |
539 |
/* Cannot do anything until we know the group */ |
| 530 |
break; |
540 |
break; |
| 531 |
#endif /* WITH_OPENSSL */ |
541 |
#endif /* WITH_OPENSSL */ |
|
|
542 |
#ifndef WITHOUT_ED25519 |
| 532 |
case KEY_ED25519: |
543 |
case KEY_ED25519: |
| 533 |
case KEY_ED25519_CERT: |
544 |
case KEY_ED25519_CERT: |
| 534 |
/* no need to prealloc */ |
545 |
/* no need to prealloc */ |
| 535 |
break; |
546 |
break; |
|
|
547 |
#endif /* WITHOUT_ED25519 */ |
| 536 |
case KEY_UNSPEC: |
548 |
case KEY_UNSPEC: |
| 537 |
break; |
549 |
break; |
| 538 |
default: |
550 |
default: |
|
Lines 581-590
sshkey_add_private(struct sshkey *k)
Link Here
|
| 581 |
/* Cannot do anything until we know the group */ |
593 |
/* Cannot do anything until we know the group */ |
| 582 |
break; |
594 |
break; |
| 583 |
#endif /* WITH_OPENSSL */ |
595 |
#endif /* WITH_OPENSSL */ |
|
|
596 |
#ifndef WITHOUT_ED25519 |
| 584 |
case KEY_ED25519: |
597 |
case KEY_ED25519: |
| 585 |
case KEY_ED25519_CERT: |
598 |
case KEY_ED25519_CERT: |
| 586 |
/* no need to prealloc */ |
599 |
/* no need to prealloc */ |
| 587 |
break; |
600 |
break; |
|
|
601 |
#endif /* WITHOUT_ED25519 */ |
| 588 |
case KEY_UNSPEC: |
602 |
case KEY_UNSPEC: |
| 589 |
break; |
603 |
break; |
| 590 |
default: |
604 |
default: |
|
Lines 638-643
sshkey_free(struct sshkey *k)
Link Here
|
| 638 |
break; |
652 |
break; |
| 639 |
# endif /* OPENSSL_HAS_ECC */ |
653 |
# endif /* OPENSSL_HAS_ECC */ |
| 640 |
#endif /* WITH_OPENSSL */ |
654 |
#endif /* WITH_OPENSSL */ |
|
|
655 |
#ifndef WITHOUT_ED25519 |
| 641 |
case KEY_ED25519: |
656 |
case KEY_ED25519: |
| 642 |
case KEY_ED25519_CERT: |
657 |
case KEY_ED25519_CERT: |
| 643 |
if (k->ed25519_pk) { |
658 |
if (k->ed25519_pk) { |
|
Lines 651-656
sshkey_free(struct sshkey *k)
Link Here
|
| 651 |
k->ed25519_sk = NULL; |
666 |
k->ed25519_sk = NULL; |
| 652 |
} |
667 |
} |
| 653 |
break; |
668 |
break; |
|
|
669 |
#endif /* WITHOUT_ED25519 */ |
| 654 |
case KEY_UNSPEC: |
670 |
case KEY_UNSPEC: |
| 655 |
break; |
671 |
break; |
| 656 |
default: |
672 |
default: |
|
Lines 730-739
sshkey_equal_public(const struct sshkey
Link Here
|
| 730 |
return 1; |
746 |
return 1; |
| 731 |
# endif /* OPENSSL_HAS_ECC */ |
747 |
# endif /* OPENSSL_HAS_ECC */ |
| 732 |
#endif /* WITH_OPENSSL */ |
748 |
#endif /* WITH_OPENSSL */ |
|
|
749 |
#ifndef WITHOUT_ED25519 |
| 733 |
case KEY_ED25519: |
750 |
case KEY_ED25519: |
| 734 |
case KEY_ED25519_CERT: |
751 |
case KEY_ED25519_CERT: |
| 735 |
return a->ed25519_pk != NULL && b->ed25519_pk != NULL && |
752 |
return a->ed25519_pk != NULL && b->ed25519_pk != NULL && |
| 736 |
memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0; |
753 |
memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0; |
|
|
754 |
#endif /* WITHOUT_ED25519 */ |
| 737 |
default: |
755 |
default: |
| 738 |
return 0; |
756 |
return 0; |
| 739 |
} |
757 |
} |
|
Lines 772-783
to_blob_buf(const struct sshkey *key, st
Link Here
|
| 772 |
case KEY_ECDSA_CERT: |
790 |
case KEY_ECDSA_CERT: |
| 773 |
case KEY_RSA_CERT: |
791 |
case KEY_RSA_CERT: |
| 774 |
#endif /* WITH_OPENSSL */ |
792 |
#endif /* WITH_OPENSSL */ |
|
|
793 |
#ifndef WITHOUT_ED25519 |
| 775 |
case KEY_ED25519_CERT: |
794 |
case KEY_ED25519_CERT: |
| 776 |
/* Use the existing blob */ |
795 |
/* Use the existing blob */ |
| 777 |
/* XXX modified flag? */ |
796 |
/* XXX modified flag? */ |
| 778 |
if ((ret = sshbuf_putb(b, key->cert->certblob)) != 0) |
797 |
if ((ret = sshbuf_putb(b, key->cert->certblob)) != 0) |
| 779 |
return ret; |
798 |
return ret; |
| 780 |
break; |
799 |
break; |
|
|
800 |
#endif /* WITHOUT_ED25519 */ |
| 781 |
#ifdef WITH_OPENSSL |
801 |
#ifdef WITH_OPENSSL |
| 782 |
case KEY_DSA: |
802 |
case KEY_DSA: |
| 783 |
if (key->dsa == NULL) |
803 |
if (key->dsa == NULL) |
|
Lines 809-814
to_blob_buf(const struct sshkey *key, st
Link Here
|
| 809 |
return ret; |
829 |
return ret; |
| 810 |
break; |
830 |
break; |
| 811 |
#endif /* WITH_OPENSSL */ |
831 |
#endif /* WITH_OPENSSL */ |
|
|
832 |
#ifndef WITHOUT_ED25519 |
| 812 |
case KEY_ED25519: |
833 |
case KEY_ED25519: |
| 813 |
if (key->ed25519_pk == NULL) |
834 |
if (key->ed25519_pk == NULL) |
| 814 |
return SSH_ERR_INVALID_ARGUMENT; |
835 |
return SSH_ERR_INVALID_ARGUMENT; |
|
Lines 817-822
to_blob_buf(const struct sshkey *key, st
Link Here
|
| 817 |
key->ed25519_pk, ED25519_PK_SZ)) != 0) |
838 |
key->ed25519_pk, ED25519_PK_SZ)) != 0) |
| 818 |
return ret; |
839 |
return ret; |
| 819 |
break; |
840 |
break; |
|
|
841 |
#endif /* WITHOUT_ED25519 */ |
| 820 |
default: |
842 |
default: |
| 821 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
843 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
| 822 |
} |
844 |
} |
|
Lines 1290-1302
sshkey_read(struct sshkey *ret, char **c
Link Here
|
| 1290 |
case KEY_RSA: |
1312 |
case KEY_RSA: |
| 1291 |
case KEY_DSA: |
1313 |
case KEY_DSA: |
| 1292 |
case KEY_ECDSA: |
1314 |
case KEY_ECDSA: |
|
|
1315 |
#ifndef WITHOUT_ED25519 |
| 1293 |
case KEY_ED25519: |
1316 |
case KEY_ED25519: |
|
|
1317 |
#endif /* WITHOUT_ED25519 */ |
| 1294 |
case KEY_DSA_CERT_V00: |
1318 |
case KEY_DSA_CERT_V00: |
| 1295 |
case KEY_RSA_CERT_V00: |
1319 |
case KEY_RSA_CERT_V00: |
| 1296 |
case KEY_DSA_CERT: |
1320 |
case KEY_DSA_CERT: |
| 1297 |
case KEY_ECDSA_CERT: |
1321 |
case KEY_ECDSA_CERT: |
| 1298 |
case KEY_RSA_CERT: |
1322 |
case KEY_RSA_CERT: |
|
|
1323 |
#ifndef WITHOUT_ED25519 |
| 1299 |
case KEY_ED25519_CERT: |
1324 |
case KEY_ED25519_CERT: |
|
|
1325 |
#endif /* WITHOUT_ED25519 */ |
| 1300 |
space = strchr(cp, ' '); |
1326 |
space = strchr(cp, ' '); |
| 1301 |
if (space == NULL) |
1327 |
if (space == NULL) |
| 1302 |
return SSH_ERR_INVALID_FORMAT; |
1328 |
return SSH_ERR_INVALID_FORMAT; |
|
Lines 1388-1393
sshkey_read(struct sshkey *ret, char **c
Link Here
|
| 1388 |
} |
1414 |
} |
| 1389 |
# endif /* OPENSSL_HAS_ECC */ |
1415 |
# endif /* OPENSSL_HAS_ECC */ |
| 1390 |
#endif /* WITH_OPENSSL */ |
1416 |
#endif /* WITH_OPENSSL */ |
|
|
1417 |
#ifndef WITHOUT_ED25519 |
| 1391 |
if (sshkey_type_plain(ret->type) == KEY_ED25519) { |
1418 |
if (sshkey_type_plain(ret->type) == KEY_ED25519) { |
| 1392 |
free(ret->ed25519_pk); |
1419 |
free(ret->ed25519_pk); |
| 1393 |
ret->ed25519_pk = k->ed25519_pk; |
1420 |
ret->ed25519_pk = k->ed25519_pk; |
|
Lines 1396-1401
sshkey_read(struct sshkey *ret, char **c
Link Here
|
| 1396 |
/* XXX */ |
1423 |
/* XXX */ |
| 1397 |
#endif |
1424 |
#endif |
| 1398 |
} |
1425 |
} |
|
|
1426 |
#endif /* WITHOUT_ED25519 */ |
| 1399 |
retval = 0; |
1427 |
retval = 0; |
| 1400 |
/*XXXX*/ |
1428 |
/*XXXX*/ |
| 1401 |
sshkey_free(k); |
1429 |
sshkey_free(k); |
|
Lines 1459-1466
sshkey_write(const struct sshkey *key, F
Link Here
|
| 1459 |
case KEY_RSA_CERT_V00: |
1487 |
case KEY_RSA_CERT_V00: |
| 1460 |
case KEY_RSA_CERT: |
1488 |
case KEY_RSA_CERT: |
| 1461 |
#endif /* WITH_OPENSSL */ |
1489 |
#endif /* WITH_OPENSSL */ |
|
|
1490 |
#ifndef WITHOUT_ED25519 |
| 1462 |
case KEY_ED25519: |
1491 |
case KEY_ED25519: |
| 1463 |
case KEY_ED25519_CERT: |
1492 |
case KEY_ED25519_CERT: |
|
|
1493 |
#endif /* WITHOUT_ED25519 */ |
| 1464 |
if ((bb = sshbuf_new()) == NULL) { |
1494 |
if ((bb = sshbuf_new()) == NULL) { |
| 1465 |
ret = SSH_ERR_ALLOC_FAIL; |
1495 |
ret = SSH_ERR_ALLOC_FAIL; |
| 1466 |
goto out; |
1496 |
goto out; |
|
Lines 1670-1676
sshkey_generate(int type, u_int bits, st
Link Here
|
| 1670 |
if ((k = sshkey_new(KEY_UNSPEC)) == NULL) |
1700 |
if ((k = sshkey_new(KEY_UNSPEC)) == NULL) |
| 1671 |
return SSH_ERR_ALLOC_FAIL; |
1701 |
return SSH_ERR_ALLOC_FAIL; |
| 1672 |
switch (type) { |
1702 |
switch (type) { |
| 1673 |
case KEY_ED25519: |
1703 |
#ifndef WITHOUT_ED25519 |
|
|
1704 |
case KEY_ED25519: |
| 1674 |
if ((k->ed25519_pk = malloc(ED25519_PK_SZ)) == NULL || |
1705 |
if ((k->ed25519_pk = malloc(ED25519_PK_SZ)) == NULL || |
| 1675 |
(k->ed25519_sk = malloc(ED25519_SK_SZ)) == NULL) { |
1706 |
(k->ed25519_sk = malloc(ED25519_SK_SZ)) == NULL) { |
| 1676 |
ret = SSH_ERR_ALLOC_FAIL; |
1707 |
ret = SSH_ERR_ALLOC_FAIL; |
|
Lines 1679-1684
sshkey_generate(int type, u_int bits, st
Link Here
|
| 1679 |
crypto_sign_ed25519_keypair(k->ed25519_pk, k->ed25519_sk); |
1710 |
crypto_sign_ed25519_keypair(k->ed25519_pk, k->ed25519_sk); |
| 1680 |
ret = 0; |
1711 |
ret = 0; |
| 1681 |
break; |
1712 |
break; |
|
|
1713 |
#endif /* WITHOUT_ED25519 */ |
| 1682 |
#ifdef WITH_OPENSSL |
1714 |
#ifdef WITH_OPENSSL |
| 1683 |
case KEY_DSA: |
1715 |
case KEY_DSA: |
| 1684 |
ret = dsa_generate_private_key(bits, &k->dsa); |
1716 |
ret = dsa_generate_private_key(bits, &k->dsa); |
|
Lines 1816-1821
sshkey_from_private(const struct sshkey
Link Here
|
| 1816 |
} |
1848 |
} |
| 1817 |
break; |
1849 |
break; |
| 1818 |
#endif /* WITH_OPENSSL */ |
1850 |
#endif /* WITH_OPENSSL */ |
|
|
1851 |
#ifndef WITHOUT_ED25519 |
| 1819 |
case KEY_ED25519: |
1852 |
case KEY_ED25519: |
| 1820 |
case KEY_ED25519_CERT: |
1853 |
case KEY_ED25519_CERT: |
| 1821 |
if ((n = sshkey_new(k->type)) == NULL) |
1854 |
if ((n = sshkey_new(k->type)) == NULL) |
|
Lines 1828-1833
sshkey_from_private(const struct sshkey
Link Here
|
| 1828 |
memcpy(n->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); |
1861 |
memcpy(n->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); |
| 1829 |
} |
1862 |
} |
| 1830 |
break; |
1863 |
break; |
|
|
1864 |
#endif /* WITHOUT_ED25519 */ |
| 1831 |
default: |
1865 |
default: |
| 1832 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
1866 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
| 1833 |
} |
1867 |
} |
|
Lines 2099-2104
sshkey_from_blob_internal(struct sshbuf
Link Here
|
| 2099 |
break; |
2133 |
break; |
| 2100 |
# endif /* OPENSSL_HAS_ECC */ |
2134 |
# endif /* OPENSSL_HAS_ECC */ |
| 2101 |
#endif /* WITH_OPENSSL */ |
2135 |
#endif /* WITH_OPENSSL */ |
|
|
2136 |
#ifndef WITHOUT_ED25519 |
| 2102 |
case KEY_ED25519_CERT: |
2137 |
case KEY_ED25519_CERT: |
| 2103 |
/* Skip nonce */ |
2138 |
/* Skip nonce */ |
| 2104 |
if (sshbuf_get_string_direct(b, NULL, NULL) != 0) { |
2139 |
if (sshbuf_get_string_direct(b, NULL, NULL) != 0) { |
|
Lines 2120-2125
sshkey_from_blob_internal(struct sshbuf
Link Here
|
| 2120 |
key->ed25519_pk = pk; |
2155 |
key->ed25519_pk = pk; |
| 2121 |
pk = NULL; |
2156 |
pk = NULL; |
| 2122 |
break; |
2157 |
break; |
|
|
2158 |
#endif /* WITHOUT_ED25519 */ |
| 2123 |
case KEY_UNSPEC: |
2159 |
case KEY_UNSPEC: |
| 2124 |
if ((key = sshkey_new(type)) == NULL) { |
2160 |
if ((key = sshkey_new(type)) == NULL) { |
| 2125 |
ret = SSH_ERR_ALLOC_FAIL; |
2161 |
ret = SSH_ERR_ALLOC_FAIL; |
|
Lines 2214-2222
sshkey_sign(const struct sshkey *key,
Link Here
|
| 2214 |
case KEY_RSA: |
2250 |
case KEY_RSA: |
| 2215 |
return ssh_rsa_sign(key, sigp, lenp, data, datalen, compat); |
2251 |
return ssh_rsa_sign(key, sigp, lenp, data, datalen, compat); |
| 2216 |
#endif /* WITH_OPENSSL */ |
2252 |
#endif /* WITH_OPENSSL */ |
|
|
2253 |
#ifndef WITHOUT_ED25519 |
| 2217 |
case KEY_ED25519: |
2254 |
case KEY_ED25519: |
| 2218 |
case KEY_ED25519_CERT: |
2255 |
case KEY_ED25519_CERT: |
| 2219 |
return ssh_ed25519_sign(key, sigp, lenp, data, datalen, compat); |
2256 |
return ssh_ed25519_sign(key, sigp, lenp, data, datalen, compat); |
|
|
2257 |
#endif /* WITHOUT_ED25519 */ |
| 2220 |
default: |
2258 |
default: |
| 2221 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
2259 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
| 2222 |
} |
2260 |
} |
|
Lines 2248-2256
sshkey_verify(const struct sshkey *key,
Link Here
|
| 2248 |
case KEY_RSA: |
2286 |
case KEY_RSA: |
| 2249 |
return ssh_rsa_verify(key, sig, siglen, data, dlen, compat); |
2287 |
return ssh_rsa_verify(key, sig, siglen, data, dlen, compat); |
| 2250 |
#endif /* WITH_OPENSSL */ |
2288 |
#endif /* WITH_OPENSSL */ |
|
|
2289 |
#ifndef WITHOUT_ED25519 |
| 2251 |
case KEY_ED25519: |
2290 |
case KEY_ED25519: |
| 2252 |
case KEY_ED25519_CERT: |
2291 |
case KEY_ED25519_CERT: |
| 2253 |
return ssh_ed25519_verify(key, sig, siglen, data, dlen, compat); |
2292 |
return ssh_ed25519_verify(key, sig, siglen, data, dlen, compat); |
|
|
2293 |
#endif /* WITHOUT_ED25519 */ |
| 2254 |
default: |
2294 |
default: |
| 2255 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
2295 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
| 2256 |
} |
2296 |
} |
|
Lines 2274-2281
sshkey_demote(const struct sshkey *k, st
Link Here
|
| 2274 |
pk->dsa = NULL; |
2314 |
pk->dsa = NULL; |
| 2275 |
pk->ecdsa = NULL; |
2315 |
pk->ecdsa = NULL; |
| 2276 |
pk->rsa = NULL; |
2316 |
pk->rsa = NULL; |
|
|
2317 |
#ifndef WITHOUT_ED25519 |
| 2277 |
pk->ed25519_pk = NULL; |
2318 |
pk->ed25519_pk = NULL; |
| 2278 |
pk->ed25519_sk = NULL; |
2319 |
pk->ed25519_sk = NULL; |
|
|
2320 |
#endif /* WITHOUT_ED25519 */ |
| 2279 |
|
2321 |
|
| 2280 |
switch (k->type) { |
2322 |
switch (k->type) { |
| 2281 |
#ifdef WITH_OPENSSL |
2323 |
#ifdef WITH_OPENSSL |
|
Lines 2327-2332
sshkey_demote(const struct sshkey *k, st
Link Here
|
| 2327 |
break; |
2369 |
break; |
| 2328 |
# endif /* OPENSSL_HAS_ECC */ |
2370 |
# endif /* OPENSSL_HAS_ECC */ |
| 2329 |
#endif /* WITH_OPENSSL */ |
2371 |
#endif /* WITH_OPENSSL */ |
|
|
2372 |
#ifndef WITHOUT_ED25519 |
| 2330 |
case KEY_ED25519_CERT: |
2373 |
case KEY_ED25519_CERT: |
| 2331 |
if ((ret = sshkey_cert_copy(k, pk)) != 0) |
2374 |
if ((ret = sshkey_cert_copy(k, pk)) != 0) |
| 2332 |
goto fail; |
2375 |
goto fail; |
|
Lines 2340-2345
sshkey_demote(const struct sshkey *k, st
Link Here
|
| 2340 |
memcpy(pk->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); |
2383 |
memcpy(pk->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); |
| 2341 |
} |
2384 |
} |
| 2342 |
break; |
2385 |
break; |
|
|
2386 |
#endif /* WITHOUT_ED25519 */ |
| 2343 |
default: |
2387 |
default: |
| 2344 |
ret = SSH_ERR_KEY_TYPE_UNKNOWN; |
2388 |
ret = SSH_ERR_KEY_TYPE_UNKNOWN; |
| 2345 |
fail: |
2389 |
fail: |
|
Lines 2370-2380
sshkey_to_certified(struct sshkey *k, in
Link Here
|
| 2370 |
newtype = KEY_ECDSA_CERT; |
2414 |
newtype = KEY_ECDSA_CERT; |
| 2371 |
break; |
2415 |
break; |
| 2372 |
#endif /* WITH_OPENSSL */ |
2416 |
#endif /* WITH_OPENSSL */ |
|
|
2417 |
#ifndef WITHOUT_ED25519 |
| 2373 |
case KEY_ED25519: |
2418 |
case KEY_ED25519: |
| 2374 |
if (legacy) |
2419 |
if (legacy) |
| 2375 |
return SSH_ERR_INVALID_ARGUMENT; |
2420 |
return SSH_ERR_INVALID_ARGUMENT; |
| 2376 |
newtype = KEY_ED25519_CERT; |
2421 |
newtype = KEY_ED25519_CERT; |
| 2377 |
break; |
2422 |
break; |
|
|
2423 |
#endif /* WITHOUT_ED25519 */ |
| 2378 |
default: |
2424 |
default: |
| 2379 |
return SSH_ERR_INVALID_ARGUMENT; |
2425 |
return SSH_ERR_INVALID_ARGUMENT; |
| 2380 |
} |
2426 |
} |
|
Lines 2457-2467
sshkey_certify(struct sshkey *k, struct
Link Here
|
| 2457 |
goto out; |
2503 |
goto out; |
| 2458 |
break; |
2504 |
break; |
| 2459 |
#endif /* WITH_OPENSSL */ |
2505 |
#endif /* WITH_OPENSSL */ |
|
|
2506 |
#ifndef WITHOUT_ED25519 |
| 2460 |
case KEY_ED25519_CERT: |
2507 |
case KEY_ED25519_CERT: |
| 2461 |
if ((ret = sshbuf_put_string(cert, |
2508 |
if ((ret = sshbuf_put_string(cert, |
| 2462 |
k->ed25519_pk, ED25519_PK_SZ)) != 0) |
2509 |
k->ed25519_pk, ED25519_PK_SZ)) != 0) |
| 2463 |
goto out; |
2510 |
goto out; |
| 2464 |
break; |
2511 |
break; |
|
|
2512 |
#endif /* WITHOUT_ED25519 */ |
| 2465 |
default: |
2513 |
default: |
| 2466 |
ret = SSH_ERR_INVALID_ARGUMENT; |
2514 |
ret = SSH_ERR_INVALID_ARGUMENT; |
| 2467 |
goto out; |
2515 |
goto out; |
|
Lines 2656-2661
sshkey_private_serialize(const struct ss
Link Here
|
| 2656 |
break; |
2704 |
break; |
| 2657 |
# endif /* OPENSSL_HAS_ECC */ |
2705 |
# endif /* OPENSSL_HAS_ECC */ |
| 2658 |
#endif /* WITH_OPENSSL */ |
2706 |
#endif /* WITH_OPENSSL */ |
|
|
2707 |
#ifndef WITHOUT_ED25519 |
| 2659 |
case KEY_ED25519: |
2708 |
case KEY_ED25519: |
| 2660 |
if ((r = sshbuf_put_string(b, key->ed25519_pk, |
2709 |
if ((r = sshbuf_put_string(b, key->ed25519_pk, |
| 2661 |
ED25519_PK_SZ)) != 0 || |
2710 |
ED25519_PK_SZ)) != 0 || |
|
Lines 2675-2680
sshkey_private_serialize(const struct ss
Link Here
|
| 2675 |
ED25519_SK_SZ)) != 0) |
2724 |
ED25519_SK_SZ)) != 0) |
| 2676 |
goto out; |
2725 |
goto out; |
| 2677 |
break; |
2726 |
break; |
|
|
2727 |
#endif /* WITHOUT_ED25519 */ |
| 2678 |
default: |
2728 |
default: |
| 2679 |
r = SSH_ERR_INVALID_ARGUMENT; |
2729 |
r = SSH_ERR_INVALID_ARGUMENT; |
| 2680 |
goto out; |
2730 |
goto out; |
|
Lines 2801-2806
sshkey_private_deserialize(struct sshbuf
Link Here
|
| 2801 |
goto out; |
2851 |
goto out; |
| 2802 |
break; |
2852 |
break; |
| 2803 |
#endif /* WITH_OPENSSL */ |
2853 |
#endif /* WITH_OPENSSL */ |
|
|
2854 |
#ifndef WITHOUT_ED25519 |
| 2804 |
case KEY_ED25519: |
2855 |
case KEY_ED25519: |
| 2805 |
if ((k = sshkey_new_private(type)) == NULL) { |
2856 |
if ((k = sshkey_new_private(type)) == NULL) { |
| 2806 |
r = SSH_ERR_ALLOC_FAIL; |
2857 |
r = SSH_ERR_ALLOC_FAIL; |
|
Lines 2831-2836
sshkey_private_deserialize(struct sshbuf
Link Here
|
| 2831 |
k->ed25519_sk = ed25519_sk; |
2882 |
k->ed25519_sk = ed25519_sk; |
| 2832 |
ed25519_pk = ed25519_sk = NULL; |
2883 |
ed25519_pk = ed25519_sk = NULL; |
| 2833 |
break; |
2884 |
break; |
|
|
2885 |
#endif /* WITHOUT_ED25519 */ |
| 2834 |
default: |
2886 |
default: |
| 2835 |
r = SSH_ERR_KEY_TYPE_UNKNOWN; |
2887 |
r = SSH_ERR_KEY_TYPE_UNKNOWN; |
| 2836 |
goto out; |
2888 |
goto out; |
|
Lines 3590-3598
sshkey_private_to_fileblob(struct sshkey
Link Here
|
| 3590 |
return sshkey_private_pem_to_blob(key, blob, |
3642 |
return sshkey_private_pem_to_blob(key, blob, |
| 3591 |
passphrase, comment); |
3643 |
passphrase, comment); |
| 3592 |
#endif /* WITH_OPENSSL */ |
3644 |
#endif /* WITH_OPENSSL */ |
|
|
3645 |
#ifndef WITHOUT_ED25519 |
| 3593 |
case KEY_ED25519: |
3646 |
case KEY_ED25519: |
| 3594 |
return sshkey_private_to_blob2(key, blob, passphrase, |
3647 |
return sshkey_private_to_blob2(key, blob, passphrase, |
| 3595 |
comment, new_format_cipher, new_format_rounds); |
3648 |
comment, new_format_cipher, new_format_rounds); |
|
|
3649 |
#endif /* WITHOUT_ED25519 */ |
| 3596 |
default: |
3650 |
default: |
| 3597 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
3651 |
return SSH_ERR_KEY_TYPE_UNKNOWN; |
| 3598 |
} |
3652 |
} |
|
Lines 3898-3906
sshkey_parse_private_fileblob_type(struc
Link Here
|
| 3898 |
return sshkey_parse_private_pem_fileblob(blob, type, |
3952 |
return sshkey_parse_private_pem_fileblob(blob, type, |
| 3899 |
passphrase, keyp); |
3953 |
passphrase, keyp); |
| 3900 |
#endif /* WITH_OPENSSL */ |
3954 |
#endif /* WITH_OPENSSL */ |
|
|
3955 |
#ifndef WITHOUT_ED25519 |
| 3901 |
case KEY_ED25519: |
3956 |
case KEY_ED25519: |
| 3902 |
return sshkey_parse_private2(blob, type, passphrase, |
3957 |
return sshkey_parse_private2(blob, type, passphrase, |
| 3903 |
keyp, commentp); |
3958 |
keyp, commentp); |
|
|
3959 |
#endif /* WITHOUT_ED25519 */ |
| 3904 |
case KEY_UNSPEC: |
3960 |
case KEY_UNSPEC: |
| 3905 |
if ((r = sshkey_parse_private2(blob, type, passphrase, keyp, |
3961 |
if ((r = sshkey_parse_private2(blob, type, passphrase, keyp, |
| 3906 |
commentp)) == 0) |
3962 |
commentp)) == 0) |