gnutls 2.12.0

Nikos Mavrogiannopoulos nmav at
Thu Mar 24 19:40:50 CET 2011

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:

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

** libgnutls: Added support for reading DN from EV-certificates.
New DN values:

** 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

** 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

** 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

** 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_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_certificate_client_retrieve_function: DEPRECATED (use:
gnutls_certificate_server_retrieve_function: DEPRECATED (use:
gnutls_certificate_verify_peers: DEPRECATED (use:
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_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
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_PKCS11_ERROR: New error code.
GNUTLS_E_PKCS11_LOAD_ERROR: New error code.
GNUTLS_E_PKCS11_PIN_ERROR: New error code.
GNUTLS_E_PKCS11_SLOT_ERROR: New error code.
GNUTLS_E_PKCS11_DATA_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_TOKEN_ERROR: New error code.
GNUTLS_E_PKCS11_USER_ERROR: New error code.

Getting the Software

GnuTLS may be downloaded from one of the mirror sites or direct from
<>.  The list of mirrors can be found at

Here are the BZIP2 compressed sources (6.0MB):

Here are OpenPGP detached signatures signed using key 0xB565716F:

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   3104R/96865171 2008-05-04 [expires: 2028-04-29]
      Key fingerprint = 1F42 4189 05D8 206A A754  CCDC 29EE 58B9 9686 5171
uid                  Nikos Mavrogiannopoulos <nmav at>
uid                  Nikos Mavrogiannopoulos <n.mavrogiannopoulos at>
sub   2048R/9013B842 2008-05-04 [expires: 2018-05-02]
sub   2048R/1404A91D 2008-05-04 [expires: 2018-05-02]

The key is available from:

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

48f27df66c7a721c5ce2b690ab936a3c9162c40a  gnutls-2.12.0.tar.bz2


The manual is available online at:

In particular the following formats are available:


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


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

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


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.


More information about the Gnutls-devel mailing list