Blame SOURCES/0003-Adjust-hash-defaults-based-on-system-security-level.patch

caac3e
From 298015e8a7cf35cc0de581203b44826d2ae1d406 Mon Sep 17 00:00:00 2001
caac3e
From: Stephen Gallagher <sgallagh@redhat.com>
caac3e
Date: Wed, 28 Nov 2018 08:00:08 -0500
fdb9ce
Subject: [PATCH 3/6] Adjust hash defaults based on system security level
caac3e
caac3e
Unlike the key-strength, this does not set a minimum level because
caac3e
it's not a simple calculation. We will have to rely on libcrypto
caac3e
rejecting any explicitly-set algorithms as a violation of policy.
caac3e
caac3e
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
caac3e
---
caac3e
 include/sscg.h |  1 +
caac3e
 src/sscg.c     | 40 +++++++++++++++++++++-------------------
caac3e
 2 files changed, 22 insertions(+), 19 deletions(-)
caac3e
caac3e
diff --git a/include/sscg.h b/include/sscg.h
caac3e
index 3e97cfe49a5cd8fc734ecf43a94156e376227eb7..fc90b81a0060af28529f3be6922b1b1501559300 100644
caac3e
--- a/include/sscg.h
caac3e
+++ b/include/sscg.h
fdb9ce
@@ -140,6 +140,7 @@ struct sscg_options
caac3e
   /* Encryption requirements */
caac3e
   int key_strength;
caac3e
   int minimum_key_strength;
caac3e
+  char *hash_alg;
caac3e
   const EVP_MD *hash_fn;
caac3e
 
caac3e
   /* Output Files */
caac3e
diff --git a/src/sscg.c b/src/sscg.c
caac3e
index 85a42404aa94524b560755d506b893300a4414cd..58855f764480d24d6c0f57460b22a3a83281e37e 100644
caac3e
--- a/src/sscg.c
caac3e
+++ b/src/sscg.c
fdb9ce
@@ -66,14 +66,21 @@ set_default_options (struct sscg_options *opts)
caac3e
     case 1:
caac3e
     case 2:
caac3e
       /* Security level 2 and below permits lower key-strengths, but SSCG
caac3e
-       * will set a minimum of 2048 bits
caac3e
+       * will set a minimum of 2048 bits and the sha256 hash algorithm.
caac3e
        */
caac3e
+      opts->hash_alg = talloc_strdup (opts, "sha256");
caac3e
       opts->key_strength = 2048;
caac3e
       break;
caac3e
 
caac3e
-    case 3: opts->key_strength = 3072; break;
caac3e
+    case 3:
caac3e
+      opts->hash_alg = talloc_strdup (opts, "sha256");
caac3e
+      opts->key_strength = 3072;
caac3e
+      break;
caac3e
 
caac3e
-    case 4: opts->key_strength = 7680; break;
caac3e
+    case 4:
caac3e
+      opts->hash_alg = talloc_strdup (opts, "sha384");
caac3e
+      opts->key_strength = 7680;
caac3e
+      break;
caac3e
 
caac3e
     default:
caac3e
       /* Unknown security level. Default to the highest we know about */
fdb9ce
@@ -83,7 +90,10 @@ set_default_options (struct sscg_options *opts)
caac3e
                security_level);
caac3e
       /* Fall through */
caac3e
 
caac3e
-    case 5: opts->key_strength = 15360; break;
caac3e
+    case 5:
caac3e
+      opts->hash_alg = talloc_strdup (opts, "sha512");
caac3e
+      opts->key_strength = 15360;
caac3e
+      break;
caac3e
     }
caac3e
 
caac3e
   opts->minimum_key_strength = opts->key_strength;
fdb9ce
@@ -177,7 +187,6 @@ main (int argc, const char **argv)
caac3e
   char *email = NULL;
caac3e
   char *hostname = NULL;
caac3e
   char *packagename;
caac3e
-  char *hash_alg = NULL;
caac3e
   char **alternative_names = NULL;
caac3e
 
caac3e
   char *ca_file = NULL;
fdb9ce
@@ -351,10 +360,10 @@ main (int argc, const char **argv)
caac3e
     {
caac3e
       "hash-alg",
caac3e
       '\0',
caac3e
-      POPT_ARG_STRING,
caac3e
-      &hash_alg,
caac3e
+      POPT_ARG_STRING | POPT_ARGFLAG_SHOW_DEFAULT,
caac3e
+      &options->hash_alg,
caac3e
       0,
caac3e
-      _ ("Hashing algorithm to use for signing. (default: sha256)"),
caac3e
+      _ ("Hashing algorithm to use for signing."),
caac3e
       _ ("{sha256,sha384,sha512}"),
caac3e
     },
caac3e
     {
fdb9ce
@@ -592,17 +601,10 @@ main (int argc, const char **argv)
caac3e
       goto done;
caac3e
     }
caac3e
 
caac3e
-  if (!hash_alg)
caac3e
-    {
caac3e
-      /* Default to SHA256 */
caac3e
-      options->hash_fn = EVP_sha256 ();
caac3e
-    }
caac3e
-  else
caac3e
-    {
caac3e
-      /* TODO: restrict this to approved hashes.
caac3e
-         * For now, we'll only list SHA[256|384|512] in the help */
caac3e
-      options->hash_fn = EVP_get_digestbyname (hash_alg);
caac3e
-    }
caac3e
+  /* TODO: restrict this to approved hashes.
caac3e
+   * For now, we'll only list SHA[256|384|512] in the help */
caac3e
+  options->hash_fn = EVP_get_digestbyname (options->hash_alg);
caac3e
+
caac3e
   if (!options->hash_fn)
caac3e
     {
caac3e
       fprintf (stderr, "Unsupported hashing algorithm.");
caac3e
-- 
fdb9ce
2.23.0
caac3e