summaryrefslogtreecommitdiff
path: root/cipher/mac-internal.h
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2014-05-11 12:00:19 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2014-05-12 20:32:43 +0300
commitb8794fed68ebe7567f4617141f0996ad290d9120 (patch)
tree2fd76ce72117946cbf5991d28c3c10152c62c2e5 /cipher/mac-internal.h
parentc20daeeb05329bfc6cc2c562cbd4b965291fe0e1 (diff)
downloadlibgcrypt-b8794fed68ebe7567f4617141f0996ad290d9120.tar.gz
Add Poly1305 MAC
* cipher/Makefile.am: Add 'mac-poly1305.c', 'poly1305.c' and 'poly1305-internal.h'. * cipher/mac-internal.h (poly1305mac_context_s): New. (gcry_mac_handle): Add 'u.poly1305mac'. (_gcry_mac_type_spec_poly1305mac): New. * cipher/mac-poly1305.c: New. * cipher/mac.c (mac_list): Add Poly1305. * cipher/poly1305-internal.h: New. * cipher/poly1305.c: New. * src/gcrypt.h.in: Add 'GCRY_MAC_POLY1305'. * tests/basic.c (check_mac): Add Poly1035 test vectors; Allow overriding lengths of data and key buffers. * tests/bench-slope.c (mac_bench): Increase max algo number from 500 to 600. * tests/benchmark.c (mac_bench): Ditto. -- Patch adds Bernstein's Poly1305 message authentication code to libgcrypt. Implementation is based on Andrew Moon's public domain implementation from: https://github.com/floodyberry/poly1305-opt The algorithm added by this patch is the plain Poly1305 without AES and takes 32-bit key that must not be reused. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/mac-internal.h')
-rw-r--r--cipher/mac-internal.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/cipher/mac-internal.h b/cipher/mac-internal.h
index 9895a548..81b6185d 100644
--- a/cipher/mac-internal.h
+++ b/cipher/mac-internal.h
@@ -17,9 +17,17 @@
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
+#include <config.h>
+
+#include "g10lib.h"
+
+
/* The data object used to hold a handle to an encryption object. */
struct gcry_mac_handle;
+/* The data object used to hold poly1305-mac context. */
+struct poly1305mac_context_s;
+
/*
*
@@ -84,7 +92,6 @@ typedef struct gcry_mac_spec
} gcry_mac_spec_t;
-
/* The handle structure. */
struct gcry_mac_handle
{
@@ -106,6 +113,9 @@ struct gcry_mac_handle
gcry_cipher_hd_t ctx;
int cipher_algo;
} gmac;
+ struct {
+ struct poly1305mac_context_s *ctx;
+ } poly1305mac;
} u;
};
@@ -202,3 +212,8 @@ extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_seed;
#if USE_CAMELLIA
extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_camellia;
#endif
+
+/*
+ * The Poly1305 MAC algorithm specifications (mac-poly1305.c).
+ */
+extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac;