static Asn1Generic * DecodeAsn1DerUTCTime(const unsigned char *buffer,
uint32_t size, uint8_t depth,
uint32_t *errcode);
+static Asn1Generic * DecodeAsn1DerGeneralizedTime(const unsigned char *buffer,
+ uint32_t size, uint8_t depth,
+ uint32_t *errcode);
static Asn1Generic * Asn1GenericNew(void)
{
case ASN1_UTCTIME:
child = DecodeAsn1DerUTCTime(d_ptr, el_max_size, depth+1, errcode);
break;
+ case ASN1_GENERALIZEDTIME:
+ child = DecodeAsn1DerGeneralizedTime(d_ptr, el_max_size, depth+1, errcode);
+ break;
default:
/* unknown ASN.1 type */
child = NULL;
return a;
}
+static Asn1Generic * DecodeAsn1DerGeneralizedTime(const unsigned char *buffer,
+ uint32_t max_size,
+ uint8_t depth,
+ uint32_t *errcode)
+{
+ Asn1Generic *a;
+
+ a = DecodeAsn1DerIA5String(buffer, max_size, depth, errcode);
+ if (a != NULL)
+ a->type = ASN1_GENERALIZEDTIME;
+
+ return a;
+}
+
Asn1Generic * DecodeDer(const unsigned char *buffer, uint32_t size,
uint32_t *errcode)
{
#define ASN1_CLASS_CONTEXTSPEC 2
#define ASN1_CLASS_PRIVATE 3
-#define ASN1_UNKNOWN 0
-#define ASN1_BOOLEAN 0x01
-#define ASN1_INTEGER 0x02
-#define ASN1_BITSTRING 0x03
-#define ASN1_OCTETSTRING 0x04
-#define ASN1_NULL 0x05
-#define ASN1_OID 0x06
-#define ASN1_UTF8STRING 0x0c
-#define ASN1_SEQUENCE 0x10
-#define ASN1_SET 0x11
-#define ASN1_PRINTSTRING 0x13
-#define ASN1_T61STRING 0x14
-#define ASN1_IA5STRING 0x16
-#define ASN1_UTCTIME 0x17
+#define ASN1_UNKNOWN 0
+#define ASN1_BOOLEAN 0x01
+#define ASN1_INTEGER 0x02
+#define ASN1_BITSTRING 0x03
+#define ASN1_OCTETSTRING 0x04
+#define ASN1_NULL 0x05
+#define ASN1_OID 0x06
+#define ASN1_UTF8STRING 0x0c
+#define ASN1_SEQUENCE 0x10
+#define ASN1_SET 0x11
+#define ASN1_PRINTSTRING 0x13
+#define ASN1_T61STRING 0x14
+#define ASN1_IA5STRING 0x16
+#define ASN1_UTCTIME 0x17
+#define ASN1_GENERALIZEDTIME 0x18
typedef struct Asn1ElementType_ {
uint8_t cls:2;