- Extracted ASN.1 parsing code from the X.509 parsing code. Added new module.
diff --git a/include/polarssl/x509.h b/include/polarssl/x509.h
index a2d5440..93ef265 100644
--- a/include/polarssl/x509.h
+++ b/include/polarssl/x509.h
@@ -3,7 +3,7 @@
*
* \brief X.509 certificate and private key decoding
*
- * Copyright (C) 2006-2010, Brainspark B.V.
+ * Copyright (C) 2006-2011, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
@@ -27,6 +27,7 @@
#ifndef POLARSSL_X509_H
#define POLARSSL_X509_H
+#include "asn1.h"
#include "rsa.h"
#include "dhm.h"
@@ -35,20 +36,6 @@
* \{
*/
-/**
- * \name ASN1 Error codes
- * These error codes are OR'ed to X509 error codes for
- * higher error granularity.
- * ASN1 is a standard to specify data structures.
- * \{
- */
-#define POLARSSL_ERR_ASN1_OUT_OF_DATA -0x0014 /**< Out of data when parsing an ASN1 data structure. */
-#define POLARSSL_ERR_ASN1_UNEXPECTED_TAG -0x0016 /**< ASN1 tag was of an unexpected value. */
-#define POLARSSL_ERR_ASN1_INVALID_LENGTH -0x0018 /**< Error when trying to determine the length or invalid length. */
-#define POLARSSL_ERR_ASN1_LENGTH_MISMATCH -0x001A /**< Actual length differs from expected length. */
-#define POLARSSL_ERR_ASN1_INVALID_DATA -0x001C /**< Data is invalid. (not used) */
-/* \} name */
-
/**
* \name X509 Error codes
* \{
@@ -89,39 +76,6 @@
#define BADCERT_MISSING 0x40 /**< Certificate was missing. */
#define BADCERT_SKIP_VERIFY 0x80 /**< Certificate verification was skipped. */
/* \} name */
-
-
-/**
- * \name DER constants
- * These constants comply with DER encoded the ANS1 type tags.
- * DER encoding uses hexadecimal representation.
- * An example DER sequence is:\n
- * - 0x02 -- tag indicating INTEGER
- * - 0x01 -- length in octets
- * - 0x05 -- value
- * Such sequences are typically read into \c ::x509_buf.
- * \{
- */
-#define ASN1_BOOLEAN 0x01
-#define ASN1_INTEGER 0x02
-#define ASN1_BIT_STRING 0x03
-#define ASN1_OCTET_STRING 0x04
-#define ASN1_NULL 0x05
-#define ASN1_OID 0x06
-#define ASN1_UTF8_STRING 0x0C
-#define ASN1_SEQUENCE 0x10
-#define ASN1_SET 0x11
-#define ASN1_PRINTABLE_STRING 0x13
-#define ASN1_T61_STRING 0x14
-#define ASN1_IA5_STRING 0x16
-#define ASN1_UTC_TIME 0x17
-#define ASN1_GENERALIZED_TIME 0x18
-#define ASN1_UNIVERSAL_STRING 0x1C
-#define ASN1_BMP_STRING 0x1E
-#define ASN1_PRIMITIVE 0x00
-#define ASN1_CONSTRUCTED 0x20
-#define ASN1_CONTEXT_SPECIFIC 0x80
-/* \} name */
/* \} addtogroup x509_module */
/*
@@ -141,9 +95,6 @@
#define X509_ISSUER 0x01
#define X509_SUBJECT 0x02
-/** Returns the size of the binary string, without the trailing \\0 */
-#define OID_SIZE(x) (sizeof(x) - 1)
-
#define OID_X520 "\x55\x04"
#define OID_CN OID_X520 "\x03"
@@ -281,24 +232,12 @@
/**
* Type-length-value structure that allows for ASN1 using DER.
*/
-typedef struct _x509_buf
-{
- int tag; /**< ASN1 type, e.g. ASN1_UTF8_STRING. */
- size_t len; /**< ASN1 length, e.g. in octets. */
- unsigned char *p; /**< ASN1 data, e.g. in ASCII. */
-}
-x509_buf;
+typedef asn1_buf x509_buf;
/**
* Container for ASN1 bit strings.
*/
-typedef struct _x509_bitstring
-{
- size_t len; /**< ASN1 length, e.g. in octets. */
- unsigned char unused_bits; /**< Number of unused bits at the end of the string */
- unsigned char *p; /**< Raw ASN1 data for the bit string */
-}
-x509_bitstring;
+typedef asn1_bitstring x509_bitstring;
/**
* Container for ASN1 named information objects.
@@ -315,12 +254,7 @@
/**
* Container for a sequence of ASN.1 items
*/
-typedef struct _x509_sequence
-{
- x509_buf buf; /**< Buffer containing the given ASN.1 item. */
- struct _x509_sequence *next; /**< The next entry in the sequence. */
-}
-x509_sequence;
+typedef asn1_sequence x509_sequence;
/** Container for date and time (precision in seconds). */
typedef struct _x509_time