]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Fix TLS 1.2 signing (for servers).
authorSimon Josefsson <simon@josefsson.org>
Wed, 7 Feb 2007 11:57:01 +0000 (11:57 +0000)
committerSimon Josefsson <simon@josefsson.org>
Wed, 7 Feb 2007 11:57:01 +0000 (11:57 +0000)
lib/gnutls_sig.c

index f3ffd7a58e1aff340419b43395e542fa2446a135..b83cd7e9328ebb068dbef8cf74c8d00cd04165fc 100644 (file)
@@ -131,10 +131,9 @@ _gnutls_tls_sign_params (gnutls_session_t session, gnutls_cert * cert,
 {
   gnutls_datum_t dconcat;
   int ret;
-  mac_hd_t td_md5;
   mac_hd_t td_sha;
   opaque concat[36];
-
+  gnutls_protocol_t ver = gnutls_protocol_get_version (session);
 
   td_sha = _gnutls_hash_init (GNUTLS_MAC_SHA1);
   if (td_sha == NULL)
@@ -149,28 +148,48 @@ _gnutls_tls_sign_params (gnutls_session_t session, gnutls_cert * cert,
                TLS_RANDOM_SIZE);
   _gnutls_hash (td_sha, params->data, params->size);
 
-  _gnutls_hash_deinit (td_sha, &concat[16]);
-
   switch (cert->subject_pk_algorithm)
     {
     case GNUTLS_PK_RSA:
-      td_md5 = _gnutls_hash_init (GNUTLS_MAC_MD5);
-      if (td_md5 == NULL)
+      if (ver < GNUTLS_TLS1_2)
        {
-         gnutls_assert ();
-         return GNUTLS_E_HASH_FAILED;
+         mac_hd_t td_md5 = _gnutls_hash_init (GNUTLS_MAC_MD5);
+         if (td_md5 == NULL)
+           {
+             gnutls_assert ();
+             return GNUTLS_E_HASH_FAILED;
+           }
+
+         _gnutls_hash (td_md5, session->security_parameters.client_random,
+                       TLS_RANDOM_SIZE);
+         _gnutls_hash (td_md5, session->security_parameters.server_random,
+                       TLS_RANDOM_SIZE);
+         _gnutls_hash (td_md5, params->data, params->size);
+
+         _gnutls_hash_deinit (td_md5, concat);
+         _gnutls_hash_deinit (td_sha, &concat[16]);
+
+         dconcat.size = 36;
+       }
+      else
+       {
+#if 1
+         /* Use NULL parameters. */
+         memcpy (concat,
+                 "\x30\x21\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14",
+                 15);
+         _gnutls_hash_deinit (td_sha, &concat[15]);
+         dconcat.size = 35;
+#else
+         /* No parameters field. */
+         memcpy (concat,
+                 "\x30\x1f\x30\x07\x06\x05\x2b\x0e\x03\x02\x1a\x04\x14",
+                 13);
+         _gnutls_hash_deinit (td_sha, &concat[13]);
+         dconcat.size = 33;
+#endif
        }
-
-      _gnutls_hash (td_md5, session->security_parameters.client_random,
-                   TLS_RANDOM_SIZE);
-      _gnutls_hash (td_md5, session->security_parameters.server_random,
-                   TLS_RANDOM_SIZE);
-      _gnutls_hash (td_md5, params->data, params->size);
-
-      _gnutls_hash_deinit (td_md5, concat);
-
       dconcat.data = concat;
-      dconcat.size = 36;
       break;
     case GNUTLS_PK_DSA:
       dconcat.data = &concat[16];
@@ -447,12 +466,14 @@ _gnutls_verify_sig_params (gnutls_session_t session, gnutls_cert * cert,
   else
     {
 #if 1
+      /* Use NULL parameters. */
       memcpy (concat,
              "\x30\x21\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14",
              15);
       _gnutls_hash_deinit (td_sha, &concat[15]);
       dconcat.size = 35;
 #else
+      /* No parameters field. */
       memcpy (concat,
              "\x30\x1f\x30\x07\x06\x05\x2b\x0e\x03\x02\x1a\x04\x14",
              13);