Example program to test AES-GCM functionality. Used for a workshop

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

asn1.h File Reference

asn1.h File Reference

Generic ASN.1 parsing. More...

Go to the source code of this file.

Data Structures

struct  _asn1_buf
 Type-length-value structure that allows for ASN1 using DER. More...
struct  _asn1_bitstring
 Container for ASN1 bit strings. More...
struct  _asn1_sequence
 Container for a sequence of ASN.1 items. More...
struct  _asn1_named_data
 Container for a sequence or list of 'named' ASN.1 data items. More...

Functions to parse ASN.1 data structures

typedef struct _asn1_buf asn1_buf
 Type-length-value structure that allows for ASN1 using DER.
typedef struct _asn1_bitstring asn1_bitstring
 Container for ASN1 bit strings.
typedef struct _asn1_sequence asn1_sequence
 Container for a sequence of ASN.1 items.
typedef struct _asn1_named_data asn1_named_data
 Container for a sequence or list of 'named' ASN.1 data items.
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_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_mpi (unsigned char **p, const unsigned char *end, mpi *X)
 Retrieve a MPI value from an integer ASN.1 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.
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.
void asn1_free_named_data (asn1_named_data *entry)
 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.

Detailed Description

Generic ASN.1 parsing.

Copyright (C) 2006-2013, Brainspark B.V.

This file is part of PolarSSL (http://www.polarssl.org) Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>

All rights reserved.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Definition in file asn1.h.


Typedef Documentation

Container for ASN1 bit strings.

typedef struct _asn1_buf asn1_buf

Type-length-value structure that allows for ASN1 using DER.

Container for a sequence or list of 'named' ASN.1 data items.

typedef struct _asn1_sequence asn1_sequence

Container for a sequence of ASN.1 items.


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:
listThe list to seek through
oidThe OID to look for
lenSize of the OID
Returns:
NULL if not found, or a pointer to the existing entry.

Definition at line 374 of file asn1parse.c.

void asn1_free_named_data ( asn1_named_data entry )

Free a asn1_named_data entry.

Parameters:
entryThe named data entry to free

Definition at line 351 of file asn1parse.c.

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:
headPointer to the head of the list of named data entries to free

Definition at line 362 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
algThe buffer to receive the OID
paramsThe buffer to receive the params (if any)
Returns:
0 if successful or a specific ASN.1 or MPI error code.

Definition at line 289 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
algThe buffer to receive the OID
Returns:
0 if successful or a specific ASN.1 or MPI error code.

Definition at line 333 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
bsThe variable that will receive the value
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 187 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
lenLength of the actual bit/octect string in bytes
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 220 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
valThe variable that will receive the value
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 125 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
valThe variable that will receive the value
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 144 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
lenThe 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 53 of file asn1parse.c.

int asn1_get_mpi ( unsigned char **  p,
const unsigned char *  end,
mpi X 
)

Retrieve a MPI value from an integer ASN.1 tag.

Updates the pointer to immediately behind the full tag.

Parameters:
pThe position in the ASN.1 data
endEnd of data
XThe MPI that will receive the value
Returns:
0 if successful or a specific ASN.1 or MPI error code.

Definition at line 169 of file asn1parse.c.

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:
pThe position in the ASN.1 data
endEnd of data
curFirst variable in the chain to fill
tagType of sequence
Returns:
0 if successful or a specific ASN.1 error code.

Definition at line 239 of file asn1parse.c.

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

Get the tag and length of the tag.

Check for the requested tag. Updates the pointer to immediately behind the tag and length.

Parameters:
pThe position in the ASN.1 data
endEnd of data
lenThe variable that will receive the length
tagThe expected tag
Returns:
0 if successful, POLARSSL_ERR_ASN1_UNEXPECTED_TAG if tag did not match requested tag, or another specific ASN.1 error code.

Definition at line 110 of file asn1parse.c.