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