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