diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2014-04-26 11:58:01 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2014-04-26 11:58:01 +0200 |
commit | 0463d4e6349581f4d5a2503a911886e0ce866091 (patch) | |
tree | 0d1a509893b6b2d7d938097a8c7069418444129f | |
parent | f30d56d35d47a4377a393ba89c708fa61bd3a78f (diff) | |
download | libtasn1-0463d4e6349581f4d5a2503a911886e0ce866091.tar.gz libtasn1-0463d4e6349581f4d5a2503a911886e0ce866091.tar.bz2 libtasn1-0463d4e6349581f4d5a2503a911886e0ce866091.zip |
Added test that decodes and re-encodes a DER CRL.
-rw-r--r-- | tests/Makefile.am | 8 | ||||
-rw-r--r-- | tests/Test_encdec.c | 142 | ||||
-rw-r--r-- | tests/crl.der | bin | 0 -> 504 bytes |
3 files changed, 147 insertions, 3 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 216828f..0277c70 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -26,7 +26,7 @@ EXTRA_DIST = Test_parser.asn Test_tree.asn Test_tree_asn1_tab.c \ Test_encoding.asn pkix.asn TestIndef.p12 choice.asn # For crlf. -EXTRA_DIST += crlf.cer +EXTRA_DIST += crlf.cer crl.der dist_check_SCRIPTS = crlf benchmark dist_check_SCRIPTS += threadsafety @@ -34,17 +34,19 @@ dist_check_SCRIPTS += threadsafety MOSTLYCLEANFILES = Test_parser_ERROR.asn check_PROGRAMS = Test_parser Test_tree Test_encoding Test_indefinite \ - Test_errors Test_simple Test_overflow Test_strings Test_choice + Test_errors Test_simple Test_overflow Test_strings Test_choice \ + Test_encdec TESTS = Test_parser Test_tree Test_encoding Test_indefinite \ Test_errors Test_simple Test_overflow crlf threadsafety \ - Test_strings Test_choice + Test_strings Test_choice Test_encdec TESTS_ENVIRONMENT = \ ASN1PARSER=$(srcdir)/Test_parser.asn \ ASN1TREE=$(srcdir)/Test_tree.asn \ ASN1PKIX=$(srcdir)/pkix.asn \ ASN1PKIX=$(srcdir)/pkix.asn \ + ASN1CRLDER=$(srcdir)/crl.der \ ASN1INDEF=$(srcdir)/TestIndef.p12 \ ASN1ENCODING=$(srcdir)/Test_encoding.asn \ THREADSAFETY_FILES=`find $(top_srcdir)/lib -name \*.c` \ diff --git a/tests/Test_encdec.c b/tests/Test_encdec.c new file mode 100644 index 0000000..363f2ff --- /dev/null +++ b/tests/Test_encdec.c @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2002-2014 Free Software Foundation, Inc. + * + * This file is part of LIBTASN1. + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + + +/*****************************************************/ +/* File: Test_tree.c */ +/* Description: Test sequences for these functions: */ +/* asn1_visit_tree, */ +/* asn1_create_element, */ +/* asn1_delete_structure, */ +/* asn1_write_value, */ +/* asn1_read_value, */ +/*****************************************************/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "libtasn1.h" + + + +int +main (int argc, char *argv[]) +{ + int result; + char buffer[5 * 1024]; + char buffer2[5 * 1024]; + asn1_node definitions = NULL; + asn1_node asn1_element = NULL; + char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; + FILE *out, *fd; + ssize_t size; + int size2; + const char *treefile = getenv ("ASN1PKIX"); + const char *derfile = getenv ("ASN1CRLDER"); + int verbose = 0; + + if (argc > 1) + verbose = 1; + + if (!treefile) + treefile = "pkix.asn"; + + if (!derfile) + derfile = "crl.der"; + + if (verbose) + { + printf ("\n\n/****************************************/\n"); + printf ("/* Test sequence : Test_indefinite */\n"); + printf ("/****************************************/\n\n"); + printf ("ASN1TREE: %s\n", treefile); + } + + /* Check version */ + if (asn1_check_version ("0.3.3") == NULL) + printf ("\nLibrary version check ERROR:\n actual version: %s\n\n", + asn1_check_version (NULL)); + + result = asn1_parser2tree (treefile, &definitions, errorDescription); + if (result != ASN1_SUCCESS) + { + asn1_perror (result); + printf ("ErrorDescription = %s\n\n", errorDescription); + exit (1); + } + + out = stdout; + + fd = fopen (derfile, "rb"); + if (fd == NULL) + { + printf ("Cannot read file %s\n", derfile); + exit (1); + } + size = fread (buffer, 1, sizeof (buffer), fd); + if (size <= 0) + { + printf ("Cannot read from file %s\n", derfile); + exit (1); + } + + fclose (fd); + + result = + asn1_create_element (definitions, "PKIX1.CertificateList", &asn1_element); + if (result != ASN1_SUCCESS) + { + asn1_perror (result); + printf ("Cannot create CRL element\n"); + exit (1); + } + + result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription); + if (result != ASN1_SUCCESS) + { + asn1_perror (result); + printf ("Cannot decode DER data (size %ld)\n", (long) size); + exit (1); + } + + size2 = sizeof(buffer2); + result = asn1_der_coding (asn1_element, "", buffer2, &size2, NULL); + if (result != ASN1_SUCCESS) + { + asn1_perror (result); + printf ("Cannot encode data (size %ld)\n", (long) size); + exit (1); + } + + if (size2 != size || memcmp(buffer, buffer2, size) != 0) + { + printf("DER encoded data differ!\n"); + exit(1); + } + + /* Clear the definition structures */ + asn1_delete_structure (&definitions); + asn1_delete_structure (&asn1_element); + + if (out != stdout) + fclose (out); + + exit (0); +} diff --git a/tests/crl.der b/tests/crl.der Binary files differnew file mode 100644 index 0000000..7ab7752 --- /dev/null +++ b/tests/crl.der |