botan: Extract helper function to map RNG quality to Botan RNG names
authorTobias Brunner <tobias@strongswan.org>
Fri, 29 Jan 2021 15:48:03 +0000 (16:48 +0100)
committerTobias Brunner <tobias@strongswan.org>
Mon, 15 Feb 2021 08:23:57 +0000 (09:23 +0100)
src/libstrongswan/plugins/botan/botan_rng.c
src/libstrongswan/plugins/botan/botan_util.c
src/libstrongswan/plugins/botan/botan_util.h

index c49225c..9d88b77 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include "botan_rng.h"
+#include "botan_util.h"
 
 #include <botan/build.h>
 
@@ -83,29 +84,12 @@ METHOD(rng_t, destroy, void,
 botan_random_t *botan_rng_create(rng_quality_t quality)
 {
        private_botan_random_t *this;
-       const charrng_name;
+       const char *rng_name;
 
-       switch (quality)
+       rng_name = botan_map_rng_quality(quality);
+       if (!rng_name)
        {
-               case RNG_WEAK:
-               case RNG_STRONG:
-                       /* some rng_t instances of this class (e.g. in the ike-sa-manager)
-                        * may be called concurrently by different threads. the Botan RNGs
-                        * are not reentrant, by default, so use the threadsafe version.
-                        * because we build without threading support when running tests
-                        * with leak-detective (lots of reports of frees of unknown memory)
-                        * there is a fallback to the default */
-#ifdef BOTAN_TARGET_OS_HAS_THREADS
-                       rng_name = "user-threadsafe";
-#else
-                       rng_name = "user";
-#endif
-                       break;
-               case RNG_TRUE:
-                       rng_name = "system";
-                       break;
-               default:
-                       return NULL;
+               return NULL;
        }
 
        INIT(this,
index f5728e4..9414a2c 100644 (file)
@@ -313,3 +313,35 @@ bool botan_dh_key_derivation(botan_privkey_t key, chunk_t pub, chunk_t *secret)
        botan_pk_op_key_agreement_destroy(ka);
        return TRUE;
 }
+
+/*
+ * Described in header
+ */
+const char *botan_map_rng_quality(rng_quality_t quality)
+{
+       const char *rng_name;
+
+       switch (quality)
+       {
+               case RNG_WEAK:
+               case RNG_STRONG:
+                       /* some rng_t instances of this class (e.g. in the ike-sa-manager)
+                        * may be called concurrently by different threads. the Botan RNGs
+                        * are not reentrant, by default, so use the threadsafe version.
+                        * because we build without threading support when running tests
+                        * with leak-detective (lots of reports of frees of unknown memory)
+                        * there is a fallback to the default */
+#ifdef BOTAN_TARGET_OS_HAS_THREADS
+                       rng_name = "user-threadsafe";
+#else
+                       rng_name = "user";
+#endif
+                       break;
+               case RNG_TRUE:
+                       rng_name = "system";
+                       break;
+               default:
+                       return NULL;
+       }
+       return rng_name;
+}
index 7fb74ec..fe8a9a8 100644 (file)
@@ -125,4 +125,12 @@ bool botan_verify_signature(botan_pubkey_t key, const char* scheme,
  */
 bool botan_dh_key_derivation(botan_privkey_t key, chunk_t pub, chunk_t *secret);
 
+/**
+ * Map the given RNG quality to a name as used by Botan.
+ *
+ * @param quality      RNG quality
+ * @return                     name of the Botan RNG
+ */
+const char *botan_map_rng_quality(rng_quality_t quality);
+
 #endif /** BOTAN_UTIL_H_ @}*/