]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Several bug fixes by Fabian Keil (some were modified by me).
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 15 Jul 2009 19:01:47 +0000 (22:01 +0300)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 15 Jul 2009 19:01:47 +0000 (22:01 +0300)
18 files changed:
doc/examples/ex-serv-anon.c
doc/examples/ex-serv-export.c
doc/examples/ex-serv-pgp.c
doc/examples/ex-serv-psk.c
doc/examples/ex-serv-srp.c
doc/examples/ex-serv1.c
lib/auth_cert.c
lib/gnutls_buffers.c
lib/gnutls_mpi.c
lib/gnutls_pk.c
lib/gnutls_sig.c
lib/opencdk/stream.c
lib/opencdk/write-packet.c
lib/openpgp/pgp.c
lib/openpgp/privkey.c
lib/x509/privkey_pkcs8.c
src/certtool.c
src/psk.c

index 722d1fc07a43b249a6e070f3ab1bb946d86f27f6..098432aaf77debff5842cd5d112fa6538c535b91 100644 (file)
@@ -64,7 +64,7 @@ generate_dh_params (void)
 int
 main (void)
 {
-  int err, listen_sd, i;
+  int err, listen_sd;
   int sd, ret;
   struct sockaddr_in sa_serv;
   struct sockaddr_in sa_cli;
@@ -129,7 +129,6 @@ main (void)
       /* see the Getting peer's information example */
       /* print_info(session); */
 
-      i = 0;
       for (;;)
        {
          memset (buffer, 0, MAX_BUF + 1);
index d3d33a6e1d02be8a65189966c9b7ab982196e82d..f86a0c28bb91ffba325b3193cad10e93d80fb13d 100644 (file)
@@ -119,7 +119,7 @@ generate_rsa_params (void)
 int
 main (void)
 {
-  int err, listen_sd, i;
+  int err, listen_sd;
   int sd, ret;
   struct sockaddr_in sa_serv;
   struct sockaddr_in sa_cli;
@@ -207,7 +207,6 @@ main (void)
 
       /* print_info(session); */
 
-      i = 0;
       for (;;)
        {
          memset (buffer, 0, MAX_BUF + 1);
index e9070565f9ae73ae62056c2e9fc031078137e46a..e0cfcdc1a13d4a6b38e71d74533cc31c9035984b 100644 (file)
@@ -70,7 +70,7 @@ initialize_tls_session (void)
 int
 main (void)
 {
-  int err, listen_sd, i;
+  int err, listen_sd;
   int sd, ret;
   struct sockaddr_in sa_serv;
   struct sockaddr_in sa_cli;
@@ -143,7 +143,6 @@ main (void)
       /* see the Getting peer's information example */
       /* print_info(session); */
 
-      i = 0;
       for (;;)
        {
          memset (buffer, 0, MAX_BUF + 1);
index 6e5d77a837262faf3d928d580a801596bd1fced4..e010313a89eacc5694e8ad01dc1ce44a4330ca3f 100644 (file)
@@ -91,7 +91,7 @@ pskfunc (gnutls_session_t session, const char *username, gnutls_datum_t * key)
 int
 main (void)
 {
-  int err, listen_sd, i;
+  int err, listen_sd;
   int sd, ret;
   struct sockaddr_in sa_serv;
   struct sockaddr_in sa_cli;
@@ -174,7 +174,6 @@ main (void)
       /* see the Getting peer's information example */
       /* print_info(session); */
 
-      i = 0;
       for (;;)
        {
          memset (buffer, 0, MAX_BUF + 1);
index 559f7ac7bc67dd5a43c756be5decb0915f9b4a9b..859b2f074340f71ffe32f848be591ba7de85c85e 100644 (file)
@@ -59,7 +59,7 @@ initialize_tls_session (void)
 int
 main (void)
 {
-  int err, listen_sd, i;
+  int err, listen_sd;
   int sd, ret;
   struct sockaddr_in sa_serv;
   struct sockaddr_in sa_cli;
@@ -133,7 +133,6 @@ main (void)
 
       /* print_info(session); */
 
-      i = 0;
       for (;;)
        {
          memset (buffer, 0, MAX_BUF + 1);
index 0a47cc140ad8ea65e7b48a2d57817c17c285eeab..6dd8164ef5bcbb0973873c706bd6b656ca9492df 100644 (file)
@@ -80,7 +80,7 @@ generate_dh_params (void)
 int
 main (void)
 {
-  int err, listen_sd, i;
+  int err, listen_sd;
   int sd, ret;
   struct sockaddr_in sa_serv;
   struct sockaddr_in sa_cli;
@@ -160,7 +160,6 @@ main (void)
       /* see the Getting peer's information example */
       /* print_info(session); */
 
-      i = 0;
       for (;;)
        {
          memset (buffer, 0, MAX_BUF + 1);
index 3d47d459c899cfc0dcc17003b118b669bb6baba4..c0e7547e85a0dbd0c209946e6a4b51be4c141762 100644 (file)
@@ -1065,7 +1065,7 @@ _gnutls_proc_openpgp_server_certificate (gnutls_session_t session,
   cert_auth_info_t info;
   gnutls_certificate_credentials_t cred;
   ssize_t dsize = data_size;
-  int i, x, key_type;
+  int x, key_type;
   gnutls_cert *peer_certificate_list = NULL;
   int peer_certificate_list_size = 0;
   gnutls_datum_t tmp, akey = { NULL, 0 };
@@ -1106,7 +1106,6 @@ _gnutls_proc_openpgp_server_certificate (gnutls_session_t session,
       /* no certificate was sent */
       return GNUTLS_E_NO_CERTIFICATE_FOUND;
     }
-  i = dsize;
 
   /* Read PGPKeyDescriptor */
   DECR_LEN (dsize, 1);
index 52d3b410496aff04a52a2281dfca846d34776964..e31d0645af0a0670c087a6b8d5c445f5f2bfdb8e 100644 (file)
@@ -1115,7 +1115,7 @@ _gnutls_handshake_buffer_get_ptr (gnutls_session_t session,
   if (length != NULL)
     *length = session->internals.handshake_hash_buffer.length;
 
-  _gnutls_buffers_log ("BUF[HSK]: Peeked %d bytes of Data\n", (int)*length);
+  _gnutls_buffers_log ("BUF[HSK]: Peeked %d bytes of Data\n", (int)session->internals.handshake_hash_buffer.length);
 
   if (data_ptr != NULL)
     *data_ptr = session->internals.handshake_hash_buffer.data;
index 85579e5bd47cd5255200bfa89e46500aeca03de7..8365d0692893faf79f3d3fc624f4d570481b88f7 100644 (file)
@@ -341,6 +341,12 @@ _gnutls_x509_write_int (ASN1_TYPE node, const char *value, bigint_t mpi,
     result = _gnutls_mpi_print_lz (mpi, NULL, &s_len);
   else
     result = _gnutls_mpi_print (mpi, NULL, &s_len);
+  
+  if (result != 0)
+    {
+      gnutls_assert();
+      return result;
+    }
 
   tmpstr = gnutls_malloc (s_len);
   if (tmpstr == NULL)
index a08349bb49f910e3245a99a4214b7b052e2c15c1..2609252c692b4f5892f6fe0e709d68c76796b4a4 100644 (file)
@@ -361,7 +361,7 @@ int
 _gnutls_encode_ber_rs (gnutls_datum_t * sig_value, bigint_t r, bigint_t s)
 {
   ASN1_TYPE sig;
-  int result, tot_len;
+  int result;
 
   if ((result =
        asn1_create_element (_gnutls_get_gnutls_asn (),
@@ -388,8 +388,6 @@ _gnutls_encode_ber_rs (gnutls_datum_t * sig_value, bigint_t r, bigint_t s)
       return result;
     }
 
-  tot_len = 0;
-
   result = _gnutls_x509_der_encode (sig, "", sig_value, 0);
 
   asn1_delete_structure (&sig);
index dfb1a8ff1b9af9f049efbf9ffd81916d88e4f0e0..81f5aa355b2f7fe6a4bffda5ecea0f41cf0d22af 100644 (file)
@@ -270,22 +270,24 @@ _gnutls_tls_sign (gnutls_session_t session,
    */
 
   if (cert != NULL)
-    if (cert->key_usage != 0)
-      if (!(cert->key_usage & KEY_DIGITAL_SIGNATURE))
-       {
-         gnutls_assert ();
-         return GNUTLS_E_KEY_USAGE_VIOLATION;
-       }
-
-  /* External signing. */
-  if (!pkey || pkey->params_size == 0)
     {
-      if (!session->internals.sign_func)
-       return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
-
-      return (*session->internals.sign_func)
-       (session, session->internals.sign_func_userdata,
-        cert->cert_type, &cert->raw, hash_concat, signature);
+      if (cert->key_usage != 0)
+        if (!(cert->key_usage & KEY_DIGITAL_SIGNATURE))
+         {
+           gnutls_assert ();
+           return GNUTLS_E_KEY_USAGE_VIOLATION;
+         }
+
+      /* External signing. */
+      if (!pkey || pkey->params_size == 0)
+        {
+          if (!session->internals.sign_func)
+           return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
+
+          return (*session->internals.sign_func)
+           (session, session->internals.sign_func_userdata,
+            cert->cert_type, &cert->raw, hash_concat, signature);
+        }
     }
 
   return _gnutls_sign (pkey->pk_algorithm, pkey->params,
index 60823cbf5c8ce63ef219cfc4c7e0f880aefb6716..7171371a7dcd0328c98249a8bd014532336bcac3 100644 (file)
@@ -932,7 +932,6 @@ cdk_stream_read (cdk_stream_t s, void *buf, size_t buflen)
 
   if (!s)
     {
-      s->error = CDK_Inv_Value;
       gnutls_assert ();
       return EOF;
     }
@@ -989,7 +988,6 @@ cdk_stream_getc (cdk_stream_t s)
 
   if (!s)
     {
-      s->error = CDK_Inv_Value;
       gnutls_assert ();
       return EOF;
     }
@@ -1022,7 +1020,6 @@ cdk_stream_write (cdk_stream_t s, const void *buf, size_t count)
 
   if (!s)
     {
-      s->error = CDK_Inv_Value;
       gnutls_assert ();
       return EOF;
     }
@@ -1081,7 +1078,6 @@ cdk_stream_putc (cdk_stream_t s, int c)
 
   if (!s)
     {
-      s->error = CDK_Inv_Value;
       gnutls_assert ();
       return EOF;
     }
index 24e47b05740a2e2c9656fefc79a80312e3c403e4..285f4133596c645bb00c33444b5afeb961679aec 100644 (file)
@@ -562,34 +562,40 @@ write_secret_key (cdk_stream_t out, cdk_pkt_seckey_t sk,
     }
   if (!rc)
     rc = stream_putc (out, _cdk_pub_algo_to_pgp (pk->pubkey_algo));
+
   if (!rc)
     rc = write_mpibuf (out, pk->mpi, npkey);
-  if (sk->is_protected == 0)
-    rc = stream_putc (out, 0x00);
-  else
+
+  if (!rc) 
     {
-      if (is_RSA (pk->pubkey_algo) && pk->version < 4)
-       stream_putc (out, _gnutls_cipher_to_pgp (sk->protect.algo));
-      else if (sk->protect.s2k)
-       {
-         s2k_mode = sk->protect.s2k->mode;
-         rc = stream_putc (out, sk->protect.sha1chk ? 0xFE : 0xFF);
-         if (!rc)
-           rc = stream_putc (out, _gnutls_cipher_to_pgp (sk->protect.algo));
-         if (!rc)
-           rc = stream_putc (out, sk->protect.s2k->mode);
-         if (!rc)
-           rc = stream_putc (out, sk->protect.s2k->hash_algo);
-         if (!rc && (s2k_mode == 1 || s2k_mode == 3))
-           {
-             rc = stream_write (out, sk->protect.s2k->salt, 8);
-             if (!rc && s2k_mode == 3)
-               rc = stream_putc (out, sk->protect.s2k->count);
-           }
-       }
+      if (sk->is_protected == 0)
+        rc = stream_putc (out, 0x00);
       else
-       return CDK_Inv_Value;
-      rc = stream_write (out, sk->protect.iv, sk->protect.ivlen);
+        {
+          if (is_RSA (pk->pubkey_algo) && pk->version < 4)
+           rc = stream_putc (out, _gnutls_cipher_to_pgp (sk->protect.algo));
+          else if (sk->protect.s2k)
+            {
+              s2k_mode = sk->protect.s2k->mode;
+              rc = stream_putc (out, sk->protect.sha1chk ? 0xFE : 0xFF);
+              if (!rc)
+                rc = stream_putc (out, _gnutls_cipher_to_pgp (sk->protect.algo));
+              if (!rc)
+                rc = stream_putc (out, sk->protect.s2k->mode);
+              if (!rc)
+                rc = stream_putc (out, sk->protect.s2k->hash_algo);
+              if (!rc && (s2k_mode == 1 || s2k_mode == 3))
+                {
+                  rc = stream_write (out, sk->protect.s2k->salt, 8);
+                  if (!rc && s2k_mode == 3)
+                    rc = stream_putc (out, sk->protect.s2k->count);
+                }
+            }
+          else
+            return CDK_Inv_Value;
+          if (!rc)
+          rc = stream_write (out, sk->protect.iv, sk->protect.ivlen);
+        }
     }
   if (!rc && sk->is_protected && pk->version == 4)
     {
index d6182e80a882953d40568d1a063be4fb3493fb15..f23b0ccda26103d03b6f695d52d5b482e305ea03 100644 (file)
@@ -100,7 +100,15 @@ gnutls_openpgp_crt_import (gnutls_openpgp_crt_t key,
     }
 
   if (format == GNUTLS_OPENPGP_FMT_RAW)
-    rc = cdk_kbnode_read_from_mem (&key->knode, data->data, data->size);
+    {
+      rc = cdk_kbnode_read_from_mem (&key->knode, data->data, data->size);
+      if (rc)
+       {
+         rc = _gnutls_map_cdk_rc (rc);
+         gnutls_assert ();
+         return rc;
+       }
+    }
   else
     {
       rc = cdk_stream_tmp_from_mem (data->data, data->size, &inp);
@@ -190,6 +198,13 @@ _gnutls_openpgp_export (cdk_kbnode_t node,
                                    CDK_ARMOR_PUBKEY);
       gnutls_free (in);
       *output_data_size = calc_size;
+
+      if (rc)
+        {
+          rc = _gnutls_map_cdk_rc (rc);
+          gnutls_assert ();
+          return rc;
+        }
     }
 
   return 0;
index d84a35fcc77b078681f81fccfb701e29a042fd09..7a9c7cc6e7563cc49623f3b6219b0b85abea74ed 100644 (file)
@@ -104,7 +104,15 @@ gnutls_openpgp_privkey_import (gnutls_openpgp_privkey_t key,
     }
 
   if (format == GNUTLS_OPENPGP_FMT_RAW)
-    rc = cdk_kbnode_read_from_mem (&key->knode, data->data, data->size);
+    {
+      rc = cdk_kbnode_read_from_mem (&key->knode, data->data, data->size);
+      if (rc != 0)
+       {
+         rc = _gnutls_map_cdk_rc (rc);
+         gnutls_assert ();
+         return rc;
+       }
+    }
   else
     {
       rc = cdk_stream_tmp_from_mem (data->data, data->size, &inp);
index aa777d23959dca9c72414869f78d5a06ac539d83..d6377aef2f67d2c03b1b687e1442d5083b542167 100644 (file)
@@ -794,6 +794,11 @@ decode_pkcs8_key (const gnutls_datum_t * raw_key,
                             &raw_key->data[params_start],
                             params_len, &kdf_params, &enc_params);
 
+  if (result < 0)
+    {
+      gnutls_assert();
+      goto error;
+    }
 
   /* Parameters have been decoded. Now
    * decrypt the EncryptedData.
index f7342dd955ea0c2f785f041d2904563900ce3b00..882cb99b12f4b3d9d3843cd188b645dd7d2c18d3 100644 (file)
@@ -1985,9 +1985,8 @@ static void print_verification_res (gnutls_x509_crt_t crt,
 static int
 _verify_x509_mem (const void *cert, int cert_size)
 {
-  int siz, i;
   const char *ptr;
-  int ret;
+  int ret, i;
   char name[256];
   char issuer_name[256];
   size_t name_size;
@@ -2003,7 +2002,6 @@ _verify_x509_mem (const void *cert, int cert_size)
 
   /* Decode the CRL list
    */
-  siz = cert_size;
   ptr = cert;
 
   i = 1;
@@ -2047,7 +2045,6 @@ _verify_x509_mem (const void *cert, int cert_size)
 
   /* Decode the certificate chain. 
    */
-  siz = cert_size;
   ptr = cert;
 
   i = 1;
index b0047e08ee769a8c4aef5c376351f5f61f974cad..7de5ea5e2172a8155714ed4a6ea2765048839a4e 100644 (file)
--- a/src/psk.c
+++ b/src/psk.c
@@ -138,6 +138,11 @@ main (int argc, char **argv)
       ret = gnutls_psk_netconf_derive_key (passwd,
                                           info.username,
                                           info.netconf_hint, &dkey);
+      if (ret < 0)
+       {
+         fprintf (stderr, "Deriving the key failed\n");
+         exit (1);
+       }
     }
   else
     {