ChangeLog 93 KB
Newer Older
1
mbed TLS ChangeLog (Sorted per branch, date)
2

3 4
= mbed TLS 2.x branch

5 6 7
Security
   * Fix potential integer overflow to buffer overflow in
     mbedtls_rsa_rsaes_pkcs1_v15_encrypt and mbedtls_rsa_rsaes_oaep_encrypt
8
     (not triggerable remotely in (D)TLS).
9

10 11 12
Bugfix
   * Fix bug in mbedtls_mpi_add_mpi() that caused wrong results when the three
     arguments where the same (in-place doubling). Found and fixed by Janos
13
     Follath. #309
14 15
   * Fix potential build failures related to the 'apidoc' target, introduced
     in the previous patch release. Found by Robert Scheck. #390 #391
16
   * Fix issue in Makefile that prevented building using armar. #386
17 18
   * Fix memory leak that occured only when ECJPAKE was enabled and ECDHE and
     ECDSA was disabled in config.h . The leak didn't occur by default.
19 20 21
   * Fix an issue that caused valid certificates to be rejected whenever an
     expired or not yet valid certificate was parsed before a valid certificate
     in the trusted certificate list.
22

23 24 25 26
Changes
   * On ARM platforms, when compiling with -O0 with GCC, Clang or armcc5,
     don't use the optimized assembly for bignum multiplication. This removes
     the need to pass -fomit-frame-pointer to avoid a build error with -O0.
Simon Butcher's avatar
Simon Butcher committed
27
   * Disabled SSLv3 in the default configuration. 
28

29
= mbed TLS 2.2.1 released 2016-01-05
30

31 32 33 34
Security
   * Fix potential double free when mbedtls_asn1_store_named_data() fails to
     allocate memory. Only used for certificate generation, not triggerable
     remotely in SSL/TLS. Found by Rafał Przywara. #367
35 36 37 38
   * Disable MD5 handshake signatures in TLS 1.2 by default to prevent the
     SLOTH attack on TLS 1.2 server authentication (other attacks from the
     SLOTH paper do not apply to any version of mbed TLS or PolarSSL).
     https://www.mitls.org/pages/attacks/SLOTH
39

40
Bugfix
Simon Butcher's avatar
Simon Butcher committed
41
   * Fix over-restrictive length limit in GCM. Found by Andreas-N. #362
42 43 44
   * Fix bug in certificate validation that caused valid chains to be rejected
     when the first intermediate certificate has pathLenConstraint=0. Found by
     Nicholas Wilson. Introduced in mbed TLS 2.2.0. #280
45
   * Removed potential leak in mbedtls_rsa_rsassa_pkcs1_v15_sign(), found by
46
     JayaraghavendranK. #372
47 48 49 50 51
   * Fix suboptimal handling of unexpected records that caused interop issues
     with some peers over unreliable links. Avoid dropping an entire DTLS
     datagram if a single record in a datagram is unexpected, instead only
     drop the record and look at subsequent records (if any are present) in
     the same datagram. Found by jeannotlapin. #345
52

53
= mbed TLS 2.2.0 released 2015-11-04
54

55
Security
56 57 58
   * Fix potential double free if mbedtls_ssl_conf_psk() is called more than
     once and some allocation fails. Cannot be forced remotely. Found by Guido
     Vranken, Intelworks.
59 60
   * Fix potential heap corruption on Windows when
     mbedtls_x509_crt_parse_path() is passed a path longer than 2GB. Cannot be
61
     triggered remotely. Found by Guido Vranken, Intelworks.
62 63 64
   * Fix potential buffer overflow in some asn1_write_xxx() functions.
     Cannot be triggered remotely unless you create X.509 certificates based
     on untrusted input or write keys of untrusted origin. Found by Guido
65
     Vranken, Intelworks.
66 67 68 69
   * The X509 max_pathlen constraint was not enforced on intermediate
     certificates. Found by Nicholas Wilson, fix and tests provided by
     Janos Follath. #280 and #319

70 71 72 73 74
Features
   * Experimental support for EC J-PAKE as defined in Thread 1.0.0.
     Disabled by default as the specification might still change.
   * Added a key extraction callback to accees the master secret and key
     block. (Potential uses include EAP-TLS and Thread.)
75

76
Bugfix
77 78 79
   * Self-signed certificates were not excluded from pathlen counting,
     resulting in some valid X.509 being incorrectly rejected. Found and fix
     provided by Janos Follath. #319
80 81
   * Fix build error with configurations where ECDHE-PSK is the only key
     exchange. Found and fix provided by Chris Hammond. #270
82 83
   * Fix build error with configurations where RSA, RSA-PSK, ECDH-RSA or
     ECHD-ECDSA if the only key exchange. Multiple reports. #310
84 85
   * Fixed a bug causing some handshakes to fail due to some non-fatal alerts
     not being properly ignored. Found by mancha and Kasom Koht-arsa, #308
86 87 88
   * mbedtls_x509_crt_verify(_with_profile)() now also checks the key type and
     size/curve against the profile. Before that, there was no way to set a
     minimum key size for end-entity certificates with RSA keys. Found by
89
     Matthew Page of Scannex Electronics Ltd.
90 91
   * Fix failures in MPI on Sparc(64) due to use of bad assembly code.
     Found by Kurt Danielson. #292
92
   * Fix typo in name of the extKeyUsage OID. Found by inestlerode, #314
93 94 95
   * Fix bug in ASN.1 encoding of booleans that caused generated CA
     certificates to be rejected by some applications, including OS X
     Keychain. Found and fixed by Jonathan Leroy, Inikup.
96

97 98 99
Changes
   * Improved performance of mbedtls_ecp_muladd() when one of the scalars is 1
     or -1.
100 101 102

= mbed TLS 2.1.2 released 2015-10-06

103
Security
104
   * Added fix for CVE-2015-5291 to prevent heap corruption due to buffer
105 106
     overflow of the hostname or session ticket. Found by Guido Vranken,
     Intelworks.
107 108
   * Fix potential double-free if mbedtls_ssl_set_hs_psk() is called more than
     once in the same handhake and mbedtls_ssl_conf_psk() was used.
109 110
     Found and patch provided by Guido Vranken, Intelworks. Cannot be forced
     remotely.
111 112
   * Fix stack buffer overflow in pkcs12 decryption (used by
     mbedtls_pk_parse_key(file)() when the password is > 129 bytes.
113
     Found by Guido Vranken, Intelworks. Not triggerable remotely.
114
   * Fix potential buffer overflow in mbedtls_mpi_read_string().
115 116 117 118
     Found by Guido Vranken, Intelworks. Not exploitable remotely in the context
     of TLS, but might be in other uses. On 32 bit machines, requires reading a
     string of close to or larger than 1GB to exploit; on 64 bit machines, would
     require reading a string of close to or larger than 2^62 bytes.
119
   * Fix potential random memory allocation in mbedtls_pem_read_buffer()
120 121 122 123 124 125
     on crafted PEM input data. Found and fix provided by Guido Vranken,
     Intelworks. Not triggerable remotely in TLS. Triggerable remotely if you
     accept PEM data from an untrusted source.
   * Fix possible heap buffer overflow in base64_encoded() when the input
     buffer is 512MB or larger on 32-bit platforms. Found by Guido Vranken,
     Intelworks. Not trigerrable remotely in TLS.
126
   * Fix potential double-free if mbedtls_conf_psk() is called repeatedly on
127 128
     the same mbedtls_ssl_config object and memory allocation fails. Found by
     Guido Vranken, Intelworks. Cannot be forced remotely.
129 130 131
   * Fix potential heap buffer overflow in servers that perform client
     authentication against a crafted CA cert. Cannot be triggered remotely
     unless you allow third parties to pick trust CAs for client auth.
132
     Found by Guido Vranken, Intelworks.
133

134 135 136
Bugfix
   * Fix compile error in net.c with musl libc. Found and patch provided by
     zhasha (#278).
137
   * Fix macroization of 'inline' keyword when building as C++. (#279)
138

139 140 141
Changes
   * Added checking of hostname length in mbedtls_ssl_set_hostname() to ensure
     domain names are compliant with RFC 1035.
142 143
   * Fixed paths for check_config.h in example config files. (Found by bachp)
     (#291)
144

145
= mbed TLS 2.1.1 released 2015-09-17
146

147 148 149 150
Security
   * Add countermeasure against Lenstra's RSA-CRT attack for PKCS#1 v1.5
     signatures. (Found by Florian Weimer, Red Hat.)
     https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/
151 152
   * Fix possible client-side NULL pointer dereference (read) when the client
     tries to continue the handshake after it failed (a misuse of the API).
153 154
     (Found and patch provided by Fabian Foerg, Gotham Digital Science using
     afl-fuzz.)
155

156 157
Bugfix
   * Fix warning when using a 64bit platform. (found by embedthis) (#275)
158 159 160
   * Fix off-by-one error in parsing Supported Point Format extension that
     caused some handshakes to fail.

161 162 163
Changes
   * Made X509 profile pointer const in mbedtls_ssl_conf_cert_profile() to allow
     use of mbedtls_x509_crt_profile_next. (found by NWilson)
164 165 166 167 168 169 170
   * When a client initiates a reconnect from the same port as a live
     connection, if cookie verification is available
     (MBEDTLS_SSL_DTLS_HELLO_VERIFY defined in config.h, and usable cookie
     callbacks set with mbedtls_ssl_conf_dtls_cookies()), this will be
     detected and mbedtls_ssl_read() will return
     MBEDTLS_ERR_SSL_CLIENT_RECONNECT - it is then possible to start a new
     handshake with the same context. (See RFC 6347 section 4.2.8.)
171

172
= mbed TLS 2.1.0 released 2015-09-04
173

174
Features
175 176
   * Added support for yotta as a build system.
   * Primary open source license changed to Apache 2.0 license.
177

178 179
Bugfix
   * Fix segfault in the benchmark program when benchmarking DHM.
180 181
   * Fix build error with CMake and pre-4.5 versions of GCC (found by Hugo
     Leisink).
182 183
   * Fix bug when parsing a ServerHello without extensions (found by David
     Sears).
184
   * Fix bug in CMake lists that caused libmbedcrypto.a not to be installed
185
     (found by Benoit Lecocq).
186 187
   * Fix bug in Makefile that caused libmbedcrypto and libmbedx509 not to be
     installed (found by Rawi666).
188
   * Fix compile error with armcc 5 with --gnu option.
189 190
   * Fix bug in Makefile that caused programs not to be installed correctly
     (found by robotanarchy) (#232).
191 192
   * Fix bug in Makefile that prevented from installing without building the
     tests (found by robotanarchy) (#232).
193 194 195
   * Fix missing -static-libgcc when building shared libraries for Windows
     with make.
   * Fix link error when building shared libraries for Windows with make.
196
   * Fix error when loading libmbedtls.so.
197 198
   * Fix bug in mbedtls_ssl_conf_default() that caused the default preset to
     be always used (found by dcb314) (#235)
199 200 201
   * Fix bug in mbedtls_rsa_public() and mbedtls_rsa_private() that could
     result trying to unlock an unlocked mutex on invalid input (found by
     Fredrik Axelsson) (#257)
202 203 204 205 206 207 208
   * Fix -Wshadow warnings (found by hnrkp) (#240)
   * Fix memory corruption on client with overlong PSK identity, around
     SSL_MAX_CONTENT_LEN or higher - not triggerrable remotely (found by
     Aleksandrs Saveljevs) (#238)
   * Fix unused function warning when using MBEDTLS_MDx_ALT or
     MBEDTLS_SHAxxx_ALT (found by Henrik) (#239)
   * Fix memory corruption in pkey programs (found by yankuncheng) (#210)
209

210 211
Changes
   * The PEM parser now accepts a trailing space at end of lines (#226).
212 213 214
   * It is now possible to #include a user-provided configuration file at the
     end of the default config.h by defining MBEDTLS_USER_CONFIG_FILE on the
     compiler's command line.
215 216 217
   * When verifying a certificate chain, if an intermediate certificate is
     trusted, no later cert is checked. (suggested by hannes-landeholm)
     (#220).
218 219 220 221
   * Prepend a "thread identifier" to debug messages (issue pointed out by
     Hugo Leisink) (#210).
   * Add mbedtls_ssl_get_max_frag_len() to query the current maximum fragment
     length.
222

Paul Bakker's avatar
Paul Bakker committed
223
= mbed TLS 2.0.0 released 2015-07-13
224

225
Features
226 227 228 229 230 231
   * Support for DTLS 1.0 and 1.2 (RFC 6347).
   * Ability to override core functions from MDx, SHAx, AES and DES modules
     with custom implementation (eg hardware accelerated), complementing the
     ability to override the whole module.
   * New server-side implementation of session tickets that rotate keys to
     preserve forward secrecy, and allows sharing across multiple contexts.
232 233 234 235 236 237
   * Added a concept of X.509 cerificate verification profile that controls
     which algorithms and key sizes (curves for ECDSA) are acceptable.
   * Expanded configurability of security parameters in the SSL module with
     mbedtls_ssl_conf_dhm_min_bitlen() and mbedtls_ssl_conf_sig_hashes().
   * Introduced a concept of presets for SSL security-relevant configuration
     parameters.
238

239
API Changes
240 241
   * The library has been split into libmbedcrypto, libmbedx509, libmbedtls.
     You now need to link to all of them if you use TLS for example.
242
   * All public identifiers moved to the mbedtls_* or MBEDTLS_* namespace.
243
     Some names have been further changed to make them more consistent.
244
     Migration helpers scripts/rename.pl and include/mbedlts/compat-1.3.h are
245
     provided. Full list of renamings in scripts/data_files/rename-1.3-2.0.txt
246
   * Renamings of fields inside structures, not covered by the previous list:
247 248 249
     mbedtls_cipher_info_t.key_length -> key_bitlen
     mbedtls_cipher_context_t.key_length -> key_bitlen
     mbedtls_ecp_curve_info.size -> bit_size
250
   * Headers are now found in the 'mbedtls' directory (previously 'polarssl').
251
   * The following _init() functions that could return errors have
252
     been split into an _init() that returns void and another function that
253
     should generally be the first function called on this context after init:
254
     mbedtls_ssl_init() -> mbedtls_ssl_setup()
255
     mbedtls_ccm_init() -> mbedtls_ccm_setkey()
256
     mbedtls_gcm_init() -> mbedtls_gcm_setkey()
257 258
     mbedtls_hmac_drbg_init() -> mbedtls_hmac_drbg_seed(_buf)()
     mbedtls_ctr_drbg_init()  -> mbedtls_ctr_drbg_seed()
259
     Note that for mbedtls_ssl_setup(), you need to be done setting up the
260
     ssl_config structure before calling it.
261
   * Most ssl_set_xxx() functions (all except ssl_set_bio(), ssl_set_hostname(),
262 263 264 265
     ssl_set_session() and ssl_set_client_transport_id(), plus
     ssl_legacy_renegotiation()) have been renamed to mbedtls_ssl_conf_xxx()
     (see rename.pl and compat-1.3.h above) and their first argument's type
     changed from ssl_context to ssl_config.
266 267
   * ssl_set_bio() changed signature (contexts merged, order switched, one
     additional callback for read-with-timeout).
268 269 270 271 272
   * The following functions have been introduced and must be used in callback
     implementations (SNI, PSK) instead of their *conf counterparts:
     mbedtls_ssl_set_hs_own_cert()
     mbedtls_ssl_set_hs_ca_chain()
     mbedtls_ssl_set_hs_psk()
273
   * mbedtls_ssl_conf_ca_chain() lost its last argument (peer_cn), now set
274
     using mbedtls_ssl_set_hostname().
275
   * mbedtls_ssl_conf_session_cache() changed prototype (only one context
276
     pointer, parameters reordered).
277 278
   * On server, mbedtls_ssl_conf_session_tickets_cb() must now be used in
     place of mbedtls_ssl_conf_session_tickets() to enable session tickets.
279 280
   * The SSL debug callback gained two new arguments (file name, line number).
   * Debug modes were removed.
281
   * mbedtls_ssl_conf_truncated_hmac() now returns void.
282
   * mbedtls_memory_buffer_alloc_init() now returns void.
283 284 285
   * X.509 verification flags are now an uint32_t. Affect the signature of:
     mbedtls_ssl_get_verify_result()
     mbedtls_x509_ctr_verify_info()
286
     mbedtls_x509_crt_verify() (flags, f_vrfy -> needs to be updated)
287
     mbedtls_ssl_conf_verify() (f_vrfy -> needs to be updated)
288 289 290 291 292 293
   * The following functions changed prototype to avoid an in-out length
     parameter:
     mbedtls_base64_encode()
     mbedtls_base64_decode()
     mbedtls_mpi_write_string()
     mbedtls_dhm_calc_secret()
294 295
   * In the NET module, all "int" and "int *" arguments for file descriptors
     changed type to "mbedtls_net_context *".
296
   * net_accept() gained new arguments for the size of the client_ip buffer.
297 298
   * In the threading layer, mbedtls_mutex_init() and mbedtls_mutex_free() now
     return void.
299 300
   * ecdsa_write_signature() gained an addtional md_alg argument and
     ecdsa_write_signature_det() was deprecated.
301
   * pk_sign() no longer accepts md_alg == POLARSSL_MD_NONE with ECDSA.
302 303
   * Last argument of x509_crt_check_key_usage() and
     mbedtls_x509write_crt_set_key_usage() changed from int to unsigned.
304 305 306
   * test_ca_list (from certs.h) is renamed to test_cas_pem and is only
     available if POLARSSL_PEM_PARSE_C is defined (it never worked without).
   * Test certificates in certs.c are no longer guaranteed to be nul-terminated
307
     strings; use the new *_len variables instead of strlen().
308 309 310
   * Functions mbedtls_x509_xxx_parse(), mbedtls_pk_parse_key(),
     mbedtls_pk_parse_public_key() and mbedtls_dhm_parse_dhm() now expect the
     length parameter to include the terminating null byte for PEM input.
311
   * Signature of mpi_mul_mpi() changed to make the last argument unsigned
312 313
   * calloc() is now used instead of malloc() everywhere. API of platform
     layer and the memory_buffer_alloc module changed accordingly.
314
     (Thanks to Mansour Moufid for helping with the replacement.)
315 316
   * Change SSL_DISABLE_RENEGOTIATION config.h flag to SSL_RENEGOTIATION
     (support for renegotiation now needs explicit enabling in config.h).
317 318
   * Split MBEDTLS_HAVE_TIME into MBEDTLS_HAVE_TIME and MBEDTLS_HAVE_TIME_DATE
     in config.h
319 320
   * net_connect() and net_bind() have a new 'proto' argument to choose
     between TCP and UDP, using the macros NET_PROTO_TCP or NET_PROTO_UDP.
321
     Their 'port' argument type is changed to a string.
322 323 324
   * Some constness fixes

Removals
325
   * Removed mbedtls_ecp_group_read_string(). Only named groups are supported.
326 327
   * Removed mbedtls_ecp_sub() and mbedtls_ecp_add(), use
     mbedtls_ecp_muladd().
328 329 330
   * Removed individual mdX_hmac, shaX_hmac, mdX_file and shaX_file functions
     (use generic functions from md.h)
   * Removed mbedtls_timing_msleep(). Use mbedtls_net_usleep() or a custom
331
     waiting function.
332
   * Removed test DHM parameters from the test certs module.
333 334 335 336 337 338 339 340 341 342 343
   * Removed the PBKDF2 module (use PKCS5).
   * Removed POLARSSL_ERROR_STRERROR_BC (use mbedtls_strerror()).
   * Removed compat-1.2.h (helper for migrating from 1.2 to 1.3).
   * Removed openssl.h (very partial OpenSSL compatibility layer).
   * Configuration options POLARSSL_HAVE_LONGLONG was removed (now always on).
   * Configuration options POLARSSL_HAVE_INT8 and POLARSSL_HAVE_INT16 have
     been removed (compiler is required to support 32-bit operations).
   * Configuration option POLARSSL_HAVE_IPV6 was removed (always enabled).
   * Removed test program o_p_test, the script compat.sh does more.
   * Removed test program ssl_test, superseded by ssl-opt.sh.
   * Removed helper script active-config.pl
344 345 346 347

New deprecations
   * md_init_ctx() is deprecated in favour of md_setup(), that adds a third
     argument (allowing memory savings if HMAC is not used)
348

349
Semi-API changes (technically public, morally private)
350 351
   * Renamed a few headers to include _internal in the name. Those headers are
     not supposed to be included by users.
352 353
   * Changed md_info_t into an opaque structure (use md_get_xxx() accessors).
   * Changed pk_info_t into an opaque structure.
354 355
   * Changed cipher_base_t into an opaque structure.
   * Removed sig_oid2 and rename sig_oid1 to sig_oid in x509_crt and x509_crl.
356
   * x509_crt.key_usage changed from unsigned char to unsigned int.
357 358
   * Removed r and s from ecdsa_context
   * Removed mode from des_context and des3_context
359

360
Default behavior changes
361
   * The default minimum TLS version is now TLS 1.0.
362 363
   * RC4 is now blacklisted by default in the SSL/TLS layer, and excluded from the
     default ciphersuite list returned by ssl_list_ciphersuites()
364 365
   * Support for receiving SSLv2 ClientHello is now disabled by default at
     compile time.
366
   * The default authmode for SSL/TLS clients is now REQUIRED.
367 368 369
   * Support for RSA_ALT contexts in the PK layer is now optional. Since is is
     enabled in the default configuration, this is only noticeable if using a
     custom config.h
370
   * Default DHM parameters server-side upgraded from 1024 to 2048 bits.
371 372
   * A minimum RSA key size of 2048 bits is now enforced during ceritificate
     chain verification.
373
   * Negotiation of truncated HMAC is now disabled by default on server too.
374 375 376 377 378 379
   * The following functions are now case-sensitive:
     mbedtls_cipher_info_from_string()
     mbedtls_ecp_curve_info_from_name()
     mbedtls_md_info_from_string()
     mbedtls_ssl_ciphersuite_from_string()
     mbedtls_version_check_feature()
380

381
Requirement changes
382
   * The minimum MSVC version required is now 2010 (better C99 support).
383
   * The NET layer now unconditionnaly relies on getaddrinfo() and select().
384
   * Compiler is required to support C99 types such as long long and uint32_t.
385

386
API changes from the 1.4 preview branch
387 388
   * ssl_set_bio_timeout() was removed, split into mbedtls_ssl_set_bio() with
     new prototype, and mbedtls_ssl_set_read_timeout().
389 390 391 392
   * The following functions now return void:
     mbedtls_ssl_conf_transport()
     mbedtls_ssl_conf_max_version()
     mbedtls_ssl_conf_min_version()
393 394 395 396
   * DTLS no longer hard-depends on TIMING_C, but uses a callback interface
     instead, see mbedtls_ssl_set_timer_cb(), with the Timing module providing
     an example implementation, see mbedtls_timing_delay_context and
     mbedtls_timing_set/get_delay().
397 398
   * With UDP sockets, it is no longer necessary to call net_bind() again
     after a successful net_accept().
399

400 401 402
Changes
   * mbedtls_ctr_drbg_random() and mbedtls_hmac_drbg_random() are now
     thread-safe if MBEDTLS_THREADING_C is enabled.
403 404
   * Reduced ROM fooprint of SHA-256 and added an option to reduce it even
     more (at the expense of performance) MBEDTLS_SHA256_SMALLER.
405

406 407 408
= mbed TLS 1.3 branch

Security
409
   * With authmode set to SSL_VERIFY_OPTIONAL, verification of keyUsage and
410 411
     extendedKeyUsage on the leaf certificate was lost (results not accessible
     via ssl_get_verify_results()).
412 413
   * Add countermeasure against "Lucky 13 strikes back" cache-based attack,
     https://dl.acm.org/citation.cfm?id=2714625
414 415

Features
416 417
   * Improve ECC performance by using more efficient doubling formulas
     (contributed by Peter Dettman).
418
   * Add x509_crt_verify_info() to display certificate verification results.
419
   * Add support for reading DH parameters with privateValueLength included
420
     (contributed by Daniel Kahn Gillmor).
421 422
   * Add support for bit strings in X.509 names (request by Fredrik Axelsson).
   * Add support for id-at-uniqueIdentifier in X.509 names.
423 424 425 426
   * Add support for overriding snprintf() (except on Windows) and exit() in
     the platform layer.
   * Add an option to use macros instead of function pointers in the platform
     layer (helps get rid of unwanted references).
427 428
   * Improved Makefiles for Windows targets by fixing library targets and making
     cross-compilation easier (thanks to Alon Bar-Lev).
429 430 431 432 433 434
   * The benchmark program also prints heap usage for public-key primitives
     if POLARSSL_MEMORY_BUFFER_ALLOC_C and POLARSSL_MEMORY_DEBUG are defined.
   * New script ecc-heap.sh helps measuring the impact of ECC parameters on
     speed and RAM (heap only for now) usage.
   * New script memory.sh helps measuring the ROM and RAM requirements of two
     reduced configurations (PSK-CCM and NSA suite B).
435
   * Add config flag POLARSSL_DEPRECATED_WARNING (off by default) to produce
436
     warnings on use of deprecated functions (with GCC and Clang only).
437
   * Add config flag POLARSSL_DEPRECATED_REMOVED (off by default) to produce
438
     errors on use of deprecated functions.
439 440

Bugfix
441
   * Fix compile errors with PLATFORM_NO_STD_FUNCTIONS.
442
   * Fix compile error with PLATFORM_EXIT_ALT (thanks to Rafał Przywara).
443 444
   * Fix bug in entropy.c when THREADING_C is also enabled that caused
     entropy_free() to crash (thanks to Rafał Przywara).
445 446
   * Fix memory leak when gcm_setkey() and ccm_setkey() are used more than
     once on the same context.
447 448
   * Fix bug in ssl_mail_client when password is longer that username (found
     by Bruno Pape).
449 450
   * Fix undefined behaviour (memcmp( NULL, NULL, 0 );) in X.509 modules
     (detected by Clang's 3.6 UBSan).
451 452
   * mpi_size() and mpi_msb() would segfault when called on an mpi that is
     initialized but not set (found by pravic).
453 454
   * Fix detection of support for getrandom() on Linux (reported by syzzer) by
     doing it at runtime (using uname) rather that compile time.
455
   * Fix handling of symlinks by "make install" (found by Gaël PORTAY).
456 457 458
   * Fix potential NULL pointer dereference (not trigerrable remotely) when
     ssl_write() is called before the handshake is finished (introduced in
     1.3.10) (first reported by Martin Blumenstingl).
459 460
   * Fix bug in pk_parse_key() that caused some valid private EC keys to be
     rejected.
461
   * Fix bug in Via Padlock support (found by Nikos Mavrogiannopoulos).
462
   * Fix thread safety bug in RSA operations (found by Fredrik Axelsson).
463 464
   * Fix hardclock() (only used in the benchmarking program) with some
     versions of mingw64 (found by kxjhlele).
465
   * Fix warnings from mingw64 in timing.c (found by kxjklele).
466 467
   * Fix potential unintended sign extension in asn1_get_len() on 64-bit
     platforms.
468
   * Fix potential memory leak in ssl_set_psk() (found by Mansour Moufid).
469 470 471
   * Fix compile error when POLARSSL_SSL_DISABLE_RENEGOTATION and
     POLARSSL_SSL_SSESSION_TICKETS where both enabled in config.h (introduced
     in 1.3.10).
472
   * Add missing extern "C" guard in aesni.h (reported by amir zamani).
473 474
   * Add missing dependency on SHA-256 in some x509 programs (reported by
     Gergely Budai).
475 476
   * Fix bug related to ssl_set_curves(): the client didn't check that the
     curve picked by the server was actually allowed.
477 478

Changes
479 480 481
   * Remove bias in mpi_gen_prime (contributed by Pascal Junod).
   * Remove potential sources of timing variations (some contributed by Pascal
     Junod).
482
   * Options POLARSSL_HAVE_INT8 and POLARSSL_HAVE_INT16 are deprecated.
483
   * Enabling POLARSSL_NET_C without POLARSSL_HAVE_IPV6 is deprecated.
484
   * compat-1.2.h and openssl.h are deprecated.
485
   * Adjusting/overriding CFLAGS and LDFLAGS with the make build system is now
486 487
     more flexible (warning: OFLAGS is not used any more) (see the README)
     (contributed by Alon Bar-Lev).
488
   * ssl_set_own_cert() no longer calls pk_check_pair() since the
489
     performance impact was bad for some users (this was introduced in 1.3.10).
490 491
   * Move from SHA-1 to SHA-256 in example programs using signatures
     (suggested by Thorsten Mühlfelder).
492 493 494 495
   * Remove some unneeded inclusions of header files from the standard library
     "minimize" others (eg use stddef.h if only size_t is needed).
   * Change #include lines in test files to use double quotes instead of angle
     brackets for uniformity with the rest of the code.
496
   * Remove dependency on sscanf() in X.509 parsing modules.
497

498
= mbed TLS 1.3.10 released 2015-02-09
499 500
Security
   * NULL pointer dereference in the buffer-based allocator when the buffer is
501
     full and polarssl_free() is called (found by Mark Hasemeyer)
502 503
     (only possible if POLARSSL_MEMORY_BUFFER_ALLOC_C is enabled, which it is
     not by default).
504
   * Fix remotely-triggerable uninitialised pointer dereference caused by
505
     crafted X.509 certificate (TLS server is not affected if it doesn't ask for a
506
     client certificate) (found using Codenomicon Defensics).
507
   * Fix remotely-triggerable memory leak caused by crafted X.509 certificates
508 509 510 511
     (TLS server is not affected if it doesn't ask for a client certificate)
     (found using Codenomicon Defensics).
   * Fix potential stack overflow while parsing crafted X.509 certificates
     (TLS server is not affected if it doesn't ask for a client certificate)
512
     (found using Codenomicon Defensics).
513 514 515
   * Fix timing difference that could theoretically lead to a
     Bleichenbacher-style attack in the RSA and RSA-PSK key exchanges
     (reported by Sebastian Schinzel).
516

517
Features
518 519 520
   * Add support for FALLBACK_SCSV (draft-ietf-tls-downgrade-scsv).
   * Add support for Extended Master Secret (draft-ietf-tls-session-hash).
   * Add support for Encrypt-then-MAC (RFC 7366).
521
   * Add function pk_check_pair() to test if public and private keys match.
522
   * Add x509_crl_parse_der().
523 524
   * Add compile-time option POLARSSL_X509_MAX_INTERMEDIATE_CA to limit the
     length of an X.509 verification chain.
525
   * Support for renegotiation can now be disabled at compile-time
526
   * Support for 1/n-1 record splitting, a countermeasure against BEAST.
Paul Bakker's avatar
Paul Bakker committed
527
   * Certificate selection based on signature hash, preferring SHA-1 over SHA-2
528
     for pre-1.2 clients when multiple certificates are available.
529 530
   * Add support for getrandom() syscall on recent Linux kernels with Glibc or
     a compatible enough libc (eg uClibc).
531
   * Add ssl_set_arc4_support() to make it easier to disable RC4 at runtime
532
     while using the default ciphersuite list.
533 534
   * Added new error codes and debug messages about selection of
     ciphersuite/certificate.
535

536 537 538
Bugfix
   * Stack buffer overflow if ctr_drbg_update() is called with too large
     add_len (found by Jean-Philippe Aumasson) (not triggerable remotely).
539 540
   * Possible buffer overflow of length at most POLARSSL_MEMORY_ALIGN_MULTIPLE
     if memory_buffer_alloc_init() was called with buf not aligned and len not
541 542
     a multiple of POLARSSL_MEMORY_ALIGN_MULTIPLE (not triggerable remotely).
   * User set CFLAGS were ignored by Cmake with gcc (introduced in 1.3.9, found
543
     by Julian Ospald).
544
   * Fix potential undefined behaviour in Camellia.
545 546
   * Fix potential failure in ECDSA signatures when POLARSSL_ECP_MAX_BITS is a
     multiple of 8 (found by Gergely Budai).
547 548
   * Fix unchecked return code in x509_crt_parse_path() on Windows (found by
     Peter Vaskovic).
549
   * Fix assembly selection for MIPS64 (thanks to James Cowgill).
550 551
   * ssl_get_verify_result() now works even if the handshake was aborted due
     to a failed verification (found by Fredrik Axelsson).
552 553 554 555
   * Skip writing and parsing signature_algorithm extension if none of the
     key exchanges enabled needs certificates. This fixes a possible interop
     issue with some servers when a zero-length extension was sent. (Reported
     by Peter Dettman.)
556 557
   * On a 0-length input, base64_encode() did not correctly set output length
     (found by Hendrik van den Boogaard).
558

559 560 561
Changes
   * Use deterministic nonces for AEAD ciphers in TLS by default (possible to
     switch back to random with POLARSSL_SSL_AEAD_RANDOM_IV in config.h).
562
   * Blind RSA private operations even when POLARSSL_RSA_NO_CRT is defined.
563
   * ssl_set_own_cert() now returns an error on key-certificate mismatch.
564
   * Forbid repeated extensions in X.509 certificates.
565
   * debug_print_buf() now prints a text view in addition to hexadecimal.
566 567
   * A specific error is now returned when there are ciphersuites in common
     but none of them is usable due to external factors such as no certificate
568
     with a suitable (extended)KeyUsage or curve or no PSK set.
569
   * It is now possible to disable negotiation of truncated HMAC server-side
570
     at runtime with ssl_set_truncated_hmac().
571 572
   * Example programs for SSL client and server now disable SSLv3 by default.
   * Example programs for SSL client and server now disable RC4 by default.
573
   * Use platform.h in all test suites and programs.
574

Paul Bakker's avatar
Paul Bakker committed
575
= PolarSSL 1.3.9 released 2014-10-20
576 577 578
Security
   * Lowest common hash was selected from signature_algorithms extension in
     TLS 1.2 (found by Darren Bane) (introduced in 1.3.8).
579
   * Remotely-triggerable memory leak when parsing some X.509 certificates
Paul Bakker's avatar
Paul Bakker committed
580 581
     (server is not affected if it doesn't ask for a client certificate)
     (found using Codenomicon Defensics).
582
   * Remotely-triggerable memory leak when parsing crafted ClientHello
Paul Bakker's avatar
Paul Bakker committed
583 584
     (not affected if ECC support was compiled out) (found using Codenomicon
     Defensics).
585

586 587
Bugfix
   * Support escaping of commas in x509_string_to_names()
588
   * Fix compile error in ssl_pthread_server (found by Julian Ospald).
589
   * Fix net_accept() regarding non-blocking sockets (found by Luca Pesce).
590
   * Don't print uninitialised buffer in ssl_mail_client (found by Marc Abel).
591
   * Fix warnings from Clang's scan-build (contributed by Alfred Klomp).
592 593
   * Fix compile error in timing.c when POLARSSL_NET_C and POLARSSL_SELFTEST
     are defined but not POLARSSL_HAVE_TIME (found by Stephane Di Vito).
594
   * Remove non-existent file from VS projects (found by Peter Vaskovic).
595 596
   * ssl_read() could return non-application data records on server while
     renegotation was pending, and on client when a HelloRequest was received.
597 598
   * Server-initiated renegotiation would fail with non-blocking I/O if the
     write callback returned WANT_WRITE when requesting renegotiation.
599 600
   * ssl_close_notify() could send more than one message in some circumstances
     with non-blocking I/O.
601
   * Fix compiler warnings on iOS (found by Sander Niemeijer).
602
   * x509_crt_parse() did not increase total_failed on PEM error
603
   * Fix compile error with armcc in mpi_is_prime()
604 605
   * Fix potential bad read in parsing ServerHello (found by Adrien
     Vialletelle).
606

607 608 609
Changes
   * Ciphersuites using SHA-256 or SHA-384 now require TLS 1.x (there is no
     standard defining how to use SHA-2 with SSL 3.0).
610 611
   * Ciphersuites using RSA-PSK key exchange new require TLS 1.x (the spec is
     ambiguous on how to encode some packets with SSL 3.0).
612 613
   * Made buffer size in pk_write_(pub)key_pem() more dynamic, eg smaller if
     RSA is disabled, larger if POLARSSL_MPI_MAX_SIZE is larger.
614 615
   * ssl_read() now returns POLARSSL_ERR_NET_WANT_READ rather than
     POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE on harmless alerts.
616 617
   * POLARSSL_MPI_MAX_SIZE now defaults to 1024 in order to allow 8192 bits
     RSA keys.
618
   * Accept spaces at end of line or end of buffer in base64_decode().
619 620
   * X.509 certificates with more than one AttributeTypeAndValue per
     RelativeDistinguishedName are not accepted any more.
621

Paul Bakker's avatar
Paul Bakker committed
622
= PolarSSL 1.3.8 released 2014-07-11
623 624 625 626 627
Security
   * Fix length checking for AEAD ciphersuites (found by Codenomicon).
     It was possible to crash the server (and client) using crafted messages
     when a GCM suite was chosen.

Paul Bakker's avatar
Paul Bakker committed
628 629 630
Features
   * Add CCM module and cipher mode to Cipher Layer
   * Support for CCM and CCM_8 ciphersuites
631 632
   * Support for parsing and verifying RSASSA-PSS signatures in the X.509
     modules (certificates, CRLs and CSRs).
633
   * Blowfish in the cipher layer now supports variable length keys.
634 635
   * Add example config.h for PSK with CCM, optimized for low RAM usage.
   * Optimize for RAM usage in example config.h for NSA Suite B profile.
636 637
   * Add POLARSSL_REMOVE_ARC4_CIPHERSUITES to allow removing RC4 ciphersuites
     from the default list (inactive by default).
Paul Bakker's avatar
Paul Bakker committed
638 639
   * Add server-side enforcement of sent renegotiation requests
     (ssl_set_renegotiation_enforced())
640 641
   * Add SSL_CIPHERSUITES config.h flag to allow specifying a list of
     ciphersuites to use and save some memory if the list is small.
Paul Bakker's avatar
Paul Bakker committed
642

643 644 645
Changes
   * Add LINK_WITH_PTHREAD option in CMake for explicit linking that is
     required on some platforms (e.g. OpenBSD)
646 647
   * Migrate zeroizing of data to polarssl_zeroize() instead of memset()
     against unwanted compiler optimizations
648
   * md_list() now returns hashes strongest first
649 650
   * Selection of hash for signing ServerKeyExchange in TLS 1.2 now picks
     strongest offered by client.
Paul Bakker's avatar
Paul Bakker committed
651 652
   * All public contexts have _init() and _free() functions now for simpler
     usage pattern
653

654 655
Bugfix
   * Fix in debug_print_msg()
Paul Bakker's avatar
Paul Bakker committed
656
   * Enforce alignment in the buffer allocator even if buffer is not aligned
Paul Bakker's avatar
Paul Bakker committed
657
   * Remove less-than-zero checks on unsigned numbers
658 659
   * Stricter check on SSL ClientHello internal sizes compared to actual packet
     size (found by TrustInSoft)
660 661 662 663
   * Fix WSAStartup() return value check (found by Peter Vaskovic)
   * Other minor issues (found by Peter Vaskovic)
   * Fix symlink command for cross compiling with CMake (found by Andre
     Heinecke)
664
   * Fix DER output of gen_key app (found by Gergely Budai)
665
   * Very small records were incorrectly rejected when truncated HMAC was in
666 667
     use with some ciphersuites and versions (RC4 in all versions, CBC with
     versions < TLS 1.1).
668 669 670 671
   * Very large records using more than 224 bytes of padding were incorrectly
     rejected with CBC-based ciphersuites and TLS >= 1.1
   * Very large records using less padding could cause a buffer overread of up
     to 32 bytes with CBC-based ciphersuites and TLS >= 1.1
672 673
   * Restore ability to use a v1 cert as a CA if trusted locally. (This had
     been removed in 1.3.6.)
674 675 676
   * Restore ability to locally trust a self-signed cert that is not a proper
     CA for use as an end entity certificate. (This had been removed in
     1.3.6.)
677
   * Fix preprocessor checks for bn_mul PPC asm (found by Barry K. Nathan).
678 679
   * Use \n\t rather than semicolons for bn_mul asm, since some assemblers
     interpret semicolons as comment delimiters (found by Barry K. Nathan).
680 681
   * Fix off-by-one error in parsing Supported Point Format extension that
     caused some handshakes to fail.
682 683 684
   * Fix possible miscomputation of the premaster secret with DHE-PSK key
     exchange that caused some handshakes to fail with other implementations.
     (Failure rate <= 1/255 with common DHM moduli.)
685
   * Disable broken Sparc64 bn_mul assembly (found by Florian Obser).
686 687
   * Fix base64_decode() to return and check length correctly (in case of
     tight buffers)
688 689
   * Fix mpi_write_string() to write "00" as hex output for empty MPI (found
     by Hui Dong)
690

691
= PolarSSL 1.3.7 released on 2014-05-02
692
Features
693 694
   * debug_set_log_mode() added to determine raw or full logging
   * debug_set_threshold() added to ignore messages over threshold level
695 696
   * version_check_feature() added to check for compile-time options at
     run-time
697

698 699 700
Changes
   * POLARSSL_CONFIG_OPTIONS has been removed. All values are individually
     checked and filled in the relevant module headers
701
   * Debug module only outputs full lines instead of parts
702
   * Better support for the different Attribute Types from IETF PKIX (RFC 5280)
703
   * AES-NI now compiles with "old" assemblers too
704
   * Ciphersuites based on RC4 now have the lowest priority by default
705

Paul Bakker's avatar
Paul Bakker committed
706 707 708
Bugfix
   * Only iterate over actual certificates in ssl_write_certificate_request()
     (found by Matthew Page)
Paul Bakker's avatar
Paul Bakker committed
709 710
   * Typos in platform.c and pkcs11.c (found by Daniel Phillips and Steffan
     Karger)
711
   * cert_write app should use subject of issuer certificate as issuer of cert
712 713
   * Fix false reject in padding check in ssl_decrypt_buf() for CBC
     ciphersuites, for full SSL frames of data.
714 715
   * Improve interoperability by not writing extension length in ClientHello /
     ServerHello when no extensions are present (found by Matthew Page)
716
   * rsa_check_pubkey() now allows an E up to N
717
   * On OpenBSD, use arc4random_buf() instead of rand() to prevent warnings
718 719
   * mpi_fill_random() was creating numbers larger than requested on
     big-endian platform when size was not an integer number of limbs
720
   * Fix dependencies issues in X.509 test suite.
721
   * Some parts of ssl_tls.c were compiled even when the module was disabled.
722
   * Fix detection of DragonflyBSD in net.c (found by Markus Pfeiffer)
723 724
   * Fix detection of Clang on some Apple platforms with CMake
     (found by Barry K. Nathan)
Paul Bakker's avatar
Paul Bakker committed
725

Paul Bakker's avatar
Paul Bakker committed
726
= PolarSSL 1.3.6 released on 2014-04-11
727

728 729
Features
   * Support for the ALPN SSL extension
730
   * Add option 'use_dev_random' to gen_key application
731
   * Enable verification of the keyUsage extension for CA and leaf
732
     certificates (POLARSSL_X509_CHECK_KEY_USAGE)
733 734
   * Enable verification of the extendedKeyUsage extension
     (POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE)
735

736 737
Changes
   * x509_crt_info() now prints information about parsed extensions as well
738 739
   * pk_verify() now returns a specific error code when the signature is valid
     but shorter than the supplied length.
740
   * Use UTC time to check certificate validity.
741
   * Reject certificates with times not in UTC, per RFC 5280.
742

743 744 745
Security
   * Avoid potential timing leak in ecdsa_sign() by blinding modular division.
     (Found by Watson Ladd.)
746 747 748 749
   * The notAfter date of some certificates was no longer checked since 1.3.5.
     This affects certificates in the user-supplied chain except the top
     certificate. If the user-supplied chain contains only one certificates,
     it is not affected (ie, its notAfter date is properly checked).
750 751
   * Prevent potential NULL pointer dereference in ssl_read_record() (found by
     TrustInSoft)
752

753 754
Bugfix
   * The length of various ClientKeyExchange messages was not properly checked.
755
   * Some example server programs were not sending the close_notify alert.
756 757
   * Potential memory leak in mpi_exp_mod() when error occurs during
     calculation of RR.
758
   * Fixed malloc/free default #define in platform.c (found by Gergely Budai).
759 760
   * Fixed type which made POLARSSL_ENTROPY_FORCE_SHA256 uneffective (found by
     Gergely Budai).
761 762
   * Fix #include path in ecdsa.h which wasn't accepted by some compilers.
     (found by Gergely Budai)
763 764
   * Fix compile errors when POLARSSL_ERROR_STRERROR_BC is undefined (found by
     Shuo Chen).
765 766
   * oid_get_numeric_string() used to truncate the output without returning an
     error if the output buffer was just 1 byte too small.
767
   * dhm_parse_dhm() (hence dhm_parse_dhmfile()) did not set dhm->len.
768 769
   * Calling pk_debug() on an RSA-alt key would segfault.
   * pk_get_size() and pk_get_len() were off by a factor 8 for RSA-alt keys.
770 771
   * Potential buffer overwrite in pem_write_buffer() because of low length
     indication (found by Thijs Alkemade)
772 773
   * EC curves constants, which should be only in ROM since 1.3.3, were also
     stored in RAM due to missing 'const's (found by Gergely Budai).
774

775
= PolarSSL 1.3.5 released on 2014-03-26
Paul Bakker's avatar
Paul Bakker committed
776 777
Features
   * HMAC-DRBG as a separate module
778
   * Option to set the Curve preference order (disabled by default)
779
   * Single Platform compatilibity layer (for memory / printf / fprintf)
780
   * Ability to provide alternate timing implementation
781 782
   * Ability to force the entropy module to use SHA-256 as its basis
     (POLARSSL_ENTROPY_FORCE_SHA256)
783 784
   * Testing script ssl-opt.sh added for testing 'live' ssl option
     interoperability against OpenSSL and PolarSSL
785
   * Support for reading EC keys that use SpecifiedECDomain in some cases.
786
   * Entropy module now supports seed writing and reading
787 788 789

Changes
   * Deprecated the Memory layer
790 791
   * entropy_add_source(), entropy_update_manual() and entropy_gather()
     now thread-safe if POLARSSL_THREADING_C defined
792
   * Improvements to the CMake build system, contributed by Julian Ospald.
793 794
   * Work around a bug of the version of Clang shipped by Apple with Mavericks
     that prevented bignum.c from compiling. (Reported by Rafael Baptista.)
795 796
   * Revamped the compat.sh interoperatibility script to include support for
     testing against GnuTLS
797
   * Deprecated ssl_set_own_cert_rsa() and ssl_set_own_cert_rsa_alt()
798
   * Improvements to tests/Makefile, contributed by Oden Eriksson.
Paul Bakker's avatar
Paul Bakker committed
799

800 801
Security
   * Forbid change of server certificate during renegotiation to prevent
802
     "triple handshake" attack when authentication mode is 'optional' (the
803
     attack was already impossible when authentication is required).
804
   * Check notBefore timestamp of certificates and CRLs from the future.
805
   * Forbid sequence number wrapping
806
   * Fixed possible buffer overflow with overlong PSK
807 808
   * Possible remotely-triggered out-of-bounds memory access fixed (found by
     TrustInSoft)
809

810 811 812
Bugfix
   * ecp_gen_keypair() does more tries to prevent failure because of
     statistics
813
   * Fixed bug in RSA PKCS#1 v1.5 "reversed" operations
814
   * Fixed testing with out-of-source builds using cmake
815
   * Fixed version-major intolerance in server
816
   * Fixed CMake symlinking on out-of-source builds
817
   * Fixed dependency issues in test suite
818
   * Programs rsa_sign_pss and rsa_verify_pss were not using PSS since 1.3.0
819 820
   * Bignum's MIPS-32 assembly was used on MIPS-64, causing chaos. (Found by
     Alex Wilson.)
821 822
   * ssl_cache was creating entries when max_entries=0 if TIMING_C was enabled.
   * m_sleep() was sleeping twice too long on most Unix platforms.
823
   * Fixed bug with session tickets and non-blocking I/O in the unlikely case
Paul Bakker's avatar
Paul Bakker committed
824
     send() would return an EAGAIN error when sending the ticket.
825
   * ssl_cache was leaking memory when reusing a timed out entry containing a
Paul Bakker's avatar
Paul Bakker committed
826
     client certificate.
827
   * ssl_srv was leaking memory when client presented a timed out ticket
Paul Bakker's avatar
Paul Bakker committed
828
     containing a client certificate
829 830
   * ssl_init() was leaving a dirty pointer in ssl_context if malloc of
     out_ctr failed
831 832
   * ssl_handshake_init() was leaving dirty pointers in subcontexts if malloc
     of one of them failed
833
   * Fix typo in rsa_copy() that impacted PKCS#1 v2 contexts
834
   * x509_get_current_time() uses localtime_r() to prevent thread issues
835

Paul Bakker's avatar
Paul Bakker committed
836
= PolarSSL 1.3.4 released on 2014-01-27
837
Features
838
   * Support for the Koblitz curves: secp192k1, secp224k1, secp256k1
Paul Bakker's avatar
Paul Bakker committed
839
   * Support for RIPEMD-160
Paul Bakker's avatar
Paul Bakker committed
840
   * Support for AES CFB8 mode
841
   * Support for deterministic ECDSA (RFC 6979)
842 843 844 845

Bugfix
   * Potential memory leak in bignum_selftest()
   * Replaced expired test certificate
846
   * ssl_mail_client now terminates lines with CRLF, instead of LF
847 848
   * net module handles timeouts on blocking sockets better (found by Tilman
     Sauerbeck)
849 850 851
   * Assembly format fixes in bn_mul.h

Security
852 853
   * Missing MPI_CHK calls added around unguarded mpi calls (found by
     TrustInSoft)
854

Paul Bakker's avatar
Paul Bakker committed
855
= PolarSSL 1.3.3 released on 2013-12-31
856 857
Features
   * EC key generation support in gen_key app
858 859
   * Support for adhering to client ciphersuite order preference
     (POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE)
860
   * Support for Curve25519
861
   * Support for ECDH-RSA and ECDH-ECDSA key exchanges and ciphersuites
862
   * Support for IPv6 in the NET module
863
   * AES-NI support for AES, AES-GCM and AES key scheduling
864
   * SSL Pthread-based server example added (ssl_pthread_server)
865

866 867 868 869
Changes
   * gen_prime() speedup
   * Speedup of ECP multiplication operation
   * Relaxed some SHA2 ciphersuite's version requirements
870
   * Dropped use of readdir_r() instead of readdir() with threading support
871
   * More constant-time checks in the RSA module
872
   * Split off curves from ecp.c into ecp_curves.c
873
   * Curves are now stored fully in ROM
874
   * Memory usage optimizations in ECP module
875
   * Removed POLARSSL_THREADING_DUMMY
876

877
Bugfix
878
   * Fixed bug in mpi_set_bit() on platforms where t_uint is wider than int
879
   * Fixed X.509 hostname comparison (with non-regular characters)
880
   * SSL now gracefully handles missing RNG
881 882
   * Missing defines / cases for RSA_PSK key exchange
   * crypt_and_hash app checks MAC before final decryption
883
   * Potential memory leak in ssl_ticket_keys_init()
884
   * Memory leak in benchmark application
885
   * Fixed x509_crt_parse_path() bug on Windows platforms
886 887
   * Added missing MPI_CHK() around some statements in mpi_div_mpi() (found by
     TrustInSoft)
888 889
   * Fixed potential overflow in certificate size verification in
     ssl_write_certificate() (found by TrustInSoft)
890

891 892 893 894
Security
   * Possible remotely-triggered out-of-bounds memory access fixed (found by
     TrustInSoft)

Paul Bakker's avatar
Paul Bakker committed
895
= PolarSSL 1.3.2 released on 2013-11-04
896 897
Features
   * PK tests added to test framework
898
   * Added optional optimization for NIST MODP curves (POLARSSL_ECP_NIST_OPTIM)
899
   * Support for Camellia-GCM mode and ciphersuites
900

901 902
Changes
   * Padding checks in cipher layer are now constant-time
903
   * Value comparisons in SSL layer are now constant-time
904
   * Support for serialNumber, postalAddress and postalCode in X509 names
905
   * SSL Renegotiation was refactored
906

907
Bugfix
908
   * More stringent checks in cipher layer
909
   * Server does not send out extensions not advertised by client
910
   * Prevent possible alignment warnings on casting from char * to 'aligned *'
911
   * Misc fixes and additions to dependency checks
Paul Bakker's avatar
Paul Bakker committed
912
   * Const correctness
913
   * cert_write with selfsign should use issuer_name as subject_name
914
   * Fix ECDSA corner case: missing reduction mod N (found by DualTachyon)
915
   * Defines to handle UEFI environment under MSVC
916
   * Server-side initiated renegotiations send HelloRequest
917

Paul Bakker's avatar
Paul Bakker committed
918
= PolarSSL 1.3.1 released on 2013-10-15
919 920
Features
   * Support for Brainpool curves and TLS ciphersuites (RFC 7027)
921
   * Support for ECDHE-PSK key-exchange and ciphersuites
922
   * Support for RSA-PSK key-exchange and ciphersuites
923

924 925
Changes
   * RSA blinding locks for a smaller amount of time
926
   * TLS compression only allocates working buffer once
927
   * Introduced POLARSSL_HAVE_READDIR_R for systems without it
928
   * config.h is more script-friendly
929 930 931 932 933

Bugfix
   * Missing MSVC defines added
   * Compile errors with POLARSSL_RSA_NO_CRT
   * Header files with 'polarssl/'
934
   * Const correctness
935
   * Possible naming collision in dhm_context
Paul Bakker's avatar
Paul Bakker committed
936
   * Better support for MSVC
937
   * threading_set_alt() name
938
   * Added missing x509write_crt_set_version()
939

Paul Bakker's avatar
Paul Bakker committed
940
= PolarSSL 1.3.0 released on 2013-10-01
941 942 943 944 945
Features
   * Elliptic Curve Cryptography module added
   * Elliptic Curve Diffie Hellman module added
   * Ephemeral Elliptic Curve Diffie Hellman support for SSL/TLS
    (ECDHE-based ciphersuites)
946 947
   * Ephemeral Elliptic Curve Digital Signature Algorithm support for SSL/TLS
    (ECDSA-based ciphersuites)
948
   * Ability to specify allowed ciphersuites based on the protocol version.
949
   * PSK and DHE-PSK based ciphersuites added
950 951
   * Memory allocation abstraction layer added
   * Buffer-based memory allocator added (no malloc() / free() / HEAP usage)
952
   * Threading abstraction layer added (dummy / pthread / alternate)
Paul Bakker's avatar
Paul Bakker committed
953
   * Public Key abstraction layer added
954 955 956 957
   * Parsing Elliptic Curve keys
   * Parsing Elliptic Curve certificates
   * Support for max_fragment_length extension (RFC 6066)
   * Support for truncated_hmac extension (RFC 6066)
958 959
   * Support for zeros-and-length (ANSI X.923) padding, one-and-zeros
     (ISO/IEC 7816-4) padding and zero padding in the cipher layer
960
   * Support for session tickets (RFC 5077)
961 962
   * Certificate Request (CSR) generation with extensions (key_usage,
     ns_cert_type)
963 964
   * X509 Certificate writing with extensions (basic_constraints,
     issuer_key_identifier, etc)
965
   * Optional blinding for RSA, DHM and EC
966 967
   * Support for multiple active certificate / key pairs in SSL servers for
   	 the same host (Not to be confused with SNI!)
968

969
Changes
970 971
   * Ability to enable / disable SSL v3 / TLS 1.0 / TLS 1.1 / TLS 1.2
     individually
972 973
   * Introduced separate SSL Ciphersuites module that is based on
     Cipher and MD information
974 975
   * Internals for SSL module adapted to have separate IV pointer that is
     dynamically set (Better support for hardware acceleration)
976 977
   * Moved all OID functionality to a separate module. RSA function
     prototypes for the RSA sign and verify functions changed as a result
978
   * Split up the GCM module into a starts/update/finish cycle
979 980
   * Client and server now filter sent and accepted ciphersuites on minimum
     and maximum protocol version
981
   * Ability to disable server_name extension (RFC 6066)
982 983
   * Renamed error_strerror() to the less conflicting polarssl_strerror()
     (Ability to keep old as well with POLARSSL_ERROR_STRERROR_BC)
984
   * SHA2 renamed to SHA256, SHA4 renamed to SHA512 and functions accordingly
985
   * All RSA operations require a random generator for blinding purposes
986 987
   * X509 core refactored
   * x509_crt_verify() now case insensitive for cn (RFC 6125 6.4)
Paul Bakker's avatar
Paul Bakker committed
988
   * Also compiles / runs without time-based functions (!POLARSSL_HAVE_TIME)
989 990
   * Support faulty X509 v1 certificates with extensions
     (POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3)
991

992
Bugfix
993
   * Fixed parse error in ssl_parse_certificate_request()
994
   * zlib compression/decompression skipped on empty blocks
995
   * Support for AIX header locations in net.c module
996
   * Fixed file descriptor leaks
997

998 999 1000 1001
Security
   * RSA blinding on CRT operations to counter timing attacks
     (found by Cyril Arnaud and Pierre-Alain Fouque)

1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062

= Version 1.2.14 released 2015-05-??

Security
   * Fix potential invalid memory read in the server, that allows a client to
     crash it remotely (found by Caj Larsson).
   * Fix potential invalid memory read in certificate parsing, that allows a
     client to crash the server remotely if client authentication is enabled
     (found using Codenomicon Defensics).
   * Add countermeasure against "Lucky 13 strikes back" cache-based attack,
     https://dl.acm.org/citation.cfm?id=2714625

Bugfix
   * Fix bug in Via Padlock support (found by Nikos Mavrogiannopoulos).
   * Fix hardclock() (only used in the benchmarking program) with some
     versions of mingw64 (found by kxjhlele).
   * Fix warnings from mingw64 in timing.c (found by kxjklele).
   * Fix potential unintended sign extension in asn1_get_len() on 64-bit
     platforms (found with Coverity Scan).

= Version 1.2.13 released 2015-02-16
Note: Although PolarSSL has been renamed to mbed TLS, no changes reflecting
      this will be made in the 1.2 branch at this point.

Security
   * Fix remotely-triggerable uninitialised pointer dereference caused by
     crafted X.509 certificate (TLS server is not affected if it doesn't ask
     for a client certificate) (found using Codenomicon Defensics).
   * Fix remotely-triggerable memory leak caused by crafted X.509 certificates
     (TLS server is not affected if it doesn't ask for a client certificate)
     (found using Codenomicon Defensics).
   * Fix potential stack overflow while parsing crafted X.509 certificates
     (TLS server is not affected if it doesn't ask for a client certificate)
     found using Codenomicon Defensics).
   * Fix buffer overread of size 1 when parsing crafted X.509 certificates
     (TLS server is not affected if it doesn't ask for a client certificate).

Bugfix
   * Fix potential undefined behaviour in Camellia.
   * Fix memory leaks in PKCS#5 and PKCS#12.
   * Stack buffer overflow if ctr_drbg_update() is called with too large
     add_len (found by Jean-Philippe Aumasson) (not triggerable remotely).
   * Fix bug in MPI/bignum on s390/s390x (reported by Dan Horák) (introduced
     in 1.2.12).
   * Fix unchecked return code in x509_crt_parse_path() on Windows (found by
     Peter Vaskovic).
   * Fix assembly selection for MIPS64 (thanks to James Cowgill).
   * ssl_get_verify_result() now works even if the handshake was aborted due
     to a failed verification (found by Fredrik Axelsson).
   * Skip writing and parsing signature_algorithm extension if none of the
     key exchanges enabled needs certificates. This fixes a possible interop
     issue with some servers when a zero-length extension was sent. (Reported
     by Peter Dettman.)
   * On a 0-length input, base64_encode() did not correctly set output length
     (found by Hendrik van den Boogaard).

Changes
   * Blind RSA private operations even when POLARSSL_RSA_NO_CRT is defined.
   * Forbid repeated extensions in X.509 certificates.
   * Add compile-time option POLARSSL_X509_MAX_INTERMEDIATE_CA to limit the
     length of an X.509 verification chain (default = 8).
1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089
= Version 1.2.12 released 2014-10-24

Security
   * Remotely-triggerable memory leak when parsing some X.509 certificates
     (server is not affected if it doesn't ask for a client certificate).
     (Found using Codenomicon Defensics.)

Bugfix
   * Fix potential bad read in parsing ServerHello (found by Adrien
     Vialletelle).
   * ssl_close_notify() could send more than one message in some circumstances
     with non-blocking I/O.
   * x509_crt_parse() did not increase total_failed on PEM error
   * Fix compiler warnings on iOS (found by Sander Niemeijer).
   * Don't print uninitialised buffer in ssl_mail_client (found by Marc Abel).
   * Fix net_accept() regarding non-blocking sockets (found by Luca Pesce).
   * ssl_read() could return non-application data records on server while
     renegotation was pending, and on client when a HelloRequest was received.
   * Fix warnings from Clang's scan-build (contributed by Alfred Klomp).

Changes
   * X.509 certificates with more than one AttributeTypeAndValue per
     RelativeDistinguishedName are not accepted any more.
   * ssl_read() now returns POLARSSL_ERR_NET_WANT_READ rather than
     POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE on harmless alerts.
   * Accept spaces at end of line or end of buffer in base64_decode().

Paul Bakker's avatar
Paul Bakker committed
1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159
= Version 1.2.11 released 2014-07-11
Features
   * Entropy module now supports seed writing and reading

Changes
   * Introduced POLARSSL_HAVE_READDIR_R for systems without it
   * Improvements to the CMake build system, contributed by Julian Ospald.
   * Work around a bug of the version of Clang shipped by Apple with Mavericks
     that prevented bignum.c from compiling. (Reported by Rafael Baptista.)
   * Improvements to tests/Makefile, contributed by Oden Eriksson.
   * Use UTC time to check certificate validity.
   * Reject certificates with times not in UTC, per RFC 5280.
   * Migrate zeroizing of data to polarssl_zeroize() instead of memset()
     against unwanted compiler optimizations

Security
   * Forbid change of server certificate during renegotiation to prevent
     "triple handshake" attack when authentication mode is optional (the
     attack was already impossible when authentication is required).
   * Check notBefore timestamp of certificates and CRLs from the future.
   * Forbid sequence number wrapping
   * Prevent potential NULL pointer dereference in ssl_read_record() (found by
     TrustInSoft)
   * Fix length checking for AEAD ciphersuites (found by Codenomicon).
     It was possible to crash the server (and client) using crafted messages
     when a GCM suite was chosen.

Bugfix
   * Fixed X.509 hostname comparison (with non-regular characters)
   * SSL now gracefully handles missing RNG
   * crypt_and_hash app checks MAC before final decryption
   * Fixed x509_crt_parse_path() bug on Windows platforms
   * Added missing MPI_CHK() around some statements in mpi_div_mpi() (found by
     TrustInSoft)
   * Fixed potential overflow in certificate size verification in
     ssl_write_certificate() (found by TrustInSoft)
   * Fix ASM format in bn_mul.h
   * Potential memory leak in bignum_selftest()
   * Replaced expired test certificate
   * ssl_mail_client now terminates lines with CRLF, instead of LF
   * Fix bug in RSA PKCS#1 v1.5 "reversed" operations
   * Fixed testing with out-of-source builds using cmake
   * Fixed version-major intolerance in server
   * Fixed CMake symlinking on out-of-source builds
   * Bignum's MIPS-32 assembly was used on MIPS-64, causing chaos. (Found by
     Alex Wilson.)
   * ssl_init() was leaving a dirty pointer in ssl_context if malloc of
     out_ctr failed
   * ssl_handshake_init() was leaving dirty pointers in subcontexts if malloc
     of one of them failed
   * x509_get_current_time() uses localtime_r() to prevent thread issues
   * Some example server programs were not sending the close_notify alert.
   * Potential memory leak in mpi_exp_mod() when error occurs during
     calculation of RR.
   * Improve interoperability by not writing extension length in ClientHello
     when no extensions are present (found by Matthew Page)
   * rsa_check_pubkey() now allows an E up to N
   * On OpenBSD, use arc4random_buf() instead of rand() to prevent warnings
   * mpi_fill_random() was creating numbers larger than requested on
     big-endian platform when size was not an integer number of limbs
   * Fix detection of DragonflyBSD in net.c (found by Markus Pfeiffer)
   * Stricter check on SSL ClientHello internal sizes compared to actual packet
     size (found by TrustInSoft)
   * Fix preprocessor checks for bn_mul PPC asm (found by Barry K. Nathan).
   * Use \n\t rather than semicolons for bn_mul asm, since some assemblers
     interpret semicolons as comment delimiters (found by Barry K. Nathan).
   * Disable broken Sparc64 bn_mul assembly (found by Florian Obser).
   * Fix base64_decode() to return and check length correctly (in case of
     tight buffers)

Paul Bakker's avatar
Paul Bakker committed
1160 1161 1162 1163 1164 1165 1166 1167 1168
= Version 1.2.10 released 2013-10-07
Changes
   * Changed RSA blinding to a slower but thread-safe version

Bugfix
   * Fixed memory leak in RSA as a result of introduction of blinding
   * Fixed ssl_pkcs11_decrypt() prototype
   * Fixed MSVC project files

1169
= Version 1.2.9 released 2013-10-01
1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
Changes
   * x509_verify() now case insensitive for cn (RFC 6125 6.4)

Bugfix
   * Fixed potential memory leak when failing to resume a session
   * Fixed potential file descriptor leaks (found by Remi Gacogne)
   * Minor fixes

Security
   * Fixed potential heap buffer overflow on large hostname setting
   * Fixed potential negative value misinterpretation in load_file()
   * RSA blinding on CRT operations to counter timing attacks
     (found by Cyril Arnaud and Pierre-Alain Fouque)

1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231
= Version 1.2.8 released 2013-06-19
Features
   * Parsing of PKCS#8 encrypted private key files
   * PKCS#12 PBE and derivation functions
   * Centralized module option values in config.h to allow user-defined
     settings without editing header files by using POLARSSL_CONFIG_OPTIONS

Changes
   * HAVEGE random generator disabled by default
   * Internally split up x509parse_key() into a (PEM) handler function
     and specific DER parser functions for the PKCS#1 and unencrypted
     PKCS#8 private key formats
   * Added mechanism to provide alternative implementations for all
     symmetric cipher and hash algorithms (e.g. POLARSSL_AES_ALT in
	 config.h)
   * PKCS#5 module added. Moved PBKDF2 functionality inside and deprecated
     old PBKDF2 module

Bugfix
   * Secure renegotiation extension should only be sent in case client
     supports secure renegotiation
   * Fixed offset for cert_type list in ssl_parse_certificate_request()
   * Fixed const correctness issues that have no impact on the ABI
   * x509parse_crt() now better handles PEM error situations
   * ssl_parse_certificate() now calls x509parse_crt_der() directly
     instead of the x509parse_crt() wrapper that can also parse PEM
	 certificates
   * x509parse_crtpath() is now reentrant and uses more portable stat()
   * Fixed bignum.c and bn_mul.h to support Thumb2 and LLVM compiler
   * Fixed values for 2-key Triple DES in cipher layer
   * ssl_write_certificate_request() can handle empty ca_chain

Security
   * A possible DoS during the SSL Handshake, due to faulty parsing of
     PEM-encoded certificates has been fixed (found by Jack Lloyd)

= Version 1.2.7 released 2013-04-13
Features
   * Ability to specify allowed ciphersuites based on the protocol version.

Changes
   * Default Blowfish keysize is now 128-bits
   * Test suites made smaller to accommodate Raspberry Pi

Bugfix
   * Fix for MPI assembly for ARM
   * GCM adapted to support sizes > 2^29

1232
= Version 1.2.6 released 2013-03-11
1233 1234
Bugfix
   * Fixed memory leak in ssl_free() and ssl_reset() for active session
Paul Bakker's avatar