diff options
author | Bart Polot <bart@net.in.tum.de> | 2015-03-18 23:45:34 +0000 |
---|---|---|
committer | Bart Polot <bart@net.in.tum.de> | 2015-03-18 23:45:34 +0000 |
commit | d86130ceeb0e9f7ef7adf192b8f44bf94398b466 (patch) | |
tree | 9ee500d5d49088521c2f7944370cb51be593a503 | |
parent | 4113d91f65af66d7ff0cb99ce0a58809a7d9734a (diff) |
- added test for EC-DH with Peer IDs
-rw-r--r-- | src/util/Makefile.am | 7 | ||||
-rw-r--r-- | src/util/test_crypto_ecdh_eddsa.c | 88 |
2 files changed, 95 insertions, 0 deletions
diff --git a/src/util/Makefile.am b/src/util/Makefile.am index 699a18c22b..9bb644d84b 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 0000000000..d8fee849e1 --- /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 <gcrypt.h> + + +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 */ |