Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
asn1.h
00001 /** 00002 * @file asn1.h 00003 * @brief ASN.1 (Abstract Syntax Notation One) 00004 * 00005 * @section License 00006 * 00007 * Copyright (C) 2010-2017 Oryx Embedded SARL. All rights reserved. 00008 * 00009 * This file is part of CycloneCrypto Open. 00010 * 00011 * This program is free software; you can redistribute it and/or 00012 * modify it under the terms of the GNU General Public License 00013 * as published by the Free Software Foundation; either version 2 00014 * of the License, or (at your option) any later version. 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU General Public License 00022 * along with this program; if not, write to the Free Software Foundation, 00023 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00024 * 00025 * @author Oryx Embedded SARL (www.oryx-embedded.com) 00026 * @version 1.7.6 00027 **/ 00028 00029 #ifndef _ASN1_H 00030 #define _ASN1_H 00031 00032 //Dependencies 00033 #include "crypto.h" 00034 00035 //Tag number mask 00036 #define ASN1_TAG_NUMBER_MASK 0x1F 00037 00038 //ASN.1 encoding 00039 #define ASN1_ENCODING_MASK 0x20 00040 #define ASN1_ENCODING_PRIMITIVE 0x00 00041 #define ASN1_ENCODING_CONSTRUCTED 0x20 00042 00043 //ASN.1 class 00044 #define ASN1_CLASS_MASK 0xC0 00045 #define ASN1_CLASS_UNIVERSAL 0x00 00046 #define ASN1_CLASS_APPLICATION 0x40 00047 #define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 00048 #define ASN1_CLASS_PRIVATE 0xC0 00049 00050 00051 /** 00052 * @brief ASN.1 data types 00053 **/ 00054 00055 typedef enum 00056 { 00057 ASN1_TYPE_BOOLEAN = 1, 00058 ASN1_TYPE_INTEGER = 2, 00059 ASN1_TYPE_BIT_STRING = 3, 00060 ASN1_TYPE_OCTET_STRING = 4, 00061 ASN1_TYPE_NULL = 5, 00062 ASN1_TYPE_OBJECT_IDENTIFIER = 6, 00063 ASN1_TYPE_OBJECT_DESCRIPTOR = 7, 00064 ASN1_TYPE_EXTERNAL = 8, 00065 ASN1_TYPE_REAL = 9, 00066 ASN1_TYPE_ENUMERATED = 10, 00067 ASN1_TYPE_UTF8_STRING = 12, 00068 ASN1_TYPE_SEQUENCE = 16, 00069 ASN1_TYPE_SET = 17, 00070 ASN1_TYPE_NUMERIC_STRING = 18, 00071 ASN1_TYPE_PRINTABLE_STRING = 19, 00072 ASN1_TYPE_TELETEX_STRING = 20, 00073 ASN1_TYPE_VIDEOTEX_STRING = 21, 00074 ASN1_TYPE_IA5_STRING = 22, 00075 ASN1_TYPE_UTC_TIME = 23, 00076 ASN1_TYPE_GENERALIZED_TIME = 24, 00077 ASN1_TYPE_GRAPHIC_STRING = 25, 00078 ASN1_TYPE_VISIBLE_STRING = 26, 00079 ASN1_TYPE_GENERAL_STRING = 27, 00080 ASN1_TYPE_UNIVERSAL_STRING = 28, 00081 ASN1_TYPE_BMP_STRING = 30, 00082 } Asn1Type; 00083 00084 00085 /** 00086 * @brief ASN.1 tag 00087 **/ 00088 00089 typedef struct 00090 { 00091 bool_t constructed; 00092 uint_t objClass; 00093 uint_t objType; 00094 size_t length; 00095 const uint8_t *value; 00096 size_t totalLength; 00097 } Asn1Tag; 00098 00099 00100 //ASN.1 related functions 00101 error_t asn1ReadTag(const uint8_t *data, size_t length, Asn1Tag *tag); 00102 error_t asn1ReadInt32(const uint8_t *data, size_t length, Asn1Tag *tag, int32_t *value); 00103 00104 error_t asn1WriteTag(Asn1Tag *tag, bool_t reverse, uint8_t *data, size_t *written); 00105 error_t asn1WriteInt32(int32_t value, bool_t reverse, uint8_t *data, size_t *written); 00106 00107 error_t asn1CheckTag(const Asn1Tag *tag, bool_t constructed, uint_t objClass, uint_t objType); 00108 error_t asn1CheckOid(const Asn1Tag *tag, const uint8_t *oid, size_t length); 00109 00110 error_t asn1DumpObject(const uint8_t *data, size_t length, uint_t level); 00111 00112 #endif 00113
Generated on Tue Jul 12 2022 17:10:12 by
1.7.2