diff --git a/ChangeLog b/ChangeLog index 127dbd35b1182c1a50072ba7cce729a33b8d6e7c..97380db3e289f05faa0d466c0d5e2c3c1b37f989 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2014-05-08 Niels Möller <nisse@lysator.liu.se> + * Makefile.in (nettle_SOURCES): Added nettle-meta-aeads.c. + * nettle-meta.h (nettle_aeads): Declare array. + * nettle-meta-aeads.c (nettle_aeads): New file, new array. + * testsuite/meta-aead-test.c: New test case. + * testsuite/Makefile.in (TS_NETTLE_SOURCES): Added + meta-aead-test.c. + * aclocal.m4 (GMP_PROG_CC_FOR_BUILD): If CC_FOR_BUILD is gcc, add -O option. This makes eccdata twice as fast. diff --git a/Makefile.in b/Makefile.in index 42dd190b244adf5c112360f8c5ebcff3ac1b9f64..a1ac54dd6e409c4f83fc155db8b3cc96ffb88368 100644 --- a/Makefile.in +++ b/Makefile.in @@ -106,8 +106,8 @@ nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \ md2.c md2-meta.c md4.c md4-meta.c \ md5.c md5-compress.c md5-compat.c md5-meta.c \ memxor.c \ - nettle-meta-armors.c nettle-meta-ciphers.c \ - nettle-meta-hashes.c \ + nettle-meta-aeads.c nettle-meta-armors.c \ + nettle-meta-ciphers.c nettle-meta-hashes.c \ pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \ poly1305-aes.c poly1305-internal.c \ realloc.c \ diff --git a/nettle-meta-aeads.c b/nettle-meta-aeads.c new file mode 100644 index 0000000000000000000000000000000000000000..8c0526464d870da29534fcb13899150e0193cc7e --- /dev/null +++ b/nettle-meta-aeads.c @@ -0,0 +1,49 @@ +/* nettle-meta-aeads.c + + Copyright (C) 2014 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stddef.h> + +#include "nettle-meta.h" + +const struct nettle_aead * const nettle_aeads[] = { + &nettle_gcm_aes128, + &nettle_gcm_aes192, + &nettle_gcm_aes256, + &nettle_gcm_camellia128, + &nettle_gcm_camellia256, + &nettle_eax_aes128, + &nettle_chacha_poly1305, + NULL +}; diff --git a/nettle-meta.h b/nettle-meta.h index 23a47ed9c6b5e11914d2c335e3bfe55b3bf33dba..2d8d5b84b8fb65e4975b42fdb36a0e1a1e9ef48f 100644 --- a/nettle-meta.h +++ b/nettle-meta.h @@ -155,6 +155,10 @@ struct nettle_aead nettle_hash_digest_func *digest; }; +/* null-terminated list of aead constructions implemented by this + version of nettle */ +extern const struct nettle_aead * const nettle_aeads[]; + extern const struct nettle_aead nettle_gcm_aes128; extern const struct nettle_aead nettle_gcm_aes192; extern const struct nettle_aead nettle_gcm_aes256; diff --git a/testsuite/.test-rules.make b/testsuite/.test-rules.make index 03711c4b60c46bade46e08e0a46c80d96ed1ceb2..8fc7ed415637f356605e453d2d700fd2d341c07c 100644 --- a/testsuite/.test-rules.make +++ b/testsuite/.test-rules.make @@ -136,6 +136,9 @@ meta-hash-test$(EXEEXT): meta-hash-test.$(OBJEXT) meta-cipher-test$(EXEEXT): meta-cipher-test.$(OBJEXT) $(LINK) meta-cipher-test.$(OBJEXT) $(TEST_OBJS) -o meta-cipher-test$(EXEEXT) +meta-aead-test$(EXEEXT): meta-aead-test.$(OBJEXT) + $(LINK) meta-aead-test.$(OBJEXT) $(TEST_OBJS) -o meta-aead-test$(EXEEXT) + meta-armor-test$(EXEEXT): meta-armor-test.$(OBJEXT) $(LINK) meta-armor-test.$(OBJEXT) $(TEST_OBJS) -o meta-armor-test$(EXEEXT) diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in index 2ea2bf95a15f17b11978be58f50e8669b28b6f8c..4028c6b6db4039bccf59e658d25699780683f094 100644 --- a/testsuite/Makefile.in +++ b/testsuite/Makefile.in @@ -28,7 +28,8 @@ TS_NETTLE_SOURCES = aes-test.c arcfour-test.c arctwo-test.c \ cbc-test.c ctr-test.c gcm-test.c eax-test.c ccm-test.c \ poly1305-test.c chacha-poly1305-test.c \ hmac-test.c umac-test.c \ - meta-hash-test.c meta-cipher-test.c meta-armor-test.c \ + meta-hash-test.c meta-cipher-test.c\ + meta-aead-test.c meta-armor-test.c \ buffer-test.c yarrow-test.c pbkdf2-test.c TS_HOGWEED_SOURCES = sexp-test.c sexp-format-test.c \ diff --git a/testsuite/meta-aead-test.c b/testsuite/meta-aead-test.c new file mode 100644 index 0000000000000000000000000000000000000000..1fcede408c9c897ff65f503c706d4d582c7bd32d --- /dev/null +++ b/testsuite/meta-aead-test.c @@ -0,0 +1,32 @@ +#include "testutils.h" +#include "nettle-internal.h" +#include "nettle-meta.h" + +const char* aeads[] = { + "gcm_aes128", + "gcm_aes192", + "gcm_aes256", + "gcm_camellia128", + "gcm_camellia256", + "eax_aes128", + "chacha_poly1305", +}; + +void +test_main(void) +{ + int i,j; + int count = sizeof(aeads)/sizeof(*aeads); + for (i = 0; i < count; i++) { + for (j = 0; NULL != nettle_aeads[j]; j++) { + if (0 == strcmp(aeads[i], nettle_aeads[j]->name)) + break; + } + ASSERT(NULL != nettle_aeads[j]); /* make sure we found a matching aead */ + } + j = 0; + while (NULL != nettle_aeads[j]) + j++; + ASSERT(j == count); /* we are not missing testing any aeads */ +} +