2002-10-10 Timo Schulz <ts@winpt.org>
authorTimo Schulz <twoaday@freakmail.de>
Thu, 10 Oct 2002 15:19:32 +0000 (15:19 +0000)
committerTimo Schulz <twoaday@freakmail.de>
Thu, 10 Oct 2002 15:19:32 +0000 (15:19 +0000)
        * md.c (gcry_md_open): Check that algo is available and only
        valid flags values are used.
        (gcry_md_get_algo): Add error handling.

cipher/ChangeLog
cipher/md.c

index e54d94e..596611f 100644 (file)
@@ -1,3 +1,9 @@
+2002-10-10  Timo Schulz  <ts@winpt.org>
+
+       * md.c (gcry_md_open): Check that algo is available and only
+       valid flags values are used.
+       (gcry_md_get_algo): Add error handling.
+       
 2002-09-17  Werner Koch  <wk@gnupg.org>
 
        * random.c: Replaced mutex.h by the new ath.h.  Changed all calls.
index c915aad..e898b6c 100644 (file)
@@ -345,14 +345,24 @@ md_open( int algo, int secure, int hmac )
 
 
 GCRY_MD_HD
-gcry_md_open( int algo, unsigned int flags )
+gcry_md_open (int algo, unsigned int flags)
 {
-    GCRY_MD_HD hd;
-    /* fixme: check that algo is available and that only valid
-     * flag values are used */
-    hd = md_open( algo, (flags & GCRY_MD_FLAG_SECURE),
-                       (flags & GCRY_MD_FLAG_HMAC) );
-    return hd;
+  GCRY_MD_HD hd;
+
+  if (check_digest_algo (algo))
+    {
+      set_lasterr (GCRYERR_INV_MD_ALGO);
+      return NULL;
+    }
+  if ((flags &~ GCRY_MD_FLAG_SECURE) > GCRY_MD_FLAG_SECURE
+      && (flags &~ GCRY_MD_FLAG_HMAC) > GCRY_MD_FLAG_HMAC)
+    {
+      set_lasterr (GCRYERR_INV_ARG);
+      return NULL;
+    }
+  hd = md_open (algo, (flags & GCRY_MD_FLAG_SECURE),
+                (flags & GCRY_MD_FLAG_HMAC));
+  return hd;
 }
 
 
@@ -768,9 +778,15 @@ md_get_algo( GCRY_MD_HD a )
 
 
 int
-gcry_md_get_algo( GCRY_MD_HD hd )
+gcry_md_get_algo (GCRY_MD_HD hd)
 {
-    return md_get_algo( hd ); /* fixme: we need error handling */
+  int algo = md_get_algo (hd);
+  if (!algo)
+    {
+      set_lasterr (GCRYERR_INV_MD_ALGO);
+      return 0;
+    }
+  return algo;
 }