Your message dated Wed, 06 Feb 2013 12:59:22 +0000
with message-id <627509345c68543383fc9fddda46e...@mail.adsl.funky-badger.org>
and subject line Re: Bug#699891: unblock: gnutls26/2.12.20-4
has caused the Debian Bug report #699891,
regarding unblock: gnutls26/2.12.20-4
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
699891: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699891
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package gnutls26. It contains a bunch of fixes from
upstream's 2.12.22 and 2.12.23 bugfix releases.

+35_TLS-CBC_timing-attack.diff (GNUTLS-SA-2013-1) TLS CBC padding timing
 attack. CVE-2013-0169 CVE-2013-1619. This is the recently published
 "lucky thirteen" TLS attack.
+34_pkcs11_memleak.diff Eliminated memory leak in PCKS #11
 initialization. (Should be quite helpful when running valgrind
 on a gnutls using package).
+31_allow_key_usage_violation.diff: Always tolerate key usage violation
 errors from the side of the peer, but also notify via an audit message.
+32_record-padding-parsing.patch: Fix record padding parsing issue.
 Thiis was also reported in the "lucky thirteen" paper.
+33_stricter_rsa_pkcs_1.5.diff: Fixes random handshake failures with
 non-GnuTLS implementations.

The watchfile was also updated.

This brings us up to GnuTLS 2.12.23, except for these differences:
- The equivalent change of 33_stricter_rsa_pkcs_1.5.diff for the nettle
  code is not included as it is not relevant for Debian's binary packages.
- 0b9d8d6f21dad85038c6de36d8fbd56271263f64 Corrected bug in PGP subpacket
  encoding.
- Compatibility with libtasn1 3.x, which would require libtasn1 >=2.14.
- Updated gnulib.
- Build system fixes.

I would really to all theses fixes in squeeze (35 and 32 qualify as
serious, the other ones as important). However if that is not possible
I can provide minimal upload (just 32 and 35) for tpu.

unblock gnutls26/2.12.20-4

Thanks for consideration, cu andreas
File lists identical on package level (after any substitutions)

Control files of package gnutls26-doc: lines which differ (wdiff format)
------------------------------------------------------------------------
Installed-Size: [-5737-] {+5738+}
Version: [-2.12.20-2-] {+2.12.20-4+}

Control files of package libgnutls-dev: lines which differ (wdiff format)
-------------------------------------------------------------------------
Depends: libgnutls26 (= [-2.12.20-2),-] {+2.12.20-4),+} libgnutlsxx27 (= [-2.12.20-2),-] {+2.12.20-4),+} libgnutls-openssl27 (= [-2.12.20-2),-] {+2.12.20-4),+} libgcrypt11-dev (>= 1.4.0), libc6-dev | libc-dev, zlib1g-dev, libtasn1-3-dev (>= 0.3.4), libp11-kit-dev (>= 0.4)
Installed-Size: [-1883-] {+1884+}
Version: [-2.12.20-2-] {+2.12.20-4+}

Control files of package libgnutls-openssl27: lines which differ (wdiff format)
-------------------------------------------------------------------------------
Depends: libgnutls26 (= [-2.12.20-2),-] {+2.12.20-4),+} libc6 (>= 2.4), libp11-kit0 (>= 0.11), libtasn1-3 (>= 1.6-0)
Installed-Size: [-272-] {+273+}
Version: [-2.12.20-2-] {+2.12.20-4+}

Control files of package libgnutls26: lines which differ (wdiff format)
-----------------------------------------------------------------------
Version: [-2.12.20-2-] {+2.12.20-4+}

Control files of package libgnutls26-dbg: lines which differ (wdiff format)
---------------------------------------------------------------------------
Depends: libgnutls26 (= [-2.12.20-2),-] {+2.12.20-4),+} libc6 (>= 2.4), libgcrypt11 (>= 1.4.5), libp11-kit0 (>= 0.11), libtasn1-3 (>= 1.6-0), zlib1g (>= 1:1.1.4)
Installed-Size: [-4332-] {+4335+}
Version: [-2.12.20-2-] {+2.12.20-4+}

Control files of package libgnutlsxx27: lines which differ (wdiff format)
-------------------------------------------------------------------------
Depends: libgnutls26 (= [-2.12.20-2),-] {+2.12.20-4),+} libc6 (>= 2.1.3), libgcc1 (>= 1:4.1.1), libp11-kit0 (>= 0.11), libstdc++6 (>= 4.1.1)
Version: [-2.12.20-2-] {+2.12.20-4+}




diff -Nru gnutls26-2.12.20/debian/changelog gnutls26-2.12.20/debian/changelog
--- gnutls26-2.12.20/debian/changelog	2012-11-13 19:21:44.000000000 +0100
+++ gnutls26-2.12.20/debian/changelog	2013-02-04 19:44:26.000000000 +0100
@@ -1,3 +1,33 @@
+gnutls26 (2.12.20-4) unstable; urgency=high
+
+  * Pull fixes from 2.12.23:
+    + 34_pkcs11_memleak.diff Eliminated memory leak in PCKS #11
+      initialization.
+    + 35_TLS-CBC_timing-attack.diff (GNUTLS-SA-2013-1) TLS CBC padding timing
+      attack
+
+ -- Andreas Metzler <ametz...@debian.org>  Mon, 04 Feb 2013 19:35:29 +0100
+
+gnutls26 (2.12.20-3) unstable; urgency=low
+
+  * Pull fixes from 2.12.22:
+    +31_allow_key_usage_violation.diff: Always tolerate key usage violation
+     errors from the side of the peer, but also notify via an audit message.
+    +32_record-padding-parsing.patch: Fix record padding parsing issue.
+    +33_stricter_rsa_pkcs_1.5.diff: Fixes random handshake failures with
+     non-GnuTLS implementations.
+    This brings us up to GnuTLS 2.12.22, except for these differences:
+    - The equivalent change of 33_stricter_rsa_pkcs_1.5.diff for the nettle
+      code is not included as it is not relevant for Debian's binary packages.
+    - 0b9d8d6f21dad85038c6de36d8fbd56271263f64 Corrected bug in PGP subpacket
+      encoding.
+    - Compatibility with libtasn1 3.x, which would require libtasn1 >=2.14.
+    - Updated gnulib.
+  * Update watchfile, based on Bart Martens version from q.d.o, but use a)
+    ftp.gnutls.org as mirror and b) limit the the match to 2.x versions.
+
+ -- Andreas Metzler <ametz...@debian.org>  Sun, 06 Jan 2013 10:56:57 +0100
+
 gnutls26 (2.12.20-2) unstable; urgency=low
 
   * 30_strlen_on_null.diff: Fix segfault caused by running strlen() on NULL.
diff -Nru gnutls26-2.12.20/debian/patches/31_allow_key_usage_violation.diff gnutls26-2.12.20/debian/patches/31_allow_key_usage_violation.diff
--- gnutls26-2.12.20/debian/patches/31_allow_key_usage_violation.diff	1970-01-01 01:00:00.000000000 +0100
+++ gnutls26-2.12.20/debian/patches/31_allow_key_usage_violation.diff	2013-01-06 10:30:38.000000000 +0100
@@ -0,0 +1,66 @@
+From: Nikos Mavrogiannopoulos <n...@gnutls.org>
+Description:  
+ ** libgnutls: Always tolerate key usage violation errors from the side
+ of the peer, but also notify via an audit message.
+. 
+ Pulled from uptream GIT, combining
+ http://gitorious.org/gnutls/gnutls/commit/afd6b636d1d9b079699afb0c3b20692edcf5b262
+ and
+ http://gitorious.org/gnutls/gnutls/commit/dbc72ae47b16c6718cb5e53d4a31205bc45d3742
+
+--- gnutls26-2.12.20.orig/lib/gnutls_sig.c
++++ gnutls26-2.12.20/lib/gnutls_sig.c
+@@ -222,7 +222,7 @@ sign_tls_hash (gnutls_session_t session,
+         if (!(cert->key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE))
+           {
+             gnutls_assert ();
+-            return GNUTLS_E_KEY_USAGE_VIOLATION;
++            _gnutls_debug_log("Key usage violation was detected (ignored).\n");
+           }
+ 
+       /* External signing. */
+@@ -270,7 +270,7 @@ es_cleanup:
+ }
+ 
+ static int
+-verify_tls_hash (gnutls_protocol_t ver, gnutls_cert * cert,
++verify_tls_hash (gnutls_session_t session, gnutls_protocol_t ver, gnutls_cert * cert,
+                     const gnutls_datum_t * hash_concat,
+                     gnutls_datum_t * signature, size_t sha1pos,
+                     gnutls_pk_algorithm_t pk_algo)
+@@ -292,7 +292,7 @@ verify_tls_hash (gnutls_protocol_t ver,
+     if (!(cert->key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE))
+       {
+         gnutls_assert ();
+-        return GNUTLS_E_KEY_USAGE_VIOLATION;
++        _gnutls_debug_log("Key usage violation was detected (ignored).\n");
+       }
+ 
+   if (pk_algo == GNUTLS_PK_UNKNOWN)
+@@ -425,7 +425,7 @@ _gnutls_handshake_verify_data (gnutls_se
+       dconcat.size = _gnutls_hash_get_algo_len (hash_algo);
+     }
+ 
+-  ret = verify_tls_hash (ver, cert, &dconcat, signature,
++  ret = verify_tls_hash (session, ver, cert, &dconcat, signature,
+                             dconcat.size -
+                             _gnutls_hash_get_algo_len (hash_algo),
+                             _gnutls_sign_get_pk_algorithm (algo));
+@@ -490,7 +490,7 @@ _gnutls_handshake_verify_cert_vrfy12 (gn
+   dconcat.size = _gnutls_hash_get_algo_len (hash_algo);
+ 
+   ret =
+-    verify_tls_hash (ver, cert, &dconcat, signature, 0,
++    verify_tls_hash (session, ver, cert, &dconcat, signature, 0,
+                         cert->subject_pk_algorithm);
+   if (ret < 0)
+     {
+@@ -581,7 +581,7 @@ _gnutls_handshake_verify_cert_vrfy (gnut
+   dconcat.size = 20 + 16;       /* md5+ sha */
+ 
+   ret =
+-    verify_tls_hash (ver, cert, &dconcat, signature, 16,
++    verify_tls_hash (session, ver, cert, &dconcat, signature, 16,
+                         cert->subject_pk_algorithm);
+   if (ret < 0)
+     {
diff -Nru gnutls26-2.12.20/debian/patches/32_record-padding-parsing.patch gnutls26-2.12.20/debian/patches/32_record-padding-parsing.patch
--- gnutls26-2.12.20/debian/patches/32_record-padding-parsing.patch	1970-01-01 01:00:00.000000000 +0100
+++ gnutls26-2.12.20/debian/patches/32_record-padding-parsing.patch	2013-01-06 10:32:08.000000000 +0100
@@ -0,0 +1,35 @@
+From 7b65049a81ea02a92fef934318a680afd55e98d2 Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <n...@gnutls.org>
+Date: Thu, 3 Jan 2013 23:48:38 +0100
+Subject: [PATCH 07/11] Corrected bugs in record padding parsing.
+
+libgnutls: Fixed record padding parsing issue. Reported by Kenny
+Patterson and Nadhem Alfardan.
+http://gitorious.org/gnutls/gnutls/commit/7b65049a81ea02a92fef934318a680afd55e98d2
+
+ 
+diff --git a/lib/gnutls_cipher.c b/lib/gnutls_cipher.c
+index 6b83208..9a5d128 100644
+--- a/lib/gnutls_cipher.c
++++ b/lib/gnutls_cipher.c
+@@ -461,7 +461,7 @@ _gnutls_ciphertext2compressed (gnutls_session_t session,
+ {
+   uint8_t MAC[MAX_HASH_SIZE];
+   uint16_t c_length;
+-  uint8_t pad;
++  unsigned int pad;
+   int length;
+   uint16_t blocksize;
+   int ret, i, pad_failed = 0;
+@@ -537,7 +537,7 @@ _gnutls_ciphertext2compressed (gnutls_session_t session,
+       /* Check the pading bytes (TLS 1.x)
+        */
+       if (_gnutls_version_has_variable_padding (ver) && pad_failed == 0)
+-        for (i = 2; i < pad; i++)
++        for (i = 2; i <= pad; i++)
+           {
+             if (ciphertext.data[ciphertext.size - i] !=
+                 ciphertext.data[ciphertext.size - 1])
+-- 
+1.7.10.4
+
diff -Nru gnutls26-2.12.20/debian/patches/33_stricter_rsa_pkcs_1.5.diff gnutls26-2.12.20/debian/patches/33_stricter_rsa_pkcs_1.5.diff
--- gnutls26-2.12.20/debian/patches/33_stricter_rsa_pkcs_1.5.diff	1970-01-01 01:00:00.000000000 +0100
+++ gnutls26-2.12.20/debian/patches/33_stricter_rsa_pkcs_1.5.diff	2013-01-06 10:46:54.000000000 +0100
@@ -0,0 +1,67 @@
+From 24c6ce144a1e071210dc33cc794690429d74456c Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <n...@gnutls.org>
+Date: Sun, 6 Jan 2013 00:11:01 +0100
+Subject: [PATCH 11/11] libgcrypt code updated with similar checks to nettle
+ code
+
+This is the gcrypt counterpart to
+http://gitorious.org/gnutls/gnutls/commit/9709393ac263d7fbd9f790c884b7b8141c6f4b13
+Stricter RSA PKCS #1 1.5 encoding and decoding. Reported
+by Kikuchi Masashi.
+http://lists.gnutls.org/pipermail/gnutls-devel/2012-December/006016.html
+
+---
+ lib/gcrypt/pk.c |   16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/lib/gcrypt/pk.c b/lib/gcrypt/pk.c
+index e3bedaf..b1ce8f9 100644
+--- a/lib/gcrypt/pk.c
++++ b/lib/gcrypt/pk.c
+@@ -121,7 +121,7 @@ _wrap_gcry_pk_encrypt (gnutls_pk_algorithm_t algo,
+       goto cleanup;
+     }
+ 
+-  ret = _gnutls_mpi_dprint_size (res, ciphertext, plaintext->size);
++  ret = _gnutls_mpi_dprint_size (res, ciphertext, (_gnutls_mpi_get_nbits(pk_params->params[0])+7)/8);
+   _gnutls_mpi_release (&res);
+   if (ret < 0)
+     {
+@@ -164,6 +164,12 @@ _wrap_gcry_pk_decrypt (gnutls_pk_algorithm_t algo,
+   switch (algo)
+     {
+     case GNUTLS_PK_RSA:
++        if (ciphertext->size != (_gnutls_mpi_get_nbits(pk_params->params[0])+7)/8)
++          {
++            gnutls_assert ();
++            return GNUTLS_E_DECRYPTION_FAILED;
++          }
++
+       if (pk_params->params_nr >= 6)
+         rc = gcry_sexp_build (&s_pkey, NULL,
+                               "(private-key(rsa((n%m)(e%m)(d%m)(p%m)(q%m)(u%m))))",
+@@ -363,7 +369,7 @@ _wrap_gcry_pk_sign (gnutls_pk_algorithm_t algo, gnutls_datum_t * signature,
+         res[0] = gcry_sexp_nth_mpi (list, 1, GCRYMPI_FMT_USG);
+         gcry_sexp_release (list);
+ 
+-        ret = _gnutls_mpi_dprint (res[0], signature);
++        ret = _gnutls_mpi_dprint_size (res[0], signature, (_gnutls_mpi_get_nbits(pk_params->params[0])+7)/8);
+         if (ret < 0)
+           {
+             gnutls_assert ();
+@@ -424,6 +430,12 @@ _wrap_gcry_pk_verify (gnutls_pk_algorithm_t algo,
+                               pk_params->params[2], pk_params->params[3]);
+       break;
+     case GNUTLS_PK_RSA:
++      if (signature->size != (_gnutls_mpi_get_nbits(pk_params->params[0])+7)/8)
++        {
++          gnutls_assert ();
++          return GNUTLS_E_PK_SIG_VERIFY_FAILED;
++        }
++
+       if (pk_params->params_nr >= 2)
+         rc = gcry_sexp_build (&s_pkey, NULL,
+                               "(public-key(rsa(n%m)(e%m)))",
+-- 
+1.7.10.4
+
diff -Nru gnutls26-2.12.20/debian/patches/34_pkcs11_memleak.diff gnutls26-2.12.20/debian/patches/34_pkcs11_memleak.diff
--- gnutls26-2.12.20/debian/patches/34_pkcs11_memleak.diff	1970-01-01 01:00:00.000000000 +0100
+++ gnutls26-2.12.20/debian/patches/34_pkcs11_memleak.diff	2013-02-04 19:16:48.000000000 +0100
@@ -0,0 +1,36 @@
+From 433bc2bdc118ac3b8a83a5fb7d41b3cecdd73cc9 Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <d...@fifthhorseman.net>
+Date: Sun, 3 Feb 2013 13:13:34 -0500
+Subject: [PATCH 1/6] free allocated module name. Reported by Sam Varshavchik.
+
+This is the same fix from the 3.0 branch as:
+
+ ce7caadb  "free allocated module name. Reported by Sam Varshavchik."
+
+** libgnutls: Eliminated memory leak in PCKS #11 initialization.
+Report and fix by Sam Varshavchik.
+
+diff --git a/lib/pkcs11.c b/lib/pkcs11.c
+index 59cf686..2bf6b04 100644
+--- a/lib/pkcs11.c
++++ b/lib/pkcs11.c
+@@ -441,7 +441,7 @@ static int
+ initialize_automatic_p11_kit (void)
+ {
+   struct ck_function_list **modules;
+-  const char *name;
++  char *name;
+   ck_rv_t rv;
+   int i, ret;
+ 
+@@ -466,6 +466,7 @@ initialize_automatic_p11_kit (void)
+           gnutls_assert ();
+           _gnutls_debug_log ("Cannot add registered module: %s\n", name);
+         }
++      free(name);
+     }
+ 
+   free (modules);
+-- 
+1.7.10.4
+
diff -Nru gnutls26-2.12.20/debian/patches/35_TLS-CBC_timing-attack.diff gnutls26-2.12.20/debian/patches/35_TLS-CBC_timing-attack.diff
--- gnutls26-2.12.20/debian/patches/35_TLS-CBC_timing-attack.diff	1970-01-01 01:00:00.000000000 +0100
+++ gnutls26-2.12.20/debian/patches/35_TLS-CBC_timing-attack.diff	2013-02-04 19:24:15.000000000 +0100
@@ -0,0 +1,183 @@
+Description: avoid a timing attack in TLS CBC record parsing.
+  http://www.gnutls.org/security.html#GNUTLS-SA-2013-1
+  http://www.isg.rhul.ac.uk/tls/
+Origin: upstream, http://gitorious.org/gnutls/gnutls/commit/458c67cf98740e7b12404f6c30e0d5317d56fd30 http://gitorious.org/gnutls/gnutls/commit/93b7fcfa3297a9123630704668b2946f602b910e
+Forwarded: not-needed
+Last-Update: 2013-02-04
+
+--- gnutls26-2.12.20.orig/lib/gnutls_hash_int.h
++++ gnutls26-2.12.20/lib/gnutls_hash_int.h
+@@ -97,4 +97,25 @@ void _gnutls_mac_deinit_ssl3_handshake (
+ 
+ int _gnutls_hash_copy (digest_hd_st * dst_handle, digest_hd_st * src_handle);
+ 
++/* We shouldn't need to know that, but a work-around in decoding
++ * TLS record padding requires that.
++ */
++inline static size_t
++_gnutls_get_hash_block_len (gnutls_digest_algorithm_t algo)
++{
++  switch (algo)
++    {
++    case GNUTLS_DIG_MD5:
++    case GNUTLS_DIG_SHA1:
++    case GNUTLS_DIG_RMD160:
++    case GNUTLS_DIG_SHA256:
++    case GNUTLS_DIG_SHA384:
++    case GNUTLS_DIG_SHA512:
++    case GNUTLS_DIG_SHA224:
++      return 64;
++    default:
++      return 0;
++    }
++}
++
+ #endif /* GNUTLS_HASH_INT_H */
+--- gnutls26-2.12.20.orig/lib/gnutls_cipher.c
++++ gnutls26-2.12.20/lib/gnutls_cipher.c
+@@ -1,6 +1,6 @@
+ /*
+- * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, 2010
+- * Free Software Foundation, Inc.
++ * Copyright (C) 2000-2013 Free Software Foundation, Inc.
++ * Copyright (C) 2013 Nikos Mavrogiannopoulos
+  *
+  * Author: Nikos Mavrogiannopoulos
+  *
+@@ -448,6 +448,48 @@ _gnutls_compressed2ciphertext (gnutls_se
+   return length;
+ }
+ 
++static void dummy_wait(record_parameters_st * params, gnutls_datum_t* plaintext, 
++                       unsigned pad_failed, unsigned int pad, unsigned total, int ver)
++{
++  /* this hack is only needed on CBC ciphers */
++  if (_gnutls_cipher_is_block (params->cipher_algorithm) == CIPHER_BLOCK)
++    {
++      uint8_t MAC[MAX_HASH_SIZE];
++      unsigned len;
++      digest_hd_st td;
++      int ret;
++
++      ret = mac_init (&td, params->mac_algorithm,
++                      params->read.mac_secret.data,
++                      params->read.mac_secret.size, ver);
++
++      if (ret < 0)
++        return;
++
++      /* force an additional hash compression function evaluation to prevent timing 
++       * attacks that distinguish between wrong-mac + correct pad, from wrong-mac + incorrect pad.
++       */
++      if (pad_failed == 0 && pad > 0) 
++        {
++          len = _gnutls_get_hash_block_len(params->mac_algorithm);
++          if (len > 0)
++            {
++              /* This is really specific to the current hash functions.
++               * It should be removed once a protocol fix is in place.
++               */
++	      if ((pad+total) % len > len-9 && total % len <= len-9) 
++	        {
++	          if (len < plaintext->size)
++                    mac_hash (&td, plaintext->data, len, ver);
++                  else
++                    mac_hash (&td, plaintext->data, plaintext->size, ver);
++                }
++            }
++        }
++
++      mac_deinit (&td, MAC, ver);
++    }
++}
+ 
+ /* Deciphers the ciphertext packet, and puts the result to compress_data, of compress_size.
+  * Returns the actual compressed packet size.
+@@ -461,12 +503,12 @@ _gnutls_ciphertext2compressed (gnutls_se
+ {
+   uint8_t MAC[MAX_HASH_SIZE];
+   uint16_t c_length;
+-  unsigned int pad;
++  unsigned int pad = 0;
+   int length;
+   uint16_t blocksize;
+   int ret, i, pad_failed = 0;
+   opaque preamble[PREAMBLE_SIZE];
+-  int preamble_size;
++  int preamble_size = 0;
+   int ver = gnutls_protocol_get_version (session);
+   int hash_size = _gnutls_hash_get_algo_len (params->mac_algorithm);
+ 
+@@ -518,31 +560,23 @@ _gnutls_ciphertext2compressed (gnutls_se
+           gnutls_assert ();
+           return GNUTLS_E_DECRYPTION_FAILED;
+         }
+-      pad = ciphertext.data[ciphertext.size - 1] + 1;   /* pad */
+-
+-      if ((int) pad > (int) ciphertext.size - hash_size)
+-        {
+-          gnutls_assert ();
+-          _gnutls_record_log
+-            ("REC[%p]: Short record length %d > %d - %d (under attack?)\n",
+-             session, pad, ciphertext.size, hash_size);
+-          /* We do not fail here. We check below for the
+-           * the pad_failed. If zero means success.
+-           */
+-          pad_failed = GNUTLS_E_DECRYPTION_FAILED;
+-        }
+-
+-      length = ciphertext.size - hash_size - pad;
++      pad = ciphertext.data[ciphertext.size - 1];   /* pad */
+ 
+-      /* Check the pading bytes (TLS 1.x)
++      /* Check the pading bytes (TLS 1.x). 
++       * Note that we access all 256 bytes of ciphertext for padding check
++       * because there is a timing channel in that memory access (in certain CPUs).
+        */
+       if (_gnutls_version_has_variable_padding (ver) && pad_failed == 0)
+         for (i = 2; i <= pad; i++)
+           {
+-            if (ciphertext.data[ciphertext.size - i] !=
+-                ciphertext.data[ciphertext.size - 1])
++            if (ciphertext.data[ciphertext.size - i] != pad)
+               pad_failed = GNUTLS_E_DECRYPTION_FAILED;
+           }
++          
++      if (pad_failed)
++        pad = 0;
++      length = ciphertext.size - hash_size - pad - 1;
++
+       break;
+     default:
+       gnutls_assert ();
+@@ -581,24 +615,19 @@ _gnutls_ciphertext2compressed (gnutls_se
+       mac_deinit (&td, MAC, ver);
+     }
+ 
+-  /* This one was introduced to avoid a timing attack against the TLS
+-   * 1.0 protocol.
+-   */
+-  if (pad_failed != 0)
+-    {
+-      gnutls_assert ();
+-      return pad_failed;
+-    }
+-
+   /* HMAC was not the same. 
+    */
+-  if (memcmp (MAC, &ciphertext.data[length], hash_size) != 0)
++  if (memcmp (MAC, &ciphertext.data[length], hash_size) != 0 || pad_failed != 0)
+     {
++      gnutls_datum_t compressed = {compress_data, compress_size};
++      /* HMAC was not the same. */
++      dummy_wait(params, &compressed, pad_failed, pad, length+preamble_size, ver);
++
+       gnutls_assert ();
+       return GNUTLS_E_DECRYPTION_FAILED;
+     }
+ 
+-  /* copy the decrypted stuff to compress_data.
++  /* copy the decrypted stuff to compressed_data.
+    */
+   if (compress_size < length)
+     {
diff -Nru gnutls26-2.12.20/debian/patches/series gnutls26-2.12.20/debian/patches/series
--- gnutls26-2.12.20/debian/patches/series	2012-11-12 19:28:53.000000000 +0100
+++ gnutls26-2.12.20/debian/patches/series	2013-02-04 19:24:30.000000000 +0100
@@ -4,3 +4,8 @@
 18_gpgerrorinpkgconfig.diff
 20_tests-select.diff
 30_strlen_on_null.diff
+31_allow_key_usage_violation.diff
+32_record-padding-parsing.patch
+33_stricter_rsa_pkcs_1.5.diff
+34_pkcs11_memleak.diff
+35_TLS-CBC_timing-attack.diff
diff -Nru gnutls26-2.12.20/debian/watch gnutls26-2.12.20/debian/watch
--- gnutls26-2.12.20/debian/watch	2012-11-12 19:16:57.000000000 +0100
+++ gnutls26-2.12.20/debian/watch	2013-01-06 11:04:28.000000000 +0100
@@ -1,2 +1,3 @@
 version=3
-ftp://ftp.gnutls.org/pub/gnutls/gnutls-(.*)\.tar\.bz2 debian uupdate
+opts=uversionmangle=s/(.*\d)(pre\d*)$/$1~$2/ \
+ftp://ftp.gnutls.org/gcrypt/gnutls/v2.(\d\d)/gnutls-(2\.\d.*)\.(?:tgz|zip|tar\.(?:gz|bz2|xz))

Attachment: signature.asc
Description: Digital signature


--- End Message ---
--- Begin Message ---
On 06.02.2013 12:22, Andreas Metzler wrote:
Please unblock package gnutls26. It contains a bunch of fixes from
upstream's 2.12.22 and 2.12.23 bugfix releases.
[...]
I would really to all theses fixes in squeeze (35 and 32 qualify as
serious, the other ones as important). However if that is not possible
I can provide minimal upload (just 32 and 35) for tpu.

I assumed you meant wheezy here. :-)

Unblocked; thanks.

Regards,

Adam

--- End Message ---

Reply via email to