diff options
Diffstat (limited to 'plugins/MirOTR/libgcrypt-1.4.6/tests/ac-data.c')
-rw-r--r-- | plugins/MirOTR/libgcrypt-1.4.6/tests/ac-data.c | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/plugins/MirOTR/libgcrypt-1.4.6/tests/ac-data.c b/plugins/MirOTR/libgcrypt-1.4.6/tests/ac-data.c new file mode 100644 index 0000000000..e97b4f49ec --- /dev/null +++ b/plugins/MirOTR/libgcrypt-1.4.6/tests/ac-data.c @@ -0,0 +1,208 @@ +/* ac-data.c - Public key encryption/decryption tests + * Copyright (C) 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 <stdlib.h> +#include <stdio.h> +#include <assert.h> + +#define assert_err(err) \ + do \ + if (err) \ + { \ + fprintf (stderr, "Error occured at line %i: %s\n", \ + __LINE__, gcry_strerror (err)); \ + exit (1); \ + } \ + while (0) + +#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); +} + +static void +check_sexp_conversion (gcry_ac_data_t data, const char **identifiers) +{ + gcry_ac_data_t data2; + gcry_error_t err; + gcry_sexp_t sexp; + unsigned int i; + const char *label1, *label2; + gcry_mpi_t mpi1, mpi2; + size_t length1, length2; + + err = gcry_ac_data_to_sexp (data, &sexp, identifiers); + assert_err (err); + if (verbose) + gcry_sexp_dump (sexp); + err = gcry_ac_data_from_sexp (&data2, sexp, identifiers); + assert_err (err); + + length1 = gcry_ac_data_length (data); + length2 = gcry_ac_data_length (data2); + assert (length1 == length2); + + for (i = 0; i < length1; i++) + { + err = gcry_ac_data_get_index (data, 0, i, &label1, &mpi1); + assert_err (err); + err = gcry_ac_data_get_index (data2, 0, i, &label2, &mpi2); + assert_err (err); + if (verbose) + { + fprintf (stderr, "Label1=`%s'\n", label1); + fprintf (stderr, "Label2=`%s'\n", label2); + } + assert (! strcmp (label1, label2)); + assert (! gcry_mpi_cmp (mpi1, mpi2)); + } + + gcry_ac_data_destroy (data2); + gcry_sexp_release (sexp); +} + +void +check_run (void) +{ + const char *identifiers[] = { "foo", + "bar", + "baz", + "hello", + "somemoretexthere", + "blahblahblah", + NULL }; + const char *identifiers_null[] = { NULL }; + gcry_ac_data_t data; + gcry_error_t err; + const char *label0; + const char *label1; + gcry_mpi_t mpi0; + gcry_mpi_t mpi1; + gcry_mpi_t mpi2; + + /* Initialize values. */ + + label0 = "thisisreallylonglabelbutsincethereisnolimitationonthelengthoflabelsitshouldworkjustfine"; + mpi0 = gcry_mpi_new (0); + assert (mpi0); + gcry_mpi_set_ui (mpi0, 123456); + + err = gcry_ac_data_new (&data); + assert_err (err); + + check_sexp_conversion (data, identifiers); + check_sexp_conversion (data, identifiers_null); + check_sexp_conversion (data, NULL); + + err = gcry_ac_data_set (data, 0, label0, mpi0); + assert_err (err); + err = gcry_ac_data_get_index (data, 0, 0, &label1, &mpi1); + assert_err (err); + assert (label0 == label1); + assert (mpi0 == mpi1); + check_sexp_conversion (data, identifiers); + check_sexp_conversion (data, identifiers_null); + check_sexp_conversion (data, NULL); + + if (verbose) + printf ("data-set-test-0 succeeded\n"); + + gcry_ac_data_clear (data); + + err = gcry_ac_data_set (data, GCRY_AC_FLAG_COPY, label0, mpi0); + assert_err (err); + + err = gcry_ac_data_set (data, GCRY_AC_FLAG_COPY, "foo", mpi0); + assert_err (err); + err = gcry_ac_data_set (data, GCRY_AC_FLAG_COPY, "foo", mpi0); + assert_err (err); + err = gcry_ac_data_set (data, GCRY_AC_FLAG_COPY, "bar", mpi0); + assert_err (err); + err = gcry_ac_data_set (data, GCRY_AC_FLAG_COPY, "blah1", mpi0); + assert_err (err); + check_sexp_conversion (data, identifiers); + check_sexp_conversion (data, identifiers_null); + check_sexp_conversion (data, NULL); + + err = gcry_ac_data_get_name (data, 0, label0, &mpi1); + assert_err (err); + assert (mpi0 != mpi1); + err = gcry_ac_data_get_name (data, GCRY_AC_FLAG_COPY, label0, &mpi2); + assert_err (err); + assert (mpi0 != mpi1); + assert (mpi1 != mpi2); + err = gcry_ac_data_get_index (data, 0, 0, &label1, &mpi1); + assert_err (err); + gcry_mpi_release (mpi0); + gcry_mpi_release (mpi2); + + if (verbose) + printf ("data-set-test-1 succeeded\n"); + + gcry_ac_data_clear (data); + assert (! gcry_ac_data_length (data)); + check_sexp_conversion (data, identifiers); + check_sexp_conversion (data, identifiers_null); + check_sexp_conversion (data, NULL); + + if (verbose) + printf ("data-set-test-2 succeeded\n"); + + gcry_ac_data_destroy (data); + + +} + +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); + + for (; i > 0; i--) + check_run (); + + return 0; +} |