Tolerate a SEQUENCE in DN components.
[openssl.git] / crypto / asn1 / asn1_mac.h
index f95cb145b79dcb1f72dfc794915d44859c6eb530..87bd0e9e1d81358b0631615269882ee4c88bb1a3 100644 (file)
@@ -126,7 +126,14 @@ err:\
                (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen)))
 
 /* Don't use this with d2i_ASN1_BOOLEAN() */
-#define M_ASN1_D2I_get(type,b,func) \
+#define M_ASN1_D2I_get(b, func) \
+       c.q=c.p; \
+       if (func(&(b),&c.p,c.slen) == NULL) \
+               {c.line=__LINE__; goto err; } \
+       c.slen-=(c.p-c.q);
+
+/* Don't use this with d2i_ASN1_BOOLEAN() */
+#define M_ASN1_D2I_get_x(type,b,func) \
        c.q=c.p; \
        if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \
                {c.line=__LINE__; goto err; } \
@@ -146,6 +153,13 @@ err:\
                M_ASN1_D2I_get(b,func); \
                }
 
+#define M_ASN1_D2I_get_int_opt(b,func,type) \
+       if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \
+               == (V_ASN1_UNIVERSAL|(type)))) \
+               { \
+               M_ASN1_D2I_get_int(b,func); \
+               }
+
 #define M_ASN1_D2I_get_imp(b,func, type) \
        M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \
        c.q=c.p; \