
1: 2: OpenSSL CHANGES 3: _______________ 4: 5: Changes between 0.9.8f and 0.9.8g [19 Oct 2007] 6: 7: *) Fix various bugs: 8: + Binary incompatibility of ssl_ctx_st structure 9: + DTLS interoperation with non-compliant servers 10: + Don't call get_session_cb() without proposed session 11: + Fix ia64 assembler code 12: [Andy Polyakov, Steve Henson] 13: 14: Changes between 0.9.8e and 0.9.8f [11 Oct 2007] 15: 16: *) DTLS Handshake overhaul. There were longstanding issues with 17: OpenSSL DTLS implementation, which were making it impossible for 18: RFC 4347 compliant client to communicate with OpenSSL server. 19: Unfortunately just fixing these incompatibilities would "cut off" 20: pre-0.9.8f clients. To allow for hassle free upgrade post-0.9.8e 21: server keeps tolerating non RFC compliant syntax. The opposite is 22: not true, 0.9.8f client can not communicate with earlier server. 23: This update even addresses CVE-2007-4995. 24: [Andy Polyakov] 25: 26: *) Changes to avoid need for function casts in OpenSSL: some compilers 27: (gcc 4.2 and later) reject their use. 28: [Kurt Roeckx <kurt@roeckx.be>, Peter Hartley <pdh@utter.chaos.org.uk>, 29: Steve Henson] 30: 31: *) Add RFC4507 support to OpenSSL. This includes the corrections in 32: RFC4507bis. The encrypted ticket format is an encrypted encoded 33: SSL_SESSION structure, that way new session features are automatically 34: supported. 35: 36: If a client application caches session in an SSL_SESSION structure 37: support is transparent because tickets are now stored in the encoded 38: SSL_SESSION. 39: 40: The SSL_CTX structure automatically generates keys for ticket 41: protection in servers so again support should be possible 42: with no application modification. 43: 44: If a client or server wishes to disable RFC4507 support then the option 45: SSL_OP_NO_TICKET can be set. 46: 47: Add a TLS extension debugging callback to allow the contents of any client 48: or server extensions to be examined. 49: 50: This work was sponsored by Google. 51: [Steve Henson] 52: 53: *) Add initial support for TLS extensions, specifically for the server_name 54: extension so far. The SSL_SESSION, SSL_CTX, and SSL data structures now 55: have new members for a host name. The SSL data structure has an 56: additional member SSL_CTX *initial_ctx so that new sessions can be 57: stored in that context to allow for session resumption, even after the 58: SSL has been switched to a new SSL_CTX in reaction to a client's 59: server_name extension. 60: 61: New functions (subject to change): 62: 63: SSL_get_servername() 64: SSL_get_servername_type() 65: SSL_set_SSL_CTX() 66: 67: New CTRL codes and macros (subject to change): 68: 69: SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 70: - SSL_CTX_set_tlsext_servername_callback() 71: SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 72: - SSL_CTX_set_tlsext_servername_arg() 73: SSL_CTRL_SET_TLSEXT_HOSTNAME - SSL_set_tlsext_host_name() 74: 75: openssl s_client has a new '-servername ...' option. 76: 77: openssl s_server has new options '-servername_host ...', '-cert2 ...', 78: '-key2 ...', '-servername_fatal' (subject to change). This allows 79: testing the HostName extension for a specific single host name ('-cert' 80: and '-key' remain fallbacks for handshakes without HostName 81: negotiation). If the unrecogninzed_name alert has to be sent, this by 82: default is a warning; it becomes fatal with the '-servername_fatal' 83: option. 84: 85: [Peter Sylvester, Remy Allais, Christophe Renou, Steve Henson] 86: 87: *) Add AES and SSE2 assembly language support to VC++ build. 88: [Steve Henson] 89: 90: *) Mitigate attack on final subtraction in Montgomery reduction. 91: [Andy Polyakov] 92: 93: *) Fix crypto/ec/ec_mult.c to work properly with scalars of value 0 94: (which previously caused an internal error). 95: [Bodo Moeller] 96: 97: *) Squeeze another 10% out of IGE mode when in != out. 98: [Ben Laurie] 99: 100: *) AES IGE mode speedup. 101: [Dean Gaudet (Google)] 102: 103: *) Add the Korean symmetric 128-bit cipher SEED (see 104: http://www.kisa.or.kr/kisa/seed/jsp/seed_eng.jsp) and 105: add SEED ciphersuites from RFC 4162: 106: 107: TLS_RSA_WITH_SEED_CBC_SHA = "SEED-SHA" 108: TLS_DHE_DSS_WITH_SEED_CBC_SHA = "DHE-DSS-SEED-SHA" 109: TLS_DHE_RSA_WITH_SEED_CBC_SHA = "DHE-RSA-SEED-SHA" 110: TLS_DH_anon_WITH_SEED_CBC_SHA = "ADH-SEED-SHA" 111: 112: To minimize changes between patchlevels in the OpenSSL 0.9.8 113: series, SEED remains excluded from compilation unless OpenSSL 114: is configured with 'enable-seed'. 115: [KISA, Bodo Moeller] 116: 117: *) Mitigate branch prediction attacks, which can be practical if a 118: single processor is shared, allowing a spy process to extract 119: information. For detailed background information, see 120: http://eprint.iacr.org/2007/039 (O. Aciicmez, S. Gueron, 121: J.-P. Seifert, "New Branch Prediction Vulnerabilities in OpenSSL 122: and Necessary Software Countermeasures"). The core of the change 123: are new versions BN_div_no_branch() and 124: BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(), 125: respectively, which are slower, but avoid the security-relevant 126: conditional branches. These are automatically called by BN_div() 127: and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one 128: of the input BIGNUMs. Also, BN_is_bit_set() has been changed to 129: remove a conditional branch. 130: 131: BN_FLG_CONSTTIME is the new name for the previous 132: BN_FLG_EXP_CONSTTIME flag, since it now affects more than just 133: modular exponentiation. (Since OpenSSL 0.9.7h, setting this flag 134: in the exponent causes BN_mod_exp_mont() to use the alternative 135: implementation in BN_mod_exp_mont_consttime().) The old name 136: remains as a deprecated alias. 137: 138: Similary, RSA_FLAG_NO_EXP_CONSTTIME is replaced by a more general 139: RSA_FLAG_NO_CONSTTIME flag since the RSA implementation now uses 140: constant-time implementations for more than just exponentiation. 141: Here too the old name is kept as a deprecated alias. 142: 143: BN_BLINDING_new() will now use BN_dup() for the modulus so that 144: the BN_BLINDING structure gets an independent copy of the 145: modulus. This means that the previous "BIGNUM *m" argument to 146: BN_BLINDING_new() and to BN_BLINDING_create_param() now 147: essentially becomes "const BIGNUM *m", although we can't actually 148: change this in the header file before 0.9.9. It allows 149: RSA_setup_blinding() to use BN_with_flags() on the modulus to 150: enable BN_FLG_CONSTTIME. 151: 152: [Matthew D Wood (Intel Corp)] 153: 154: *) In the SSL/TLS server implementation, be strict about session ID 155: context matching (which matters if an application uses a single 156: external cache for different purposes). Previously, 157: out-of-context reuse was forbidden only if SSL_VERIFY_PEER was 158: set. This did ensure strict client verification, but meant that, 159: with applications using a single external cache for quite 160: different requirements, clients could circumvent ciphersuite 161: restrictions for a given session ID context by starting a session 162: in a different context. 163: [Bodo Moeller] 164: 165: *) Include "!eNULL" in SSL_DEFAULT_CIPHER_LIST to make sure that 166: a ciphersuite string such as "DEFAULT:RSA" cannot enable 167: authentication-only ciphersuites. 168: [Bodo Moeller] 169: 170: Changes between 0.9.8d and 0.9.8e [23 Feb 2007] 171: 172: *) Since AES128 and AES256 (and similarly Camellia128 and 173: Camellia256) share a single mask bit in the logic of 174: ssl/ssl_ciph.c, the code for masking out disabled ciphers needs a 175: kludge to work properly if AES128 is available and AES256 isn't 176: (or if Camellia128 is available and Camellia256 isn't). 177: [Victor Duchovni] 178: 179: *) Fix the BIT STRING encoding generated by crypto/ec/ec_asn1.c 180: (within i2d_ECPrivateKey, i2d_ECPKParameters, i2d_ECParameters): 181: When a point or a seed is encoded in a BIT STRING, we need to 182: prevent the removal of trailing zero bits to get the proper DER 183: encoding. (By default, crypto/asn1/a_bitstr.c assumes the case 184: of a NamedBitList, for which trailing 0 bits need to be removed.) 185: [Bodo Moeller] 186: 187: *) Have SSL/TLS server implementation tolerate "mismatched" record 188: protocol version while receiving ClientHello even if the 189: ClientHello is fragmented. (The server can't insist on the 190: particular protocol version it has chosen before the ServerHello 191: message has informed the client about his choice.) 192: [Bodo Moeller] 193: 194: *) Add RFC 3779 support. 195: [Rob Austein for ARIN, Ben Laurie] 196: 197: *) Load error codes if they are not already present instead of using a 198: static variable. This allows them to be cleanly unloaded and reloaded. 199: Improve header file function name parsing. 200: [Steve Henson] 201: 202: *) extend SMTP and IMAP protocol emulation in s_client to use EHLO 203: or CAPABILITY handshake as required by RFCs. 204: [Goetz Babin-Ebell] 205: 206: Changes between 0.9.8c and 0.9.8d [28 Sep 2006] 207: 208: *) Introduce limits to prevent malicious keys being able to 209: cause a denial of service. (CVE-2006-2940) 210: [Steve Henson, Bodo Moeller] 211: 212: *) Fix ASN.1 parsing of certain invalid structures that can result 213: in a denial of service. (CVE-2006-2937) [Steve Henson] 214: 215: *) Fix buffer overflow in SSL_get_shared_ciphers() function. 216: (CVE-2006-3738) [Tavis Ormandy and Will Drewry, Google Security Team] 217: 218: *) Fix SSL client code which could crash if connecting to a 219: malicious SSLv2 server. (CVE-2006-4343) 220: [Tavis Ormandy and Will Drewry, Google Security Team] 221: 222: *) Since 0.9.8b, ciphersuite strings naming explicit ciphersuites 223: match only those. Before that, "AES256-SHA" would be interpreted 224: as a pattern and match "AES128-SHA" too (since AES128-SHA got 225: the same strength classification in 0.9.7h) as we currently only 226: have a single AES bit in the ciphersuite description bitmap. 227: That change, however, also applied to ciphersuite strings such as 228: "RC4-MD5" that intentionally matched multiple ciphersuites -- 229: namely, SSL 2.0 ciphersuites in addition to the more common ones 230: from SSL 3.0/TLS 1.0. 231: 232: So we change the selection algorithm again: Naming an explicit 233: ciphersuite selects this one ciphersuite, and any other similar 234: ciphersuite (same bitmap) from *other* protocol versions. 235: Thus, "RC4-MD5" again will properly select both the SSL 2.0 236: ciphersuite and the SSL 3.0/TLS 1.0 ciphersuite. 237: 238: Since SSL 2.0 does not have any ciphersuites for which the 239: 128/256 bit distinction would be relevant, this works for now. 240: The proper fix will be to use different bits for AES128 and 241: AES256, which would have avoided the problems from the beginning; 242: however, bits are scarce, so we can only do this in a new release 243: (not just a patchlevel) when we can change the SSL_CIPHER 244: definition to split the single 'unsigned long mask' bitmap into 245: multiple values to extend the available space. 246: 247: [Bodo Moeller] 248: 249: Changes between 0.9.8b and 0.9.8c [05 Sep 2006] 250: 251: *) Avoid PKCS #1 v1.5 signature attack discovered by Daniel Bleichenbacher 252: (CVE-2006-4339) [Ben Laurie and Google Security Team] 253: 254: *) Add AES IGE and biIGE modes. 255: [Ben Laurie] 256: 257: *) Change the Unix randomness entropy gathering to use poll() when 258: possible instead of select(), since the latter has some 259: undesirable limitations. 260: [Darryl Miles via Richard Levitte and Bodo Moeller] 261: 262: *) Disable "ECCdraft" ciphersuites more thoroughly. Now special 263: treatment in ssl/ssl_ciph.s makes sure that these ciphersuites 264: cannot be implicitly activated as part of, e.g., the "AES" alias. 265: However, please upgrade to OpenSSL 0.9.9[-dev] for 266: non-experimental use of the ECC ciphersuites to get TLS extension 267: support, which is required for curve and point format negotiation 268: to avoid potential handshake problems. 269: [Bodo Moeller] 270: 271: *) Disable rogue ciphersuites: 272: 273: - SSLv2 0x08 0x00 0x80 ("RC4-64-MD5") 274: - SSLv3/TLSv1 0x00 0x61 ("EXP1024-RC2-CBC-MD5") 275: - SSLv3/TLSv1 0x00 0x60 ("EXP1024-RC4-MD5") 276: 277: The latter two were purportedly from 278: draft-ietf-tls-56-bit-ciphersuites-0[01].txt, but do not really 279: appear there. 280: 281: Also deactivate the remaining ciphersuites from 282: draft-ietf-tls-56-bit-ciphersuites-01.txt. These are just as 283: unofficial, and the ID has long expired. 284: [Bodo Moeller] 285: 286: *) Fix RSA blinding Heisenbug (problems sometimes occured on 287: dual-core machines) and other potential thread-safety issues. 288: [Bodo Moeller] 289: 290: *) Add the symmetric cipher Camellia (128-bit, 192-bit, 256-bit key 291: versions), which is now available for royalty-free use 292: (see http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html). 293: Also, add Camellia TLS ciphersuites from RFC 4132. 294: 295: To minimize changes between patchlevels in the OpenSSL 0.9.8 296: series, Camellia remains excluded from compilation unless OpenSSL 297: is configured with 'enable-camellia'. 298: [NTT] 299: 300: *) Disable the padding bug check when compression is in use. The padding 301: bug check assumes the first packet is of even length, this is not 302: necessarily true if compresssion is enabled and can result in false 303: positives causing handshake failure. The actual bug test is ancient 304: code so it is hoped that implementations will either have fixed it by 305: now or any which still have the bug do not support compression. 306: [Steve Henson] 307: 308: Changes between 0.9.8a and 0.9.8b [04 May 2006] 309: 310: *) When applying a cipher rule check to see if string match is an explicit 311: cipher suite and only match that one cipher suite if it is. 312: [Steve Henson] 313: 314: *) Link in manifests for VC++ if needed. 315: [Austin Ziegler <halostatue@gmail.com>] 316: 317: *) Update support for ECC-based TLS ciphersuites according to 318: draft-ietf-tls-ecc-12.txt with proposed changes (but without 319: TLS extensions, which are supported starting with the 0.9.9 320: branch, not in the OpenSSL 0.9.8 branch). 321: [Douglas Stebila] 322: 323: *) New functions EVP_CIPHER_CTX_new() and EVP_CIPHER_CTX_free() to support 324: opaque EVP_CIPHER_CTX handling. 325: [Steve Henson] 326: 327: *) Fixes and enhancements to zlib compression code. We now only use 328: "zlib1.dll" and use the default __cdecl calling convention on Win32 329: to conform with the standards mentioned here: 330: http://www.zlib.net/DLL_FAQ.txt 331: Static zlib linking now works on Windows and the new --with-zlib-include 332: --with-zlib-lib options to Configure can be used to supply the location 333: of the headers and library. Gracefully handle case where zlib library 334: can't be loaded. 335: [Steve Henson] 336: 337: *) Several fixes and enhancements to the OID generation code. The old code 338: sometimes allowed invalid OIDs (1.X for X >= 40 for example), couldn't 339: handle numbers larger than ULONG_MAX, truncated printing and had a 340: non standard OBJ_obj2txt() behaviour. 341: [Steve Henson] 342: 343: *) Add support for building of engines under engine/ as shared libraries 344: under VC++ build system. 345: [Steve Henson] 346: 347: *) Corrected the numerous bugs in the Win32 path splitter in DSO. 348: Hopefully, we will not see any false combination of paths any more. 349: [Richard Levitte] 350: 351: Changes between 0.9.8 and 0.9.8a [11 Oct 2005] 352: 353: *) Remove the functionality of SSL_OP_MSIE_SSLV2_RSA_PADDING 354: (part of SSL_OP_ALL). This option used to disable the 355: countermeasure against man-in-the-middle protocol-version 356: rollback in the SSL 2.0 server implementation, which is a bad 357: idea. (CVE-2005-2969) 358: 359: [Bodo Moeller; problem pointed out by Yutaka Oiwa (Research Center 360: for Information Security, National Institute of Advanced Industrial 361: Science and Technology [AIST], Japan)] 362: 363: *) Add two function to clear and return the verify parameter flags. 364: [Steve Henson] 365: 366: *) Keep cipherlists sorted in the source instead of sorting them at 367: runtime, thus removing the need for a lock. 368: [Nils Larsch] 369: 370: *) Avoid some small subgroup attacks in Diffie-Hellman. 371: [Nick Mathewson and Ben Laurie] 372: 373: *) Add functions for well-known primes. 374: [Nick Mathewson] 375: 376: *) Extended Windows CE support. 377: [Satoshi Nakamura and Andy Polyakov] 378: 379: *) Initialize SSL_METHOD structures at compile time instead of during 380: runtime, thus removing the need for a lock. 381: [Steve Henson] 382: 383: *) Make PKCS7_decrypt() work even if no certificate is supplied by 384: attempting to decrypt each encrypted key in turn. Add support to 385: smime utility. 386: [Steve Henson] 387: 388: Changes between 0.9.7h and 0.9.8 [05 Jul 2005] 389: 390: [NB: OpenSSL 0.9.7i and later 0.9.7 patch levels were released after 391: OpenSSL 0.9.8.] 392: 393: *) Add libcrypto.pc and libssl.pc for those who feel they need them. 394: [Richard Levitte] 395: 396: *) Change CA.sh and CA.pl so they don't bundle the CSR and the private 397: key into the same file any more. 398: [Richard Levitte] 399: 400: *) Add initial support for Win64, both IA64 and AMD64/x64 flavors. 401: [Andy Polyakov] 402: 403: *) Add -utf8 command line and config file option to 'ca'. 404: [Stefan <stf@udoma.org] 405: 406: *) Removed the macro des_crypt(), as it seems to conflict with some 407: libraries. Use DES_crypt(). 408: [Richard Levitte] 409: 410: *) Correct naming of the 'chil' and '4758cca' ENGINEs. This 411: involves renaming the source and generated shared-libs for 412: both. The engines will accept the corrected or legacy ids 413: ('ncipher' and '4758_cca' respectively) when binding. NB, 414: this only applies when building 'shared'. 415: [Corinna Vinschen <vinschen@redhat.com> and Geoff Thorpe] 416: 417: *) Add attribute functions to EVP_PKEY structure. Modify 418: PKCS12_create() to recognize a CSP name attribute and 419: use it. Make -CSP option work again in pkcs12 utility. 420: [Steve Henson] 421: 422: *) Add new functionality to the bn blinding code: 423: - automatic re-creation of the BN_BLINDING parameters after 424: a fixed number of uses (currently 32) 425: - add new function for parameter creation 426: - introduce flags to control the update behaviour of the 427: BN_BLINDING parameters 428: - hide BN_BLINDING structure 429: Add a second BN_BLINDING slot to the RSA structure to improve 430: performance when a single RSA object is shared among several 431: threads. 432: [Nils Larsch] 433: 434: *) Add support for DTLS. 435: [Nagendra Modadugu <nagendra@cs.stanford.edu> and Ben Laurie] 436: 437: *) Add support for DER encoded private keys (SSL_FILETYPE_ASN1) 438: to SSL_CTX_use_PrivateKey_file() and SSL_use_PrivateKey_file() 439: [Walter Goulet] 440: 441: *) Remove buggy and incompletet DH cert support from 442: ssl/ssl_rsa.c and ssl/s3_both.c 443: [Nils Larsch] 444: 445: *) Use SHA-1 instead of MD5 as the default digest algorithm for 446: the apps/openssl applications. 447: [Nils Larsch] 448: 449: *) Compile clean with "-Wall -Wmissing-prototypes 450: -Wstrict-prototypes -Wmissing-declarations -Werror". Currently 451: DEBUG_SAFESTACK must also be set. 452: [Ben Laurie] 453: 454: *) Change ./Configure so that certain algorithms can be disabled by default. 455: The new counterpiece to "no-xxx" is "enable-xxx". 456: 457: The patented RC5 and MDC2 algorithms will now be disabled unless 458: "enable-rc5" and "enable-mdc2", respectively, are specified. 459: 460: (IDEA remains enabled despite being patented. This is because IDEA 461: is frequently required for interoperability, and there is no license 462: fee for non-commercial use. As before, "no-idea" can be used to 463: avoid this algorithm.) 464: 465: [Bodo Moeller] 466: 467: *) Add processing of proxy certificates (see RFC 3820). This work was 468: sponsored by KTH (The Royal Institute of Technology in Stockholm) and 469: EGEE (Enabling Grids for E-science in Europe). 470: [Richard Levitte] 471: 472: *) RC4 performance overhaul on modern architectures/implementations, such 473: as Intel P4, IA-64 and AMD64. 474: [Andy Polyakov] 475: 476: *) New utility extract-section.pl. This can be used specify an alternative 477: section number in a pod file instead of having to treat each file as 478: a separate case in Makefile. This can be done by adding two lines to the 479: pod file: 480: 481: =for comment openssl_section:XXX 482: 483: The blank line is mandatory. 484: 485: [Steve Henson] 486: 487: *) New arguments -certform, -keyform and -pass for s_client and s_server 488: to allow alternative format key and certificate files and passphrase 489: sources. 490: [Steve Henson] 491: 492: *) New structure X509_VERIFY_PARAM which combines current verify parameters, 493: update associated structures and add various utility functions. 494: 495: Add new policy related verify parameters, include policy checking in 496: standard verify code. Enhance 'smime' application with extra parameters 497: to support policy checking and print out. 498: [Steve Henson] 499: 500: *) Add a new engine to support VIA PadLock ACE extensions in the VIA C3 501: Nehemiah processors. These extensions support AES encryption in hardware 502: as well as RNG (though RNG support is currently disabled). 503: [Michal Ludvig <michal@logix.cz>, with help from Andy Polyakov] 504: 505: *) Deprecate BN_[get|set]_params() functions (they were ignored internally). 506: [Geoff Thorpe] 507: 508: *) New FIPS 180-2 algorithms, SHA-224/-256/-384/-512 are implemented. 509: [Andy Polyakov and a number of other people] 510: 511: *) Improved PowerPC platform support. Most notably BIGNUM assembler 512: implementation contributed by IBM. 513: [Suresh Chari, Peter Waltenberg, Andy Polyakov] 514: 515: *) The new 'RSA_generate_key_ex' function now takes a BIGNUM for the public 516: exponent rather than 'unsigned long'. There is a corresponding change to 517: the new 'rsa_keygen' element of the RSA_METHOD structure. 518: [Jelte Jansen, Geoff Thorpe] 519: 520: *) Functionality for creating the initial serial number file is now 521: moved from CA.pl to the 'ca' utility with a new option -create_serial. 522: 523: (Before OpenSSL 0.9.7e, CA.pl used to initialize the serial 524: number file to 1, which is bound to cause problems. To avoid 525: the problems while respecting compatibility between different 0.9.7 526: patchlevels, 0.9.7e employed 'openssl x509 -next_serial' in 527: CA.pl for serial number initialization. With the new release 0.9.8, 528: we can fix the problem directly in the 'ca' utility.) 529: [Steve Henson] 530: 531: *) Reduced header interdepencies by declaring more opaque objects in 532: ossl_typ.h. As a consequence, including some headers (eg. engine.h) will 533: give fewer recursive includes, which could break lazy source code - so 534: this change is covered by the OPENSSL_NO_DEPRECATED symbol. As always, 535: developers should define this symbol when building and using openssl to 536: ensure they track the recommended behaviour, interfaces, [etc], but 537: backwards-compatible behaviour prevails when this isn't defined. 538: [Geoff Thorpe] 539: 540: *) New function X509_POLICY_NODE_print() which prints out policy nodes. 541: [Steve Henson] 542: 543: *) Add new EVP function EVP_CIPHER_CTX_rand_key and associated functionality. 544: This will generate a random key of the appropriate length based on the 545: cipher context. The EVP_CIPHER can provide its own random key generation 546: routine to support keys of a specific form. This is used in the des and 547: 3des routines to generate a key of the correct parity. Update S/MIME 548: code to use new functions and hence generate correct parity DES keys. 549: Add EVP_CHECK_DES_KEY #define to return an error if the key is not 550: valid (weak or incorrect parity). 551: [Steve Henson] 552: 553: *) Add a local set of CRLs that can be used by X509_verify_cert() as well 554: as looking them up. This is useful when the verified structure may contain 555: CRLs, for example PKCS#7 signedData. Modify PKCS7_verify() to use any CRLs 556: present unless the new PKCS7_NO_CRL flag is asserted. 557: [Steve Henson] 558: 559: *) Extend ASN1 oid configuration module. It now additionally accepts the 560: syntax: 561: 562: shortName = some long name, 1.2.3.4 563: [Steve Henson] 564: 565: *) Reimplemented the BN_CTX implementation. There is now no more static 566: limitation on the number of variables it can handle nor the depth of the 567: "stack" handling for BN_CTX_start()/BN_CTX_end() pairs. The stack 568: information can now expand as required, and rather than having a single 569: static array of bignums, BN_CTX now uses a linked-list of such arrays 570: allowing it to expand on demand whilst maintaining the usefulness of 571: BN_CTX's "bundling". 572: [Geoff Thorpe] 573: 574: *) Add a missing BN_CTX parameter to the 'rsa_mod_exp' callback in RSA_METHOD 575: to allow all RSA operations to function using a single BN_CTX. 576: [Geoff Thorpe] 577: 578: *) Preliminary support for certificate policy evaluation and checking. This 579: is initially intended to pass the tests outlined in "Conformance Testing 580: of Relying Party Client Certificate Path Processing Logic" v1.07. 581: [Steve Henson] 582: 583: *) bn_dup_expand() has been deprecated, it was introduced in 0.9.7 and 584: remained unused and not that useful. A variety of other little bignum 585: tweaks and fixes have also been made continuing on from the audit (see 586: below). 587: [Geoff Thorpe] 588: 589: *) Constify all or almost all d2i, c2i, s2i and r2i functions, along with 590: associated ASN1, EVP and SSL functions and old ASN1 macros. 591: [Richard Levitte] 592: 593: *) BN_zero() only needs to set 'top' and 'neg' to zero for correct results, 594: and this should never fail. So the return value from the use of 595: BN_set_word() (which can fail due to needless expansion) is now deprecated; 596: if OPENSSL_NO_DEPRECATED is defined, BN_zero() is a void macro. 597: [Geoff Thorpe] 598: 599: *) BN_CTX_get() should return zero-valued bignums, providing the same 600: initialised value as BN_new(). 601: [Geoff Thorpe, suggested by Ulf M?r] 602: 603: *) Support for inhibitAnyPolicy certificate extension. 604: [Steve Henson] 605: 606: *) An audit of the BIGNUM code is underway, for which debugging code is 607: enabled when BN_DEBUG is defined. This makes stricter enforcements on what 608: is considered valid when processing BIGNUMs, and causes execution to 609: assert() when a problem is discovered. If BN_DEBUG_RAND is defined, 610: further steps are taken to deliberately pollute unused data in BIGNUM 611: structures to try and expose faulty code further on. For now, openssl will 612: (in its default mode of operation) continue to tolerate the inconsistent 613: forms that it has tolerated in the past, but authors and packagers should 614: consider trying openssl and their own applications when compiled with 615: these debugging symbols defined. It will help highlight potential bugs in 616: their own code, and will improve the test coverage for OpenSSL itself. At 617: some point, these tighter rules will become openssl's default to improve 618: maintainability, though the assert()s and other overheads will remain only 619: in debugging configurations. See bn.h for more details. 620: [Geoff Thorpe, Nils Larsch, Ulf M?r] 621: 622: *) BN_CTX_init() has been deprecated, as BN_CTX is an opaque structure 623: that can only be obtained through BN_CTX_new() (which implicitly 624: initialises it). The presence of this function only made it possible 625: to overwrite an existing structure (and cause memory leaks). 626: [Geoff Thorpe] 627: 628: *) Because of the callback-based approach for implementing LHASH as a 629: template type, lh_insert() adds opaque objects to hash-tables and 630: lh_doall() or lh_doall_arg() are typically used with a destructor callback 631: to clean up those corresponding objects before destroying the hash table 632: (and losing the object pointers). So some over-zealous constifications in 633: LHASH have been relaxed so that lh_insert() does not take (nor store) the 634: objects as "const" and the lh_doall[_arg] callback wrappers are not 635: prototyped to have "const" restrictions on the object pointers they are 636: given (and so aren't required to cast them away any more). 637: [Geoff Thorpe] 638: 639: *) The tmdiff.h API was so ugly and minimal that our own timing utility 640: (speed) prefers to use its own implementation. The two implementations 641: haven't been consolidated as yet (volunteers?) but the tmdiff API has had 642: its object type properly exposed (MS_TM) instead of casting to/from "char 643: *". This may still change yet if someone realises MS_TM and "ms_time_***" 644: aren't necessarily the greatest nomenclatures - but this is what was used 645: internally to the implementation so I've used that for now. 646: [Geoff Thorpe] 647: 648: *) Ensure that deprecated functions do not get compiled when 649: OPENSSL_NO_DEPRECATED is defined. Some "openssl" subcommands and a few of 650: the self-tests were still using deprecated key-generation functions so 651: these have been updated also. 652: [Geoff Thorpe] 653: 654: *) Reorganise PKCS#7 code to separate the digest location functionality 655: into PKCS7_find_digest(), digest addtion into PKCS7_bio_add_digest(). 656: New function PKCS7_set_digest() to set the digest type for PKCS#7 657: digestedData type. Add additional code to correctly generate the 658: digestedData type and add support for this type in PKCS7 initialization 659: functions. 660: [Steve Henson] 661: 662: *) New function PKCS7_set0_type_other() this initializes a PKCS7 663: structure of type "other". 664: [Steve Henson] 665: 666: *) Fix prime generation loop in crypto/bn/bn_prime.pl by making 667: sure the loop does correctly stop and breaking ("division by zero") 668: modulus operations are not performed. The (pre-generated) prime 669: table crypto/bn/bn_prime.h was already correct, but it could not be 670: re-generated on some platforms because of the "division by zero" 671: situation in the script. 672: [Ralf S. Engelschall] 673: 674: *) Update support for ECC-based TLS ciphersuites according to 675: draft-ietf-tls-ecc-03.txt: the KDF1 key derivation function with 676: SHA-1 now is only used for "small" curves (where the 677: representation of a field element takes up to 24 bytes); for 678: larger curves, the field element resulting from ECDH is directly 679: used as premaster secret. 680: [Douglas Stebila (Sun Microsystems Laboratories)] 681: 682: *) Add code for kP+lQ timings to crypto/ec/ectest.c, and add SEC2 683: curve secp160r1 to the tests. 684: [Douglas Stebila (Sun Microsystems Laboratories)] 685: 686: *) Add the possibility to load symbols globally with DSO. 687: [G?Babin-Ebell <babin-ebell@trustcenter.de> via Richard Levitte] 688: 689: *) Add the functions ERR_set_mark() and ERR_pop_to_mark() for better 690: control of the error stack. 691: [Richard Levitte] 692: 693: *) Add support for STORE in ENGINE. 694: [Richard Levitte] 695: 696: *) Add the STORE type. The intention is to provide a common interface 697: to certificate and key stores, be they simple file-based stores, or 698: HSM-type store, or LDAP stores, or... 699: NOTE: The code is currently UNTESTED and isn't really used anywhere. 700: [Richard Levitte] 701: 702: *) Add a generic structure called OPENSSL_ITEM. This can be used to 703: pass a list of arguments to any function as well as provide a way 704: for a function to pass data back to the caller. 705: [Richard Levitte] 706: 707: *) Add the functions BUF_strndup() and BUF_memdup(). BUF_strndup() 708: works like BUF_strdup() but can be used to duplicate a portion of 709: a string. The copy gets NUL-terminated. BUF_memdup() duplicates 710: a memory area. 711: [Richard Levitte] 712: 713: *) Add the function sk_find_ex() which works like sk_find(), but will 714: return an index to an element even if an exact match couldn't be 715: found. The index is guaranteed to point at the element where the 716: searched-for key would be inserted to preserve sorting order. 717: [Richard Levitte] 718: 719: *) Add the function OBJ_bsearch_ex() which works like OBJ_bsearch() but 720: takes an extra flags argument for optional functionality. Currently, 721: the following flags are defined: 722: 723: OBJ_BSEARCH_VALUE_ON_NOMATCH 724: This one gets OBJ_bsearch_ex() to return a pointer to the first 725: element where the comparing function returns a negative or zero 726: number. 727: 728: OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 729: This one gets OBJ_bsearch_ex() to return a pointer to the first 730: element where the comparing function returns zero. This is useful 731: if there are more than one element where the comparing function 732: returns zero. 733: [Richard Levitte] 734: 735: *) Make it possible to create self-signed certificates with 'openssl ca' 736: in such a way that the self-signed certificate becomes part of the 737: CA database and uses the same mechanisms for serial number generation 738: as all other certificate signing. The new flag '-selfsign' enables 739: this functionality. Adapt CA.sh and CA.pl.in. 740: [Richard Levitte] 741: 742: *) Add functionality to check the public key of a certificate request 743: against a given private. This is useful to check that a certificate 744: request can be signed by that key (self-signing). 745: [Richard Levitte] 746: 747: *) Make it possible to have multiple active certificates with the same 748: subject in the CA index file. This is done only if the keyword 749: 'unique_subject' is set to 'no' in the main CA section (default 750: if 'CA_default') of the configuration file. The value is saved 751: with the database itself in a separate index attribute file, 752: named like the index file with '.attr' appended to the name. 753: [Richard Levitte] 754: 755: *) Generate muti valued AVAs using '+' notation in config files for 756: req and dirName. 757: [Steve Henson] 758: