Add a function to retrieve algorithm used by MAC handler
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Fri, 27 Dec 2013 08:37:11 +0000 (12:37 +0400)
committerWerner Koch <wk@gnupg.org>
Mon, 13 Jan 2014 09:40:30 +0000 (10:40 +0100)
* cipher/mac.c (_gcry_mac_get_algo): New function, returns used algo.
* src/visibility.c (gcry_mac_get_algo): New wrapper.
* src/visibility.h: Hanlde gcry_mac_get_algo.
* src/gcrypt-int.h (_gcry_mac_get_algo): New.
* src/gcrypt.h.in (gcry_mac_get_algo): New.
* src/libgcrypt.def (gcry_mac_get_algo): New.
* src/libgcrypt.vers (gcry_mac_get_algo): New.
* doc/gcrypt.texi: Document gcry_mac_get_algo.
* tests/basic.c (check_one_mac): Verify gcry_mac_get_algo.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
cipher/mac.c
doc/gcrypt.texi
src/gcrypt-int.h
src/gcrypt.h.in
src/libgcrypt.def
src/libgcrypt.vers
src/visibility.c
src/visibility.h
tests/basic.c

index 3daf2ee..7805467 100644 (file)
@@ -369,6 +369,13 @@ _gcry_mac_verify (gcry_mac_hd_t hd, const void *buf, size_t buflen)
 }
 
 
+int
+_gcry_mac_get_algo (gcry_mac_hd_t hd)
+{
+  return hd->algo;
+}
+
+
 unsigned int
 _gcry_mac_get_algo_maclen (int algo)
 {
index ce17c8e..25d8227 100644 (file)
@@ -3722,6 +3722,16 @@ the MAC calculated in object @var{h}.
 @end deftypefun
 
 
+In some situations it might be hard to remember the algorithm used for
+the MAC calculation. The following function might be used to get that
+information:
+
+@deftypefun {int} gcry_mac_get_algo (gcry_mac_hd_t @var{h})
+
+Retrieve the algorithm used with the handle @var{h}.
+@end deftypefun
+
+
 @c ***********************************
 @c ***** MAC info functions **********
 @c ***********************************
index 65dcb4d..8a6df84 100644 (file)
@@ -180,6 +180,7 @@ gpg_err_code_t _gcry_mac_write (gcry_mac_hd_t hd, const void *buffer,
 gpg_err_code_t _gcry_mac_read (gcry_mac_hd_t hd, void *buffer, size_t *buflen);
 gpg_err_code_t _gcry_mac_verify (gcry_mac_hd_t hd, const void *buffer,
                                  size_t buflen);
+int _gcry_mac_get_algo (gcry_mac_hd_t hd);
 unsigned int _gcry_mac_get_algo_maclen (int algo);
 unsigned int _gcry_mac_get_algo_keylen (int algo);
 const char *_gcry_mac_algo_name (int algorithm) _GCRY_GCC_ATTR_PURE;
index 5c771e5..402e4fd 100644 (file)
@@ -1382,6 +1382,9 @@ gcry_error_t gcry_mac_read (gcry_mac_hd_t hd, void *buffer, size_t *buflen);
 gcry_error_t gcry_mac_verify (gcry_mac_hd_t hd, const void *buffer,
                               size_t buflen);
 
+/* Retrieve the algorithm used with MAC. */
+int gcry_mac_get_algo (gcry_mac_hd_t hd);
+
 /* Retrieve the length in bytes of the MAC yielded by algorithm ALGO. */
 unsigned int gcry_mac_get_algo_maclen (int algo);
 
index a90efce..57ed490 100644 (file)
@@ -274,6 +274,7 @@ EXPORTS
       gcry_mac_read             @240
       gcry_mac_verify           @241
       gcry_mac_ctl              @242
+      gcry_mac_get_algo         @243
 
 
 ;; end of file with public symbols for Windows.
index 5118c81..7ee0541 100644 (file)
@@ -54,7 +54,7 @@ GCRYPT_1.6 {
     gcry_cipher_authenticate; gcry_cipher_gettag; gcry_cipher_checktag;
 
     gcry_mac_algo_info; gcry_mac_algo_name; gcry_mac_map_name;
-    gcry_mac_get_algo_maclen; gcry_mac_get_algo_keylen;
+    gcry_mac_get_algo_maclen; gcry_mac_get_algo_keylen; gcry_mac_get_algo;
     gcry_mac_open; gcry_mac_close; gcry_mac_setkey; gcry_mac_setiv;
     gcry_mac_write; gcry_mac_read; gcry_mac_verify; gcry_mac_ctl;
 
index 2989498..6ed57ca 100644 (file)
@@ -855,6 +855,12 @@ gcry_mac_map_name (const char *string)
   return _gcry_mac_map_name (string);
 }
 
+int
+gcry_mac_get_algo (gcry_mac_hd_t hd)
+{
+  return _gcry_mac_get_algo (hd);
+}
+
 unsigned int
 gcry_mac_get_algo_maclen (int algo)
 {
index 4127a43..96b5235 100644 (file)
@@ -137,6 +137,7 @@ MARK_VISIBLEX (gcry_cipher_open)
 MARK_VISIBLEX (gcry_mac_algo_info)
 MARK_VISIBLEX (gcry_mac_algo_name)
 MARK_VISIBLEX (gcry_mac_map_name)
+MARK_VISIBLEX (gcry_mac_get_algo)
 MARK_VISIBLEX (gcry_mac_get_algo_maclen)
 MARK_VISIBLEX (gcry_mac_get_algo_keylen)
 MARK_VISIBLEX (gcry_mac_open)
@@ -380,6 +381,7 @@ MARK_VISIBLEX (_gcry_mpi_get_const)
 #define gcry_mac_algo_info          _gcry_USE_THE_UNDERSCORED_FUNCTION
 #define gcry_mac_algo_name          _gcry_USE_THE_UNDERSCORED_FUNCTION
 #define gcry_mac_map_name           _gcry_USE_THE_UNDERSCORED_FUNCTION
+#define gcry_mac_get_algo           _gcry_USE_THE_UNDERSCORED_FUNCTION
 #define gcry_mac_get_algo_maclen    _gcry_USE_THE_UNDERSCORED_FUNCTION
 #define gcry_mac_get_algo_keylen    _gcry_USE_THE_UNDERSCORED_FUNCTION
 #define gcry_mac_open               _gcry_USE_THE_UNDERSCORED_FUNCTION
index 56328d1..697485e 100644 (file)
@@ -4469,6 +4469,12 @@ check_one_mac (int algo, const char *data, int datalen,
       return;
     }
 
+  i = gcry_mac_get_algo (hd);
+  if (i != algo)
+    {
+      fail ("algo %d, gcry_mac_get_algo failed: %d\n", algo, i);
+    }
+
   maclen = gcry_mac_get_algo_maclen (algo);
   if (maclen < 1 || maclen > 500)
     {