1# Change Log
2
3## [Unreleased]
4
5## [v0.10.32] - 2020-12-24
6
7### Fixed
8
9* Fixed `Ssl::new` to take a `&SslContextRef` rather than `&SslContext`.
10
11### Added
12
13* Added the `encrypt` module to support asymmetric encryption and decryption with `PKey`s.
14* Added `MessageDigest::from_name`.
15* Added `ConnectConfiguration::into_ssl`.
16* Added the ability to create unconnected `SslStream`s directly from an `Ssl` and transport stream
17    without performing any part of the handshake with `SslStream::new`.
18* Added `SslStream::{read_early_data, write_early_data, connect, accept, do_handshake, stateless}`.
19* Implemented `ToOwned` for `SslContextRef`.
20* Added `SslRef::{set_connect_state, set_accept_state}`.
21
22### Deprecated
23
24* Deprecated `SslStream::from_raw_parts` in favor of `Ssl::from_ptr` and `SslStream::new`.
25* Deprecated `SslStreamBuilder` in favor of methods on `Ssl` and `SslStream`.
26
27## [v0.10.31] - 2020-12-09
28
29### Added
30
31* Added `Asn1Object::from_str`.
32* Added `Dh::from_pgq`, `DhRef::prime_p`, `DhRef::prime_q`, `DhRef::generator`, `DhRef::generate_params`,
33    `DhRef::generate_key`, `DhRef::public_key`, and `DhRef::compute_key`.
34* Added `Pkcs7::from_der` and `Pkcs7Ref::to_der`.
35* Added `Id::X25519`, `Id::X448`, `PKey::generate_x25519`, and `PKey::generate_x448`.
36* Added `SrtpProfileId::SRTP_AEAD_AES_128_GCM` and `SrtpProfileId::SRTP_AEAD_AES_256_GCM`.
37* Added `SslContextBuilder::verify_param` and `SslContextBuilder::verify_param_mut`.
38* Added `X509Ref::subject_name_hash` and `X509Ref::version`.
39* Added `X509StoreBuilderRef::add_lookup`, and the `X509Lookup` type.
40* Added `X509VerifyFlags`, `X509VerifyParamRef::set_flags`, `X509VerifyParamRef::clear_flags`
41    `X509VerifyParamRef::get_flags`.
42
43## [v0.10.30] - 2020-06-25
44
45### Fixed
46
47* `DsaRef::private_key_to_pem` can no longer be called without a private key.
48
49### Changed
50
51* Improved the `Debug` implementations of many types.
52
53### Added
54
55* Added `is_empty` implementations for `Asn1StringRef` and `Asn1BitStringRef`.
56* Added `EcPointRef::{to_pem, to_dir}` and `EcKeyRef::{public_key_from_pem, public_key_from_der}`.
57* Added `Default` implementations for many types.
58* Added `Debug` implementations for many types.
59* Added `SslStream::from_raw_parts`.
60* Added `SslRef::set_mtu`.
61* Added `Cipher::{aes_128_ocb, aes_192_ocb, aes_256_ocb}`.
62
63### Deprecated
64
65* Deprecated `SslStreamBuilder::set_dtls_mtu_size` in favor of `SslRef::set_mtu`.
66
67## [v0.10.29] - 2020-04-07
68
69### Fixed
70
71* Fixed a memory leak in `X509Builder::append_extension`.
72
73### Added
74
75* Added `SslConnector::into_context` and `SslConnector::context`.
76* Added `SslAcceptor::into_context` and `SslAcceptor::context`.
77* Added `SslMethod::tls_client` and `SslMethod::tls_server`.
78* Added `SslContextBuilder::set_cert_store`.
79* Added `SslContextRef::verify_mode` and `SslRef::verify_mode`.
80* Added `SslRef::is_init_finished`.
81* Added `X509Object`.
82* Added `X509StoreRef::objects`.
83
84## [v0.10.28] - 2020-02-04
85
86### Fixed
87
88* Fixed the mutability of `Signer::sign_oneshot` and `Verifier::verify_oneshot`. This is unfortunately a breaking
89    change, but a necessary soundness fix.
90
91## [v0.10.27] - 2020-01-29
92
93### Added
94
95* Added `MessageDigest::null`.
96* Added `PKey::private_key_from_pkcs8`.
97* Added `SslOptions::NO_RENEGOTIATION`.
98* Added `SslStreamBuilder::set_dtls_mtu_size`.
99
100## [v0.10.26] - 2019-11-22
101
102### Fixed
103
104* Fixed improper handling of the IV buffer in `envelope::{Seal, Unseal}`.
105
106### Added
107
108* Added `Asn1TimeRef::{diff, compare}`.
109* Added `Asn1Time::from_unix`.
110* Added `PartialEq` and `PartialOrd` implementations for `Asn1Time` and `Asn1TimeRef`.
111* Added `base64::{encode_block, decode_block}`.
112* Added `EcGroupRef::order_bits`.
113* Added `Clone` implementations for `Sha1`, `Sha224`, `Sha256`, `Sha384`, and `Sha512`.
114* Added `SslContextBuilder::{set_sigalgs_list, set_groups_list}`.
115
116## [v0.10.25] - 2019-10-02
117
118### Fixed
119
120* Fixed a memory leak in `EcdsaSig::from_private_components` when using OpenSSL 1.0.x.
121
122### Added
123
124* Added support for Ed25519 and Ed448 keys.
125* Implemented `ToOwned` for `PKeyRef` and `Clone` for `PKey`.
126
127## [v0.10.24] - 2019-07-19
128
129### Fixed
130
131* Worked around an OpenSSL 1.0.x bug triggered by code calling `SSL_set_app_data`.
132
133### Added
134
135* Added `aes::{wrap_key, unwrap_key}`.
136* Added `CmsContentInfoRef::to_pem` and `CmsContentInfo::from_pem`.
137* Added `DsaRef::private_key_to_pem`.
138* Added `EcGroupRef::{cofactor, generator}`.
139* Added `EcPointRef::to_owned`.
140* Added a `Debug` implementation for `EcKey`.
141* Added `SslAcceptor::{mozilla_intermediate_v5, mozilla_modern_v5}`.
142* Added `Cipher::{aes_128_ofb, aes_192_ecb, aes_192_cbc, aes_192_ctr, aes_192_cfb1, aes_192_cfb128, aes_192_cfb8,
143    aes_192_gcm, aes_192_ccm, aes_192_ofb, aes_256_ofb}`.
144
145## [v0.10.23] - 2019-05-18
146
147### Fixed
148
149* Fixed session callbacks when an `Ssl`'s context is replaced.
150
151### Added
152
153* Added `SslContextBuilder::add_client_ca`.
154
155## [v0.10.22] - 2019-05-08
156
157### Added
158
159* Added support for the LibreSSL 2.9.x series.
160
161## [v0.10.21] - 2019-04-30
162
163### Fixed
164
165* Fixed overly conservatifve buffer size checks in `Crypter` when using stream ciphers.
166
167### Added
168
169* Added bindings to envelope encryption APIs.
170* Added `PkeyRef::size`.
171
172## [v0.10.20] - 2019-03-20
173
174### Added
175
176* Added `CmsContentInfo::from_der` and `CmsContentInfo::encrypt`.
177* Added `X509Ref::verify` and `X509ReqRef::verify`.
178* Implemented `PartialEq` and `Eq` for `MessageDigest`.
179* Added `MessageDigest::type_` and `EcGroupRef::curve_name`.
180
181## [v0.10.19] - 2019-03-01
182
183### Added
184
185* The openssl-sys build script now logs the values of environment variables.
186* Added `ERR_PACK` to openssl-sys.
187* The `ERR_*` functions in openssl-sys are const functions when building against newer Rust versions.
188* Implemented `Clone` for `Dsa`.
189* Added `SslContextRef::add_session` and `SslContextRef::remove_session`.
190* Added `SslSessionRef::time`, `SslSessionRef::timeout`, and `SslSessionRef::protocol_version`.
191* Added `SslContextBuilder::set_session_cache_size` and `SslContextRef::session_cache_size`.
192
193## [v0.10.18] - 2019-02-22
194
195### Fixed
196
197* Fixed the return type of `ssl::cipher_name`.
198
199## [v0.10.17] - 2019-02-22
200
201### Added
202
203* Implemented `AsRef<str>` and `AsRef<[u8]>` for `OpenSslString`.
204* Added `Asn1Integer::from_bn`.
205* Added `RsaRef::check_key`.
206* Added `Asn1Time::from_str` and `Asn1Time::from_str_x509`.
207* Added `Rsa::generate_with_e`.
208* Added `Cipher::des_ede3_cfb64`.
209* Added `SslCipherRef::standard_name` and `ssl::cipher_name`.
210
211## [v0.10.16] - 2018-12-16
212
213### Added
214
215* Added SHA3 and SHAKE to `MessageDigest`.
216* Added `rand::keep_random_devices_open`.
217* Added support for LibreSSL 2.9.0.
218
219## [v0.10.15] - 2018-10-22
220
221### Added
222
223* Implemented `DoubleEndedIterator` for stack iterators.
224
225## [v0.10.14] - 2018-10-18
226
227### Fixed
228
229* Made some accidentally exposed internal functions private.
230
231### Added
232
233* Added support for LibreSSL 2.8.
234
235### Changed
236
237* The OpenSSL version used with the `vendored` feature has been upgraded from 1.1.0 to 1.1.1.
238
239## [v0.10.13] - 2018-10-14
240
241### Fixed
242
243* Fixed a double-free in the `SslContextBuilder::set_get_session_callback` API.
244
245### Added
246
247* Added `SslContextBuilder::set_client_hello_callback`.
248* Added support for LibreSSL 2.8.1.
249* Added `EcdsaSig::from_der` and `EcdsaSig::to_der`.
250* Added PKCS#7 support.
251
252## [v0.10.12] - 2018-09-13
253
254### Fixed
255
256* Fixed handling of SNI callbacks during renegotiation.
257
258### Added
259
260* Added `SslRef::get_shutdown` and `SslRef::set_shutdown`.
261* Added support for SRTP in DTLS sessions.
262* Added support for LibreSSL 2.8.0.
263
264## [v0.10.11] - 2018-08-04
265
266### Added
267
268* The new `vendored` cargo feature will cause openssl-sys to compile and statically link to a
269    vendored copy of OpenSSL.
270* Added `SslContextBuilder::set_psk_server_callback`.
271* Added `DsaRef::pub_key` and `DsaRef::priv_key`.
272* Added `Dsa::from_private_components` and `Dsa::from_public_components`.
273* Added `X509NameRef::entries`.
274
275### Deprecated
276
277* `SslContextBuilder::set_psk_callback` has been renamed to
278    `SslContextBuilder::set_psk_client_callback` and deprecated.
279
280## [v0.10.10] - 2018-06-06
281
282### Added
283
284* Added `SslRef::set_alpn_protos`.
285* Added `SslContextBuilder::set_ciphersuites`.
286
287## [v0.10.9] - 2018-06-01
288
289### Fixed
290
291* Fixed a use-after-free in `CmsContentInfo::sign`.
292* `SslRef::servername` now returns `None` rather than panicking on a non-UTF8 name.
293
294### Added
295
296* Added `MessageDigest::from_nid`.
297* Added `Nid::signature_algorithms`, `Nid::long_name`, and `Nid::short_name`.
298* Added early data and early keying material export support for TLS 1.3.
299* Added `SslRef::verified_chain`.
300* Added `SslRef::servername_raw` which returns a `&[u8]` rather than `&str`.
301* Added `SslRef::finished` and `SslRef::peer_finished`.
302* Added `X509Ref::digest` to replace `X509Ref::fingerprint`.
303* `X509StoreBuilder` and `X509Store` now implement `Sync` and `Send`.
304
305### Deprecated
306
307* `X509Ref::fingerprint` has been deprecated in favor of `X509Ref::digest`.
308
309## [v0.10.8] - 2018-05-20
310
311### Fixed
312
313* `openssl-sys` will now detect Homebrew-installed OpenSSL when installed to a non-default
314    directory.
315* The `X509_V_ERR_INVALID_CALL`, `X509_V_ERR_STORE_LOOKUP`, and
316    `X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION` constants in `openssl-sys` are now only present when
317    building against 1.1.0g and up rather than 1.1.0.
318* `SslContextBuilder::max_proto_version` and `SslContextBuilder::min_proto_version` are only present
319    when building against 1.1.0g and up rather than 1.1.0.
320
321### Added
322
323* Added `CmsContentInfo::sign`.
324* Added `Clone` and `ToOwned` implementations to `Rsa` and `RsaRef` respectively.
325* The `min_proto_version` and `max_proto_version` methods are available when linking against
326    LibreSSL 2.6.1 and up in addition to OpenSSL.
327* `X509VerifyParam` is available when linking against LibreSSL 2.6.1 and up in addition to OpenSSL.
328* ALPN support is available when linking against LibreSSL 2.6.1 and up in addition to OpenSSL.
329* `Stack` and `StackRef` are now `Sync` and `Send`.
330
331## [v0.10.7] - 2018-04-30
332
333### Added
334
335* Added `X509Req::public_key` and `X509Req::extensions`.
336* Added `RsaPrivateKeyBuilder` to allow control over initialization of optional components of an RSA
337    private key.
338* Added DER encode/decode support to `SslSession`.
339* openssl-sys now provides the `DEP_OPENSSL_VERSION_NUMBER` and
340    `DEP_OPENSSL_LIBRESSL_VERSION_NUMBER` environment variables to downstream build scripts which
341    contains the hex-encoded version number of the OpenSSL or LibreSSL distribution being built
342    against. The other variables are deprecated.
343
344## [v0.10.6] - 2018-03-05
345
346### Added
347
348* Added `SslOptions::ENABLE_MIDDLEBOX_COMPAT`.
349* Added more `Sync` and `Send` implementations.
350* Added `PKeyRef::id`.
351* Added `Padding::PKCS1_PSS`.
352* Added `Signer::set_rsa_pss_saltlen`, `Signer::set_rsa_mgf1_md`, `Signer::set_rsa_pss_saltlen`, and
353    `Signer::set_rsa_mgf1_md`
354* Added `X509StoreContextRef::verify` to directly verify certificates.
355* Added low level ECDSA support.
356* Added support for TLSv1.3 custom extensions. (OpenSSL 1.1.1 only)
357* Added AES-CCM support.
358* Added `EcKey::from_private_components`.
359* Added CMAC support.
360* Added support for LibreSSL 2.7.
361* Added `X509Ref::serial_number`.
362* Added `Asn1IntegerRef::to_bn`.
363* Added support for TLSv1.3 stateless handshakes. (OpenSSL 1.1.1 only)
364
365### Changed
366
367* The Cargo features previously used to gate access to version-specific OpenSSL APIs have been
368    removed. Those APIs will be available automatically when building against an appropriate OpenSSL
369    version.
370* Fixed `PKey::private_key_from_der` to return a `PKey<Private>` rather than a `PKey<Public>`. This
371    is technically a breaking change but the function was pretty useless previously.
372
373### Deprecated
374
375* `X509CheckFlags::FLAG_NO_WILDCARDS` has been renamed to `X509CheckFlags::NO_WILDCARDS` and the old
376    name deprecated.
377
378## [v0.10.5] - 2018-02-28
379
380### Fixed
381
382* `ErrorStack`'s `Display` implementation no longer writes an empty string if it contains no errors.
383
384### Added
385
386* Added `SslRef::version2`.
387* Added `Cipher::des_ede3_cbc`.
388* Added `SslRef::export_keying_material`.
389* Added the ability to push an `Error` or `ErrorStack` back onto OpenSSL's error stack. Various
390    callback bindings use this to propagate errors properly.
391* Added `SslContextBuilder::set_cookie_generate_cb` and `SslContextBuilder::set_cookie_verify_cb`.
392* Added `SslContextBuilder::set_max_proto_version`, `SslContextBuilder::set_min_proto_version`,
393    `SslContextBuilder::max_proto_version`, and `SslContextBuilder::min_proto_version`.
394
395### Changed
396
397* Updated `SslConnector`'s default cipher list to match Python's.
398
399### Deprecated
400
401* `SslRef::version` has been deprecated. Use `SslRef::version_str` instead.
402
403## [v0.10.4] - 2018-02-18
404
405### Added
406
407* Added OpenSSL 1.1.1 support.
408* Added `Rsa::public_key_from_pem_pkcs1`.
409* Added `SslOptions::NO_TLSV1_3`. (OpenSSL 1.1.1 only)
410* Added `SslVersion`.
411* Added `SslSessionCacheMode` and `SslContextBuilder::set_session_cache_mode`.
412* Added `SslContextBuilder::set_new_session_callback`,
413    `SslContextBuilder::set_remove_session_callback`, and
414    `SslContextBuilder::set_get_session_callback`.
415* Added `SslContextBuilder::set_keylog_callback`. (OpenSSL 1.1.1 only)
416* Added `SslRef::client_random` and `SslRef::server_random`. (OpenSSL 1.1.0+ only)
417
418### Fixed
419
420* The `SslAcceptorBuilder::mozilla_modern` constructor now disables TLSv1.0 and TLSv1.1 in
421    accordance with Mozilla's recommendations.
422
423## [v0.10.3] - 2018-02-12
424
425### Added
426
427* OpenSSL is now automatically detected on FreeBSD systems.
428* Added `GeneralName` accessors for `rfc822Name` and `uri` variants.
429* Added DES-EDE3 support.
430
431### Fixed
432
433* Fixed a memory leak in `X509StoreBuilder::add_cert`.
434
435## [v0.10.2] - 2018-01-11
436
437### Added
438
439* Added `ConnectConfiguration::set_use_server_name_indication` and
440    `ConnectConfiguration::set_verify_hostname` for use in contexts where you don't have ownership
441    of the `ConnectConfiguration`.
442
443## [v0.10.1] - 2018-01-10
444
445### Added
446
447* Added a `From<ErrorStack> for ssl::Error` implementation.
448
449## [v0.10.0] - 2018-01-10
450
451### Compatibility
452
453* openssl 0.10 still uses openssl-sys 0.9, so openssl 0.9 and 0.10 can coexist without issue.
454
455### Added
456
457* The `ssl::select_next_proto` function can be used to easily implement the ALPN selection callback
458    in a "standard" way.
459* FIPS mode support is available in the `fips` module.
460* Accessors for the Issuer and Issuer Alternative Name fields of X509 certificates have been added.
461* The `X509VerifyResult` can now be set in the certificate verification callback via
462    `X509StoreContextRef::set_error`.
463
464### Changed
465
466* All constants have been moved to associated constants of their type. For example, `bn::MSB_ONE`
467    is now `bn::MsbOption::ONE`.
468* Asymmetric key types are now parameterized over what they contain. In OpenSSL, the same type is
469    used for key parameters, public keys, and private keys. Unfortunately, some APIs simply assume
470    that certain components are present and will segfault trying to use things that aren't there.
471
472    The `pkey` module contains new tag types named `Params`, `Public`, and `Private`, and the
473    `Dh`, `Dsa`, `EcKey`, `Rsa`, and `PKey` have a type parameter set to one of those values. This
474    allows the `Signer` constructor to indicate that it requires a private key at compile time for
475    example. Previously, `Signer` would simply segfault if provided a key without private
476    components.
477* ALPN support has been changed to more directly model OpenSSL's own APIs. Instead of a single
478    method used for both the server and client sides which performed everything automatically, the
479    `SslContextBuilder::set_alpn_protos` and `SslContextBuilder::set_alpn_select_callback` handle
480    the client and server sides respectively.
481* `SslConnector::danger_connect_without_providing_domain_for_certificate_verification_and_server_name_indication`
482    has been removed in favor of new methods which provide more control. The
483    `ConnectConfiguration::use_server_name_indication` method controls the use of Server Name
484    Indication (SNI), and the `ConnectConfiguration::verify_hostname` method controls the use of
485    hostname verification. These can be controlled independently, and if both are disabled, the
486    domain argument to `ConnectConfiguration::connect` is ignored.
487* Shared secret derivation is now handled by the new `derive::Deriver` type rather than
488    `pkey::PKeyContext`, which has been removed.
489* `ssl::Error` is now no longer an enum, and provides more direct access to the relevant state.
490* `SslConnectorBuilder::new` has been moved and renamed to `SslConnector::builder`.
491* `SslAcceptorBuilder::mozilla_intermediate` and `SslAcceptorBuilder::mozilla_modern` have been
492    moved to `SslAcceptor` and no longer take the private key and certificate chain. Install those
493    manually after creating the builder.
494* `X509VerifyError` is now `X509VerifyResult` and can now have the "ok" value in addition to error
495    values.
496* `x509::X509FileType` is now `ssl::SslFiletype`.
497* Asymmetric key serialization and deserialization methods now document the formats that they
498    correspond to, and some have been renamed to better indicate that.
499
500### Removed
501
502* All deprecated APIs have been removed.
503* NPN support has been removed. It has been supersceded by ALPN, and is hopefully no longer being
504    used in practice. If you still depend on it, please file an issue!
505* `SslRef::compression` has been removed.
506* Some `ssl::SslOptions` flags have been removed as they no longer do anything.
507
508## Older
509
510Look at the [release tags] for information about older releases.
511
512[Unreleased]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.32...master
513[v0.10.32]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.31...openssl-v0.10.32
514[v0.10.31]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.30...openssl-v0.10.31
515[v0.10.30]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.29...openssl-v0.10.30
516[v0.10.29]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.28...openssl-v0.10.29
517[v0.10.28]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.27...openssl-v0.10.28
518[v0.10.27]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.26...openssl-v0.10.27
519[v0.10.26]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.25...openssl-v0.10.26
520[v0.10.25]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.24...openssl-v0.10.25
521[v0.10.24]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.23...openssl-v0.10.24
522[v0.10.23]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.22...openssl-v0.10.23
523[v0.10.22]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.21...openssl-v0.10.22
524[v0.10.21]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.20...openssl-v0.10.21
525[v0.10.20]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.19...openssl-v0.10.20
526[v0.10.19]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.18...openssl-v0.10.19
527[v0.10.18]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.17...openssl-v0.10.18
528[v0.10.17]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.16...openssl-v0.10.17
529[v0.10.16]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.15...openssl-v0.10.16
530[v0.10.15]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.14...openssl-v0.10.15
531[v0.10.14]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.13...openssl-v0.10.14
532[v0.10.13]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.12...openssl-v0.10.13
533[v0.10.12]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.11...openssl-v0.10.12
534[v0.10.11]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.10...openssl-v0.10.11
535[v0.10.10]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.9...openssl-v0.10.10
536[v0.10.9]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.8...openssl-v0.10.9
537[v0.10.8]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.7...openssl-v0.10.8
538[v0.10.7]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.6...openssl-v0.10.7
539[v0.10.6]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.5...openssl-v0.10.6
540[v0.10.5]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.4...openssl-v0.10.5
541[v0.10.4]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.3...openssl-v0.10.4
542[v0.10.3]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.2...openssl-v0.10.3
543[v0.10.2]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.1...openssl-v0.10.2
544[v0.10.1]: https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.0...openssl-v0.10.1
545[v0.10.0]: https://github.com/sfackler/rust-openssl/compare/v0.9.23...openssl-v0.10.0
546[release tags]: https://github.com/sfackler/rust-openssl/releases
547