From d86130ceeb0e9f7ef7adf192b8f44bf94398b466 Mon Sep 17 00:00:00 2001 From: Bart Polot Date: Wed, 18 Mar 2015 23:45:34 +0000 Subject: - added test for EC-DH with Peer IDs --- src/util/Makefile.am | 7 ++++ src/util/test_crypto_ecdh_eddsa.c | 88 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/util/test_crypto_ecdh_eddsa.c (limited to 'src/util') diff --git a/src/util/Makefile.am b/src/util/Makefile.am index 699a18c22..9bb644d84 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -227,6 +227,7 @@ check_PROGRAMS = \ test_crypto_ecdsa \ test_crypto_eddsa \ test_crypto_ecdhe \ + test_crypto_ecdh_eddsa \ test_crypto_hash \ test_crypto_hash_context \ test_crypto_hkdf \ @@ -387,6 +388,12 @@ test_crypto_ecdhe_LDADD = \ libgnunetutil.la \ $(LIBGCRYPT_LIBS) +test_crypto_ecdh_eddsa_SOURCES = \ + test_crypto_ecdh_eddsa.c +test_crypto_ecdh_eddsa_LDADD = \ + libgnunetutil.la \ + $(LIBGCRYPT_LIBS) + test_crypto_hash_SOURCES = \ test_crypto_hash.c test_crypto_hash_LDADD = \ diff --git a/src/util/test_crypto_ecdh_eddsa.c b/src/util/test_crypto_ecdh_eddsa.c new file mode 100644 index 000000000..d8fee849e --- /dev/null +++ b/src/util/test_crypto_ecdh_eddsa.c @@ -0,0 +1,88 @@ +/* + This file is part of GNUnet. + Copyright (C) 2002-2015 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet 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 a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ +/** + * @file util/test_crypto_ecdh_ecdsa.c + * @brief testcase for ECC DH key exchange with EdDSA private keys. + * @author Christian Grothoff, Bart Polot + */ +#include "platform.h" +#include "gnunet_util_lib.h" +#include + + +int +main (int argc, char *argv[]) +{ + struct GNUNET_CRYPTO_EddsaPrivateKey *priv_dsa1; + struct GNUNET_CRYPTO_EddsaPrivateKey *priv_dsa2; + struct GNUNET_CRYPTO_EddsaPublicKey id1; + struct GNUNET_CRYPTO_EddsaPublicKey id2; + + struct GNUNET_CRYPTO_EcdhePrivateKey *priv1; + struct GNUNET_CRYPTO_EcdhePrivateKey *priv2; + struct GNUNET_CRYPTO_EcdhePublicKey pub2; + struct GNUNET_HashCode dh[3]; + + if (! gcry_check_version ("1.6.0")) + { + FPRINTF (stderr, + _ + ("libgcrypt has not the expected version (version %s is required).\n"), + "1.6.0"); + return 0; + } + if (getenv ("GNUNET_GCRYPT_DEBUG")) + gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u , 0); + GNUNET_log_setup ("test-crypto-ecdh-eddsa", "WARNING", NULL); + + /* Generate, cast keys */ + priv_dsa1 = GNUNET_CRYPTO_eddsa_key_create (); + priv_dsa2 = GNUNET_CRYPTO_eddsa_key_create (); + priv1 = (struct GNUNET_CRYPTO_EcdhePrivateKey *) priv_dsa1; + priv2 = (struct GNUNET_CRYPTO_EcdhePrivateKey *) priv_dsa2; + + /* Extract public keys */ + GNUNET_CRYPTO_eddsa_key_get_public (priv_dsa1, &id1); + GNUNET_CRYPTO_eddsa_key_get_public (priv_dsa2, &id2); + GNUNET_CRYPTO_ecdhe_key_get_public (priv2, &pub2); + + /* Do ECDH */ + GNUNET_CRYPTO_ecc_ecdh (priv1, (struct GNUNET_CRYPTO_EcdhePublicKey *)&id2, &dh[0]); + GNUNET_CRYPTO_ecc_ecdh (priv2, (struct GNUNET_CRYPTO_EcdhePublicKey *)&id1, &dh[1]); + GNUNET_CRYPTO_ecc_ecdh (priv1, &pub2, &dh[2]); + + /* Check that both DH results are equal. */ + GNUNET_assert (0 == memcmp (&dh[0], &dh[1], + sizeof (struct GNUNET_HashCode))); + + /* FIXME: Maybe it should be the same as with ECDHE. */ + // GNUNET_assert (0 == memcmp (&dh[1], &dh[2], + // sizeof (struct GNUNET_HashCode))); + // GNUNET_assert (0 == memcmp (&id1, &pub1, + // sizeof (struct GNUNET_CRYPTO_EcdhePublicKey))); + + /* Free */ + GNUNET_free (priv1); + GNUNET_free (priv2); + return 0; +} + +/* end of test_crypto_ecdh_ecdsa.c */ -- cgit v1.2.3