]> git.ipfire.org Git - thirdparty/openssl.git/blame - CHANGES
Make sure the memory allocation routines check for negative sizes
[thirdparty/openssl.git] / CHANGES
CommitLineData
81a6c781 1
f1c236f8 2 OpenSSL CHANGES
651d0aff
RE
3 _______________
4
8537943e 5 Changes between 0.9.7a and 0.9.8 [xx XXX xxxx]
4d94ae00 6
27068df7
DSH
7 *) Support for single pass processing for S/MIME signing. This now
8 means that S/MIME signing can be done from a pipe, in addition
9 cleartext signing (multipart/signed type) is effectively streaming
10 and the signed data does not need to be all held in memory.
11
12 This is done with a new flag PKCS7_PARTSIGN. When this flag is set
13 PKCS7_sign() only initializes the PKCS7 structure and the actual signing
14 is done after the data is output (and digests calculated) in
15 SMIME_write_PKCS7().
16 [Steve Henson]
17
2d3de726
RL
18 *) Add full support for -rpath/-R, both in shared libraries and
19 applications, at least on the platforms where it's known how
20 to do it.
21 [Richard Levitte]
22
37c660ff 23 *) In crypto/ec/ec_mult.c, implement fast point multiplication with
24893ca9 24 precomputation, based on wNAF splitting: EC_GROUP_precompute_mult()
37c660ff 25 will now compute a table of multiples of the generator that
24893ca9 26 makes subsequent invocations of EC_POINTs_mul() or EC_POINT_mul()
37c660ff
BM
27 faster (notably in the case of a single point multiplication,
28 scalar * generator).
29 [Nils Larsch, Bodo Moeller]
30
4e5d3a7f
DSH
31 *) IPv6 support for certificate extensions. The various extensions
32 which use the IP:a.b.c.d can now take IPv6 addresses using the
33 formats of RFC1884 2.2 . IPv6 addresses are now also displayed
34 correctly.
35 [Steve Henson]
36
96f7065f
GT
37 *) Added an ENGINE that implements RSA by performing private key
38 exponentiations with the GMP library. The conversions to and from
39 GMP's mpz_t format aren't optimised nor are any montgomery forms
40 cached, and on x86 it appears OpenSSL's own performance has caught up.
41 However there are likely to be other architectures where GMP could
42 provide a boost. This ENGINE is not built in by default, but it can be
43 specified at Configure time and should be accompanied by the necessary
44 linker additions, eg;
45 ./config -DOPENSSL_USE_GMP -lgmp
46 [Geoff Thorpe]
47
48 *) "openssl engine" will not display ENGINE/DSO load failure errors when
49 testing availability of engines with "-t" - the old behaviour is
50 produced by increasing the feature's verbosity with "-tt".
51 [Geoff Thorpe]
52
a74333f9
LJ
53 *) ECDSA routines: under certain error conditions uninitialized BN objects
54 could be freed. Solution: make sure initialization is performed early
55 enough. (Reported and fix supplied by Nils Larsch <nla@trustcenter.de>
56 via PR#459)
57 [Lutz Jaenicke]
58
0e4aa0d2
GT
59 *) Key-generation can now be implemented in RSA_METHOD, DSA_METHOD
60 and DH_METHOD (eg. by ENGINE implementations) to override the normal
61 software implementations. For DSA and DH, parameter generation can
62 also be overriden by providing the appropriate method callbacks.
63 [Geoff Thorpe]
64
e9224c71
GT
65 *) Change the "progress" mechanism used in key-generation and
66 primality testing to functions that take a new BN_GENCB pointer in
67 place of callback/argument pairs. The new API functions have "_ex"
68 postfixes and the older functions are reimplemented as wrappers for
69 the new ones. The OPENSSL_NO_DEPRECATED symbol can be used to hide
70 declarations of the old functions to help (graceful) attempts to
71 migrate to the new functions. Also, the new key-generation API
72 functions operate on a caller-supplied key-structure and return
73 success/failure rather than returning a key or NULL - this is to
74 help make "keygen" another member function of RSA_METHOD etc.
9d5390a0
BM
75
76 Example for using the new callback interface:
77
78 int (*my_callback)(int a, int b, BN_GENCB *cb) = ...;
79 void *my_arg = ...;
80 BN_GENCB my_cb;
81
82 BN_GENCB_set(&my_cb, my_callback, my_arg);
83
84 return BN_is_prime_ex(some_bignum, BN_prime_checks, NULL, &cb);
85 /* For the meaning of a, b in calls to my_callback(), see the
86 * documentation of the function that calls the callback.
87 * cb will point to my_cb; my_arg can be retrieved as cb->arg.
88 * my_callback should return 1 if it wants BN_is_prime_ex()
89 * to continue, or 0 to stop.
90 */
91
e9224c71
GT
92 [Geoff Thorpe]
93
fdaea9ed
RL
94 *) Change the ZLIB compression method to be stateful, and make it
95 available to TLS with the number defined in
96 draft-ietf-tls-compression-04.txt.
97 [Richard Levitte]
98
20199ca8
RL
99 *) Add the ASN.1 structures and functions for CertificatePair, which
100 is defined as follows (according to X.509_4thEditionDraftV6.pdf):
101
102 CertificatePair ::= SEQUENCE {
9d5390a0
BM
103 forward [0] Certificate OPTIONAL,
104 reverse [1] Certificate OPTIONAL,
105 -- at least one of the pair shall be present -- }
20199ca8
RL
106
107 Also implement the PEM functions to read and write certificate
108 pairs, and defined the PEM tag as "CERTIFICATE PAIR".
109
110 This needed to be defined, mostly for the sake of the LDAP
111 attribute crossCertificatePair, but may prove useful elsewhere as
112 well.
113 [Richard Levitte]
114
6f17f16f
RL
115 *) Make it possible to inhibit symlinking of shared libraries in
116 Makefile.shared, for Cygwin's sake.
117 [Richard Levitte]
118
b53e44e5
BM
119 *) Extend the BIGNUM API by creating new macros that behave like
120 functions
121
122 void BN_set_sign(BIGNUM *a, int neg);
123 int BN_get_sign(const BIGNUM *a);
124
125 and avoid the need to access 'a->neg' directly in applications.
126 [Nils Larsch <nla@trustcenter.de>]
127
5c6bf031
BM
128 *) Implement fast modular reduction for pseudo-Mersenne primes
129 used in NIST curves (crypto/bn/bn_nist.c, crypto/ec/ecp_nist.c).
130 EC_GROUP_new_curve_GFp() will now automatically use this
131 if applicable.
132 [Nils Larsch <nla@trustcenter.de>]
133
19b8d06a
BM
134 *) Add new lock type (CRYPTO_LOCK_BN).
135 [Bodo Moeller]
136
6f7c2cb3
RL
137 *) Change the ENGINE framework to automatically load engines
138 dynamically from specific directories unless they could be
139 found to already be built in or loaded. Move all the
140 current engines except for the cryptodev one to a new
141 directory engines/.
142 The engines in engines/ are built as shared libraries if
143 the "shared" options was given to ./Configure or ./config.
144 Otherwise, they are inserted in libcrypto.a.
145 /usr/local/ssl/engines is the default directory for dynamic
874fee47
RL
146 engines, but that can be overriden at configure time through
147 the usual use of --prefix and/or --openssldir, and at run
148 time with the environment variable OPENSSL_ENGINES.
6f7c2cb3
RL
149 [Geoff Thorpe and Richard Levitte]
150
30afcc07
RL
151 *) Add Makefile.shared, a helper makefile to build shared
152 libraries. Addapt Makefile.org.
153 [Richard Levitte]
154
fc6a6a10
DSH
155 *) Add version info to Win32 DLLs.
156 [Peter 'Luna' Runestig" <peter@runestig.com>]
157
9a48b07e
DSH
158 *) Add new 'medium level' PKCS#12 API. Certificates and keys
159 can be added using this API to created arbitrary PKCS#12
160 files while avoiding the low level API.
161
162 New options to PKCS12_create(), key or cert can be NULL and
163 will then be omitted from the output file. The encryption
164 algorithm NIDs can be set to -1 for no encryption, the mac
165 iteration count can be set to 0 to omit the mac.
166
167 Enhance pkcs12 utility by making the -nokeys and -nocerts
168 options work when creating a PKCS#12 file. New option -nomac
169 to omit the mac, NONE can be set for an encryption algorithm.
170 New code is modified to use the enhanced PKCS12_create()
171 instead of the low level API.
172 [Steve Henson]
173
230fd6b7
DSH
174 *) Extend ASN1 encoder to support indefinite length constructed
175 encoding. This can output sequences tags and octet strings in
176 this form. Modify pk7_asn1.c to support indefinite length
177 encoding. This is experimental and needs additional code to
178 be useful, such as an ASN1 bio and some enhanced streaming
179 PKCS#7 code.
180
181 Extend template encode functionality so that tagging is passed
182 down to the template encoder.
183 [Steve Henson]
184
9226e218
BM
185 *) Let 'openssl req' fail if an argument to '-newkey' is not
186 recognized instead of using RSA as a default.
187 [Bodo Moeller]
188
ea262260
BM
189 *) Add support for ECC-based ciphersuites from draft-ietf-tls-ecc-01.txt.
190 As these are not official, they are not included in "ALL";
191 the "ECCdraft" ciphersuite group alias can be used to select them.
192 [Vipul Gupta and Sumit Gupta (Sun Microsystems Laboratories)]
193
e172d60d
BM
194 *) Add ECDH engine support.
195 [Nils Gura and Douglas Stebila (Sun Microsystems Laboratories)]
196
197 *) Add ECDH in new directory crypto/ecdh/.
49a0f778
BM
198TODO: more general interface (return x coordinate, not its hash)
199TODO: bug: pad x with leading zeros if necessary
e172d60d
BM
200 [Douglas Stebila (Sun Microsystems Laboratories)]
201
95ecacf8
BM
202 *) Let BN_rand_range() abort with an error after 100 iterations
203 without success (which indicates a broken PRNG).
204 [Bodo Moeller]
205
6fb60a84
BM
206 *) Change BN_mod_sqrt() so that it verifies that the input value
207 is really the square of the return value. (Previously,
208 BN_mod_sqrt would show GIGO behaviour.)
209 [Bodo Moeller]
210
7793f30e
BM
211 *) Add named elliptic curves over binary fields from X9.62, SECG,
212 and WAP/WTLS; add OIDs that were still missing.
213
214 [Sheueling Chang Shantz and Douglas Stebila
215 (Sun Microsystems Laboratories)]
216
217 *) Extend the EC library for elliptic curves over binary fields
218 (new files ec2_smpl.c, ec2_smpt.c, ec2_mult.c in crypto/ec/).
219 New EC_METHOD:
220
221 EC_GF2m_simple_method
222
223 New API functions:
224
225 EC_GROUP_new_curve_GF2m
226 EC_GROUP_set_curve_GF2m
227 EC_GROUP_get_curve_GF2m
7793f30e
BM
228 EC_POINT_set_affine_coordinates_GF2m
229 EC_POINT_get_affine_coordinates_GF2m
230 EC_POINT_set_compressed_coordinates_GF2m
231
232 Point compression for binary fields is disabled by default for
233 patent reasons (compile with OPENSSL_EC_BIN_PT_COMP defined to
234 enable it).
235
236 As binary polynomials are represented as BIGNUMs, various members
237 of the EC_GROUP and EC_POINT data structures can be shared
238 between the implementations for prime fields and binary fields;
239 the above ..._GF2m functions (except for EX_GROUP_new_curve_GF2m)
240 are essentially identical to their ..._GFp counterparts.
9e4f9b36
BM
241 (For simplicity, the '..._GFp' prefix has been dropped from
242 various internal method names.)
7793f30e
BM
243
244 An internal 'field_div' method (similar to 'field_mul' and
245 'field_sqr') has been added; this is used only for binary fields.
246
247 [Sheueling Chang Shantz and Douglas Stebila
248 (Sun Microsystems Laboratories)]
249
9e4f9b36 250 *) Optionally dispatch EC_POINT_mul(), EC_POINT_precompute_mult()
7793f30e
BM
251 through methods ('mul', 'precompute_mult').
252
253 The generic implementations (now internally called 'ec_wNAF_mul'
254 and 'ec_wNAF_precomputed_mult') remain the default if these
255 methods are undefined.
256
257 [Sheueling Chang Shantz and Douglas Stebila
258 (Sun Microsystems Laboratories)]
259
260 *) New function EC_GROUP_get_degree, which is defined through
261 EC_METHOD. For curves over prime fields, this returns the bit
262 length of the modulus.
263
264 [Sheueling Chang Shantz and Douglas Stebila
265 (Sun Microsystems Laboratories)]
266
267 *) New functions EC_GROUP_dup, EC_POINT_dup.
268 (These simply call ..._new and ..._copy).
269
270 [Sheueling Chang Shantz and Douglas Stebila
271 (Sun Microsystems Laboratories)]
272
1dc920c8
BM
273 *) Add binary polynomial arithmetic software in crypto/bn/bn_gf2m.c.
274 Polynomials are represented as BIGNUMs (where the sign bit is not
275 used) in the following functions [macros]:
276
277 BN_GF2m_add
278 BN_GF2m_sub [= BN_GF2m_add]
279 BN_GF2m_mod [wrapper for BN_GF2m_mod_arr]
280 BN_GF2m_mod_mul [wrapper for BN_GF2m_mod_mul_arr]
281 BN_GF2m_mod_sqr [wrapper for BN_GF2m_mod_sqr_arr]
282 BN_GF2m_mod_inv
283 BN_GF2m_mod_exp [wrapper for BN_GF2m_mod_exp_arr]
284 BN_GF2m_mod_sqrt [wrapper for BN_GF2m_mod_sqrt_arr]
285 BN_GF2m_mod_solve_quad [wrapper for BN_GF2m_mod_solve_quad_arr]
286 BN_GF2m_cmp [= BN_ucmp]
287
288 (Note that only the 'mod' functions are actually for fields GF(2^m).
289 BN_GF2m_add() is misnomer, but this is for the sake of consistency.)
290
291 For some functions, an the irreducible polynomial defining a
292 field can be given as an 'unsigned int[]' with strictly
293 decreasing elements giving the indices of those bits that are set;
294 i.e., p[] represents the polynomial
295 f(t) = t^p[0] + t^p[1] + ... + t^p[k]
296 where
297 p[0] > p[1] > ... > p[k] = 0.
298 This applies to the following functions:
299
300 BN_GF2m_mod_arr
301 BN_GF2m_mod_mul_arr
302 BN_GF2m_mod_sqr_arr
303 BN_GF2m_mod_inv_arr [wrapper for BN_GF2m_mod_inv]
304 BN_GF2m_mod_div_arr [wrapper for BN_GF2m_mod_div]
305 BN_GF2m_mod_exp_arr
306 BN_GF2m_mod_sqrt_arr
307 BN_GF2m_mod_solve_quad_arr
308 BN_GF2m_poly2arr
309 BN_GF2m_arr2poly
310
311 Conversion can be performed by the following functions:
312
313 BN_GF2m_poly2arr
314 BN_GF2m_arr2poly
315
316 bntest.c has additional tests for binary polynomial arithmetic.
317
909abce8
BM
318 Two implementations for BN_GF2m_mod_div() are available.
319 The default algorithm simply uses BN_GF2m_mod_inv() and
320 BN_GF2m_mod_mul(). The alternative algorithm is compiled in only
321 if OPENSSL_SUN_GF2M_DIV is defined (patent pending; read the
322 copyright notice in crypto/bn/bn_gf2m.c before enabling it).
1dc920c8
BM
323
324 [Sheueling Chang Shantz and Douglas Stebila
325 (Sun Microsystems Laboratories)]
326
16dc1cfb
BM
327 *) Add new error code 'ERR_R_DISABLED' that can be used when some
328 functionality is disabled at compile-time.
329 [Douglas Stebila <douglas.stebila@sun.com>]
330
ea4f109c
BM
331 *) Change default behaviour of 'openssl asn1parse' so that more
332 information is visible when viewing, e.g., a certificate:
333
334 Modify asn1_parse2 (crypto/asn1/asn1_par.c) so that in non-'dump'
335 mode the content of non-printable OCTET STRINGs is output in a
336 style similar to INTEGERs, but with '[HEX DUMP]' prepended to
337 avoid the appearance of a printable string.
338 [Nils Larsch <nla@trustcenter.de>]
339
254ef80d
BM
340 *) Add 'asn1_flag' and 'asn1_form' member to EC_GROUP with access
341 functions
342 EC_GROUP_set_asn1_flag()
343 EC_GROUP_get_asn1_flag()
344 EC_GROUP_set_point_conversion_form()
345 EC_GROUP_get_point_conversion_form()
346 These control ASN1 encoding details:
b8e0e123
BM
347 - Curves (i.e., groups) are encoded explicitly unless asn1_flag
348 has been set to OPENSSL_EC_NAMED_CURVE.
5f3d6f70 349 - Points are encoded in uncompressed form by default; options for
254ef80d
BM
350 asn1_for are as for point2oct, namely
351 POINT_CONVERSION_COMPRESSED
352 POINT_CONVERSION_UNCOMPRESSED
353 POINT_CONVERSION_HYBRID
5f3d6f70
BM
354
355 Also add 'seed' and 'seed_len' members to EC_GROUP with access
356 functions
357 EC_GROUP_set_seed()
358 EC_GROUP_get0_seed()
359 EC_GROUP_get_seed_len()
360 This is used only for ASN1 purposes (so far).
458c2917
BM
361 [Nils Larsch <nla@trustcenter.de>]
362
363 *) Add 'field_type' member to EC_METHOD, which holds the NID
364 of the appropriate field type OID. The new function
365 EC_METHOD_get_field_type() returns this value.
366 [Nils Larsch <nla@trustcenter.de>]
367
6cbe6382
BM
368 *) Add functions
369 EC_POINT_point2bn()
370 EC_POINT_bn2point()
371 EC_POINT_point2hex()
372 EC_POINT_hex2point()
373 providing useful interfaces to EC_POINT_point2oct() and
374 EC_POINT_oct2point().
375 [Nils Larsch <nla@trustcenter.de>]
376
b6db386f
BM
377 *) Change internals of the EC library so that the functions
378 EC_GROUP_set_generator()
379 EC_GROUP_get_generator()
380 EC_GROUP_get_order()
381 EC_GROUP_get_cofactor()
382 are implemented directly in crypto/ec/ec_lib.c and not dispatched
383 to methods, which would lead to unnecessary code duplication when
384 adding different types of curves.
6cbe6382 385 [Nils Larsch <nla@trustcenter.de> with input by Bodo Moeller]
b6db386f 386
47234cd3
BM
387 *) Implement compute_wNAF (crypto/ec/ec_mult.c) without BIGNUM
388 arithmetic, and such that modified wNAFs are generated
389 (which avoid length expansion in many cases).
390 [Bodo Moeller]
391
82652aaf
BM
392 *) Add a function EC_GROUP_check_discriminant() (defined via
393 EC_METHOD) that verifies that the curve discriminant is non-zero.
394
395 Add a function EC_GROUP_check() that makes some sanity tests
396 on a EC_GROUP, its generator and order. This includes
397 EC_GROUP_check_discriminant().
398 [Nils Larsch <nla@trustcenter.de>]
399
4d94ae00
BM
400 *) Add ECDSA in new directory crypto/ecdsa/.
401
5dbd3efc
BM
402 Add applications 'openssl ecparam' and 'openssl ecdsa'
403 (these are based on 'openssl dsaparam' and 'openssl dsa').
4d94ae00
BM
404
405 ECDSA support is also included in various other files across the
406 library. Most notably,
407 - 'openssl req' now has a '-newkey ecdsa:file' option;
408 - EVP_PKCS82PKEY (crypto/evp/evp_pkey.c) now can handle ECDSA;
409 - X509_PUBKEY_get (crypto/asn1/x_pubkey.c) and
410 d2i_PublicKey (crypto/asn1/d2i_pu.c) have been modified to make
411 them suitable for ECDSA where domain parameters must be
e172d60d
BM
412 extracted before the specific public key;
413 - ECDSA engine support has been added.
f8e21776 414 [Nils Larsch <nla@trustcenter.de>]
4d94ae00 415
af28dd6c 416 *) Include some named elliptic curves, and add OIDs from X9.62,
ed5e37c3 417 SECG, and WAP/WTLS. Each curve can be obtained from the new
7eb18f12 418 function
ed5e37c3
BM
419 EC_GROUP_new_by_nid(),
420 and the list of available named curves can be obtained with
421 EC_get_builtin_curves().
254ef80d
BM
422 Also add a 'curve_name' member to EC_GROUP objects, which can be
423 accessed via
4d94ae00
BM
424 EC_GROUP_set_nid()
425 EC_GROUP_get_nid()
426 [Nils Larsch <nla@trustcenter.de, Bodo Moeller]
427
c1862f91
BM
428 *) Remove a few calls to bn_wexpand() in BN_sqr() (the one in there
429 was actually never needed) and in BN_mul(). The removal in BN_mul()
430 required a small change in bn_mul_part_recursive() and the addition
431 of the functions bn_cmp_part_words(), bn_sub_part_words() and
432 bn_add_part_words(), which do the same thing as bn_cmp_words(),
433 bn_sub_words() and bn_add_words() except they take arrays with
434 differing sizes.
435 [Richard Levitte]
436
7a1c6aa2 437 Changes between 0.9.7 and 0.9.7a [XX xxx 2003]
948dcdb8 438
758f942b
RL
439 *) Make the no-err option work as intended. The intention with no-err
440 is not to have the whole error stack handling routines removed from
441 libcrypto, it's only intended to remove all the function name and
442 reason texts, thereby removing some of the footprint that may not
443 be interesting if those errors aren't displayed anyway.
444
445 NOTE: it's still possible for any application or module to have it's
446 own set of error texts inserted. The routines are there, just not
447 used by default when no-err is given.
448 [Richard Levitte]
449
b7bbac72
RL
450 *) Add support for FreeBSD on IA64.
451 [dirk.meyer@dinoex.sub.org via Richard Levitte, resolves #454]
452
9ec1d35f
RL
453 *) Adjust DES_cbc_cksum() so it returns the same value as the MIT
454 Kerberos function mit_des_cbc_cksum(). Before this change,
455 the value returned by DES_cbc_cksum() was like the one from
456 mit_des_cbc_cksum(), except the bytes were swapped.
457 [Kevin Greaney <Kevin.Greaney@hp.com> and Richard Levitte]
458
cf56663f
DSH
459 *) Allow an application to disable the automatic SSL chain building.
460 Before this a rather primitive chain build was always performed in
461 ssl3_output_cert_chain(): an application had no way to send the
462 correct chain if the automatic operation produced an incorrect result.
463
464 Now the chain builder is disabled if either:
465
466 1. Extra certificates are added via SSL_CTX_add_extra_chain_cert().
467
468 2. The mode flag SSL_MODE_NO_AUTO_CHAIN is set.
469
470 The reasoning behind this is that an application would not want the
471 auto chain building to take place if extra chain certificates are
472 present and it might also want a means of sending no additional
473 certificates (for example the chain has two certificates and the
474 root is omitted).
475 [Steve Henson]
476
0b13e9f0
RL
477 *) Add the possibility to build without the ENGINE framework.
478 [Steven Reddie <smr@essemer.com.au> via Richard Levitte]
479
d3b5cb53
DSH
480 *) Under Win32 gmtime() can return NULL: check return value in
481 OPENSSL_gmtime(). Add error code for case where gmtime() fails.
482 [Steve Henson]
483
a74333f9
LJ
484 *) DSA routines: under certain error conditions uninitialized BN objects
485 could be freed. Solution: make sure initialization is performed early
486 enough. (Reported and fix supplied by Ivan D Nestlerode <nestler@MIT.EDU>,
487 Nils Larsch <nla@trustcenter.de> via PR#459)
488 [Lutz Jaenicke]
489
8ec16ce7
LJ
490 *) Another fix for SSLv2 session ID handling: the session ID was incorrectly
491 checked on reconnect on the client side, therefore session resumption
492 could still fail with a "ssl session id is different" error. This
493 behaviour is masked when SSL_OP_ALL is used due to
494 SSL_OP_MICROSOFT_SESS_ID_BUG being set.
495 Behaviour observed by Crispin Flowerday <crispin@flowerday.cx> as
496 followup to PR #377.
497 [Lutz Jaenicke]
498
04aff67d
RL
499 *) IA-32 assembler support enhancements: unified ELF targets, support
500 for SCO/Caldera platforms, fix for Cygwin shared build.
501 [Andy Polyakov]
502
afd41c9f
RL
503 *) Add support for FreeBSD on sparc64. As a consequence, support for
504 FreeBSD on non-x86 processors is separate from x86 processors on
505 the config script, much like the NetBSD support.
506 [Richard Levitte & Kris Kennaway <kris@obsecurity.org>]
948dcdb8 507
08101d72 508 Changes between 0.9.6h and 0.9.7 [31 Dec 2002]
3e06fb75 509
21cde7a4
LJ
510 *) Fix session ID handling in SSLv2 client code: the SERVER FINISHED
511 code (06) was taken as the first octet of the session ID and the last
512 octet was ignored consequently. As a result SSLv2 client side session
513 caching could not have worked due to the session ID mismatch between
514 client and server.
515 Behaviour observed by Crispin Flowerday <crispin@flowerday.cx> as
516 PR #377.
517 [Lutz Jaenicke]
518
9cd16b1d
RL
519 *) Change the declaration of needed Kerberos libraries to use EX_LIBS
520 instead of the special (and badly supported) LIBKRB5. LIBKRB5 is
521 removed entirely.
522 [Richard Levitte]
523
14676ffc 524 *) The hw_ncipher.c engine requires dynamic locks. Unfortunately, it
a1457874
RL
525 seems that in spite of existing for more than a year, many application
526 author have done nothing to provide the necessary callbacks, which
14676ffc
RL
527 means that this particular engine will not work properly anywhere.
528 This is a very unfortunate situation which forces us, in the name
529 of usability, to give the hw_ncipher.c a static lock, which is part
530 of libcrypto.
531 NOTE: This is for the 0.9.7 series ONLY. This hack will never
532 appear in 0.9.8 or later. We EXPECT application authors to have
533 dealt properly with this when 0.9.8 is released (unless we actually
534 make such changes in the libcrypto locking code that changes will
535 have to be made anyway).
536 [Richard Levitte]
537
2053c43d
DSH
538 *) In asn1_d2i_read_bio() repeatedly call BIO_read() until all content
539 octets have been read, EOF or an error occurs. Without this change
540 some truncated ASN1 structures will not produce an error.
541 [Steve Henson]
542
17582ccf
RL
543 *) Disable Heimdal support, since it hasn't been fully implemented.
544 Still give the possibility to force the use of Heimdal, but with
545 warnings and a request that patches get sent to openssl-dev.
546 [Richard Levitte]
547
0bf23d9b
RL
548 *) Add the VC-CE target, introduce the WINCE sysname, and add
549 INSTALL.WCE and appropriate conditionals to make it build.
550 [Steven Reddie <smr@essemer.com.au> via Richard Levitte]
551
6f17f16f
RL
552 *) Change the DLL names for Cygwin to cygcrypto-x.y.z.dll and
553 cygssl-x.y.z.dll, where x, y and z are the major, minor and
554 edit numbers of the version.
555 [Corinna Vinschen <vinschen@redhat.com> and Richard Levitte]
556
54a656ef
BL
557 *) Introduce safe string copy and catenation functions
558 (BUF_strlcpy() and BUF_strlcat()).
559 [Ben Laurie (CHATS) and Richard Levitte]
560
561 *) Avoid using fixed-size buffers for one-line DNs.
562 [Ben Laurie (CHATS)]
563
564 *) Add BUF_MEM_grow_clean() to avoid information leakage when
565 resizing buffers containing secrets, and use where appropriate.
566 [Ben Laurie (CHATS)]
567
568 *) Avoid using fixed size buffers for configuration file location.
569 [Ben Laurie (CHATS)]
570
571 *) Avoid filename truncation for various CA files.
572 [Ben Laurie (CHATS)]
573
574 *) Use sizeof in preference to magic numbers.
575 [Ben Laurie (CHATS)]
576
577 *) Avoid filename truncation in cert requests.
578 [Ben Laurie (CHATS)]
579
54a656ef
BL
580 *) Add assertions to check for (supposedly impossible) buffer
581 overflows.
582 [Ben Laurie (CHATS)]
583
584 *) Don't cache truncated DNS entries in the local cache (this could
585 potentially lead to a spoofing attack).
586 [Ben Laurie (CHATS)]
587
588 *) Fix various buffers to be large enough for hex/decimal
589 representations in a platform independent manner.
590 [Ben Laurie (CHATS)]
591
592 *) Add CRYPTO_realloc_clean() to avoid information leakage when
593 resizing buffers containing secrets, and use where appropriate.
594 [Ben Laurie (CHATS)]
595
596 *) Add BIO_indent() to avoid much slightly worrying code to do
597 indents.
598 [Ben Laurie (CHATS)]
599
600 *) Convert sprintf()/BIO_puts() to BIO_printf().
601 [Ben Laurie (CHATS)]
602
603 *) buffer_gets() could terminate with the buffer only half
604 full. Fixed.
605 [Ben Laurie (CHATS)]
606
607 *) Add assertions to prevent user-supplied crypto functions from
608 overflowing internal buffers by having large block sizes, etc.
609 [Ben Laurie (CHATS)]
610
2b2ab523
BM
611 *) New OPENSSL_assert() macro (similar to assert(), but enabled
612 unconditionally).
613 [Ben Laurie (CHATS)]
614
54a656ef
BL
615 *) Eliminate unused copy of key in RC4.
616 [Ben Laurie (CHATS)]
617
618 *) Eliminate unused and incorrectly sized buffers for IV in pem.h.
619 [Ben Laurie (CHATS)]
620
621 *) Fix off-by-one error in EGD path.
622 [Ben Laurie (CHATS)]
623
624 *) If RANDFILE path is too long, ignore instead of truncating.
625 [Ben Laurie (CHATS)]
626
627 *) Eliminate unused and incorrectly sized X.509 structure
628 CBCParameter.
629 [Ben Laurie (CHATS)]
630
631 *) Eliminate unused and dangerous function knumber().
632 [Ben Laurie (CHATS)]
633
634 *) Eliminate unused and dangerous structure, KSSL_ERR.
635 [Ben Laurie (CHATS)]
636
637 *) Protect against overlong session ID context length in an encoded
638 session object. Since these are local, this does not appear to be
639 exploitable.
640 [Ben Laurie (CHATS)]
641
3e06fb75
BM
642 *) Change from security patch (see 0.9.6e below) that did not affect
643 the 0.9.6 release series:
644
645 Remote buffer overflow in SSL3 protocol - an attacker could
646 supply an oversized master key in Kerberos-enabled versions.
647 (CAN-2002-0657)
648 [Ben Laurie (CHATS)]
dc014d43 649
7ba3a4c3
RL
650 *) Change the SSL kerb5 codes to match RFC 2712.
651 [Richard Levitte]
652
ba111217
BM
653 *) Make -nameopt work fully for req and add -reqopt switch.
654 [Michael Bell <michael.bell@rz.hu-berlin.de>, Steve Henson]
655
3f6db7f5
DSH
656 *) The "block size" for block ciphers in CFB and OFB mode should be 1.
657 [Steve Henson, reported by Yngve Nysaeter Pettersen <yngve@opera.com>]
658
f013c7f2
RL
659 *) Make sure tests can be performed even if the corresponding algorithms
660 have been removed entirely. This was also the last step to make
661 OpenSSL compilable with DJGPP under all reasonable conditions.
662 [Richard Levitte, Doug Kaufman <dkaufman@rahul.net>]
663
648765ba 664 *) Add cipher selection rules COMPLEMENTOFALL and COMPLEMENTOFDEFAULT
c6ccf055
LJ
665 to allow version independent disabling of normally unselected ciphers,
666 which may be activated as a side-effect of selecting a single cipher.
648765ba
BM
667
668 (E.g., cipher list string "RSA" enables ciphersuites that are left
669 out of "ALL" because they do not provide symmetric encryption.
670 "RSA:!COMPLEMEMENTOFALL" avoids these unsafe ciphersuites.)
c6ccf055
LJ
671 [Lutz Jaenicke, Bodo Moeller]
672
041843e4
RL
673 *) Add appropriate support for separate platform-dependent build
674 directories. The recommended way to make a platform-dependent
675 build directory is the following (tested on Linux), maybe with
676 some local tweaks:
677
678 # Place yourself outside of the OpenSSL source tree. In
679 # this example, the environment variable OPENSSL_SOURCE
680 # is assumed to contain the absolute OpenSSL source directory.
3e06fb75
BM
681 mkdir -p objtree/"`uname -s`-`uname -r`-`uname -m`"
682 cd objtree/"`uname -s`-`uname -r`-`uname -m`"
4a9476dd 683 (cd $OPENSSL_SOURCE; find . -type f) | while read F; do
041843e4
RL
684 mkdir -p `dirname $F`
685 ln -s $OPENSSL_SOURCE/$F $F
686 done
687
688 To be absolutely sure not to disturb the source tree, a "make clean"
689 is a good thing. If it isn't successfull, don't worry about it,
690 it probably means the source directory is very clean.
691 [Richard Levitte]
692
a6c6874a
GT
693 *) Make sure any ENGINE control commands make local copies of string
694 pointers passed to them whenever necessary. Otherwise it is possible
695 the caller may have overwritten (or deallocated) the original string
696 data when a later ENGINE operation tries to use the stored values.
697