To: help-gnutls@gnu.org, gnutls-devel@gnu.org, info-gnu@gnu.org
Subject: GnuTLS 2.12.0 released
<#part sign=pgpmime>
We are proud to announce a new stable GnuTLS release: Version 2.12.0.

GnuTLS is a modern C library that implements the standard network
security protocol Transport Layer Security (TLS), for use by network
applications.  GnuTLS is developed for GNU/Linux, but works on many
Unix-like systems and comes with a binary installer for Windows.

The GnuTLS library is distributed under the terms of the GNU Lesser
General Public License version 2.1 (or later).  The "extra" GnuTLS
library (which contains TLS/IA support, LZO compression and Libgcrypt
FIPS-mode handler), the OpenSSL compatibility library, the self tests
and the command line tools are all distributed under the GNU General
Public License version 3.0 (or later).  The manual is distributed
under the GNU Free Documentation License version 1.3 (or later).

The project page of the library is available at:
  http://www.gnu.org/software/gnutls/

What's New
==========

Version 2.12.0 is the first stable release on the 2.12.x branch and is
the result of 12 months of work on the experimental 2.11.x branch.  The
GnuTLS 2.12.x branch replaces the GnuTLS 2.10.x branch as the supported
stable branch, although we will continue to support GnuTLS 2.10.x for
some time.

** libgnutls: Nettle is the default crypto back end. Use --with-libgcrypt
to use the libgcrypt back end.

** libgnutls: Added PKCS #11 support and an API to access objects in
gnutls/pkcs11.h. Certificates and public keys can be
imported from tokens, and operations can be performed on private keys.

** p11tool: Introduced. It allows manipulating pkcs 11 tokens.

** libgnutls: Added an abstract interface to access public keys
and private keys in gnutls/abstract.h. It allows easy handling
of private keys and public keys of all subsystems such as pkcs11, openpgp
and x509.

** libgnutls: Added functions to ease selection of bit length in public
key algorithm key generation. Those are
gnutls_sec_param_to_pk_bits(), gnutls_pk_bits_to_sec_param(),
and gnutls_sec_param_get_name().

** libgnutls: Add new API gnutls_session_channel_binding.
The function is used to get the channel binding data.  Currently only
the "tls-unique" (RFC 5929) channel binding type is supported, through
the GNUTLS_CB_TLS_UNIQUE type.  See new section "Channel Bindings" in
the manual.

** libgnutls: Removed support for opaque PRF (it was disabled by
default in previous gnutls versions)

** libgnutls: Added gnutls_global_set_mutex() to allow setting
alternative locking procedures. By default the system available
locking is used. In *NIX pthreads are used and in windows the
critical section API. This follows a different approach than the
previous versions that depended on libgcrypt initialization. The
locks are now set by default in systems that support it. Programs
that used gcry_control() to set thread locks should insert it into
a block of
#if GNUTLS_VERSION_NUMBER <= 0x020b00
	gcry_control(...)
#endif

** libgnutls: Added support for reading DN from EV-certificates.
New DN values:
jurisdictionOfIncorporationLocalityName,
jurisdictionOfIncorporationStateOrProvinceName,
jurisdictionOfIncorporationCountryName

** gnutls-cli, gnutls-serv: Print 'tls-unique' Channel Bindings.

** libgnutls: Added RSA_NULL_SHA1 and SHA256 ciphersuites.

** libgnutls: Is now more liberal in the PEM decoding. That is spaces and 
tabs are being skipped.

** libgnutls: The %COMPAT flag now allows larger records that violate the
TLS spec.

** libgnutls: Corrected signature generation and verification
in the Certificate Verify message when in TLS 1.2. Reported
by Todd A. Ouska.

** libgnutls: gnutls_x509_privkey_import() will fallback to
gnutls_x509_privkey_import_pkcs8() without a password, if it
is unable to decode the key.

** libgnutls: HMAC-MD5 no longer used by default.

** libgnutls: Corrected issue in DHE-PSK ciphersuites that ignored
the PSK callback.

** libgnutls: SRP and PSK are no longer set on the default priorities. 
They have to be explicitly set.

** libgnutls: During TLS 1.2 handshake message verification using DSS
use the hash algorithm required by it. In TLS 1.0, 1.1 and SSL 3.0
SHA-1 is used always.

** libgnutls: gnutls_x509_privkey_sign_hash() is deprecated.
Use gnutls_privkey_sign_hash() instead.

** libgnutls: gnutls_pubkey_verify_data, gnutls_pubkey_verify_hash,
gnutls_x509_privkey_verify_data, gnutls_x509_crt_verify_data, 
gnutls_x509_crt_verify_hash return the negative error code 
GNUTLS_E_PK_SIG_VERIFY_FAILED if verification fails to simplify error 
checking.

** libgnutls: Added helper functions for signature verification:
gnutls_pubkey_verify_data() and gnutls_pubkey_import_privkey().

** gnutls_x509_crl_privkey_sign2(), gnutls_x509_crq_sign2()
gnutls_x509_privkey_sign_hash(), gnutls_x509_privkey_sign_data(),
gnutls_x509_crt_verify_hash(), gnutls_x509_crt_verify_data(), were
deprecated for gnutls_x509_crl_privkey_sign(),
gnutls_x509_crq_privkey_sign(), gnutls_privkey_sign_hash(),
gnutls_privkey_sign_data(), gnutls_pubkey_verify_hash()
gnutls_pubkey_verify_data() respectively.

** libgnutls: gnutls_*_export_raw() functions now add leading zero in
integers.

** libgnutls: Added gnutls_transport_set_vec_push_function() that
can be used to specify a writev() like function. Using that gnutls
can provide more efficient writes to network layer in systems that 
support it.

** libgnutls: Record version of Client Hellos is now set by default to
SSL 3.0. To restore the previous default behavior use %LATEST_RECORD_VERSION
priority string.

** libgnutls: Use ASN1_NULL when writing parameters for RSA signatures. 
This makes us comply with RFC3279. Reported by Michael Rommel.

** gnutls-serv: Corrected a buffer overflow. Reported and patch by Tomas Mraz.

** libgnutls: Reverted default behavior for verification and
introduced GNUTLS_VERIFY_DO_NOT_ALLOW_X509_V1_CA_CRT. Thus by default
V1 trusted CAs are allowed, unless the new flag is specified.

** libgnutls: Correctly add leading zero to PKCS #8 encoded DSA key.
Reported by Jeffrey Walton.

** libgnutls: Added SIGN-ALL, CTYPE-ALL, COMP-ALL, and VERS-TLS-ALL
as priority strings. Those allow to set all the supported algorithms
at once.

** libgnutls: Added support for DSA signing/verifying with bit 
length over 1024.

** libgnutls-extra: When in FIPS mode gnutls_global_init_extra()
has to be called to register any required md5 handlers.




API/ABI changes in GnuTLS 2.12
==============================

No offically supported interfaces have been modified or removed.  The
library should be completely backwards compatible on both the source
and binary level.

The following symbols have been added to the library:

gnutls_transport_set_vec_push_function: ADDED
gnutls_x509_crl_get_raw_issuer_dn: ADDED
gnutls_session_channel_binding: New function.
gnutls_channel_binding_t: New enumeration.
gnutls_pkcs11_token_init: New function
gnutls_pkcs11_token_set_pin: New function
gnutls_x509_crt_get_subject_unique_id: ADDED.
gnutls_x509_crt_get_issuer_unique_id: ADDED.
gnutls_x509_crt_get_preferred_hash_algorithm: ADDED
gnutls_x509_privkey_export_rsa_raw2: ADDED
gnutls_openpgp_privkey_sec_param: ADDED
gnutls_x509_privkey_sec_param: ADDED
gnutls_global_set_mutex: ADDED
gnutls_rnd: ADDED
gnutls_sec_param_to_pk_bits: ADDED
gnutls_pk_bits_to_sec_param: ADDED
gnutls_sec_param_get_name: ADDED
gnutls_certificate_set_retrieve_function: ADDED
gnutls_pkcs11_type_get_name: ADDED
gnutls_pkcs11_init: ADDED
gnutls_pkcs11_deinit: ADDED
gnutls_pkcs11_set_pin_function: ADDED
gnutls_pkcs11_set_token_function: ADDED
gnutls_pkcs11_add_provider: ADDED
gnutls_pkcs11_obj_init: ADDED
gnutls_pkcs11_obj_import_url: ADDED
gnutls_pkcs11_obj_export_url: ADDED
gnutls_pkcs11_obj_deinit: ADDED
gnutls_pkcs11_obj_export: ADDED
gnutls_pkcs11_obj_list_import_url: ADDED
gnutls_pkcs11_obj_export: ADDED
gnutls_pkcs11_obj_get_type: ADDED
gnutls_pkcs11_obj_get_info: ADDED
gnutls_pkcs11_token_get_info: ADDED
gnutls_pkcs11_token_get_url: ADDED
gnutls_pkcs11_privkey_init: ADDED
gnutls_pkcs11_privkey_deinit: ADDED
gnutls_pkcs11_privkey_get_pk_algorithm: ADDED
gnutls_pkcs11_privkey_get_info: ADDED
gnutls_pkcs11_privkey_import_url: ADDED
gnutls_pkcs11_privkey_sign_data: ADDED
gnutls_pkcs11_privkey_sign_hash: ADDED
gnutls_pkcs11_privkey_decrypt_data: ADDED
gnutls_x509_crt_import_pkcs11: ADDED
gnutls_x509_crt_list_import_pkcs11: ADDED
gnutls_x509_crt_import_pkcs11_url: ADDED
gnutls_privkey_init: ADDED
gnutls_privkey_sign_hash: ADDED
gnutls_privkey_sign_data: ADDED
gnutls_privkey_deinit: ADDED
gnutls_privkey_get_pk_algorithm: ADDED
gnutls_privkey_get_type: ADDED
gnutls_privkey_import_pkcs11: ADDED
gnutls_privkey_import_x509: ADDED
gnutls_privkey_import_openpgp: ADDED
gnutls_privkey_sign_data: ADDED
gnutls_privkey_sign_hash: ADDED
gnutls_privkey_decrypt_data: ADDED
gnutls_pkcs11_privkey_export_url: ADDED
gnutls_x509_crq_privkey_sign: ADDED
gnutls_x509_crl_privkey_sign: ADDED
gnutls_x509_crt_privkey_sign: ADDED
gnutls_pubkey_init: ADDED
gnutls_pubkey_import_privkey: ADDED
gnutls_pubkey_verify_data: ADDED
gnutls_pubkey_get_preferred_hash_algorithm: ADDED
gnutls_pubkey_deinit: ADDED
gnutls_pubkey_get_pk_algorithm: ADDED
gnutls_pubkey_import_x509: ADDED
gnutls_pubkey_import_openpgp: ADDED
gnutls_pubkey_get_pk_rsa_raw: ADDED
gnutls_pubkey_get_pk_dsa_raw: ADDED
gnutls_pubkey_export: ADDED
gnutls_pubkey_get_key_id: ADDED
gnutls_pubkey_get_key_usage: ADDED
gnutls_pubkey_verify_hash: ADDED
gnutls_pubkey_get_verify_algorithm: ADDED
gnutls_pkcs11_type_get_name: ADDED
gnutls_pubkey_import_pkcs11_url: ADDED
gnutls_pubkey_import: ADDED
gnutls_pubkey_import_pkcs11: ADDED
gnutls_pubkey_import_dsa_raw: ADDED
gnutls_pubkey_import_rsa_raw: ADDED
gnutls_x509_crt_set_pubkey: ADDED
gnutls_x509_crq_set_pubkey: ADDED
gnutls_pkcs11_copy_x509_crt: ADDED
gnutls_pkcs11_copy_x509_privkey: ADDED
gnutls_pkcs11_delete_url: ADDED

The following symbols were deprecated because have been replaced
by newer functions:
gnutls_cipher_set_priority: DEPRECATED (use: gnutls_priority_set_direct)
gnutls_mac_set_priority: DEPRECATED (use: gnutls_priority_set_direct)
gnutls_compression_set_priority: DEPRECATED (use: gnutls_priority_set_direct)
gnutls_kx_set_priority: DEPRECATED (use: gnutls_priority_set_direct)
gnutls_protocol_set_priority: DEPRECATED (use: gnutls_priority_set_direct)
gnutls_certificate_type_set_priority: DEPRECATED (use: gnutls_priority_set_direct)
gnutls_certificate_client_retrieve_function: DEPRECATED (use: gnutls_certificate_set_retrieve_function)
gnutls_certificate_server_retrieve_function: DEPRECATED (use: gnutls_certificate_set_retrieve_function)
gnutls_certificate_verify_peers: DEPRECATED (use: gnutls_certificate_verify_peers2)
gnutls_x509_crl_sign: DEPRECATED (use: gnutls_x509_crl_privkey_sign)
gnutls_x509_crl_sign2: DEPRECATED (use: gnutls_x509_crl_privkey_sign)
gnutls_x509_privkey_sign_data: DEPRECATED (use: gnutls_privkey_sign_data)
gnutls_x509_privkey_verify_data: DEPRECATED (use: gnutls_pubkey_verify_data)
gnutls_x509_crt_verify_data: DEPRECATED (use: gnutls_pubkey_verify_data)
gnutls_x509_crt_verify_hash: DEPRECATED (use: gnutls_pubkey_verify_hash)
gnutls_x509_crt_get_verify_algorithm: DEPRECATED (use: gnutls_pubkey_get_verify_algorithm)
gnutls_x509_privkey_sign_hash: DEPRECATED (use: gnutls_privkey_sign_hash)
gnutls_x509_crq_sign2: DEPRECATED (use: gnutls_x509_crq_privkey_sign)
gnutls_x509_crq_sign: DEPRECATED (use: gnutls_x509_crq_privkey_sign)
gnutls_openpgp_privkey_sign_hash: DEPRECATED (use: gnutls_privkey_sign_hash)

Symbols deprecated because they exported internal structures, making
modification of gnutls' inner workings hard:
gnutls_session_get_server_random: DEPRECATED
gnutls_session_get_client_random: DEPRECATED
gnutls_session_get_master_secret: DEPRECATED
gnutls_session_set_finished_function: DEPRECATED
gnutls_certificate_get_x509_cas: DEPRECATED
gnutls_certificate_get_x509_crls: DEPRECATED
gnutls_certificate_get_openpgp_keyring: DEPRECATED

Deprecated symbols because functionality will not be supported in the
future:
gnutls_session_set_finished_function: DEPRECATED
gnutls_transport_set_lowat: DEPRECATED
gnutls_psk_netconf_derive_key: DEPRECATED

In addition to the functions above, the following non-function
definitions have been added to the header files:

GNUTLS_CB_TLS_UNIQUE: New gnutls_channel_binding_t enum member.
GNUTLS_E_CHANNEL_BINDING_NOT_AVAILABLE: New error code.
GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR: New error code.
GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL: New error code.
GNUTLS_E_PKCS11_ERROR: New error code.
GNUTLS_E_PKCS11_LOAD_ERROR: New error code.
GNUTLS_E_PARSING_ERROR: New error code.
GNUTLS_E_PKCS11_PIN_ERROR: New error code.
GNUTLS_E_PKCS11_SLOT_ERROR: New error code.
GNUTLS_E_LOCKING_ERROR: New error code.
GNUTLS_E_PKCS11_ATTRIBUTE_ERROR: New error code.
GNUTLS_E_PKCS11_DEVICE_ERROR: New error code.
GNUTLS_E_PKCS11_DATA_ERROR: New error code.
GNUTLS_E_PKCS11_UNSUPPORTED_FEATURE_ERROR: New error code.
GNUTLS_E_PKCS11_KEY_ERROR: New error code.
GNUTLS_E_PKCS11_PIN_EXPIRED: New error code.
GNUTLS_E_PKCS11_PIN_LOCKED: New error code.
GNUTLS_E_PKCS11_SESSION_ERROR: New error code.
GNUTLS_E_PKCS11_SIGNATURE_ERROR: New error code.
GNUTLS_E_PKCS11_TOKEN_ERROR: New error code.
GNUTLS_E_PKCS11_USER_ERROR: New error code.
GNUTLS_E_CRYPTO_INIT_FAILED: New error code.

Getting the Software
====================

GnuTLS may be downloaded from one of the mirror sites or direct from
<ftp://ftp.gnu.org/gnu/gnutls/>.  The list of mirrors can be found at
<http://www.gnu.org/software/gnutls/download.html>.

Here are the BZIP2 compressed sources (6.0MB):

  ftp://ftp.gnu.org/gnu/gnutls/gnutls-2.12.0.tar.bz2
  http://ftp.gnu.org/gnu/gnutls/gnutls-2.12.0.tar.bz2

Here are OpenPGP detached signatures signed using key 0xB565716F:

  ftp://ftp.gnu.org/gnu/gnutls/gnutls-2.12.0.tar.bz2.sig
  http://ftp.gnu.org/gnu/gnutls/gnutls-2.12.0.tar.bz2.sig

Note, that we don't distribute gzip compressed tarballs.

In order to check that the version of GnuTLS which you are going to
install is an original and unmodified one, you should verify the OpenPGP
signature.  You can use the command

     gpg --verify gnutls-2.12.0.tar.bz2.sig

This checks whether the signature file matches the source file.  You
should see a message indicating that the signature is good and made by
that signing key.  Make sure that you have the right key, either by
checking the fingerprint of that key with other sources or by checking
that the key has been signed by a trustworthy other key.  The signing
key can be identified with the following information:

pub   1280R/B565716F 2002-05-05 [expires: 2011-03-30]
      Key fingerprint = 0424 D4EE 81A0 E3D1 19C6  F835 EDA2 1E94 B565 716F
uid                  Simon Josefsson <jas@extundo.com>
uid                  Simon Josefsson <simon@josefsson.org>
sub   1280R/4D5D40AE 2002-05-05 [expires: 2011-03-30]

The key is available from:
  http://josefsson.org/key.txt
  dns:b565716f.josefsson.org?TYPE=CERT

Alternatively, after successfully verifying the OpenPGP signature of
this announcement, you could verify that the files match the following
checksum values.  The values are for SHA-1 and SHA-224 respectively:

7c102253bb4e817f393b9979a62c647010312eac  gnutls-2.12.0.tar.bz2

57ee306f261ed331b8386baf854f737fbf24da7b3bcc32331d34176b  gnutls-2.12.0.tar.bz2

Documentation
=============

The manual is available online at:

  http://www.gnu.org/software/gnutls/documentation.html

In particular the following formats are available:

 HTML: http://www.gnu.org/software/gnutls/manual/html_node/index.html
 PDF: http://www.gnu.org/software/gnutls/manual/gnutls.pdf

For developers there is a GnuTLS API reference manual formatted using
the GTK-DOC tools:

  http://www.gnu.org/software/gnutls/reference/gnutls-gnutls.html

Community
=========

If you need help to use GnuTLS, or want to help others, you are invited
to join our help-gnutls mailing list, see:

  http://lists.gnu.org/mailman/listinfo/help-gnutls

If you wish to participate in the development of GnuTLS, you are invited
to join our gnutls-dev mailing list, see:

  http://lists.gnu.org/mailman/listinfo/gnutls-devel

Windows installer
=================

GnuTLS has been ported to the Windows operating system, and a binary
installer is available.  The installer contains DLLs for application
development, manuals, examples, and source code.  The installer uses
libgpg-error v1.7, libgcrypt v1.4.5, libtasn1 v2.6, and GnuTLS
v2.12.0.

For more information about GnuTLS for Windows:
  http://josefsson.org/gnutls4win/

The Windows binary installer and PGP signature:
  http://josefsson.org/gnutls4win/gnutls-2.12.0.exe (15MB)
  http://josefsson.org/gnutls4win/gnutls-2.12.0.exe.sig

The checksum values for SHA-1 and SHA-224 are:

8a7965168c542edec3259469b6c0e87a9a2b4626  gnutls-2.12.0.exe

5f76c907eac768b714dc7187a17f87c0393439cf1ef44ab145aab6e3  gnutls-2.12.0.exe

A ZIP archive containing the Windows binaries:
  http://josefsson.org/gnutls4win/gnutls-2.12.0.zip (5.3MB)
  http://josefsson.org/gnutls4win/gnutls-2.12.0.zip.sig

A Debian mingw32 package is also available:
  http://josefsson.org/gnutls4win/mingw32-gnutls_2.7.10-1_all.deb (4.8MB)

The checksum values for SHA-1 and SHA-224 are:

aca9f9f1adba09b952e095039595d4c5d9e67d46  mingw32-gnutls_2.12.0-1_all.deb

269020738a9f36135e3f231a94cdb2cabc0edd3658092d76b87c27dc  mingw32-gnutls_2.12.0-1_all.deb

Internationalization
====================

The GnuTLS library messages have been translated into Czech, Dutch,
French, German, Italian, Malay, Polish, Simplified Chinese, Swedish,
and Vietnamese.  We welcome the addition of more translations.

Support
=======

Improving GnuTLS is costly, but you can help!  We are looking for
organizations that find GnuTLS useful and wish to contribute back.  You
can contribute by reporting bugs, improve the software, or donate money
or equipment.

Commercial support contracts for GnuTLS are available, and they help
finance continued maintenance.  Simon Josefsson Datakonsult AB, a
Stockholm based privately held company, is currently funding GnuTLS
maintenance.  We are always looking for interesting development
projects.  See http://josefsson.org/ for more details.

The GnuTLS service directory is available at:

  http://www.gnu.org/software/gnutls/commercial.html

Happy Hacking,
Simon
