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