diff options
author | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 2013-12-27 12:37:11 +0400 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2014-01-13 10:40:30 +0100 |
commit | 8439a379c86ef1088465ea70ac10840759a1638e (patch) | |
tree | dda6a6addc52283111b88105e693203d405ff059 | |
parent | 36c9e0e4eb4f935da90df1c8df484d1940bda5eb (diff) | |
download | libgcrypt-8439a379c86ef1088465ea70ac10840759a1638e.tar.gz |
Add a function to retrieve algorithm used by MAC handler
* 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>
-rw-r--r-- | cipher/mac.c | 7 | ||||
-rw-r--r-- | doc/gcrypt.texi | 10 | ||||
-rw-r--r-- | src/gcrypt-int.h | 1 | ||||
-rw-r--r-- | src/gcrypt.h.in | 3 | ||||
-rw-r--r-- | src/libgcrypt.def | 1 | ||||
-rw-r--r-- | src/libgcrypt.vers | 2 | ||||
-rw-r--r-- | src/visibility.c | 6 | ||||
-rw-r--r-- | src/visibility.h | 2 | ||||
-rw-r--r-- | tests/basic.c | 6 |
9 files changed, 37 insertions, 1 deletions
diff --git a/cipher/mac.c b/cipher/mac.c index 3daf2ee3..7805467a 100644 --- a/cipher/mac.c +++ b/cipher/mac.c @@ -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) { diff --git a/doc/gcrypt.texi b/doc/gcrypt.texi index ce17c8eb..25d8227c 100644 --- a/doc/gcrypt.texi +++ b/doc/gcrypt.texi @@ -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 *********************************** diff --git a/src/gcrypt-int.h b/src/gcrypt-int.h index 65dcb4d0..8a6df840 100644 --- a/src/gcrypt-int.h +++ b/src/gcrypt-int.h @@ -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; diff --git a/src/gcrypt.h.in b/src/gcrypt.h.in index 5c771e57..402e4fde 100644 --- a/src/gcrypt.h.in +++ b/src/gcrypt.h.in @@ -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); diff --git a/src/libgcrypt.def b/src/libgcrypt.def index a90efcec..57ed490e 100644 --- a/src/libgcrypt.def +++ b/src/libgcrypt.def @@ -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. diff --git a/src/libgcrypt.vers b/src/libgcrypt.vers index 5118c814..7ee0541a 100644 --- a/src/libgcrypt.vers +++ b/src/libgcrypt.vers @@ -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; diff --git a/src/visibility.c b/src/visibility.c index 2989498e..6ed57ca6 100644 --- a/src/visibility.c +++ b/src/visibility.c @@ -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) { diff --git a/src/visibility.h b/src/visibility.h index 4127a432..96b52355 100644 --- a/src/visibility.h +++ b/src/visibility.h @@ -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 diff --git a/tests/basic.c b/tests/basic.c index 56328d11..697485ed 100644 --- a/tests/basic.c +++ b/tests/basic.c @@ -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) { |