mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-03-24 10:35:12 +00:00
Convert X.509 name buffer to linked list via name traversal callback
This commit is contained in:
parent
6b37812a45
commit
c6573a27a1
|
@ -601,41 +601,47 @@ exit:
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int x509_get_name_cb( void *ctx,
|
||||||
|
mbedtls_x509_buf *oid,
|
||||||
|
mbedtls_x509_buf *val,
|
||||||
|
int next_merged )
|
||||||
|
{
|
||||||
|
mbedtls_x509_name **cur_ptr = (mbedtls_x509_name**) ctx;
|
||||||
|
mbedtls_x509_name *cur = *cur_ptr;
|
||||||
|
|
||||||
|
if( cur->oid.p != NULL )
|
||||||
|
{
|
||||||
|
cur->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_name ) );
|
||||||
|
if( cur->next == NULL )
|
||||||
|
return( MBEDTLS_ERR_ASN1_ALLOC_FAILED );
|
||||||
|
|
||||||
|
cur = cur->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
cur->oid = *oid;
|
||||||
|
cur->val = *val;
|
||||||
|
cur->next_merged = next_merged;
|
||||||
|
|
||||||
|
*cur_ptr = cur;
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end,
|
int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end,
|
||||||
mbedtls_x509_name *cur )
|
mbedtls_x509_name *cur )
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
const unsigned char *end_set;
|
mbedtls_x509_buf_raw name_buf = { *p, end - *p };
|
||||||
|
memset( cur, 0, sizeof( mbedtls_x509_name ) );
|
||||||
end_set = *p;
|
ret = mbedtls_x509_name_cmp_raw( &name_buf, &name_buf,
|
||||||
while( 1 )
|
x509_get_name_cb,
|
||||||
{
|
&cur );
|
||||||
ret = x509_set_sequence_iterate( p, &end_set, end,
|
if( ret != 0 )
|
||||||
&cur->oid, &cur->val );
|
return( ret );
|
||||||
if( ret != 0 )
|
|
||||||
return( ret + MBEDTLS_ERR_X509_INVALID_NAME );
|
|
||||||
|
|
||||||
if( *p != end_set )
|
|
||||||
cur->next_merged = 1;
|
|
||||||
|
|
||||||
if( *p == end )
|
|
||||||
{
|
|
||||||
cur->next = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
cur->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_name ) );
|
|
||||||
if( cur->next == NULL )
|
|
||||||
return( MBEDTLS_ERR_X509_ALLOC_FAILED );
|
|
||||||
|
|
||||||
cur = cur->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
*p = (unsigned char*) end;
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int x509_parse_int( unsigned char **p, size_t n, int *res )
|
static int x509_parse_int( unsigned char **p, size_t n, int *res )
|
||||||
{
|
{
|
||||||
*res = 0;
|
*res = 0;
|
||||||
|
|
Loading…
Reference in a new issue