summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_ciph.c
diff options
context:
space:
mode:
authorbeck <>2024-02-03 15:58:34 +0000
committerbeck <>2024-02-03 15:58:34 +0000
commitfeaf10d0a7eb5e59e69c058b10c91c45d2b1b0e3 (patch)
treedc1f0834366a35df8a6de61e2722798629d7c4c2 /src/lib/libssl/ssl_ciph.c
parenta931b9fe4c471545a30c6975c303fa27abc695af (diff)
downloadopenbsd-feaf10d0a7eb5e59e69c058b10c91c45d2b1b0e3.tar.gz
openbsd-feaf10d0a7eb5e59e69c058b10c91c45d2b1b0e3.tar.bz2
openbsd-feaf10d0a7eb5e59e69c058b10c91c45d2b1b0e3.zip
Remove GOST and STREEBOG support from libssl.
This version of GOST is old and not anywhere close to compliant with modern GOST standards. It is also very intrusive in libssl and makes a mess everywhere. Efforts to entice a suitably minded anyone to care about it have been unsuccessful. At this point it is probably best to remove this, and if someone ever showed up who truly needed a working version, it should be a clean implementation from scratch, and have it use something closer to the typical API in libcrypto so it would integrate less painfully here. This removes it from libssl in preparation for it's removal from libcrypto with a future major bump ok tb@
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/ssl_ciph.c107
1 files changed, 6 insertions, 101 deletions
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c
index cea4d3e6f4..76a3840520 100644
--- a/src/lib/libssl/ssl_ciph.c
+++ b/src/lib/libssl/ssl_ciph.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_ciph.c,v 1.138 2024/01/04 20:02:10 tb Exp $ */ 1/* $OpenBSD: ssl_ciph.c,v 1.139 2024/02/03 15:58:33 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -212,10 +212,6 @@ static const SSL_CIPHER cipher_aliases[] = {
212 .name = SSL_TXT_ECDH, 212 .name = SSL_TXT_ECDH,
213 .algorithm_mkey = SSL_kECDHE, 213 .algorithm_mkey = SSL_kECDHE,
214 }, 214 },
215 {
216 .name = SSL_TXT_kGOST,
217 .algorithm_mkey = SSL_kGOST,
218 },
219 215
220 /* server authentication aliases */ 216 /* server authentication aliases */
221 { 217 {
@@ -242,14 +238,6 @@ static const SSL_CIPHER cipher_aliases[] = {
242 .name = SSL_TXT_ECDSA, 238 .name = SSL_TXT_ECDSA,
243 .algorithm_auth = SSL_aECDSA, 239 .algorithm_auth = SSL_aECDSA,
244 }, 240 },
245 {
246 .name = SSL_TXT_aGOST01,
247 .algorithm_auth = SSL_aGOST01,
248 },
249 {
250 .name = SSL_TXT_aGOST,
251 .algorithm_auth = SSL_aGOST01,
252 },
253 241
254 /* aliases combining key exchange and server authentication */ 242 /* aliases combining key exchange and server authentication */
255 { 243 {
@@ -356,14 +344,6 @@ static const SSL_CIPHER cipher_aliases[] = {
356 .algorithm_mac = SSL_SHA1, 344 .algorithm_mac = SSL_SHA1,
357 }, 345 },
358 { 346 {
359 .name = SSL_TXT_GOST94,
360 .algorithm_mac = SSL_GOST94,
361 },
362 {
363 .name = SSL_TXT_GOST89MAC,
364 .algorithm_mac = SSL_GOST89MAC,
365 },
366 {
367 .name = SSL_TXT_SHA256, 347 .name = SSL_TXT_SHA256,
368 .algorithm_mac = SSL_SHA256, 348 .algorithm_mac = SSL_SHA256,
369 }, 349 },
@@ -371,10 +351,6 @@ static const SSL_CIPHER cipher_aliases[] = {
371 .name = SSL_TXT_SHA384, 351 .name = SSL_TXT_SHA384,
372 .algorithm_mac = SSL_SHA384, 352 .algorithm_mac = SSL_SHA384,
373 }, 353 },
374 {
375 .name = SSL_TXT_STREEBOG256,
376 .algorithm_mac = SSL_STREEBOG256,
377 },
378 354
379 /* protocol version aliases */ 355 /* protocol version aliases */
380 { 356 {
@@ -472,11 +448,6 @@ ssl_cipher_get_evp(const SSL_SESSION *ss, const EVP_CIPHER **enc,
472 case SSL_CAMELLIA256: 448 case SSL_CAMELLIA256:
473 *enc = EVP_camellia_256_cbc(); 449 *enc = EVP_camellia_256_cbc();
474 break; 450 break;
475#ifndef OPENSSL_NO_GOST
476 case SSL_eGOST2814789CNT:
477 *enc = EVP_gost2814789_cnt();
478 break;
479#endif
480 } 451 }
481 452
482 switch (ss->cipher->algorithm_mac) { 453 switch (ss->cipher->algorithm_mac) {
@@ -492,21 +463,11 @@ ssl_cipher_get_evp(const SSL_SESSION *ss, const EVP_CIPHER **enc,
492 case SSL_SHA384: 463 case SSL_SHA384:
493 *md = EVP_sha384(); 464 *md = EVP_sha384();
494 break; 465 break;
495#ifndef OPENSSL_NO_GOST
496 case SSL_GOST89MAC:
497 *md = EVP_gost2814789imit();
498 break;
499 case SSL_GOST94:
500 *md = EVP_gostr341194();
501 break;
502 case SSL_STREEBOG256:
503 *md = EVP_streebog256();
504 break;
505#endif
506 } 466 }
507 if (*enc == NULL || *md == NULL) 467 if (*enc == NULL || *md == NULL)
508 return 0; 468 return 0;
509 469
470 /* XXX remove these from ssl_cipher_get_evp? */
510 /* 471 /*
511 * EVP_CIPH_FLAG_AEAD_CIPHER and EVP_CIPH_GCM_MODE ciphers are not 472 * EVP_CIPH_FLAG_AEAD_CIPHER and EVP_CIPH_GCM_MODE ciphers are not
512 * supported via EVP_CIPHER (they should be using EVP_AEAD instead). 473 * supported via EVP_CIPHER (they should be using EVP_AEAD instead).
@@ -515,18 +476,9 @@ ssl_cipher_get_evp(const SSL_SESSION *ss, const EVP_CIPHER **enc,
515 return 0; 476 return 0;
516 if (EVP_CIPHER_mode(*enc) == EVP_CIPH_GCM_MODE) 477 if (EVP_CIPHER_mode(*enc) == EVP_CIPH_GCM_MODE)
517 return 0; 478 return 0;
518#ifndef OPENSSL_NO_GOST 479
519 /* XXX JFC. die in fire already */ 480 *mac_pkey_type = EVP_PKEY_HMAC;
520 if (ss->cipher->algorithm_mac == SSL_GOST89MAC) { 481 *mac_secret_size = EVP_MD_size(*md);
521 *mac_pkey_type = EVP_PKEY_GOSTIMIT;
522 *mac_secret_size = 32; /* XXX */
523 } else {
524#endif
525 *mac_pkey_type = EVP_PKEY_HMAC;
526 *mac_secret_size = EVP_MD_size(*md);
527#ifndef OPENSSL_NO_GOST
528 }
529#endif
530 return 1; 482 return 1;
531} 483}
532 484
@@ -581,14 +533,6 @@ ssl_get_handshake_evp_md(SSL *s, const EVP_MD **md)
581 case SSL_HANDSHAKE_MAC_DEFAULT: 533 case SSL_HANDSHAKE_MAC_DEFAULT:
582 *md = EVP_md5_sha1(); 534 *md = EVP_md5_sha1();
583 return 1; 535 return 1;
584#ifndef OPENSSL_NO_GOST
585 case SSL_HANDSHAKE_MAC_GOST94:
586 *md = EVP_gostr341194();
587 return 1;
588 case SSL_HANDSHAKE_MAC_STREEBOG256:
589 *md = EVP_streebog256();
590 return 1;
591#endif
592 case SSL_HANDSHAKE_MAC_SHA256: 536 case SSL_HANDSHAKE_MAC_SHA256:
593 *md = EVP_sha256(); 537 *md = EVP_sha256();
594 return 1; 538 return 1;
@@ -641,6 +585,7 @@ ll_append_head(CIPHER_ORDER **head, CIPHER_ORDER *curr,
641 *head = curr; 585 *head = curr;
642} 586}
643 587
588/* XXX beck: remove this in a followon to removing GOST */
644static void 589static void
645ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, 590ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth,
646 unsigned long *enc, unsigned long *mac, unsigned long *ssl) 591 unsigned long *enc, unsigned long *mac, unsigned long *ssl)
@@ -651,16 +596,6 @@ ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth,
651 *mac = 0; 596 *mac = 0;
652 *ssl = 0; 597 *ssl = 0;
653 598
654 /*
655 * Check for the availability of GOST 34.10 public/private key
656 * algorithms. If they are not available disable the associated
657 * authentication and key exchange algorithms.
658 */
659#if defined(OPENSSL_NO_GOST) || !defined(EVP_PKEY_GOSTR01)
660 *auth |= SSL_aGOST01;
661 *mkey |= SSL_kGOST;
662#endif
663
664#ifdef SSL_FORBID_ENULL 599#ifdef SSL_FORBID_ENULL
665 *enc |= SSL_eNULL; 600 *enc |= SSL_eNULL;
666#endif 601#endif
@@ -1455,9 +1390,6 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len)
1455 case SSL_kECDHE: 1390 case SSL_kECDHE:
1456 kx = "ECDH"; 1391 kx = "ECDH";
1457 break; 1392 break;
1458 case SSL_kGOST:
1459 kx = "GOST";
1460 break;
1461 case SSL_kTLS1_3: 1393 case SSL_kTLS1_3:
1462 kx = "TLSv1.3"; 1394 kx = "TLSv1.3";
1463 break; 1395 break;
@@ -1478,9 +1410,6 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len)
1478 case SSL_aECDSA: 1410 case SSL_aECDSA:
1479 au = "ECDSA"; 1411 au = "ECDSA";
1480 break; 1412 break;
1481 case SSL_aGOST01:
1482 au = "GOST01";
1483 break;
1484 case SSL_aTLS1_3: 1413 case SSL_aTLS1_3:
1485 au = "TLSv1.3"; 1414 au = "TLSv1.3";
1486 break; 1415 break;
@@ -1520,9 +1449,6 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len)
1520 case SSL_CHACHA20POLY1305: 1449 case SSL_CHACHA20POLY1305:
1521 enc = "ChaCha20-Poly1305"; 1450 enc = "ChaCha20-Poly1305";
1522 break; 1451 break;
1523 case SSL_eGOST2814789CNT:
1524 enc = "GOST-28178-89-CNT";
1525 break;
1526 default: 1452 default:
1527 enc = "unknown"; 1453 enc = "unknown";
1528 break; 1454 break;
@@ -1544,15 +1470,6 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len)
1544 case SSL_AEAD: 1470 case SSL_AEAD:
1545 mac = "AEAD"; 1471 mac = "AEAD";
1546 break; 1472 break;
1547 case SSL_GOST94:
1548 mac = "GOST94";
1549 break;
1550 case SSL_GOST89MAC:
1551 mac = "GOST89IMIT";
1552 break;
1553 case SSL_STREEBOG256:
1554 mac = "STREEBOG256";
1555 break;
1556 default: 1473 default:
1557 mac = "unknown"; 1474 mac = "unknown";
1558 break; 1475 break;
@@ -1666,8 +1583,6 @@ SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c)
1666 return NID_des_cbc; 1583 return NID_des_cbc;
1667 case SSL_RC4: 1584 case SSL_RC4:
1668 return NID_rc4; 1585 return NID_rc4;
1669 case SSL_eGOST2814789CNT:
1670 return NID_gost89_cnt;
1671 default: 1586 default:
1672 return NID_undef; 1587 return NID_undef;
1673 } 1588 }
@@ -1680,10 +1595,6 @@ SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c)
1680 switch (c->algorithm_mac) { 1595 switch (c->algorithm_mac) {
1681 case SSL_AEAD: 1596 case SSL_AEAD:
1682 return NID_undef; 1597 return NID_undef;
1683 case SSL_GOST89MAC:
1684 return NID_id_Gost28147_89_MAC;
1685 case SSL_GOST94:
1686 return NID_id_GostR3411_94;
1687 case SSL_MD5: 1598 case SSL_MD5:
1688 return NID_md5; 1599 return NID_md5;
1689 case SSL_SHA1: 1600 case SSL_SHA1:
@@ -1692,8 +1603,6 @@ SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c)
1692 return NID_sha256; 1603 return NID_sha256;
1693 case SSL_SHA384: 1604 case SSL_SHA384:
1694 return NID_sha384; 1605 return NID_sha384;
1695 case SSL_STREEBOG256:
1696 return NID_id_tc26_gost3411_2012_256;
1697 default: 1606 default:
1698 return NID_undef; 1607 return NID_undef;
1699 } 1608 }
@@ -1708,8 +1617,6 @@ SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c)
1708 return NID_kx_dhe; 1617 return NID_kx_dhe;
1709 case SSL_kECDHE: 1618 case SSL_kECDHE:
1710 return NID_kx_ecdhe; 1619 return NID_kx_ecdhe;
1711 case SSL_kGOST:
1712 return NID_kx_gost;
1713 case SSL_kRSA: 1620 case SSL_kRSA:
1714 return NID_kx_rsa; 1621 return NID_kx_rsa;
1715 default: 1622 default:
@@ -1726,8 +1633,6 @@ SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c)
1726 return NID_auth_null; 1633 return NID_auth_null;
1727 case SSL_aECDSA: 1634 case SSL_aECDSA:
1728 return NID_auth_ecdsa; 1635 return NID_auth_ecdsa;
1729 case SSL_aGOST01:
1730 return NID_auth_gost01;
1731 case SSL_aRSA: 1636 case SSL_aRSA:
1732 return NID_auth_rsa; 1637 return NID_auth_rsa;
1733 default: 1638 default: