See ChangeLog: Thu Jul 15 10:15:35 CEST 1999 Werner Koch
[libgcrypt.git] / cipher / pubkey.c
index 5695e75..548d2e8 100644 (file)
@@ -54,7 +54,7 @@ struct pubkey_table_s {
 };
 
 static struct pubkey_table_s pubkey_table[TABLE_SIZE];
-
+static int disabled_algos[TABLE_SIZE];
 
 
 static int
@@ -89,6 +89,8 @@ dummy_get_nbits( int algo, MPI *pkey )
 
 /****************
  * Put the static entries into the table.
+ * This is out constructor function which fill the table
+ * of algorithms with the one we have statically linked.
  */
 static void
 setup_pubkey_table(void)
@@ -265,6 +267,20 @@ pubkey_algo_to_string( int algo )
 }
 
 
+void
+disable_pubkey_algo( int algo )
+{
+    int i;
+
+    for(i=0; i < DIM(disabled_algos); i++ ) {
+       if( !disabled_algos[i] || disabled_algos[i] == algo ) {
+           disabled_algos[i] = algo;
+           return;
+       }
+    }
+    log_fatal("can't disable pubkey algo %d: table full\n");
+}
+
 
 int
 check_pubkey_algo( int algo )
@@ -289,6 +305,11 @@ check_pubkey_algo2( int algo, unsigned use )
                if( (use & PUBKEY_USAGE_ENC)
                    && !(pubkey_table[i].use & PUBKEY_USAGE_ENC) )
                    return G10ERR_WR_PUBKEY_ALGO;
+
+               for(i=0; i < DIM(disabled_algos); i++ ) {
+                   if( disabled_algos[i] == algo )
+                       return G10ERR_PUBKEY_ALGO;
+               }
                return 0; /* okay */
            }
     } while( load_pubkey_modules() );