/* * X.509 CRL Entries */ static int x509_get_entries(unsigned char **p, const unsigned char *end, mbedtls_x509_crl_entry *entry) { int ret; size_t entry_len; mbedtls_x509_crl_entry *cur_entry = entry; if (*p == end) return (0); if ((ret = mbedtls_asn1_get_tag(p, end, &entry_len, MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED)) != 0) { if (ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG) return (0); return (ret); } end = *p + entry_len; while (*p < end) { size_t len2; const unsigned char *end2; if ((ret = mbedtls_asn1_get_tag(p, end, &len2, MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED)) != 0) { return (ret); } cur_entry->raw.tag = **p; cur_entry->raw.p = *p; cur_entry->raw.len = len2; end2 = *p + len2; if ((ret = mbedtls_x509_get_serial(p, end2, &cur_entry->serial)) != 0) return (ret); if ((ret = mbedtls_x509_get_time(p, end2, &cur_entry->revocation_date)) != 0) return (ret); if ((ret = x509_get_crl_entry_ext(p, end2, &cur_entry->entry_ext)) != 0) return (ret); if (*p < end) { cur_entry->next = mbedtls_calloc(1, sizeof(mbedtls_x509_crl_entry)); if (cur_entry->next == NULL) return (MBEDTLS_ERR_X509_ALLOC_FAILED); cur_entry = cur_entry->next; } } return (0); }
/* * X.509 CRL Entries */ static int x509_get_entries( unsigned char **p, const unsigned char *end, x509_crl_entry *entry ) { int ret; size_t entry_len; x509_crl_entry *cur_entry = entry; if( *p == end ) return( 0 ); if( ( ret = asn1_get_tag( p, end, &entry_len, ASN1_SEQUENCE | ASN1_CONSTRUCTED ) ) != 0 ) { if( ret == POLARSSL_ERR_ASN1_UNEXPECTED_TAG ) return( 0 ); return( ret ); } end = *p + entry_len; while( *p < end ) { size_t len2; const unsigned char *end2; if( ( ret = asn1_get_tag( p, end, &len2, ASN1_SEQUENCE | ASN1_CONSTRUCTED ) ) != 0 ) { return( ret ); } cur_entry->raw.tag = **p; cur_entry->raw.p = *p; cur_entry->raw.len = len2; end2 = *p + len2; if( ( ret = x509_get_serial( p, end2, &cur_entry->serial ) ) != 0 ) return( ret ); if( ( ret = x509_get_time( p, end2, &cur_entry->revocation_date ) ) != 0 ) return( ret ); if( ( ret = x509_get_crl_entry_ext( p, end2, &cur_entry->entry_ext ) ) != 0 ) return( ret ); if( *p < end ) { cur_entry->next = polarssl_malloc( sizeof( x509_crl_entry ) ); if( cur_entry->next == NULL ) return( POLARSSL_ERR_X509_MALLOC_FAILED ); memset( cur_entry->next, 0, sizeof( x509_crl_entry ) ); cur_entry = cur_entry->next; } } return( 0 ); }