asn1parse.c File Reference

#include "polarssl/config.h"
#include "polarssl/asn1.h"
#include "polarssl/bignum.h"
#include <string.h>
#include <stdlib.h>
Include dependency graph for asn1parse.c:

Go to the source code of this file.

Defines

#define polarssl_malloc   malloc
#define polarssl_free   free

Functions

int asn1_get_len (unsigned char **p, const unsigned char *end, size_t *len)
 Get the length of an ASN.1 element.
int asn1_get_tag (unsigned char **p, const unsigned char *end, size_t *len, int tag)
 Get the tag and length of the tag.
int asn1_get_bool (unsigned char **p, const unsigned char *end, int *val)
 Retrieve a boolean ASN.1 tag and its value.
int asn1_get_int (unsigned char **p, const unsigned char *end, int *val)
 Retrieve an integer ASN.1 tag and its value.
int asn1_get_mpi (unsigned char **p, const unsigned char *end, mpi *X)
int asn1_get_bitstring (unsigned char **p, const unsigned char *end, asn1_bitstring *bs)
 Retrieve a bitstring ASN.1 tag and its value.
int asn1_get_bitstring_null (unsigned char **p, const unsigned char *end, size_t *len)
 Retrieve a bitstring ASN.1 tag without unused bits and its value.
int asn1_get_sequence_of (unsigned char **p, const unsigned char *end, asn1_sequence *cur, int tag)
 Parses and splits an ASN.1 "SEQUENCE OF <tag>" Updated the pointer to immediately behind the full sequence tag.
int asn1_get_alg (unsigned char **p, const unsigned char *end, asn1_buf *alg, asn1_buf *params)
 Retrieve an AlgorithmIdentifier ASN.1 sequence.
int asn1_get_alg_null (unsigned char **p, const unsigned char *end, asn1_buf *alg)
 Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no params.
void asn1_free_named_data (asn1_named_data *cur)
 Free a asn1_named_data entry.
void asn1_free_named_data_list (asn1_named_data **head)
 Free all entries in a asn1_named_data list Head will be set to NULL.
asn1_named_dataasn1_find_named_data (asn1_named_data *list, const char *oid, size_t len)
 Find a specific named_data entry in a sequence or list based on the OID.

Define Documentation

#define polarssl_free   free
#define polarssl_malloc   malloc

Function Documentation

asn1_named_data* asn1_find_named_data ( asn1_named_data list,
const char *  oid,
size_t  len 
)

Find a specific named_data entry in a sequence or list based on the OID.

Parameters:
list The list to seek through
oid The OID to look for
len Size of the OID
Returns:
NULL if not found, or a pointer to the existing entry.

Definition at line 369 of file asn1parse.c.

References _asn1_buf::len, _asn1_named_data::next, _asn1_named_data::oid, and _asn1_buf::p.

Referenced by asn1_store_named_data().

void asn1_free_named_data ( asn1_named_data entry  ) 

Free a asn1_named_data entry.

Parameters:
entry The named data entry to free

Definition at line 346 of file asn1parse.c.

References _asn1_named_data::oid, _asn1_buf::p, polarssl_free, and _asn1_named_data::val.

Referenced by asn1_free_named_data_list().

void asn1_free_named_data_list ( asn1_named_data **  head  ) 

Free all entries in a asn1_named_data list Head will be set to NULL.

Parameters:
head Pointer to the head of the list of named data entries to free

Definition at line 357 of file asn1parse.c.

References asn1_free_named_data(), _asn1_named_data::next, and polarssl_free.

Referenced by x509_string_to_names(), x509write_crt_free(), and x509write_csr_free().

int asn1_get_alg ( unsigned char **  p,
const unsigned char *  end,
asn1_buf alg,
asn1_buf params 
)

Retrieve an AlgorithmIdentifier ASN.1 sequence.

Updates the pointer to immediately behind the full AlgorithmIdentifier.

Parameters:
p The position in the ASN.1 data
end End of data
alg The buffer to receive the OID
params The buffer to receive the params (if any)
Returns:
0 if successful or a specific ASN.1 or MPI error code.

Definition at line 284 of file asn1parse.c.

References ASN1_CONSTRUCTED, asn1_get_len(), asn1_get_tag(), ASN1_OID, ASN1_SEQUENCE, _asn1_buf::len, _asn1_buf::p, POLARSSL_ERR_ASN1_LENGTH_MISMATCH, POLARSSL_ERR_ASN1_OUT_OF_DATA, and _asn1_buf::tag.

Referenced by asn1_get_alg_null(), pk_get_pk_alg(), pk_parse_key_pkcs8_encrypted_der(), and pkcs5_pbes2().

int asn1_get_alg_null ( unsigned char **  p,
const unsigned char *  end,
asn1_buf alg 
)

Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no params.

Updates the pointer to immediately behind the full AlgorithmIdentifier.

Parameters:
p The position in the ASN.1 data
end End of data
alg The buffer to receive the OID
Returns:
0 if successful or a specific ASN.1 or MPI error code.

Definition at line 328 of file asn1parse.c.

References asn1_get_alg(), ASN1_NULL, _asn1_buf::len, POLARSSL_ERR_ASN1_INVALID_DATA, and _asn1_buf::tag.

Referenced by pkcs5_parse_pbkdf2_params(), and x509_get_alg_null().

int asn1_get_bitstring ( unsigned char **  p,
const unsigned char *  end,
asn1_bitstring bs 
)

Retrieve a bitstring ASN.1 tag and its value.

Updates the pointer to immediately behind the full tag.

Parameters:
p The position in the ASN.1 data
end End of data
bs The variable that will receive the value
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 182 of file asn1parse.c.

References ASN1_BIT_STRING, asn1_get_tag(), _asn1_bitstring::len, _asn1_bitstring::p, POLARSSL_ERR_ASN1_INVALID_LENGTH, POLARSSL_ERR_ASN1_LENGTH_MISMATCH, POLARSSL_ERR_ASN1_OUT_OF_DATA, and _asn1_bitstring::unused_bits.

Referenced by x509_get_key_usage(), and x509_get_ns_cert_type().

int asn1_get_bitstring_null ( unsigned char **  p,
const unsigned char *  end,
size_t *  len 
)

Retrieve a bitstring ASN.1 tag without unused bits and its value.

Updates the pointer to the beginning of the bit/octet string.

Parameters:
p The position in the ASN.1 data
end End of data
len Length of the actual bit/octect string in bytes
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 215 of file asn1parse.c.

References ASN1_BIT_STRING, asn1_get_tag(), and POLARSSL_ERR_ASN1_INVALID_DATA.

Referenced by pk_parse_key_sec1_der(), pk_parse_subpubkey(), and x509_get_sig().

int asn1_get_bool ( unsigned char **  p,
const unsigned char *  end,
int *  val 
)

Retrieve a boolean ASN.1 tag and its value.

Updates the pointer to immediately behind the full tag.

Parameters:
p The position in the ASN.1 data
end End of data
val The variable that will receive the value
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 120 of file asn1parse.c.

References ASN1_BOOLEAN, asn1_get_tag(), and POLARSSL_ERR_ASN1_INVALID_LENGTH.

Referenced by x509_get_basic_constraints(), and x509_get_crt_ext().

int asn1_get_int ( unsigned char **  p,
const unsigned char *  end,
int *  val 
)

Retrieve an integer ASN.1 tag and its value.

Updates the pointer to immediately behind the full tag.

Parameters:
p The position in the ASN.1 data
end End of data
val The variable that will receive the value
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 139 of file asn1parse.c.

References asn1_get_tag(), ASN1_INTEGER, and POLARSSL_ERR_ASN1_INVALID_LENGTH.

Referenced by pk_parse_key_pkcs1_der(), pk_parse_key_pkcs8_unencrypted_der(), pk_parse_key_sec1_der(), pkcs12_parse_pbe_params(), pkcs5_parse_pbkdf2_params(), x509_crl_get_version(), x509_csr_get_version(), x509_get_basic_constraints(), and x509_get_version().

int asn1_get_len ( unsigned char **  p,
const unsigned char *  end,
size_t *  len 
)

Get the length of an ASN.1 element.

Updates the pointer to immediately behind the length.

Parameters:
p The position in the ASN.1 data
end End of data
len The variable that will receive the value
Returns:
0 if successful, POLARSSL_ERR_ASN1_OUT_OF_DATA on reaching end of data, POLARSSL_ERR_ASN1_INVALID_LENGTH if length is unparseable.

Definition at line 49 of file asn1parse.c.

References POLARSSL_ERR_ASN1_INVALID_LENGTH, and POLARSSL_ERR_ASN1_OUT_OF_DATA.

Referenced by asn1_get_alg(), asn1_get_tag(), x509_get_attr_type_value(), x509_get_serial(), x509_get_subject_alt_name(), and x509_get_time().

int asn1_get_mpi ( unsigned char **  p,
const unsigned char *  end,
mpi X 
)
int asn1_get_sequence_of ( unsigned char **  p,
const unsigned char *  end,
asn1_sequence cur,
int  tag 
)

Parses and splits an ASN.1 "SEQUENCE OF <tag>" Updated the pointer to immediately behind the full sequence tag.

Parameters:
p The position in the ASN.1 data
end End of data
cur First variable in the chain to fill
tag Type of sequence
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 234 of file asn1parse.c.

References ASN1_CONSTRUCTED, asn1_get_tag(), ASN1_SEQUENCE, _asn1_sequence::buf, _asn1_buf::len, _asn1_sequence::next, _asn1_buf::p, POLARSSL_ERR_ASN1_LENGTH_MISMATCH, POLARSSL_ERR_ASN1_MALLOC_FAILED, polarssl_malloc, and _asn1_buf::tag.

Referenced by x509_get_ext_key_usage().

int asn1_get_tag ( unsigned char **  p,
const unsigned char *  end,
size_t *  len,
int  tag 
)

Generated on 9 Apr 2014 for PolarSSL v1.3.2 by  doxygen 1.6.1