* md.c (gcry_md_info): New operator GCRYCTL_IS_ALGO_ENABLED.
authorWerner Koch <wk@gnupg.org>
Fri, 16 Nov 2001 17:51:09 +0000 (17:51 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 16 Nov 2001 17:51:09 +0000 (17:51 +0000)
cipher/ChangeLog
cipher/Makefile.am
cipher/md.c

index 5a9743f..b88161d 100644 (file)
@@ -1,3 +1,7 @@
+2001-11-16  Werner Koch  <wk@gnupg.org>
+
+       * md.c (gcry_md_info): New operator GCRYCTL_IS_ALGO_ENABLED.
+
 2001-11-07  Werner Koch  <wk@gnupg.org>
 
        * md.c (gcry_md_hash_buffer): Close the handle which was left open
index 2598359..20b8ffc 100644 (file)
@@ -23,7 +23,7 @@ INCLUDES = -I$(top_srcdir)/src
 
 noinst_LTLIBRARIES = libcipher.la
 
-OMIT_DEPENDENCIES = types.h gcrypt.h
+#OMIT_DEPENDENCIES = types.h gcrypt.h
 
 
 # The configure script greps the module names from the EXTRA_PROGRAMS line
index 14005c0..e767136 100644 (file)
@@ -804,7 +804,7 @@ md_asn_oid( int algo, size_t *asnlen, size_t *mdlen )
  *
  * On error the value -1 is returned and the error reason may be
  * retrieved by gcry_errno().
- * Note:  Because this function is in most caes used to return an
+ * Note:  Because this function is in most cases used to return an
  * integer value, we can make it easier for the caller to just look at
  * the return value.  The caller will in all cases consult the value
  * and thereby detecting whether a error occured or not (i.e. while checking
@@ -895,14 +895,35 @@ md_stop_debug( GCRY_MD_HD md )
  *  GCRYCTL_IS_SECURE:
  *     Returns 1 when the handle works on secured memory
  *     otherwise 0 is returned.  There is no error return.
+ *  GCRYCTL_IS_ALGO_ENABLED:
+ *     Returns 1 if the algo is enanled for that handle.
+ *     The algo must be passed as the address of an int.
  */
 int
 gcry_md_info( GCRY_MD_HD h, int cmd, void *buffer, size_t *nbytes)
 {
+
     switch( cmd ) {
       case GCRYCTL_IS_SECURE:
        return h->ctx->secure;
 
+      case GCRYCTL_IS_ALGO_ENABLED:
+        {
+            int algo;
+            struct md_digest_list_s *r;
+
+            if (!buffer || (nbytes && *nbytes != sizeof (int))) {
+                set_lasterr (GCRYERR_INV_ARG);
+                return -1;
+            }
+            algo = *(int*)buffer;        
+            for(r=h->ctx->list; r; r = r->next ) {
+                if( r->algo == algo )
+                    return 1;
+            }
+        }
+        break;
+
       default:
        set_lasterr( GCRYERR_INV_OP );
        return -1;