Problem seems to be in lib/decoding.c in function _asn1_get_octet_string which assumes that tag is always only 1 byte.
address@hidden libtasn1-4.5]# diff -Naur lib/decoding.c.orig lib/decoding.c
--- lib/decoding.c.orig 2015-05-31 21:54:15.484839103 +0200
+++ lib/decoding.c 2015-05-31 22:02:18.941502144 +0200
@@ -777,7 +777,7 @@
static int
_asn1_get_octet_string (asn1_node node, const unsigned char *der, int der_len,
- int *len, unsigned flags)
+ int *len, unsigned flags, int tag_len)
{
int len2, len3, counter, tot_len, indefinite;
int result;
@@ -785,7 +785,7 @@
counter = 0;
- if (*(der - 1) & ASN1_CLASS_STRUCTURED)
+ if (*(der - tag_len) & ASN1_CLASS_STRUCTURED)
{
tot_len = 0;
@@ -1262,7 +1262,7 @@
move = RIGHT;
break;
case ASN1_ETYPE_OCTET_STRING:
- result = _asn1_get_octet_string (p, der + counter, ider_len, &len3, flags);
+ result = _asn1_get_octet_string (p, der + counter, ider_len, &len3, flags, tag_len);
if (result != ASN1_SUCCESS)
{
warn();