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