Skip to content
CHANGES 574 KiB
Newer Older
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
     This issue was reported to OpenSSL by the OSS-Fuzz project.
     (CVE-2017-3735)
     [Rich Salz]

 Changes between 1.1.0e and 1.1.0f [25 May 2017]

  *) Have 'config' recognise 64-bit mingw and choose 'mingw64' as the target
     platform rather than 'mingw'.
     [Richard Levitte]

  *) Remove the VMS-specific reimplementation of gmtime from crypto/o_times.c.
     VMS C's RTL has a fully up to date gmtime() and gmtime_r() since V7.1,
     which is the minimum version we support.
     [Richard Levitte]

 Changes between 1.1.0d and 1.1.0e [16 Feb 2017]

  *) Encrypt-Then-Mac renegotiation crash

     During a renegotiation handshake if the Encrypt-Then-Mac extension is
     negotiated where it was not in the original handshake (or vice-versa) then
     this can cause OpenSSL to crash (dependant on ciphersuite). Both clients
     and servers are affected.

     This issue was reported to OpenSSL by Joe Orton (Red Hat).
     (CVE-2017-3733)
     [Matt Caswell]

 Changes between 1.1.0c and 1.1.0d [26 Jan 2017]

  *) Truncated packet could crash via OOB read

     If one side of an SSL/TLS path is running on a 32-bit host and a specific
     cipher is being used, then a truncated packet can cause that host to
     perform an out-of-bounds read, usually resulting in a crash.

     This issue was reported to OpenSSL by Robert Święcki of Google.
     (CVE-2017-3731)
     [Andy Polyakov]

  *) Bad (EC)DHE parameters cause a client crash

     If a malicious server supplies bad parameters for a DHE or ECDHE key
     exchange then this can result in the client attempting to dereference a
     NULL pointer leading to a client crash. This could be exploited in a Denial
     of Service attack.

     This issue was reported to OpenSSL by Guido Vranken.
     (CVE-2017-3730)
     [Matt Caswell]

  *) BN_mod_exp may produce incorrect results on x86_64

     There is a carry propagating bug in the x86_64 Montgomery squaring
     procedure. No EC algorithms are affected. Analysis suggests that attacks
     against RSA and DSA as a result of this defect would be very difficult to
     perform and are not believed likely. Attacks against DH are considered just
     feasible (although very difficult) because most of the work necessary to
     deduce information about a private key may be performed offline. The amount
     of resources required for such an attack would be very significant and
     likely only accessible to a limited number of attackers. An attacker would
     additionally need online access to an unpatched system using the target
     private key in a scenario with persistent DH parameters and a private
     key that is shared between multiple clients. For example this can occur by
     default in OpenSSL DHE based SSL/TLS ciphersuites. Note: This issue is very
     similar to CVE-2015-3193 but must be treated as a separate problem.

     This issue was reported to OpenSSL by the OSS-Fuzz project.
     (CVE-2017-3732)
     [Andy Polyakov]

 Changes between 1.1.0b and 1.1.0c [10 Nov 2016]

  *) ChaCha20/Poly1305 heap-buffer-overflow

     TLS connections using *-CHACHA20-POLY1305 ciphersuites are susceptible to
     a DoS attack by corrupting larger payloads. This can result in an OpenSSL
     crash. This issue is not considered to be exploitable beyond a DoS.

     This issue was reported to OpenSSL by Robert Święcki (Google Security Team)
     (CVE-2016-7054)
     [Richard Levitte]

  *) CMS Null dereference

     Applications parsing invalid CMS structures can crash with a NULL pointer
     dereference. This is caused by a bug in the handling of the ASN.1 CHOICE
     type in OpenSSL 1.1.0 which can result in a NULL value being passed to the
     structure callback if an attempt is made to free certain invalid encodings.
     Only CHOICE structures using a callback which do not handle NULL value are
     affected.

     This issue was reported to OpenSSL by Tyler Nighswander of ForAllSecure.
     (CVE-2016-7053)
     [Stephen Henson]

  *) Montgomery multiplication may produce incorrect results

     There is a carry propagating bug in the Broadwell-specific Montgomery
     multiplication procedure that handles input lengths divisible by, but
     longer than 256 bits. Analysis suggests that attacks against RSA, DSA
     and DH private keys are impossible. This is because the subroutine in
     question is not used in operations with the private key itself and an input
     of the attacker's direct choice. Otherwise the bug can manifest itself as
     transient authentication and key negotiation failures or reproducible
     erroneous outcome of public-key operations with specially crafted input.
     Among EC algorithms only Brainpool P-512 curves are affected and one
     presumably can attack ECDH key negotiation. Impact was not analyzed in
     detail, because pre-requisites for attack are considered unlikely. Namely
     multiple clients have to choose the curve in question and the server has to
     share the private key among them, neither of which is default behaviour.
     Even then only clients that chose the curve will be affected.

     This issue was publicly reported as transient failures and was not
     initially recognized as a security issue. Thanks to Richard Morgan for
     providing reproducible case.
     (CVE-2016-7055)
     [Andy Polyakov]

  *) Removed automatic addition of RPATH in shared libraries and executables,
     as this was a remainder from OpenSSL 1.0.x and isn't needed any more.
     [Richard Levitte]

 Changes between 1.1.0a and 1.1.0b [26 Sep 2016]

  *) Fix Use After Free for large message sizes

     The patch applied to address CVE-2016-6307 resulted in an issue where if a
     message larger than approx 16k is received then the underlying buffer to
     store the incoming message is reallocated and moved. Unfortunately a
     dangling pointer to the old location is left which results in an attempt to
     write to the previously freed location. This is likely to result in a
     crash, however it could potentially lead to execution of arbitrary code.

     This issue only affects OpenSSL 1.1.0a.

     This issue was reported to OpenSSL by Robert Święcki.
     (CVE-2016-6309)
     [Matt Caswell]

 Changes between 1.1.0 and 1.1.0a [22 Sep 2016]

  *) OCSP Status Request extension unbounded memory growth

     A malicious client can send an excessively large OCSP Status Request
     extension. If that client continually requests renegotiation, sending a
     large OCSP Status Request extension each time, then there will be unbounded
     memory growth on the server. This will eventually lead to a Denial Of
     Service attack through memory exhaustion. Servers with a default
     configuration are vulnerable even if they do not support OCSP. Builds using
     the "no-ocsp" build time option are not affected.

     This issue was reported to OpenSSL by Shi Lei (Gear Team, Qihoo 360 Inc.)
     (CVE-2016-6304)
     [Matt Caswell]

  *) SSL_peek() hang on empty record

     OpenSSL 1.1.0 SSL/TLS will hang during a call to SSL_peek() if the peer
     sends an empty record. This could be exploited by a malicious peer in a
     Denial Of Service attack.

     This issue was reported to OpenSSL by Alex Gaynor.
     (CVE-2016-6305)
     [Matt Caswell]

  *) Excessive allocation of memory in tls_get_message_header() and
     dtls1_preprocess_fragment()

     A (D)TLS message includes 3 bytes for its length in the header for the
     message. This would allow for messages up to 16Mb in length. Messages of
     this length are excessive and OpenSSL includes a check to ensure that a
     peer is sending reasonably sized messages in order to avoid too much memory
     being consumed to service a connection. A flaw in the logic of version
     1.1.0 means that memory for the message is allocated too early, prior to
     the excessive message length check. Due to way memory is allocated in
     OpenSSL this could mean an attacker could force up to 21Mb to be allocated
     to service a connection. This could lead to a Denial of Service through
     memory exhaustion. However, the excessive message length check still takes
     place, and this would cause the connection to immediately fail. Assuming
     that the application calls SSL_free() on the failed connection in a timely
     manner then the 21Mb of allocated memory will then be immediately freed
     again. Therefore the excessive memory allocation will be transitory in
     nature. This then means that there is only a security impact if:

     1) The application does not call SSL_free() in a timely manner in the event
     that the connection fails
     or
     2) The application is working in a constrained environment where there is
     very little free memory
     or
     3) The attacker initiates multiple connection attempts such that there are
     multiple connections in a state where memory has been allocated for the
     connection; SSL_free() has not yet been called; and there is insufficient
     memory to service the multiple requests.

     Except in the instance of (1) above any Denial Of Service is likely to be
     transitory because as soon as the connection fails the memory is
     subsequently freed again in the SSL_free() call. However there is an
     increased risk during this period of application crashes due to the lack of
     memory - which would then mean a more serious Denial of Service.

     This issue was reported to OpenSSL by Shi Lei (Gear Team, Qihoo 360 Inc.)
     (CVE-2016-6307 and CVE-2016-6308)
     [Matt Caswell]

  *) solaris-x86-cc, i.e. 32-bit configuration with vendor compiler,
     had to be removed. Primary reason is that vendor assembler can't
     assemble our modules with -KPIC flag. As result it, assembly
     support, was not even available as option. But its lack means
     lack of side-channel resistant code, which is incompatible with
     security by todays standards. Fortunately gcc is readily available
     prepackaged option, which we firmly point at...
     [Andy Polyakov]

 Changes between 1.0.2h and 1.1.0  [25 Aug 2016]

  *) Windows command-line tool supports UTF-8 opt-in option for arguments
     and console input. Setting OPENSSL_WIN32_UTF8 environment variable
     (to any value) allows Windows user to access PKCS#12 file generated
     with Windows CryptoAPI and protected with non-ASCII password, as well
     as files generated under UTF-8 locale on Linux also protected with
     non-ASCII password.
     [Andy Polyakov]

  *) To mitigate the SWEET32 attack (CVE-2016-2183), 3DES cipher suites
     have been disabled by default and removed from DEFAULT, just like RC4.
     See the RC4 item below to re-enable both.
     [Rich Salz]

  *) The method for finding the storage location for the Windows RAND seed file
     has changed. First we check %RANDFILE%. If that is not set then we check
     the directories %HOME%, %USERPROFILE% and %SYSTEMROOT% in that order. If
     all else fails we fall back to C:\.
     [Matt Caswell]

  *) The EVP_EncryptUpdate() function has had its return type changed from void
     to int. A return of 0 indicates and error while a return of 1 indicates
     success.
     [Matt Caswell]

  *) The flags RSA_FLAG_NO_CONSTTIME, DSA_FLAG_NO_EXP_CONSTTIME and
     DH_FLAG_NO_EXP_CONSTTIME which previously provided the ability to switch
     off the constant time implementation for RSA, DSA and DH have been made
     no-ops and deprecated.
     [Matt Caswell]

  *) Windows RAND implementation was simplified to only get entropy by
     calling CryptGenRandom(). Various other RAND-related tickets
     were also closed.
     [Joseph Wylie Yandle, Rich Salz]

  *) The stack and lhash API's were renamed to start with OPENSSL_SK_
     and OPENSSL_LH_, respectively.  The old names are available
     with API compatibility.  They new names are now completely documented.
     [Rich Salz]

  *) Unify TYPE_up_ref(obj) methods signature.
     SSL_CTX_up_ref(), SSL_up_ref(), X509_up_ref(), EVP_PKEY_up_ref(),
     X509_CRL_up_ref(), X509_OBJECT_up_ref_count() methods are now returning an
     int (instead of void) like all others TYPE_up_ref() methods.
     So now these methods also check the return value of CRYPTO_atomic_add(),
     and the validity of object reference counter.
     [fdasilvayy@gmail.com]

  *) With Windows Visual Studio builds, the .pdb files are installed
     alongside the installed libraries and executables.  For a static
     library installation, ossl_static.pdb is the associate compiler
     generated .pdb file to be used when linking programs.
     [Richard Levitte]

  *) Remove openssl.spec.  Packaging files belong with the packagers.
     [Richard Levitte]

  *) Automatic Darwin/OSX configuration has had a refresh, it will now
     recognise x86_64 architectures automatically.  You can still decide
     to build for a different bitness with the environment variable
     KERNEL_BITS (can be 32 or 64), for example:

         KERNEL_BITS=32 ./config

     [Richard Levitte]

  *) Change default algorithms in pkcs8 utility to use PKCS#5 v2.0,
     256 bit AES and HMAC with SHA256.
     [Steve Henson]

  *) Remove support for MIPS o32 ABI on IRIX (and IRIX only).
     [Andy Polyakov]

  *) Triple-DES ciphers have been moved from HIGH to MEDIUM.
     [Rich Salz]

  *) To enable users to have their own config files and build file templates,
     Configure looks in the directory indicated by the environment variable
     OPENSSL_LOCAL_CONFIG_DIR as well as the in-source Configurations/
     directory.  On VMS, OPENSSL_LOCAL_CONFIG_DIR is expected to be a logical
     name and is used as is.
     [Richard Levitte]

  *) The following datatypes were made opaque: X509_OBJECT, X509_STORE_CTX,
     X509_STORE, X509_LOOKUP, and X509_LOOKUP_METHOD.  The unused type
     X509_CERT_FILE_CTX was removed.
     [Rich Salz]

  *) "shared" builds are now the default. To create only static libraries use
     the "no-shared" Configure option.
     [Matt Caswell]

  *) Remove the no-aes, no-hmac, no-rsa, no-sha and no-md5 Configure options.
     All of these option have not worked for some while and are fundamental
     algorithms.
     [Matt Caswell]

  *) Make various cleanup routines no-ops and mark them as deprecated. Most
     global cleanup functions are no longer required because they are handled
     via auto-deinit (see OPENSSL_init_crypto and OPENSSL_init_ssl man pages).
     Explicitly de-initing can cause problems (e.g. where a library that uses
     OpenSSL de-inits, but an application is still using it). The affected
     functions are CONF_modules_free(), ENGINE_cleanup(), OBJ_cleanup(),
     EVP_cleanup(), BIO_sock_cleanup(), CRYPTO_cleanup_all_ex_data(),
     RAND_cleanup(), SSL_COMP_free_compression_methods(), ERR_free_strings() and
     COMP_zlib_cleanup().
     [Matt Caswell]

  *) --strict-warnings no longer enables runtime debugging options
     such as REF_DEBUG. Instead, debug options are automatically
     enabled with '--debug' builds.
     [Andy Polyakov, Emilia Käsper]

  *) Made DH and DH_METHOD opaque. The structures for managing DH objects
     have been moved out of the public header files. New functions for managing
     these have been added.
     [Matt Caswell]

  *) Made RSA and RSA_METHOD opaque. The structures for managing RSA
     objects have been moved out of the public header files. New
     functions for managing these have been added.
     [Richard Levitte]

  *) Made DSA and DSA_METHOD opaque. The structures for managing DSA objects
     have been moved out of the public header files. New functions for managing
     these have been added.
     [Matt Caswell]

  *) Made BIO and BIO_METHOD opaque. The structures for managing BIOs have been
     moved out of the public header files. New functions for managing these
     have been added.
     [Matt Caswell]

  *) Removed no-rijndael as a config option. Rijndael is an old name for AES.
     [Matt Caswell]

  *) Removed the mk1mf build scripts.
     [Richard Levitte]

  *) Headers are now wrapped, if necessary, with OPENSSL_NO_xxx, so
     it is always safe to #include a header now.
     [Rich Salz]

  *) Removed the aged BC-32 config and all its supporting scripts
     [Richard Levitte]

  *) Removed support for Ultrix, Netware, and OS/2.
     [Rich Salz]

  *) Add support for HKDF.
     [Alessandro Ghedini]

  *) Add support for blake2b and blake2s
     [Bill Cox]

  *) Added support for "pipelining". Ciphers that have the
     EVP_CIPH_FLAG_PIPELINE flag set have a capability to process multiple
     encryptions/decryptions simultaneously. There are currently no built-in
     ciphers with this property but the expectation is that engines will be able
     to offer it to significantly improve throughput. Support has been extended
     into libssl so that multiple records for a single connection can be
     processed in one go (for >=TLS 1.1).
     [Matt Caswell]

  *) Added the AFALG engine. This is an async capable engine which is able to
     offload work to the Linux kernel. In this initial version it only supports
     AES128-CBC. The kernel must be version 4.1.0 or greater.
     [Catriona Lucey]

  *) OpenSSL now uses a new threading API. It is no longer necessary to
     set locking callbacks to use OpenSSL in a multi-threaded environment. There
     are two supported threading models: pthreads and windows threads. It is
     also possible to configure OpenSSL at compile time for "no-threads". The
     old threading API should no longer be used. The functions have been
     replaced with "no-op" compatibility macros.
     [Alessandro Ghedini, Matt Caswell]

  *) Modify behavior of ALPN to invoke callback after SNI/servername
     callback, such that updates to the SSL_CTX affect ALPN.
     [Todd Short]

  *) Add SSL_CIPHER queries for authentication and key-exchange.
     [Todd Short]

  *) Changes to the DEFAULT cipherlist:
       - Prefer (EC)DHE handshakes over plain RSA.
       - Prefer AEAD ciphers over legacy ciphers.
       - Prefer ECDSA over RSA when both certificates are available.
       - Prefer TLSv1.2 ciphers/PRF.
       - Remove DSS, SEED, IDEA, CAMELLIA, and AES-CCM from the
         default cipherlist.
     [Emilia Käsper]

  *) Change the ECC default curve list to be this, in order: x25519,
     secp256r1, secp521r1, secp384r1.
     [Rich Salz]

  *) RC4 based libssl ciphersuites are now classed as "weak" ciphers and are
     disabled by default. They can be re-enabled using the
     enable-weak-ssl-ciphers option to Configure.
     [Matt Caswell]

  *) If the server has ALPN configured, but supports no protocols that the
     client advertises, send a fatal "no_application_protocol" alert.
     This behaviour is SHALL in RFC 7301, though it isn't universally
     implemented by other servers.
     [Emilia Käsper]

  *) Add X25519 support.
     Add ASN.1 and EVP_PKEY methods for X25519. This includes support
     for public and private key encoding using the format documented in
     draft-ietf-curdle-pkix-02. The corresponding EVP_PKEY method supports
     key generation and key derivation.

     TLS support complies with draft-ietf-tls-rfc4492bis-08 and uses
     X25519(29).
     [Steve Henson]

  *) Deprecate SRP_VBASE_get_by_user.
     SRP_VBASE_get_by_user had inconsistent memory management behaviour.
     In order to fix an unavoidable memory leak (CVE-2016-0798),
     SRP_VBASE_get_by_user was changed to ignore the "fake user" SRP
     seed, even if the seed is configured.

     Users should use SRP_VBASE_get1_by_user instead. Note that in
     SRP_VBASE_get1_by_user, caller must free the returned value. Note
     also that even though configuring the SRP seed attempts to hide
     invalid usernames by continuing the handshake with fake
     credentials, this behaviour is not constant time and no strong
     guarantees are made that the handshake is indistinguishable from
     that of a valid user.
     [Emilia Käsper]

  *) Configuration change; it's now possible to build dynamic engines
     without having to build shared libraries and vice versa.  This
     only applies to the engines in engines/, those in crypto/engine/
     will always be built into libcrypto (i.e. "static").

     Building dynamic engines is enabled by default; to disable, use
     the configuration option "disable-dynamic-engine".

     The only requirements for building dynamic engines are the
     presence of the DSO module and building with position independent
     code, so they will also automatically be disabled if configuring
     with "disable-dso" or "disable-pic".

     The macros OPENSSL_NO_STATIC_ENGINE and OPENSSL_NO_DYNAMIC_ENGINE
     are also taken away from openssl/opensslconf.h, as they are
     irrelevant.
     [Richard Levitte]

  *) Configuration change; if there is a known flag to compile
     position independent code, it will always be applied on the
     libcrypto and libssl object files, and never on the application
     object files.  This means other libraries that use routines from
     libcrypto / libssl can be made into shared libraries regardless
     of how OpenSSL was configured.

     If this isn't desirable, the configuration options "disable-pic"
     or "no-pic" can be used to disable the use of PIC.  This will
     also disable building shared libraries and dynamic engines.
     [Richard Levitte]

  *) Removed JPAKE code.  It was experimental and has no wide use.
     [Rich Salz]

  *) The INSTALL_PREFIX Makefile variable has been renamed to
     DESTDIR.  That makes for less confusion on what this variable
     is for.  Also, the configuration option --install_prefix is
     removed.
     [Richard Levitte]

  *) Heartbeat for TLS has been removed and is disabled by default
     for DTLS; configure with enable-heartbeats.  Code that uses the
     old #define's might need to be updated.
     [Emilia Käsper, Rich Salz]

  *) Rename REF_CHECK to REF_DEBUG.
     [Rich Salz]

  *) New "unified" build system

     The "unified" build system is aimed to be a common system for all
     platforms we support.  With it comes new support for VMS.

     This system builds supports building in a different directory tree
     than the source tree.  It produces one Makefile (for unix family
     or lookalikes), or one descrip.mms (for VMS).

     The source of information to make the Makefile / descrip.mms is
     small files called 'build.info', holding the necessary
     information for each directory with source to compile, and a
     template in Configurations, like unix-Makefile.tmpl or
     descrip.mms.tmpl.

     With this change, the library names were also renamed on Windows
     and on VMS.  They now have names that are closer to the standard
     on Unix, and include the major version number, and in certain
     cases, the architecture they are built for.  See "Notes on shared
     libraries" in INSTALL.

     We rely heavily on the perl module Text::Template.
     [Richard Levitte]

  *) Added support for auto-initialisation and de-initialisation of the library.
     OpenSSL no longer requires explicit init or deinit routines to be called,
     except in certain circumstances. See the OPENSSL_init_crypto() and
     OPENSSL_init_ssl() man pages for further information.
     [Matt Caswell]

  *) The arguments to the DTLSv1_listen function have changed. Specifically the
     "peer" argument is now expected to be a BIO_ADDR object.

  *) Rewrite of BIO networking library. The BIO library lacked consistent
     support of IPv6, and adding it required some more extensive
     modifications.  This introduces the BIO_ADDR and BIO_ADDRINFO types,
     which hold all types of addresses and chains of address information.
     It also introduces a new API, with functions like BIO_socket,
     BIO_connect, BIO_listen, BIO_lookup and a rewrite of BIO_accept.
     The source/sink BIOs BIO_s_connect, BIO_s_accept and BIO_s_datagram
     have been adapted accordingly.
     [Richard Levitte]

  *) RSA_padding_check_PKCS1_type_1 now accepts inputs with and without
     the leading 0-byte.
     [Emilia Käsper]

  *) CRIME protection: disable compression by default, even if OpenSSL is
     compiled with zlib enabled. Applications can still enable compression
     by calling SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION), or by
     using the SSL_CONF library to configure compression.
     [Emilia Käsper]

  *) The signature of the session callback configured with
     SSL_CTX_sess_set_get_cb was changed. The read-only input buffer
     was explicitly marked as 'const unsigned char*' instead of
     'unsigned char*'.
     [Emilia Käsper]

  *) Always DPURIFY. Remove the use of uninitialized memory in the
     RNG, and other conditional uses of DPURIFY. This makes -DPURIFY a no-op.
     [Emilia Käsper]

  *) Removed many obsolete configuration items, including
        DES_PTR, DES_RISC1, DES_RISC2, DES_INT
        MD2_CHAR, MD2_INT, MD2_LONG
        BF_PTR, BF_PTR2
        IDEA_SHORT, IDEA_LONG
        RC2_SHORT, RC2_LONG, RC4_LONG, RC4_CHUNK, RC4_INDEX
     [Rich Salz, with advice from Andy Polyakov]

  *) Many BN internals have been moved to an internal header file.
     [Rich Salz with help from Andy Polyakov]

  *) Configuration and writing out the results from it has changed.
     Files such as Makefile include/openssl/opensslconf.h and are now
     produced through general templates, such as Makefile.in and
     crypto/opensslconf.h.in and some help from the perl module
     Text::Template.

     Also, the center of configuration information is no longer
     Makefile.  Instead, Configure produces a perl module in
     configdata.pm which holds most of the config data (in the hash
     table %config), the target data that comes from the target
     configuration in one of the Configurations/*.conf files (in
     %target).
     [Richard Levitte]

  *) To clarify their intended purposes, the Configure options
     --prefix and --openssldir change their semantics, and become more
     straightforward and less interdependent.

     --prefix shall be used exclusively to give the location INSTALLTOP
     where programs, scripts, libraries, include files and manuals are
     going to be installed.  The default is now /usr/local.

     --openssldir shall be used exclusively to give the default
     location OPENSSLDIR where certificates, private keys, CRLs are
     managed.  This is also where the default openssl.cnf gets
     installed.
     If the directory given with this option is a relative path, the
     values of both the --prefix value and the --openssldir value will
     be combined to become OPENSSLDIR.
     The default for --openssldir is INSTALLTOP/ssl.

     Anyone who uses --openssldir to specify where OpenSSL is to be
     installed MUST change to use --prefix instead.
     [Richard Levitte]

  *) The GOST engine was out of date and therefore it has been removed. An up
     to date GOST engine is now being maintained in an external repository.
     See: https://wiki.openssl.org/index.php/Binaries. Libssl still retains
     support for GOST ciphersuites (these are only activated if a GOST engine
     is present).
     [Matt Caswell]

  *) EGD is no longer supported by default; use enable-egd when
     configuring.
     [Ben Kaduk and Rich Salz]

  *) The distribution now has Makefile.in files, which are used to
     create Makefile's when Configure is run.  *Configure must be run
     before trying to build now.*
     [Rich Salz]

  *) The return value for SSL_CIPHER_description() for error conditions
     has changed.
     [Rich Salz]

  *) Support for RFC6698/RFC7671 DANE TLSA peer authentication.

     Obtaining and performing DNSSEC validation of TLSA records is
     the application's responsibility.  The application provides
     the TLSA records of its choice to OpenSSL, and these are then
     used to authenticate the peer.

     The TLSA records need not even come from DNS.  They can, for
     example, be used to implement local end-entity certificate or
     trust-anchor "pinning", where the "pin" data takes the form
     of TLSA records, which can augment or replace verification
     based on the usual WebPKI public certification authorities.
     [Viktor Dukhovni]

  *) Revert default OPENSSL_NO_DEPRECATED setting.  Instead OpenSSL
     continues to support deprecated interfaces in default builds.
     However, applications are strongly advised to compile their
     source files with -DOPENSSL_API_COMPAT=0x10100000L, which hides
     the declarations of all interfaces deprecated in 0.9.8, 1.0.0
     or the 1.1.0 releases.

     In environments in which all applications have been ported to
     not use any deprecated interfaces OpenSSL's Configure script
     should be used with the --api=1.1.0 option to entirely remove
     support for the deprecated features from the library and
     unconditionally disable them in the installed headers.
     Essentially the same effect can be achieved with the "no-deprecated"
     argument to Configure, except that this will always restrict
     the build to just the latest API, rather than a fixed API
     version.

     As applications are ported to future revisions of the API,
     they should update their compile-time OPENSSL_API_COMPAT define
     accordingly, but in most cases should be able to continue to
     compile with later releases.

     The OPENSSL_API_COMPAT versions for 1.0.0, and 0.9.8 are
     0x10000000L and 0x00908000L, respectively.  However those
     versions did not support the OPENSSL_API_COMPAT feature, and
     so applications are not typically tested for explicit support
     of just the undeprecated features of either release.
     [Viktor Dukhovni]

  *) Add support for setting the minimum and maximum supported protocol.
     It can bet set via the SSL_set_min_proto_version() and
     SSL_set_max_proto_version(), or via the SSL_CONF's MinProtocol and
     MaxProtocol.  It's recommended to use the new APIs to disable
     protocols instead of disabling individual protocols using
     SSL_set_options() or SSL_CONF's Protocol.  This change also
     removes support for disabling TLS 1.2 in the OpenSSL TLS
     client at compile time by defining OPENSSL_NO_TLS1_2_CLIENT.
     [Kurt Roeckx]

  *) Support for ChaCha20 and Poly1305 added to libcrypto and libssl.
     [Andy Polyakov]

  *) New EC_KEY_METHOD, this replaces the older ECDSA_METHOD and ECDH_METHOD
     and integrates ECDSA and ECDH functionality into EC. Implementations can
     now redirect key generation and no longer need to convert to or from
     ECDSA_SIG format.

     Note: the ecdsa.h and ecdh.h headers are now no longer needed and just
     include the ec.h header file instead.
     [Steve Henson]

  *) Remove support for all 40 and 56 bit ciphers.  This includes all the export
     ciphers who are no longer supported and drops support the ephemeral RSA key
     exchange. The LOW ciphers currently doesn't have any ciphers in it.
     [Kurt Roeckx]

  *) Made EVP_MD_CTX, EVP_MD, EVP_CIPHER_CTX, EVP_CIPHER and HMAC_CTX
     opaque.  For HMAC_CTX, the following constructors and destructors
     were added:

        HMAC_CTX *HMAC_CTX_new(void);
        void HMAC_CTX_free(HMAC_CTX *ctx);

     For EVP_MD and EVP_CIPHER, complete APIs to create, fill and
     destroy such methods has been added.  See EVP_MD_meth_new(3) and
     EVP_CIPHER_meth_new(3) for documentation.

     Additional changes:
     1) EVP_MD_CTX_cleanup(), EVP_CIPHER_CTX_cleanup() and
        HMAC_CTX_cleanup() were removed.  HMAC_CTX_reset() and
        EVP_MD_CTX_reset() should be called instead to reinitialise
        an already created structure.
     2) For consistency with the majority of our object creators and
        destructors, EVP_MD_CTX_(create|destroy) were renamed to
        EVP_MD_CTX_(new|free).  The old names are retained as macros
        for deprecated builds.
     [Richard Levitte]

  *) Added ASYNC support. Libcrypto now includes the async sub-library to enable
     cryptographic operations to be performed asynchronously as long as an
     asynchronous capable engine is used. See the ASYNC_start_job() man page for
     further details. Libssl has also had this capability integrated with the
     introduction of the new mode SSL_MODE_ASYNC and associated error
     SSL_ERROR_WANT_ASYNC. See the SSL_CTX_set_mode() and SSL_get_error() man
     pages. This work was developed in partnership with Intel Corp.
     [Matt Caswell]

  *) SSL_{CTX_}set_ecdh_auto() has been removed and ECDH is support is
     always enabled now.  If you want to disable the support you should
     exclude it using the list of supported ciphers. This also means that the
     "-no_ecdhe" option has been removed from s_server.
     [Kurt Roeckx]

  *) SSL_{CTX}_set_tmp_ecdh() which can set 1 EC curve now internally calls
     SSL_{CTX_}set1_curves() which can set a list.
     [Kurt Roeckx]

  *) Remove support for SSL_{CTX_}set_tmp_ecdh_callback().  You should set the
     curve you want to support using SSL_{CTX_}set1_curves().
     [Kurt Roeckx]

  *) State machine rewrite. The state machine code has been significantly
     refactored in order to remove much duplication of code and solve issues
     with the old code (see ssl/statem/README for further details). This change
     does have some associated API changes. Notably the SSL_state() function
     has been removed and replaced by SSL_get_state which now returns an
     "OSSL_HANDSHAKE_STATE" instead of an int. SSL_set_state() has been removed
     altogether. The previous handshake states defined in ssl.h and ssl3.h have
     also been removed.
     [Matt Caswell]

  *) All instances of the string "ssleay" in the public API were replaced
     with OpenSSL (case-matching; e.g., OPENSSL_VERSION for #define's)
     Some error codes related to internal RSA_eay API's were renamed.
     [Rich Salz]

  *) The demo files in crypto/threads were moved to demo/threads.
     [Rich Salz]

  *) Removed obsolete engines: 4758cca, aep, atalla, cswift, nuron, gmp,
     sureware and ubsec.
     [Matt Caswell, Rich Salz]

  *) New ASN.1 embed macro.

     New ASN.1 macro ASN1_EMBED. This is the same as ASN1_SIMPLE except the
     structure is not allocated: it is part of the parent. That is instead of

     FOO *x;

     it must be:

     FOO x;

     This reduces memory fragmentation and make it impossible to accidentally
     set a mandatory field to NULL.

     This currently only works for some fields specifically a SEQUENCE, CHOICE,
     or ASN1_STRING type which is part of a parent SEQUENCE. Since it is
     equivalent to ASN1_SIMPLE it cannot be tagged, OPTIONAL, SET OF or
     SEQUENCE OF.
     [Steve Henson]

  *) Remove EVP_CHECK_DES_KEY, a compile-time option that never compiled.
     [Emilia Käsper]

  *) Removed DES and RC4 ciphersuites from DEFAULT. Also removed RC2 although
     in 1.0.2 EXPORT was already removed and the only RC2 ciphersuite is also
     an EXPORT one. COMPLEMENTOFDEFAULT has been updated accordingly to add
     DES and RC4 ciphersuites.
     [Matt Caswell]

  *) Rewrite EVP_DecodeUpdate (base64 decoding) to fix several bugs.
     This changes the decoding behaviour for some invalid messages,
     though the change is mostly in the more lenient direction, and
     legacy behaviour is preserved as much as possible.
     [Emilia Käsper]

  *) Fix no-stdio build.
    [ David Woodhouse <David.Woodhouse@intel.com> and also
      Ivan Nestlerode <ivan.nestlerode@sonos.com> ]

  *) New testing framework
     The testing framework has been largely rewritten and is now using
     perl and the perl modules Test::Harness and an extended variant of
     Test::More called OpenSSL::Test to do its work.  All test scripts in
     test/ have been rewritten into test recipes, and all direct calls to
     executables in test/Makefile have become individual recipes using the
     simplified testing OpenSSL::Test::Simple.

     For documentation on our testing modules, do:

        perldoc test/testlib/OpenSSL/Test/Simple.pm
        perldoc test/testlib/OpenSSL/Test.pm

     [Richard Levitte]

  *) Revamped memory debug; only -DCRYPTO_MDEBUG and -DCRYPTO_MDEBUG_ABORT
     are used; the latter aborts on memory leaks (usually checked on exit).
     Some undocumented "set malloc, etc., hooks" functions were removed
     and others were changed.  All are now documented.
     [Rich Salz]

  *) In DSA_generate_parameters_ex, if the provided seed is too short,
     return an error
     [Rich Salz and Ismo Puustinen <ismo.puustinen@intel.com>]

  *) Rewrite PSK to support ECDHE_PSK, DHE_PSK and RSA_PSK. Add ciphersuites
     from RFC4279, RFC4785, RFC5487, RFC5489.

     Thanks to Christian J. Dietrich and Giuseppe D'Angelo for the
     original RSA_PSK patch.
     [Steve Henson]

  *) Dropped support for the SSL3_FLAGS_DELAY_CLIENT_FINISHED flag. This SSLeay
     era flag was never set throughout the codebase (only read). Also removed
     SSL3_FLAGS_POP_BUFFER which was only used if
     SSL3_FLAGS_DELAY_CLIENT_FINISHED was also set.
     [Matt Caswell]

  *) Changed the default name options in the "ca", "crl", "req" and "x509"
     to be "oneline" instead of "compat".
     [Richard Levitte]

  *) Remove SSL_OP_TLS_BLOCK_PADDING_BUG. This is SSLeay legacy, we're
     not aware of clients that still exhibit this bug, and the workaround
     hasn't been working properly for a while.
     [Emilia Käsper]

  *) The return type of BIO_number_read() and BIO_number_written() as well as
     the corresponding num_read and num_write members in the BIO structure has
     changed from unsigned long to uint64_t. On platforms where an unsigned
     long is 32 bits (e.g. Windows) these counters could overflow if >4Gb is
     transferred.
     [Matt Caswell]

  *) Given the pervasive nature of TLS extensions it is inadvisable to run
     OpenSSL without support for them. It also means that maintaining
     the OPENSSL_NO_TLSEXT option within the code is very invasive (and probably
     not well tested). Therefore the OPENSSL_NO_TLSEXT option has been removed.
     [Matt Caswell]

  *) Removed support for the two export grade static DH ciphersuites
     EXP-DH-RSA-DES-CBC-SHA and EXP-DH-DSS-DES-CBC-SHA. These two ciphersuites
     were newly added (along with a number of other static DH ciphersuites) to
     1.0.2. However the two export ones have *never* worked since they were
     introduced. It seems strange in any case to be adding new export
     ciphersuites, and given "logjam" it also does not seem correct to fix them.
     [Matt Caswell]

  *) Version negotiation has been rewritten. In particular SSLv23_method(),
     SSLv23_client_method() and SSLv23_server_method() have been deprecated,
     and turned into macros which simply call the new preferred function names
     TLS_method(), TLS_client_method() and TLS_server_method(). All new code
     should use the new names instead. Also as part of this change the ssl23.h
     header file has been removed.
     [Matt Caswell]

  *) Support for Kerberos ciphersuites in TLS (RFC2712) has been removed. This
     code and the associated standard is no longer considered fit-for-purpose.
     [Matt Caswell]

  *) RT2547 was closed.  When generating a private key, try to make the
     output file readable only by the owner.  This behavior change might
     be noticeable when interacting with other software.

  *) Documented all exdata functions.  Added CRYPTO_free_ex_index.
     Added a test.
     [Rich Salz]

  *) Added HTTP GET support to the ocsp command.
     [Rich Salz]

  *) Changed default digest for the dgst and enc commands from MD5 to
     sha256
     [Rich Salz]

  *) RAND_pseudo_bytes has been deprecated. Users should use RAND_bytes instead.
     [Matt Caswell]

  *) Added support for TLS extended master secret from
     draft-ietf-tls-session-hash-03.txt. Thanks for Alfredo Pironti for an
     initial patch which was a great help during development.
     [Steve Henson]

  *) All libssl internal structures have been removed from the public header
     files, and the OPENSSL_NO_SSL_INTERN option has been removed (since it is
     now redundant). Users should not attempt to access internal structures
     directly. Instead they should use the provided API functions.
     [Matt Caswell]

  *) config has been changed so that by default OPENSSL_NO_DEPRECATED is used.
     Access to deprecated functions can be re-enabled by running config with
     "enable-deprecated". In addition applications wishing to use deprecated
     functions must define OPENSSL_USE_DEPRECATED. Note that this new behaviour
     will, by default, disable some transitive includes that previously existed
     in the header files (e.g. ec.h will no longer, by default, include bn.h)
     [Matt Caswell]

  *) Added support for OCB mode. OpenSSL has been granted a patent license
     compatible with the OpenSSL license for use of OCB. Details are available
     at https://www.openssl.org/source/OCB-patent-grant-OpenSSL.pdf. Support
     for OCB can be removed by calling config with no-ocb.
     [Matt Caswell]

  *) SSLv2 support has been removed.  It still supports receiving a SSLv2
     compatible client hello.
     [Kurt Roeckx]

  *) Increased the minimal RSA keysize from 256 to 512 bits [Rich Salz],
     done while fixing the error code for the key-too-small case.
     [Annie Yousar <a.yousar@informatik.hu-berlin.de>]

  *) CA.sh has been removed; use CA.pl instead.
     [Rich Salz]

  *) Removed old DES API.
     [Rich Salz]

  *) Remove various unsupported platforms:
        Sony NEWS4
        BEOS and BEOS_R5
        NeXT
        SUNOS
        MPE/iX
        Sinix/ReliantUNIX RM400
        DGUX
        NCR
        Tandem
        Cray
        16-bit platforms such as WIN16
     [Rich Salz]

  *) Clean up OPENSSL_NO_xxx #define's
        Use setbuf() and remove OPENSSL_NO_SETVBUF_IONBF
        Rename OPENSSL_SYSNAME_xxx to OPENSSL_SYS_xxx
        OPENSSL_NO_EC{DH,DSA} merged into OPENSSL_NO_EC
        OPENSSL_NO_RIPEMD160, OPENSSL_NO_RIPEMD merged into OPENSSL_NO_RMD160
        OPENSSL_NO_FP_API merged into OPENSSL_NO_STDIO
        Remove OPENSSL_NO_BIO OPENSSL_NO_BUFFER OPENSSL_NO_CHAIN_VERIFY
        OPENSSL_NO_EVP OPENSSL_NO_FIPS_ERR OPENSSL_NO_HASH_COMP
        OPENSSL_NO_LHASH OPENSSL_NO_OBJECT OPENSSL_NO_SPEED OPENSSL_NO_STACK
        OPENSSL_NO_X509 OPENSSL_NO_X509_VERIFY
        Remove MS_STATIC; it's a relic from platforms <32 bits.
     [Rich Salz]

  *) Cleaned up dead code
        Remove all but one '#ifdef undef' which is to be looked at.
     [Rich Salz]

  *) Clean up calling of xxx_free routines.
        Just like free(), fix most of the xxx_free routines to accept
        NULL.  Remove the non-null checks from callers.  Save much code.
     [Rich Salz]

  *) Add secure heap for storage of private keys (when possible).
     Add BIO_s_secmem(), CBIGNUM, etc.
     Contributed by Akamai Technologies under our Corporate CLA.
     [Rich Salz]

  *) Experimental support for a new, fast, unbiased prime candidate generator,
     bn_probable_prime_dh_coprime(). Not currently used by any prime generator.
     [Felix Laurie von Massenbach <felix@erbridge.co.uk>]

  *) New output format NSS in the sess_id command line tool. This allows
     exporting the session id and the master key in NSS keylog format.
     [Martin Kaiser <martin@kaiser.cx>]

  *) Harmonize version and its documentation. -f flag is used to display
     compilation flags.
     [mancha <mancha1@zoho.com>]

  *) Fix eckey_priv_encode so it immediately returns an error upon a failure
     in i2d_ECPrivateKey.  Thanks to Ted Unangst for feedback on this issue.
     [mancha <mancha1@zoho.com>]

  *) Fix some double frees. These are not thought to be exploitable.
     [mancha <mancha1@zoho.com>]

  *) A missing bounds check in the handling of the TLS heartbeat extension