test_crypto_ecdhe.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. This file is part of GNUnet.
  3. Copyright (C) 2002-2013 GNUnet e.V.
  4. GNUnet is free software: you can redistribute it and/or modify it
  5. under the terms of the GNU Affero General Public License as published
  6. by the Free Software Foundation, either version 3 of the License,
  7. or (at your option) any later version.
  8. GNUnet is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. Affero General Public License for more details.
  12. You should have received a copy of the GNU Affero General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. SPDX-License-Identifier: AGPL3.0-or-later
  15. */
  16. /**
  17. * @file util/test_crypto_ecdhe.c
  18. * @brief testcase for ECC ECDHE public key crypto
  19. * @author Christian Grothoff
  20. */
  21. #include "platform.h"
  22. #include "gnunet_util_lib.h"
  23. #include <gcrypt.h>
  24. int
  25. main (int argc, char *argv[])
  26. {
  27. struct GNUNET_CRYPTO_EcdhePrivateKey priv1;
  28. struct GNUNET_CRYPTO_EcdhePrivateKey priv2;
  29. struct GNUNET_CRYPTO_EcdhePublicKey pub1;
  30. struct GNUNET_CRYPTO_EcdhePublicKey pub2;
  31. struct GNUNET_HashCode ecdh1;
  32. struct GNUNET_HashCode ecdh2;
  33. if (! gcry_check_version ("1.6.0"))
  34. {
  35. fprintf (stderr,
  36. "libgcrypt has not the expected version (version %s is required).\n",
  37. "1.6.0");
  38. return 0;
  39. }
  40. if (getenv ("GNUNET_GCRYPT_DEBUG"))
  41. gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u, 0);
  42. GNUNET_log_setup ("test-crypto-ecdhe", "WARNING", NULL);
  43. for (unsigned int i = 0; i < 100; i++)
  44. {
  45. fprintf (stderr,
  46. ".");
  47. GNUNET_CRYPTO_ecdhe_key_create (&priv1);
  48. GNUNET_CRYPTO_ecdhe_key_create (&priv2);
  49. GNUNET_CRYPTO_ecdhe_key_get_public (&priv1, &pub1);
  50. GNUNET_CRYPTO_ecdhe_key_get_public (&priv2, &pub2);
  51. GNUNET_CRYPTO_ecc_ecdh (&priv1, &pub2, &ecdh1);
  52. GNUNET_CRYPTO_ecc_ecdh (&priv2, &pub1, &ecdh2);
  53. GNUNET_assert (0 ==
  54. GNUNET_memcmp (&ecdh1,
  55. &ecdh2));
  56. }
  57. return 0;
  58. }
  59. /* end of test_crypto_ecdhe.c */