summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2016-10-24 11:16:56 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2016-10-24 18:53:02 +0200
commit903bcd40b162eec7dc78e7305871a658e38a3de3 (patch)
treefbca596de094dfac8e30094570da16244b38766c
parente198d72073cafa499cc1f8629e7c2d57163d8e12 (diff)
downloadlibtasn1-903bcd40b162eec7dc78e7305871a658e38a3de3.tar.gz
Add spc_pe_image_data test
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r--tests/Makefile.am10
-rw-r--r--tests/mscat.asn34
-rw-r--r--tests/spc_pe_image_data.c128
-rw-r--r--tests/spc_pe_image_data.derbin0 -> 40 bytes
4 files changed, 169 insertions, 3 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 379525e..0d8fcb1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -25,7 +25,7 @@ LDADD = ../lib/libtasn1.la ../gl/libgnu.la
EXTRA_DIST = Test_parser.asn Test_tree.asn Test_tree_asn1_tab.c \
Test_encoding.asn pkix.asn TestIndef.p12 choice.asn coding-decoding2.asn \
TestIndef2.p12 TestIndef3.der TestCertOctetOverflow.der \
- libtasn1.supp ocsp-basic-response.der \
+ libtasn1.supp ocsp-basic-response.der spc_pe_image_data.der \
invalid-x509/id-000000.der invalid-x509/id-000001.der \
invalid-x509/id-000002.der invalid-x509/id-000003.der \
invalid-x509/id-000004.der invalid-x509/id-000005.der \
@@ -54,13 +54,15 @@ 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_encdec copynode coding-decoding2 strict-der Test_choice_ocsp \
- ocsp-basic-response octet-string coding-long-oid object-id-decoding
+ ocsp-basic-response octet-string coding-long-oid object-id-decoding \
+ spc_pe_image_data
TESTS = Test_parser Test_tree Test_encoding Test_indefinite \
Test_errors Test_simple Test_overflow crlf threadsafety \
Test_strings Test_choice Test_encdec copynode coding-decoding2 \
strict-der Test_choice_ocsp decoding decoding-invalid-x509 \
- ocsp-basic-response octet-string coding-long-oid object-id-decoding
+ ocsp-basic-response octet-string coding-long-oid object-id-decoding \
+ spc_pe_image_data
TESTS_ENVIRONMENT = \
ASN1PARSER=$(srcdir)/Test_parser.asn \
@@ -76,6 +78,8 @@ TESTS_ENVIRONMENT = \
ASN1CHOICE_OCSP=$(srcdir)/pkix.asn \
ASN1CHOICE_OCSP_DATA=$(srcdir)/ocsp.der \
ASN1_RESPONSE_OCSP_DATA=$(srcdir)/ocsp-basic-response.der \
+ ASN1_MSCAT=$(srcdir)/mscat.asn \
+ ASN1_SPC_PE_IMAGE_DATA=$(srcdir)/spc_pe_image_data.der \
THREADSAFETY_FILES=`find $(top_srcdir)/lib -name \*.c` \
EXEEXT=$(EXEEXT) \
LSAN_OPTIONS=suppressions=libtasn1.supp \
diff --git a/tests/mscat.asn b/tests/mscat.asn
new file mode 100644
index 0000000..beb69f7
--- /dev/null
+++ b/tests/mscat.asn
@@ -0,0 +1,34 @@
+CATALOG {}
+DEFINITIONS IMPLICIT TAGS ::= -- assuming implicit tags, should try explicit too
+
+BEGIN
+
+-- SPC_PE_IMAGE_DATA
+SpcPEImageData ::= SEQUENCE {
+ flags SpcPeImageFlags DEFAULT includeResources,
+ link [0] EXPLICIT SpcLink OPTIONAL
+}
+
+SpcPeImageFlags ::= BIT STRING {
+ includeResources (0),
+ includeDebugInfo (1),
+ includeImportAddressTable (2)
+}
+
+SpcLink ::= CHOICE {
+ url [0] IMPLICIT IA5String,
+ moniker [1] IMPLICIT SpcSerializedObject,
+ file [2] EXPLICIT SpcString
+}
+
+SpcSerializedObject ::= SEQUENCE {
+ classId OCTET STRING, -- GUID
+ data OCTET STRING -- Binary structure
+}
+
+SpcString ::= CHOICE {
+ unicode [0] IMPLICIT BMPString,
+ ascii [1] IMPLICIT IA5String
+}
+
+END
diff --git a/tests/spc_pe_image_data.c b/tests/spc_pe_image_data.c
new file mode 100644
index 0000000..4e54d4a
--- /dev/null
+++ b/tests/spc_pe_image_data.c
@@ -0,0 +1,128 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libtasn1.h>
+
+int main (int argc, char** argv)
+{
+ int result = 0, len;
+ asn1_node definitions = NULL, node1 = NULL;
+ char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+ const char *choicefile = getenv ("ASN1_MSCAT");
+ const char *datafile = getenv ("ASN1_SPC_PE_IMAGE_DATA");
+ FILE *fp;
+ char data[1024];
+ int data_size = sizeof (data);
+ unsigned etype;
+ int cmp;
+
+ if (choicefile == NULL) {
+ choicefile = "mscat.asn";
+ }
+
+ if (datafile == NULL) {
+ datafile = "spc_pe_image_data.der";
+ }
+
+ result = asn1_parser2tree(choicefile, &definitions, errorDescription);
+ if (result != ASN1_SUCCESS) {
+ fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription);
+ exit (1);
+ }
+
+ result = asn1_create_element(definitions,
+ "CATALOG.SpcPEImageData",
+ &node1);
+ if (result != ASN1_SUCCESS) {
+ fprintf(stderr, "error in %d\n", __LINE__);
+ exit (1);
+ }
+
+ fp = fopen(datafile, "rb");
+ if (fp == NULL) {
+ fprintf (stderr, "error in %d\n", __LINE__);
+ exit(1);
+ }
+ data_size = fread(data, 1, sizeof(data), fp);
+ fclose(fp);
+
+ result = asn1_der_decoding2(&node1,
+ data,
+ &data_size,
+ ASN1_DECODE_FLAG_STRICT_DER,
+ errorDescription);
+ if (result != ASN1_SUCCESS) {
+ fprintf(stderr, "error in %d: decoding: %s\n", __LINE__, errorDescription);
+ exit(1);
+ }
+
+ len = 0;
+ result = asn1_read_value_type(node1,
+ "flags",
+ NULL,
+ &len,
+ &etype);
+ if (result != ASN1_MEM_ERROR) {
+ fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription);
+ exit(1);
+ }
+
+ if ((size_t)len >= sizeof(data)) {
+ fprintf(stderr,
+ "error len=%d, sizeof(data)=%zu\n",
+ len,
+ sizeof(data));
+ exit(1);
+ }
+
+ result = asn1_read_value(node1, "flags", data, &len);
+ if (result != ASN1_SUCCESS) {
+ fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription);
+ exit (1);
+ }
+
+ etype = 0;
+ len = 0;
+ result = asn1_read_value_type(node1, "link", NULL, &len, &etype);
+ if (result != ASN1_MEM_ERROR)
+ {
+ fprintf(stderr,
+ "error in %d: result is: %s\n",
+ __LINE__,
+ asn1_strerror(result));
+ exit(1);
+ }
+
+ if (etype != ASN1_ETYPE_CHOICE) {
+ fprintf(stderr,
+ "error in %d: The type (%u) doesn't match choice.\n",
+ __LINE__,
+ etype);
+ exit(1);
+ }
+
+ if (len != 5) {
+ fprintf (stderr, "length doesn't match the expected (got: %d, should be: 20)\n", len);
+ exit (1);
+ }
+
+ len = sizeof(data);
+ result = asn1_read_value(node1, "link", data, &len);
+ if (result != ASN1_SUCCESS) {
+ fprintf(stderr, "error in %d: %s\n", __LINE__, errorDescription);
+ exit (1);
+ }
+
+ cmp = memcmp(data, "file", len);
+ if (cmp != 0) {
+ fprintf(stderr, "contents don't match\n");
+ exit(1);
+ }
+
+ printf("SUCCESS\n");
+
+ asn1_delete_structure (&node1);
+ asn1_delete_structure (&definitions);
+
+ return 0;
+}
diff --git a/tests/spc_pe_image_data.der b/tests/spc_pe_image_data.der
new file mode 100644
index 0000000..0e72dfa
--- /dev/null
+++ b/tests/spc_pe_image_data.der
Binary files differ