summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2015-03-04 14:56:00 +0100
committerNikos Mavrogiannopoulos <nmav@redhat.com>2015-03-04 14:56:00 +0100
commit6ac03e0f45da94db4619ad7e417be255d6ebbfec (patch)
treec725c91f3b03875b246eb8a4e2b9db4cdd5a4f9b
parentb12bfa8932f44d1d1c25b4a2e385387a62dfbcc9 (diff)
downloadlibtasn1-6ac03e0f45da94db4619ad7e417be255d6ebbfec.tar.gz
tests: Added tests for asn1_decode_simple_ber
-rw-r--r--tests/Test_strings.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/Test_strings.c b/tests/Test_strings.c
index f3d3dba..c68e617 100644
--- a/tests/Test_strings.c
+++ b/tests/Test_strings.c
@@ -54,6 +54,18 @@ static const struct tv tv[] = {
"\x04\x24\x30\x22\x80\x0F\x32\x30\x31\x31\x30\x38\x32\x31\x30\x38\x30\x30\x30\x36\x5A\x81\x0F\x32\x30\x31\x31\x30\x38\x32\x33\x32\x30\x35\x39\x35\x39\x5A"}
};
+static const struct tv ber[] = {
+ {ASN1_ETYPE_OCTET_STRING,
+ 2, "\xa0\xa0",
+ 10,"\x24\x80\x04\x82\x00\x02\xa0\xa0\x00\x00"},
+ {ASN1_ETYPE_OCTET_STRING,
+ 5, "\xa0\xa0\xb0\xb0\xb0",
+ 17, "\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x00\x00"},
+ {ASN1_ETYPE_OCTET_STRING,
+ 7, "\xa0\xa0\xb0\xb0\xb0\xa1\xa1",
+ 27, "\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x24\x80\x04\x82\x00\x02\xa1\xa1\x00\x00\x00\x00"},
+};
+
int
main (int argc, char *argv[])
{
@@ -61,6 +73,7 @@ main (int argc, char *argv[])
unsigned char tl[ASN1_MAX_TL_SIZE];
unsigned int tl_len, der_len, str_len;
const unsigned char *str;
+ unsigned char *b;
unsigned int i;
/* Dummy test */
@@ -107,6 +120,30 @@ main (int argc, char *argv[])
}
}
+ /* BER decoding */
+ for (i = 0; i < sizeof (ber) / sizeof (ber[0]); i++)
+ {
+ /* decoding */
+ ret =
+ asn1_decode_simple_ber (ber[i].etype, ber[i].der, ber[i].der_len, &b,
+ &str_len, NULL);
+ if (ret != ASN1_SUCCESS)
+ {
+ fprintf (stderr, "BER decoding error in %u: %s\n", i,
+ asn1_strerror (ret));
+ return 1;
+ }
+
+ if (str_len != ber[i].str_len || memcmp (b, ber[i].str, str_len) != 0)
+ {
+ fprintf (stderr,
+ "BER decoded data differ in %u! (size: %u, expected: %u)\n",
+ i, str_len, ber[i].str_len);
+ return 1;
+ }
+ free(b);
+ }
+
return 0;
}