summaryrefslogtreecommitdiff
path: root/plugins/MirOTR/libgcrypt-1.4.6/tests/ac.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirOTR/libgcrypt-1.4.6/tests/ac.c')
-rw-r--r--plugins/MirOTR/libgcrypt-1.4.6/tests/ac.c162
1 files changed, 162 insertions, 0 deletions
diff --git a/plugins/MirOTR/libgcrypt-1.4.6/tests/ac.c b/plugins/MirOTR/libgcrypt-1.4.6/tests/ac.c
new file mode 100644
index 0000000000..d734360a95
--- /dev/null
+++ b/plugins/MirOTR/libgcrypt-1.4.6/tests/ac.c
@@ -0,0 +1,162 @@
+/* pubkey.c - Public key encryption/decryption tests
+ * Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+ *
+ * This file is part of Libgcrypt.
+ *
+ * Libgcrypt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * Libgcrypt 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "../src/gcrypt.h"
+
+static int verbose;
+
+static void
+die (const char *format, ...)
+{
+ va_list arg_ptr ;
+
+ va_start( arg_ptr, format ) ;
+ vfprintf (stderr, format, arg_ptr );
+ va_end(arg_ptr);
+ exit (1);
+}
+
+void
+key_copy (gcry_ac_handle_t handle,
+ gcry_ac_key_type_t type,
+ gcry_ac_key_t *key_cp, gcry_ac_key_t key)
+{
+ gcry_error_t err = 0;
+
+ err = gcry_ac_key_init (key_cp, handle, type,
+ gcry_ac_key_data_get (key));
+
+ assert (! err);
+}
+
+void
+check_one (gcry_mpi_t x)
+{
+ gcry_ac_handle_t handle;
+ gcry_ac_key_pair_t key_pair;
+ gcry_ac_key_t key_sec, key_sec_cp, key_pub, key_pub_cp;
+ gcry_error_t err = 0;
+ gcry_mpi_t x2;
+ gcry_ac_data_t data, data2;
+ gcry_ac_key_spec_rsa_t rsa_spec;
+
+ rsa_spec.e = gcry_mpi_new (0);
+ gcry_mpi_set_ui (rsa_spec.e, 1);
+
+ err = gcry_ac_open (&handle, GCRY_AC_RSA, 0);
+ assert (! err);
+
+ err = gcry_ac_key_pair_generate (handle, 1024, &rsa_spec, &key_pair, NULL);
+ assert (! err);
+
+ key_sec = gcry_ac_key_pair_extract (key_pair, GCRY_AC_KEY_SECRET);
+ key_copy (handle, GCRY_AC_KEY_SECRET, &key_sec_cp, key_sec);
+
+ key_pub = gcry_ac_key_pair_extract (key_pair, GCRY_AC_KEY_PUBLIC);
+ key_copy (handle, GCRY_AC_KEY_PUBLIC, &key_pub_cp, key_pub);
+
+ err = gcry_ac_data_encrypt (handle, GCRY_AC_FLAG_NO_BLINDING, key_pub_cp, x, &data);
+ assert (! err);
+
+ err = gcry_ac_data_decrypt (handle, GCRY_AC_FLAG_NO_BLINDING, key_sec_cp, &x2, data);
+ assert (! err);
+
+ assert (! gcry_mpi_cmp (x, x2));
+
+ gcry_ac_data_destroy (data);
+
+ err = gcry_ac_data_sign (handle, key_sec, x, &data);
+ assert (! err);
+ err = gcry_ac_data_copy (&data2, data);
+ assert (! err);
+ gcry_ac_data_destroy (data);
+ err = gcry_ac_data_copy (&data, data2);
+ assert (! err);
+ gcry_ac_data_destroy (data2);
+
+ err = gcry_ac_data_verify (handle, key_pub, x, data);
+ assert (! err);
+
+ gcry_ac_data_destroy (data);
+
+ err = gcry_ac_data_sign (handle, key_sec, x, &data);
+ assert (! err);
+ {
+ const char *label;
+ gcry_mpi_t y;
+
+ err = gcry_ac_data_get_index (data, 0, 0, &label, &y);
+ assert (! err);
+ gcry_mpi_add_ui (y, y, 1);
+
+ err = gcry_ac_data_verify (handle, key_pub, x, data);
+ assert (gcry_err_code (err) == GPG_ERR_BAD_SIGNATURE);
+ }
+
+ gcry_ac_close (handle);
+}
+
+void
+check_run (void)
+{
+ /*const char *s = "All Hail Discordia."; -- not used */
+ unsigned int a = 0x4223;
+ gcry_mpi_t x;
+
+ x = gcry_mpi_new (0);
+ gcry_mpi_set_ui (x, a);
+ check_one (x);
+ gcry_mpi_release (x);
+}
+
+int
+main (int argc, char **argv)
+{
+ int debug = 0;
+ int i = 1;
+
+ if (argc > 1 && !strcmp (argv[1], "--verbose"))
+ verbose = 1;
+ else if (argc > 1 && !strcmp (argv[1], "--debug"))
+ verbose = debug = 1;
+
+ gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
+ if (!gcry_check_version (GCRYPT_VERSION))
+ die ("version mismatch\n");
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+ if (debug)
+ gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u , 0);
+ /* No valuable keys are create, so we can speed up our RNG. */
+ gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
+
+ for (; i > 0; i--)
+ check_run ();
+
+ return 0;
+}