[gnutls-dev] gnutls 1.0.6
Nikos Mavroyanopoulos
nmav at gnutls.org
Thu Feb 12 12:20:04 CET 2004
I've just released gnutls 1.0.6 which includes all
the new features of the 1.1.x branch except for TLS 1.1.
Those are:
- Improved gnutls-cli's SRP behaviour in SRP ciphersuites.
If they are of highest priority then the abbreviated handshake
is used.
- The error codes GNUTLS_E_NO_TEMPORARY_DH_PARAMS and GNUTLS_E_NO_TEMPORARY_RSA_PARAMS
are no longer returned by the handshake function. Ciphersuites that
require temporary parameters are removed when such parameters do not exist.
- Added the callbacks gnutls_certificate_client_retrieve_function() and
gnutls_certificate_server_retrieve_function(), to allow a client or a server
to specify certificates for the handshake without storing them to the
credentials structure.
- Added support for generating and exporting DSA private keys.
TLS 1.1 was not included because I couldn't test it against other
implementations. If you can test it, a patch that enables it is attached.
--
Nikos Mavroyanopoulos
-------------- next part --------------
--- gnutls1/lib/gnutls_algorithms.c Thu Feb 12 11:13:34 2004
+++ gnutls/lib/gnutls_algorithms.c Tue Jan 6 22:13:48 2004
@@ -109,6 +109,7 @@
static const gnutls_version_entry sup_versions[] = {
{"SSL 3.0", GNUTLS_SSL3, 3, 0, 1},
{"TLS 1.0", GNUTLS_TLS1, 3, 1, 1},
+ {"TLS 1.1", GNUTLS_TLS1_1, 3, 2, 1},
{0, 0, 0, 0, 0}
};
--- gnutls1/lib/gnutls_cipher.c Thu Feb 12 11:13:33 2004
+++ gnutls/lib/gnutls_cipher.c Wed Feb 11 20:51:21 2004
@@ -228,6 +228,9 @@
*pad = (uint8) (blocksize - (length % blocksize)) + rand;
length += *pad;
+ if ( session->security_parameters.version >= GNUTLS_TLS1_1)
+ length += blocksize; /* for the IV */
+
break;
default:
gnutls_assert();
@@ -312,6 +315,17 @@
}
data_ptr = cipher_data;
+ if ( block_algo==CIPHER_BLOCK &&
+ session->security_parameters.version >= GNUTLS_TLS1_1)
+ {
+ /* copy the random IV.
+ */
+ if (_gnutls_get_random(data_ptr, blocksize, GNUTLS_WEAK_RANDOM) < 0) {
+ gnutls_assert();
+ return GNUTLS_E_MEMORY_ERROR;
+ }
+ data_ptr += blocksize;
+ }
memcpy(data_ptr, compressed.data, compressed.size);
data_ptr += compressed.size;
@@ -403,6 +417,18 @@
ciphertext.size)) < 0) {
gnutls_assert();
return ret;
+ }
+
+ /* ignore the IV in TLS 1.1.
+ */
+ if (session->security_parameters.version >= GNUTLS_TLS1_1) {
+ ciphertext.size -= blocksize;
+ ciphertext.data += blocksize;
+
+ if (ciphertext.size == 0) {
+ gnutls_assert();
+ return GNUTLS_E_DECRYPTION_FAILED;
+ }
}
pad = ciphertext.data[ciphertext.size - 1] + 1; /* pad */
--- gnutls1/lib/gnutls.h.in.in Thu Feb 12 11:12:11 2004
+++ gnutls/lib/gnutls.h.in.in Tue Feb 10 22:10:06 2004
@@ -148,7 +148,7 @@
#define GNUTLS_TLS1 GNUTLS_TLS1_0
typedef enum gnutls_protocol_version { GNUTLS_SSL3=1, GNUTLS_TLS1_0,
- } gnutls_protocol_version;
+ GNUTLS_TLS1_1 } gnutls_protocol_version;
typedef enum gnutls_certificate_type { GNUTLS_CRT_X509=1, GNUTLS_CRT_OPENPGP
} gnutls_certificate_type;
More information about the Gnutls-dev
mailing list