Add new logo.
[gnupg.git] / g10 / skclist.c
index d8f3b2d..5aeaa78 100644 (file)
 #include "i18n.h"
 #include "cipher.h"
 
+#ifndef GCRYCTL_FAKED_RANDOM_P
+#define GCRYCTL_FAKED_RANDOM_P 51
+#endif
 
-/* There is currently no way to get the status of the quick random
-   generator flag from libgcrypt and it is not clear whether this
-   faked RNG is really a good idea.  Thus for now we use this stub
-   function but we should consider to entirely remove this fake RNG
-   stuff. */
-static int
+/* Return true if Libgcrypt's RNG is in faked mode.  */
+int
 random_is_faked (void)
 {
-  return 0;
+  /* We use a runtime check to allow for slow migrattion of libgcrypt.
+     We can't use the constant becuase that one is actually an enum
+     value.  */
+  gpg_error_t err = gcry_control ( 51 /*GCRYCTL_FAKED_RANDOM_P*/, 0);
+
+  if (!err)
+    return 0;
+  if (gpg_err_code (err) != GPG_ERR_INV_OP)
+    return 1;
+  log_info ("WARNING: libgcrypt too old.\n");
+  log_info ("         can't check whether we are in faked RNG mode\n");
+  return 0; /* Need to return false.  */
 }
 
 
@@ -82,7 +92,8 @@ is_insecure( PKT_secret_key *sk )
                 continue; /* skip attribute packets */
             if ( strstr( id->name, "(insecure!)" )
                  || strstr( id->name, "not secure" )
-                 || strstr( id->name, "do not use" ) ) {
+                 || strstr( id->name, "do not use" )
+                 || strstr( id->name, "(INSECURE!)" ) ) {
                 insecure = 1;
                 break;
             }
@@ -104,7 +115,7 @@ key_present_in_sk_list(SK_LIST sk_list, PKT_secret_key *sk)
 }
 
 static int
-is_duplicated_entry (STRLIST list, STRLIST item)
+is_duplicated_entry (strlist_t list, strlist_t item)
 {
     for(; list && list != item; list = list->next) {
         if ( !strcmp (list->d, item->d) )
@@ -115,7 +126,7 @@ is_duplicated_entry (STRLIST list, STRLIST item)
 
 
 int
-build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list,
+build_sk_list( strlist_t locusr, SK_LIST *ret_sk_list,
                int unlock, unsigned int use )
 {
     SK_LIST sk_list = NULL;
@@ -157,7 +168,7 @@ build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list,
          }
       }
     else {
-        STRLIST locusr_orig = locusr;
+        strlist_t locusr_orig = locusr;
        for(; locusr; locusr = locusr->next ) {
            PKT_secret_key *sk;