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

Dependencies:   mbed

Committer:
HannesTschofenig
Date:
Thu Sep 27 06:34:22 2018 +0000
Revision:
0:796d0f61a05b
Example AES-GCM test program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HannesTschofenig 0:796d0f61a05b 1 /**
HannesTschofenig 0:796d0f61a05b 2 * \file oid.c
HannesTschofenig 0:796d0f61a05b 3 *
HannesTschofenig 0:796d0f61a05b 4 * \brief Object Identifier (OID) database
HannesTschofenig 0:796d0f61a05b 5 *
HannesTschofenig 0:796d0f61a05b 6 * Copyright (C) 2006-2014, Brainspark B.V.
HannesTschofenig 0:796d0f61a05b 7 *
HannesTschofenig 0:796d0f61a05b 8 * This file is part of PolarSSL (http://www.polarssl.org)
HannesTschofenig 0:796d0f61a05b 9 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
HannesTschofenig 0:796d0f61a05b 10 *
HannesTschofenig 0:796d0f61a05b 11 * All rights reserved.
HannesTschofenig 0:796d0f61a05b 12 *
HannesTschofenig 0:796d0f61a05b 13 * This program is free software; you can redistribute it and/or modify
HannesTschofenig 0:796d0f61a05b 14 * it under the terms of the GNU General Public License as published by
HannesTschofenig 0:796d0f61a05b 15 * the Free Software Foundation; either version 2 of the License, or
HannesTschofenig 0:796d0f61a05b 16 * (at your option) any later version.
HannesTschofenig 0:796d0f61a05b 17 *
HannesTschofenig 0:796d0f61a05b 18 * This program is distributed in the hope that it will be useful,
HannesTschofenig 0:796d0f61a05b 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
HannesTschofenig 0:796d0f61a05b 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
HannesTschofenig 0:796d0f61a05b 21 * GNU General Public License for more details.
HannesTschofenig 0:796d0f61a05b 22 *
HannesTschofenig 0:796d0f61a05b 23 * You should have received a copy of the GNU General Public License along
HannesTschofenig 0:796d0f61a05b 24 * with this program; if not, write to the Free Software Foundation, Inc.,
HannesTschofenig 0:796d0f61a05b 25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
HannesTschofenig 0:796d0f61a05b 26 */
HannesTschofenig 0:796d0f61a05b 27
HannesTschofenig 0:796d0f61a05b 28 #if !defined(POLARSSL_CONFIG_FILE)
HannesTschofenig 0:796d0f61a05b 29 #include "polarssl/config.h"
HannesTschofenig 0:796d0f61a05b 30 #else
HannesTschofenig 0:796d0f61a05b 31 #include POLARSSL_CONFIG_FILE
HannesTschofenig 0:796d0f61a05b 32 #endif
HannesTschofenig 0:796d0f61a05b 33
HannesTschofenig 0:796d0f61a05b 34 #if defined(POLARSSL_OID_C)
HannesTschofenig 0:796d0f61a05b 35
HannesTschofenig 0:796d0f61a05b 36 #include "polarssl/oid.h"
HannesTschofenig 0:796d0f61a05b 37 #include "polarssl/rsa.h"
HannesTschofenig 0:796d0f61a05b 38
HannesTschofenig 0:796d0f61a05b 39 #if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C)
HannesTschofenig 0:796d0f61a05b 40 #include "polarssl/x509.h"
HannesTschofenig 0:796d0f61a05b 41 #endif
HannesTschofenig 0:796d0f61a05b 42
HannesTschofenig 0:796d0f61a05b 43 #include <stdio.h>
HannesTschofenig 0:796d0f61a05b 44
HannesTschofenig 0:796d0f61a05b 45 /*
HannesTschofenig 0:796d0f61a05b 46 * Macro to automatically add the size of #define'd OIDs
HannesTschofenig 0:796d0f61a05b 47 */
HannesTschofenig 0:796d0f61a05b 48 #define ADD_LEN(s) s, OID_SIZE(s)
HannesTschofenig 0:796d0f61a05b 49
HannesTschofenig 0:796d0f61a05b 50 /*
HannesTschofenig 0:796d0f61a05b 51 * Macro to generate an internal function for oid_XXX_from_asn1() (used by
HannesTschofenig 0:796d0f61a05b 52 * the other functions)
HannesTschofenig 0:796d0f61a05b 53 */
HannesTschofenig 0:796d0f61a05b 54 #define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST ) \
HannesTschofenig 0:796d0f61a05b 55 static const TYPE_T * oid_ ## NAME ## _from_asn1( const asn1_buf *oid ) \
HannesTschofenig 0:796d0f61a05b 56 { \
HannesTschofenig 0:796d0f61a05b 57 const TYPE_T *p = LIST; \
HannesTschofenig 0:796d0f61a05b 58 const oid_descriptor_t *cur = (const oid_descriptor_t *) p; \
HannesTschofenig 0:796d0f61a05b 59 if( p == NULL || oid == NULL ) return( NULL ); \
HannesTschofenig 0:796d0f61a05b 60 while( cur->asn1 != NULL ) { \
HannesTschofenig 0:796d0f61a05b 61 if( cur->asn1_len == oid->len && \
HannesTschofenig 0:796d0f61a05b 62 memcmp( cur->asn1, oid->p, oid->len ) == 0 ) { \
HannesTschofenig 0:796d0f61a05b 63 return( p ); \
HannesTschofenig 0:796d0f61a05b 64 } \
HannesTschofenig 0:796d0f61a05b 65 p++; \
HannesTschofenig 0:796d0f61a05b 66 cur = (const oid_descriptor_t *) p; \
HannesTschofenig 0:796d0f61a05b 67 } \
HannesTschofenig 0:796d0f61a05b 68 return( NULL ); \
HannesTschofenig 0:796d0f61a05b 69 }
HannesTschofenig 0:796d0f61a05b 70
HannesTschofenig 0:796d0f61a05b 71 /*
HannesTschofenig 0:796d0f61a05b 72 * Macro to generate a function for retrieving a single attribute from the
HannesTschofenig 0:796d0f61a05b 73 * descriptor of an oid_descriptor_t wrapper.
HannesTschofenig 0:796d0f61a05b 74 */
HannesTschofenig 0:796d0f61a05b 75 #define FN_OID_GET_DESCRIPTOR_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \
HannesTschofenig 0:796d0f61a05b 76 int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \
HannesTschofenig 0:796d0f61a05b 77 { \
HannesTschofenig 0:796d0f61a05b 78 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \
HannesTschofenig 0:796d0f61a05b 79 if( data == NULL ) return ( POLARSSL_ERR_OID_NOT_FOUND ); \
HannesTschofenig 0:796d0f61a05b 80 *ATTR1 = data->descriptor.ATTR1; \
HannesTschofenig 0:796d0f61a05b 81 return( 0 ); \
HannesTschofenig 0:796d0f61a05b 82 }
HannesTschofenig 0:796d0f61a05b 83
HannesTschofenig 0:796d0f61a05b 84 /*
HannesTschofenig 0:796d0f61a05b 85 * Macro to generate a function for retrieving a single attribute from an
HannesTschofenig 0:796d0f61a05b 86 * oid_descriptor_t wrapper.
HannesTschofenig 0:796d0f61a05b 87 */
HannesTschofenig 0:796d0f61a05b 88 #define FN_OID_GET_ATTR1(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1) \
HannesTschofenig 0:796d0f61a05b 89 int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1 ) \
HannesTschofenig 0:796d0f61a05b 90 { \
HannesTschofenig 0:796d0f61a05b 91 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \
HannesTschofenig 0:796d0f61a05b 92 if( data == NULL ) return ( POLARSSL_ERR_OID_NOT_FOUND ); \
HannesTschofenig 0:796d0f61a05b 93 *ATTR1 = data->ATTR1; \
HannesTschofenig 0:796d0f61a05b 94 return( 0 ); \
HannesTschofenig 0:796d0f61a05b 95 }
HannesTschofenig 0:796d0f61a05b 96
HannesTschofenig 0:796d0f61a05b 97 /*
HannesTschofenig 0:796d0f61a05b 98 * Macro to generate a function for retrieving two attributes from an
HannesTschofenig 0:796d0f61a05b 99 * oid_descriptor_t wrapper.
HannesTschofenig 0:796d0f61a05b 100 */
HannesTschofenig 0:796d0f61a05b 101 #define FN_OID_GET_ATTR2(FN_NAME, TYPE_T, TYPE_NAME, ATTR1_TYPE, ATTR1, \
HannesTschofenig 0:796d0f61a05b 102 ATTR2_TYPE, ATTR2) \
HannesTschofenig 0:796d0f61a05b 103 int FN_NAME( const asn1_buf *oid, ATTR1_TYPE * ATTR1, ATTR2_TYPE * ATTR2 ) \
HannesTschofenig 0:796d0f61a05b 104 { \
HannesTschofenig 0:796d0f61a05b 105 const TYPE_T *data = oid_ ## TYPE_NAME ## _from_asn1( oid ); \
HannesTschofenig 0:796d0f61a05b 106 if( data == NULL ) return ( POLARSSL_ERR_OID_NOT_FOUND ); \
HannesTschofenig 0:796d0f61a05b 107 *ATTR1 = data->ATTR1; \
HannesTschofenig 0:796d0f61a05b 108 *ATTR2 = data->ATTR2; \
HannesTschofenig 0:796d0f61a05b 109 return( 0 ); \
HannesTschofenig 0:796d0f61a05b 110 }
HannesTschofenig 0:796d0f61a05b 111
HannesTschofenig 0:796d0f61a05b 112 /*
HannesTschofenig 0:796d0f61a05b 113 * Macro to generate a function for retrieving the OID based on a single
HannesTschofenig 0:796d0f61a05b 114 * attribute from a oid_descriptor_t wrapper.
HannesTschofenig 0:796d0f61a05b 115 */
HannesTschofenig 0:796d0f61a05b 116 #define FN_OID_GET_OID_BY_ATTR1(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1) \
HannesTschofenig 0:796d0f61a05b 117 int FN_NAME( ATTR1_TYPE ATTR1, const char **oid, size_t *olen ) \
HannesTschofenig 0:796d0f61a05b 118 { \
HannesTschofenig 0:796d0f61a05b 119 const TYPE_T *cur = LIST; \
HannesTschofenig 0:796d0f61a05b 120 while( cur->descriptor.asn1 != NULL ) { \
HannesTschofenig 0:796d0f61a05b 121 if( cur->ATTR1 == ATTR1 ) { \
HannesTschofenig 0:796d0f61a05b 122 *oid = cur->descriptor.asn1; \
HannesTschofenig 0:796d0f61a05b 123 *olen = cur->descriptor.asn1_len; \
HannesTschofenig 0:796d0f61a05b 124 return( 0 ); \
HannesTschofenig 0:796d0f61a05b 125 } \
HannesTschofenig 0:796d0f61a05b 126 cur++; \
HannesTschofenig 0:796d0f61a05b 127 } \
HannesTschofenig 0:796d0f61a05b 128 return( POLARSSL_ERR_OID_NOT_FOUND ); \
HannesTschofenig 0:796d0f61a05b 129 }
HannesTschofenig 0:796d0f61a05b 130
HannesTschofenig 0:796d0f61a05b 131 /*
HannesTschofenig 0:796d0f61a05b 132 * Macro to generate a function for retrieving the OID based on two
HannesTschofenig 0:796d0f61a05b 133 * attributes from a oid_descriptor_t wrapper.
HannesTschofenig 0:796d0f61a05b 134 */
HannesTschofenig 0:796d0f61a05b 135 #define FN_OID_GET_OID_BY_ATTR2(FN_NAME, TYPE_T, LIST, ATTR1_TYPE, ATTR1, \
HannesTschofenig 0:796d0f61a05b 136 ATTR2_TYPE, ATTR2) \
HannesTschofenig 0:796d0f61a05b 137 int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid , \
HannesTschofenig 0:796d0f61a05b 138 size_t *olen ) \
HannesTschofenig 0:796d0f61a05b 139 { \
HannesTschofenig 0:796d0f61a05b 140 const TYPE_T *cur = LIST; \
HannesTschofenig 0:796d0f61a05b 141 while( cur->descriptor.asn1 != NULL ) { \
HannesTschofenig 0:796d0f61a05b 142 if( cur->ATTR1 == ATTR1 && cur->ATTR2 == ATTR2 ) { \
HannesTschofenig 0:796d0f61a05b 143 *oid = cur->descriptor.asn1; \
HannesTschofenig 0:796d0f61a05b 144 *olen = cur->descriptor.asn1_len; \
HannesTschofenig 0:796d0f61a05b 145 return( 0 ); \
HannesTschofenig 0:796d0f61a05b 146 } \
HannesTschofenig 0:796d0f61a05b 147 cur++; \
HannesTschofenig 0:796d0f61a05b 148 } \
HannesTschofenig 0:796d0f61a05b 149 return( POLARSSL_ERR_OID_NOT_FOUND ); \
HannesTschofenig 0:796d0f61a05b 150 }
HannesTschofenig 0:796d0f61a05b 151
HannesTschofenig 0:796d0f61a05b 152 /*
HannesTschofenig 0:796d0f61a05b 153 * For X520 attribute types
HannesTschofenig 0:796d0f61a05b 154 */
HannesTschofenig 0:796d0f61a05b 155 typedef struct {
HannesTschofenig 0:796d0f61a05b 156 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 157 const char *short_name;
HannesTschofenig 0:796d0f61a05b 158 } oid_x520_attr_t;
HannesTschofenig 0:796d0f61a05b 159
HannesTschofenig 0:796d0f61a05b 160 static const oid_x520_attr_t oid_x520_attr_type[] =
HannesTschofenig 0:796d0f61a05b 161 {
HannesTschofenig 0:796d0f61a05b 162 {
HannesTschofenig 0:796d0f61a05b 163 { ADD_LEN( OID_AT_CN ), "id-at-commonName", "Common Name" },
HannesTschofenig 0:796d0f61a05b 164 "CN",
HannesTschofenig 0:796d0f61a05b 165 },
HannesTschofenig 0:796d0f61a05b 166 {
HannesTschofenig 0:796d0f61a05b 167 { ADD_LEN( OID_AT_COUNTRY ), "id-at-countryName", "Country" },
HannesTschofenig 0:796d0f61a05b 168 "C",
HannesTschofenig 0:796d0f61a05b 169 },
HannesTschofenig 0:796d0f61a05b 170 {
HannesTschofenig 0:796d0f61a05b 171 { ADD_LEN( OID_AT_LOCALITY ), "id-at-locality", "Locality" },
HannesTschofenig 0:796d0f61a05b 172 "L",
HannesTschofenig 0:796d0f61a05b 173 },
HannesTschofenig 0:796d0f61a05b 174 {
HannesTschofenig 0:796d0f61a05b 175 { ADD_LEN( OID_AT_STATE ), "id-at-state", "State" },
HannesTschofenig 0:796d0f61a05b 176 "ST",
HannesTschofenig 0:796d0f61a05b 177 },
HannesTschofenig 0:796d0f61a05b 178 {
HannesTschofenig 0:796d0f61a05b 179 { ADD_LEN( OID_AT_ORGANIZATION ),"id-at-organizationName", "Organization" },
HannesTschofenig 0:796d0f61a05b 180 "O",
HannesTschofenig 0:796d0f61a05b 181 },
HannesTschofenig 0:796d0f61a05b 182 {
HannesTschofenig 0:796d0f61a05b 183 { ADD_LEN( OID_AT_ORG_UNIT ), "id-at-organizationalUnitName", "Org Unit" },
HannesTschofenig 0:796d0f61a05b 184 "OU",
HannesTschofenig 0:796d0f61a05b 185 },
HannesTschofenig 0:796d0f61a05b 186 {
HannesTschofenig 0:796d0f61a05b 187 { ADD_LEN( OID_PKCS9_EMAIL ), "emailAddress", "E-mail address" },
HannesTschofenig 0:796d0f61a05b 188 "emailAddress",
HannesTschofenig 0:796d0f61a05b 189 },
HannesTschofenig 0:796d0f61a05b 190 {
HannesTschofenig 0:796d0f61a05b 191 { ADD_LEN( OID_AT_SERIAL_NUMBER ),"id-at-serialNumber", "Serial number" },
HannesTschofenig 0:796d0f61a05b 192 "serialNumber",
HannesTschofenig 0:796d0f61a05b 193 },
HannesTschofenig 0:796d0f61a05b 194 {
HannesTschofenig 0:796d0f61a05b 195 { ADD_LEN( OID_AT_POSTAL_ADDRESS ),"id-at-postalAddress", "Postal address" },
HannesTschofenig 0:796d0f61a05b 196 "postalAddress",
HannesTschofenig 0:796d0f61a05b 197 },
HannesTschofenig 0:796d0f61a05b 198 {
HannesTschofenig 0:796d0f61a05b 199 { ADD_LEN( OID_AT_POSTAL_CODE ), "id-at-postalCode", "Postal code" },
HannesTschofenig 0:796d0f61a05b 200 "postalCode",
HannesTschofenig 0:796d0f61a05b 201 },
HannesTschofenig 0:796d0f61a05b 202 {
HannesTschofenig 0:796d0f61a05b 203 { ADD_LEN( OID_AT_SUR_NAME ), "id-at-surName", "Surname" },
HannesTschofenig 0:796d0f61a05b 204 "SN",
HannesTschofenig 0:796d0f61a05b 205 },
HannesTschofenig 0:796d0f61a05b 206 {
HannesTschofenig 0:796d0f61a05b 207 { ADD_LEN( OID_AT_GIVEN_NAME ), "id-at-givenName", "Given name" },
HannesTschofenig 0:796d0f61a05b 208 "GN",
HannesTschofenig 0:796d0f61a05b 209 },
HannesTschofenig 0:796d0f61a05b 210 {
HannesTschofenig 0:796d0f61a05b 211 { ADD_LEN( OID_AT_INITIALS ), "id-at-initials", "Initials" },
HannesTschofenig 0:796d0f61a05b 212 "initials",
HannesTschofenig 0:796d0f61a05b 213 },
HannesTschofenig 0:796d0f61a05b 214 {
HannesTschofenig 0:796d0f61a05b 215 { ADD_LEN( OID_AT_GENERATION_QUALIFIER ), "id-at-generationQualifier", "Generation qualifier" },
HannesTschofenig 0:796d0f61a05b 216 "generationQualifier",
HannesTschofenig 0:796d0f61a05b 217 },
HannesTschofenig 0:796d0f61a05b 218 {
HannesTschofenig 0:796d0f61a05b 219 { ADD_LEN( OID_AT_TITLE ), "id-at-title", "Title" },
HannesTschofenig 0:796d0f61a05b 220 "title",
HannesTschofenig 0:796d0f61a05b 221 },
HannesTschofenig 0:796d0f61a05b 222 {
HannesTschofenig 0:796d0f61a05b 223 { ADD_LEN( OID_AT_DN_QUALIFIER ),"id-at-dnQualifier", "Distinguished Name qualifier" },
HannesTschofenig 0:796d0f61a05b 224 "dnQualifier",
HannesTschofenig 0:796d0f61a05b 225 },
HannesTschofenig 0:796d0f61a05b 226 {
HannesTschofenig 0:796d0f61a05b 227 { ADD_LEN( OID_AT_PSEUDONYM ), "id-at-pseudonym", "Pseudonym" },
HannesTschofenig 0:796d0f61a05b 228 "pseudonym",
HannesTschofenig 0:796d0f61a05b 229 },
HannesTschofenig 0:796d0f61a05b 230 {
HannesTschofenig 0:796d0f61a05b 231 { ADD_LEN( OID_DOMAIN_COMPONENT ), "id-domainComponent", "Domain component" },
HannesTschofenig 0:796d0f61a05b 232 "DC",
HannesTschofenig 0:796d0f61a05b 233 },
HannesTschofenig 0:796d0f61a05b 234 {
HannesTschofenig 0:796d0f61a05b 235 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 236 NULL,
HannesTschofenig 0:796d0f61a05b 237 }
HannesTschofenig 0:796d0f61a05b 238 };
HannesTschofenig 0:796d0f61a05b 239
HannesTschofenig 0:796d0f61a05b 240 FN_OID_TYPED_FROM_ASN1(oid_x520_attr_t, x520_attr, oid_x520_attr_type);
HannesTschofenig 0:796d0f61a05b 241 FN_OID_GET_ATTR1(oid_get_attr_short_name, oid_x520_attr_t, x520_attr, const char *, short_name);
HannesTschofenig 0:796d0f61a05b 242
HannesTschofenig 0:796d0f61a05b 243 #if defined(POLARSSL_X509_USE_C) || defined(POLARSSL_X509_CREATE_C)
HannesTschofenig 0:796d0f61a05b 244 /*
HannesTschofenig 0:796d0f61a05b 245 * For X509 extensions
HannesTschofenig 0:796d0f61a05b 246 */
HannesTschofenig 0:796d0f61a05b 247 typedef struct {
HannesTschofenig 0:796d0f61a05b 248 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 249 int ext_type;
HannesTschofenig 0:796d0f61a05b 250 } oid_x509_ext_t;
HannesTschofenig 0:796d0f61a05b 251
HannesTschofenig 0:796d0f61a05b 252 static const oid_x509_ext_t oid_x509_ext[] =
HannesTschofenig 0:796d0f61a05b 253 {
HannesTschofenig 0:796d0f61a05b 254 {
HannesTschofenig 0:796d0f61a05b 255 { ADD_LEN( OID_BASIC_CONSTRAINTS ), "id-ce-basicConstraints", "Basic Constraints" },
HannesTschofenig 0:796d0f61a05b 256 EXT_BASIC_CONSTRAINTS,
HannesTschofenig 0:796d0f61a05b 257 },
HannesTschofenig 0:796d0f61a05b 258 {
HannesTschofenig 0:796d0f61a05b 259 { ADD_LEN( OID_KEY_USAGE ), "id-ce-keyUsage", "Key Usage" },
HannesTschofenig 0:796d0f61a05b 260 EXT_KEY_USAGE,
HannesTschofenig 0:796d0f61a05b 261 },
HannesTschofenig 0:796d0f61a05b 262 {
HannesTschofenig 0:796d0f61a05b 263 { ADD_LEN( OID_EXTENDED_KEY_USAGE ), "id-ce-keyUsage", "Extended Key Usage" },
HannesTschofenig 0:796d0f61a05b 264 EXT_EXTENDED_KEY_USAGE,
HannesTschofenig 0:796d0f61a05b 265 },
HannesTschofenig 0:796d0f61a05b 266 {
HannesTschofenig 0:796d0f61a05b 267 { ADD_LEN( OID_SUBJECT_ALT_NAME ), "id-ce-subjectAltName", "Subject Alt Name" },
HannesTschofenig 0:796d0f61a05b 268 EXT_SUBJECT_ALT_NAME,
HannesTschofenig 0:796d0f61a05b 269 },
HannesTschofenig 0:796d0f61a05b 270 {
HannesTschofenig 0:796d0f61a05b 271 { ADD_LEN( OID_NS_CERT_TYPE ), "id-netscape-certtype", "Netscape Certificate Type" },
HannesTschofenig 0:796d0f61a05b 272 EXT_NS_CERT_TYPE,
HannesTschofenig 0:796d0f61a05b 273 },
HannesTschofenig 0:796d0f61a05b 274 {
HannesTschofenig 0:796d0f61a05b 275 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 276 0,
HannesTschofenig 0:796d0f61a05b 277 },
HannesTschofenig 0:796d0f61a05b 278 };
HannesTschofenig 0:796d0f61a05b 279
HannesTschofenig 0:796d0f61a05b 280 FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext);
HannesTschofenig 0:796d0f61a05b 281 FN_OID_GET_ATTR1(oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type);
HannesTschofenig 0:796d0f61a05b 282
HannesTschofenig 0:796d0f61a05b 283 static const oid_descriptor_t oid_ext_key_usage[] =
HannesTschofenig 0:796d0f61a05b 284 {
HannesTschofenig 0:796d0f61a05b 285 { ADD_LEN( OID_SERVER_AUTH ), "id-kp-serverAuth", "TLS Web Server Authentication" },
HannesTschofenig 0:796d0f61a05b 286 { ADD_LEN( OID_CLIENT_AUTH ), "id-kp-clientAuth", "TLS Web Client Authentication" },
HannesTschofenig 0:796d0f61a05b 287 { ADD_LEN( OID_CODE_SIGNING ), "id-kp-codeSigning", "Code Signing" },
HannesTschofenig 0:796d0f61a05b 288 { ADD_LEN( OID_EMAIL_PROTECTION ), "id-kp-emailProtection", "E-mail Protection" },
HannesTschofenig 0:796d0f61a05b 289 { ADD_LEN( OID_TIME_STAMPING ), "id-kp-timeStamping", "Time Stamping" },
HannesTschofenig 0:796d0f61a05b 290 { ADD_LEN( OID_OCSP_SIGNING ), "id-kp-OCSPSigning", "OCSP Signing" },
HannesTschofenig 0:796d0f61a05b 291 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 292 };
HannesTschofenig 0:796d0f61a05b 293
HannesTschofenig 0:796d0f61a05b 294 FN_OID_TYPED_FROM_ASN1(oid_descriptor_t, ext_key_usage, oid_ext_key_usage);
HannesTschofenig 0:796d0f61a05b 295 FN_OID_GET_ATTR1(oid_get_extended_key_usage, oid_descriptor_t, ext_key_usage, const char *, description);
HannesTschofenig 0:796d0f61a05b 296 #endif /* POLARSSL_X509_USE_C || POLARSSL_X509_CREATE_C */
HannesTschofenig 0:796d0f61a05b 297
HannesTschofenig 0:796d0f61a05b 298 #if defined(POLARSSL_MD_C)
HannesTschofenig 0:796d0f61a05b 299 /*
HannesTschofenig 0:796d0f61a05b 300 * For SignatureAlgorithmIdentifier
HannesTschofenig 0:796d0f61a05b 301 */
HannesTschofenig 0:796d0f61a05b 302 typedef struct {
HannesTschofenig 0:796d0f61a05b 303 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 304 md_type_t md_alg;
HannesTschofenig 0:796d0f61a05b 305 pk_type_t pk_alg;
HannesTschofenig 0:796d0f61a05b 306 } oid_sig_alg_t;
HannesTschofenig 0:796d0f61a05b 307
HannesTschofenig 0:796d0f61a05b 308 static const oid_sig_alg_t oid_sig_alg[] =
HannesTschofenig 0:796d0f61a05b 309 {
HannesTschofenig 0:796d0f61a05b 310 {
HannesTschofenig 0:796d0f61a05b 311 { ADD_LEN( OID_PKCS1_MD2 ), "md2WithRSAEncryption", "RSA with MD2" },
HannesTschofenig 0:796d0f61a05b 312 POLARSSL_MD_MD2, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 313 },
HannesTschofenig 0:796d0f61a05b 314 {
HannesTschofenig 0:796d0f61a05b 315 { ADD_LEN( OID_PKCS1_MD4 ), "md4WithRSAEncryption", "RSA with MD4" },
HannesTschofenig 0:796d0f61a05b 316 POLARSSL_MD_MD4, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 317 },
HannesTschofenig 0:796d0f61a05b 318 {
HannesTschofenig 0:796d0f61a05b 319 { ADD_LEN( OID_PKCS1_MD5 ), "md5WithRSAEncryption", "RSA with MD5" },
HannesTschofenig 0:796d0f61a05b 320 POLARSSL_MD_MD5, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 321 },
HannesTschofenig 0:796d0f61a05b 322 {
HannesTschofenig 0:796d0f61a05b 323 { ADD_LEN( OID_PKCS1_SHA1 ), "sha-1WithRSAEncryption", "RSA with SHA1" },
HannesTschofenig 0:796d0f61a05b 324 POLARSSL_MD_SHA1, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 325 },
HannesTschofenig 0:796d0f61a05b 326 {
HannesTschofenig 0:796d0f61a05b 327 { ADD_LEN( OID_PKCS1_SHA224 ), "sha224WithRSAEncryption", "RSA with SHA-224" },
HannesTschofenig 0:796d0f61a05b 328 POLARSSL_MD_SHA224, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 329 },
HannesTschofenig 0:796d0f61a05b 330 {
HannesTschofenig 0:796d0f61a05b 331 { ADD_LEN( OID_PKCS1_SHA256 ), "sha256WithRSAEncryption", "RSA with SHA-256" },
HannesTschofenig 0:796d0f61a05b 332 POLARSSL_MD_SHA256, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 333 },
HannesTschofenig 0:796d0f61a05b 334 {
HannesTschofenig 0:796d0f61a05b 335 { ADD_LEN( OID_PKCS1_SHA384 ), "sha384WithRSAEncryption", "RSA with SHA-384" },
HannesTschofenig 0:796d0f61a05b 336 POLARSSL_MD_SHA384, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 337 },
HannesTschofenig 0:796d0f61a05b 338 {
HannesTschofenig 0:796d0f61a05b 339 { ADD_LEN( OID_PKCS1_SHA512 ), "sha512WithRSAEncryption", "RSA with SHA-512" },
HannesTschofenig 0:796d0f61a05b 340 POLARSSL_MD_SHA512, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 341 },
HannesTschofenig 0:796d0f61a05b 342 {
HannesTschofenig 0:796d0f61a05b 343 { ADD_LEN( OID_RSA_SHA_OBS ), "sha-1WithRSAEncryption", "RSA with SHA1" },
HannesTschofenig 0:796d0f61a05b 344 POLARSSL_MD_SHA1, POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 345 },
HannesTschofenig 0:796d0f61a05b 346 {
HannesTschofenig 0:796d0f61a05b 347 { ADD_LEN( OID_ECDSA_SHA1 ), "ecdsa-with-SHA1", "ECDSA with SHA1" },
HannesTschofenig 0:796d0f61a05b 348 POLARSSL_MD_SHA1, POLARSSL_PK_ECDSA,
HannesTschofenig 0:796d0f61a05b 349 },
HannesTschofenig 0:796d0f61a05b 350 {
HannesTschofenig 0:796d0f61a05b 351 { ADD_LEN( OID_ECDSA_SHA224 ), "ecdsa-with-SHA224", "ECDSA with SHA224" },
HannesTschofenig 0:796d0f61a05b 352 POLARSSL_MD_SHA224, POLARSSL_PK_ECDSA,
HannesTschofenig 0:796d0f61a05b 353 },
HannesTschofenig 0:796d0f61a05b 354 {
HannesTschofenig 0:796d0f61a05b 355 { ADD_LEN( OID_ECDSA_SHA256 ), "ecdsa-with-SHA256", "ECDSA with SHA256" },
HannesTschofenig 0:796d0f61a05b 356 POLARSSL_MD_SHA256, POLARSSL_PK_ECDSA,
HannesTschofenig 0:796d0f61a05b 357 },
HannesTschofenig 0:796d0f61a05b 358 {
HannesTschofenig 0:796d0f61a05b 359 { ADD_LEN( OID_ECDSA_SHA384 ), "ecdsa-with-SHA384", "ECDSA with SHA384" },
HannesTschofenig 0:796d0f61a05b 360 POLARSSL_MD_SHA384, POLARSSL_PK_ECDSA,
HannesTschofenig 0:796d0f61a05b 361 },
HannesTschofenig 0:796d0f61a05b 362 {
HannesTschofenig 0:796d0f61a05b 363 { ADD_LEN( OID_ECDSA_SHA512 ), "ecdsa-with-SHA512", "ECDSA with SHA512" },
HannesTschofenig 0:796d0f61a05b 364 POLARSSL_MD_SHA512, POLARSSL_PK_ECDSA,
HannesTschofenig 0:796d0f61a05b 365 },
HannesTschofenig 0:796d0f61a05b 366 {
HannesTschofenig 0:796d0f61a05b 367 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 368 0, 0,
HannesTschofenig 0:796d0f61a05b 369 },
HannesTschofenig 0:796d0f61a05b 370 };
HannesTschofenig 0:796d0f61a05b 371
HannesTschofenig 0:796d0f61a05b 372 FN_OID_TYPED_FROM_ASN1(oid_sig_alg_t, sig_alg, oid_sig_alg);
HannesTschofenig 0:796d0f61a05b 373 FN_OID_GET_DESCRIPTOR_ATTR1(oid_get_sig_alg_desc, oid_sig_alg_t, sig_alg, const char *, description);
HannesTschofenig 0:796d0f61a05b 374 FN_OID_GET_ATTR2(oid_get_sig_alg, oid_sig_alg_t, sig_alg, md_type_t, md_alg, pk_type_t, pk_alg);
HannesTschofenig 0:796d0f61a05b 375 FN_OID_GET_OID_BY_ATTR2(oid_get_oid_by_sig_alg, oid_sig_alg_t, oid_sig_alg, pk_type_t, pk_alg, md_type_t, md_alg);
HannesTschofenig 0:796d0f61a05b 376 #endif /* POLARSSL_MD_C */
HannesTschofenig 0:796d0f61a05b 377
HannesTschofenig 0:796d0f61a05b 378 /*
HannesTschofenig 0:796d0f61a05b 379 * For PublicKeyInfo (PKCS1, RFC 5480)
HannesTschofenig 0:796d0f61a05b 380 */
HannesTschofenig 0:796d0f61a05b 381 typedef struct {
HannesTschofenig 0:796d0f61a05b 382 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 383 pk_type_t pk_alg;
HannesTschofenig 0:796d0f61a05b 384 } oid_pk_alg_t;
HannesTschofenig 0:796d0f61a05b 385
HannesTschofenig 0:796d0f61a05b 386 static const oid_pk_alg_t oid_pk_alg[] =
HannesTschofenig 0:796d0f61a05b 387 {
HannesTschofenig 0:796d0f61a05b 388 {
HannesTschofenig 0:796d0f61a05b 389 { ADD_LEN( OID_PKCS1_RSA ), "rsaEncryption", "RSA" },
HannesTschofenig 0:796d0f61a05b 390 POLARSSL_PK_RSA,
HannesTschofenig 0:796d0f61a05b 391 },
HannesTschofenig 0:796d0f61a05b 392 {
HannesTschofenig 0:796d0f61a05b 393 { ADD_LEN( OID_EC_ALG_UNRESTRICTED ), "id-ecPublicKey", "Generic EC key" },
HannesTschofenig 0:796d0f61a05b 394 POLARSSL_PK_ECKEY,
HannesTschofenig 0:796d0f61a05b 395 },
HannesTschofenig 0:796d0f61a05b 396 {
HannesTschofenig 0:796d0f61a05b 397 { ADD_LEN( OID_EC_ALG_ECDH ), "id-ecDH", "EC key for ECDH" },
HannesTschofenig 0:796d0f61a05b 398 POLARSSL_PK_ECKEY_DH,
HannesTschofenig 0:796d0f61a05b 399 },
HannesTschofenig 0:796d0f61a05b 400 {
HannesTschofenig 0:796d0f61a05b 401 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 402 0,
HannesTschofenig 0:796d0f61a05b 403 },
HannesTschofenig 0:796d0f61a05b 404 };
HannesTschofenig 0:796d0f61a05b 405
HannesTschofenig 0:796d0f61a05b 406 FN_OID_TYPED_FROM_ASN1(oid_pk_alg_t, pk_alg, oid_pk_alg);
HannesTschofenig 0:796d0f61a05b 407 FN_OID_GET_ATTR1(oid_get_pk_alg, oid_pk_alg_t, pk_alg, pk_type_t, pk_alg);
HannesTschofenig 0:796d0f61a05b 408 FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_pk_alg, oid_pk_alg_t, oid_pk_alg, pk_type_t, pk_alg);
HannesTschofenig 0:796d0f61a05b 409
HannesTschofenig 0:796d0f61a05b 410 #if defined(POLARSSL_ECP_C)
HannesTschofenig 0:796d0f61a05b 411 /*
HannesTschofenig 0:796d0f61a05b 412 * For namedCurve (RFC 5480)
HannesTschofenig 0:796d0f61a05b 413 */
HannesTschofenig 0:796d0f61a05b 414 typedef struct {
HannesTschofenig 0:796d0f61a05b 415 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 416 ecp_group_id grp_id;
HannesTschofenig 0:796d0f61a05b 417 } oid_ecp_grp_t;
HannesTschofenig 0:796d0f61a05b 418
HannesTschofenig 0:796d0f61a05b 419 static const oid_ecp_grp_t oid_ecp_grp[] =
HannesTschofenig 0:796d0f61a05b 420 {
HannesTschofenig 0:796d0f61a05b 421 {
HannesTschofenig 0:796d0f61a05b 422 { ADD_LEN( OID_EC_GRP_SECP192R1 ), "secp192r1", "secp192r1" },
HannesTschofenig 0:796d0f61a05b 423 POLARSSL_ECP_DP_SECP192R1,
HannesTschofenig 0:796d0f61a05b 424 },
HannesTschofenig 0:796d0f61a05b 425 {
HannesTschofenig 0:796d0f61a05b 426 { ADD_LEN( OID_EC_GRP_SECP224R1 ), "secp224r1", "secp224r1" },
HannesTschofenig 0:796d0f61a05b 427 POLARSSL_ECP_DP_SECP224R1,
HannesTschofenig 0:796d0f61a05b 428 },
HannesTschofenig 0:796d0f61a05b 429 {
HannesTschofenig 0:796d0f61a05b 430 { ADD_LEN( OID_EC_GRP_SECP256R1 ), "secp256r1", "secp256r1" },
HannesTschofenig 0:796d0f61a05b 431 POLARSSL_ECP_DP_SECP256R1,
HannesTschofenig 0:796d0f61a05b 432 },
HannesTschofenig 0:796d0f61a05b 433 {
HannesTschofenig 0:796d0f61a05b 434 { ADD_LEN( OID_EC_GRP_SECP384R1 ), "secp384r1", "secp384r1" },
HannesTschofenig 0:796d0f61a05b 435 POLARSSL_ECP_DP_SECP384R1,
HannesTschofenig 0:796d0f61a05b 436 },
HannesTschofenig 0:796d0f61a05b 437 {
HannesTschofenig 0:796d0f61a05b 438 { ADD_LEN( OID_EC_GRP_SECP521R1 ), "secp521r1", "secp521r1" },
HannesTschofenig 0:796d0f61a05b 439 POLARSSL_ECP_DP_SECP521R1,
HannesTschofenig 0:796d0f61a05b 440 },
HannesTschofenig 0:796d0f61a05b 441 {
HannesTschofenig 0:796d0f61a05b 442 { ADD_LEN( OID_EC_GRP_SECP192K1 ), "secp192k1", "secp192k1" },
HannesTschofenig 0:796d0f61a05b 443 POLARSSL_ECP_DP_SECP192K1,
HannesTschofenig 0:796d0f61a05b 444 },
HannesTschofenig 0:796d0f61a05b 445 {
HannesTschofenig 0:796d0f61a05b 446 { ADD_LEN( OID_EC_GRP_SECP224K1 ), "secp224k1", "secp224k1" },
HannesTschofenig 0:796d0f61a05b 447 POLARSSL_ECP_DP_SECP224K1,
HannesTschofenig 0:796d0f61a05b 448 },
HannesTschofenig 0:796d0f61a05b 449 {
HannesTschofenig 0:796d0f61a05b 450 { ADD_LEN( OID_EC_GRP_SECP256K1 ), "secp256k1", "secp256k1" },
HannesTschofenig 0:796d0f61a05b 451 POLARSSL_ECP_DP_SECP256K1,
HannesTschofenig 0:796d0f61a05b 452 },
HannesTschofenig 0:796d0f61a05b 453 {
HannesTschofenig 0:796d0f61a05b 454 { ADD_LEN( OID_EC_GRP_BP256R1 ), "brainpoolP256r1","brainpool256r1" },
HannesTschofenig 0:796d0f61a05b 455 POLARSSL_ECP_DP_BP256R1,
HannesTschofenig 0:796d0f61a05b 456 },
HannesTschofenig 0:796d0f61a05b 457 {
HannesTschofenig 0:796d0f61a05b 458 { ADD_LEN( OID_EC_GRP_BP384R1 ), "brainpoolP384r1","brainpool384r1" },
HannesTschofenig 0:796d0f61a05b 459 POLARSSL_ECP_DP_BP384R1,
HannesTschofenig 0:796d0f61a05b 460 },
HannesTschofenig 0:796d0f61a05b 461 {
HannesTschofenig 0:796d0f61a05b 462 { ADD_LEN( OID_EC_GRP_BP512R1 ), "brainpoolP512r1","brainpool512r1" },
HannesTschofenig 0:796d0f61a05b 463 POLARSSL_ECP_DP_BP512R1,
HannesTschofenig 0:796d0f61a05b 464 },
HannesTschofenig 0:796d0f61a05b 465 {
HannesTschofenig 0:796d0f61a05b 466 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 467 0,
HannesTschofenig 0:796d0f61a05b 468 },
HannesTschofenig 0:796d0f61a05b 469 };
HannesTschofenig 0:796d0f61a05b 470
HannesTschofenig 0:796d0f61a05b 471 FN_OID_TYPED_FROM_ASN1(oid_ecp_grp_t, grp_id, oid_ecp_grp);
HannesTschofenig 0:796d0f61a05b 472 FN_OID_GET_ATTR1(oid_get_ec_grp, oid_ecp_grp_t, grp_id, ecp_group_id, grp_id);
HannesTschofenig 0:796d0f61a05b 473 FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_ec_grp, oid_ecp_grp_t, oid_ecp_grp, ecp_group_id, grp_id);
HannesTschofenig 0:796d0f61a05b 474 #endif /* POLARSSL_ECP_C */
HannesTschofenig 0:796d0f61a05b 475
HannesTschofenig 0:796d0f61a05b 476 #if defined(POLARSSL_CIPHER_C)
HannesTschofenig 0:796d0f61a05b 477 /*
HannesTschofenig 0:796d0f61a05b 478 * For PKCS#5 PBES2 encryption algorithm
HannesTschofenig 0:796d0f61a05b 479 */
HannesTschofenig 0:796d0f61a05b 480 typedef struct {
HannesTschofenig 0:796d0f61a05b 481 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 482 cipher_type_t cipher_alg;
HannesTschofenig 0:796d0f61a05b 483 } oid_cipher_alg_t;
HannesTschofenig 0:796d0f61a05b 484
HannesTschofenig 0:796d0f61a05b 485 static const oid_cipher_alg_t oid_cipher_alg[] =
HannesTschofenig 0:796d0f61a05b 486 {
HannesTschofenig 0:796d0f61a05b 487 {
HannesTschofenig 0:796d0f61a05b 488 { ADD_LEN( OID_DES_CBC ), "desCBC", "DES-CBC" },
HannesTschofenig 0:796d0f61a05b 489 POLARSSL_CIPHER_DES_CBC,
HannesTschofenig 0:796d0f61a05b 490 },
HannesTschofenig 0:796d0f61a05b 491 {
HannesTschofenig 0:796d0f61a05b 492 { ADD_LEN( OID_DES_EDE3_CBC ), "des-ede3-cbc", "DES-EDE3-CBC" },
HannesTschofenig 0:796d0f61a05b 493 POLARSSL_CIPHER_DES_EDE3_CBC,
HannesTschofenig 0:796d0f61a05b 494 },
HannesTschofenig 0:796d0f61a05b 495 {
HannesTschofenig 0:796d0f61a05b 496 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 497 0,
HannesTschofenig 0:796d0f61a05b 498 },
HannesTschofenig 0:796d0f61a05b 499 };
HannesTschofenig 0:796d0f61a05b 500
HannesTschofenig 0:796d0f61a05b 501 FN_OID_TYPED_FROM_ASN1(oid_cipher_alg_t, cipher_alg, oid_cipher_alg);
HannesTschofenig 0:796d0f61a05b 502 FN_OID_GET_ATTR1(oid_get_cipher_alg, oid_cipher_alg_t, cipher_alg, cipher_type_t, cipher_alg);
HannesTschofenig 0:796d0f61a05b 503 #endif /* POLARSSL_CIPHER_C */
HannesTschofenig 0:796d0f61a05b 504
HannesTschofenig 0:796d0f61a05b 505 #if defined(POLARSSL_MD_C)
HannesTschofenig 0:796d0f61a05b 506 /*
HannesTschofenig 0:796d0f61a05b 507 * For digestAlgorithm
HannesTschofenig 0:796d0f61a05b 508 */
HannesTschofenig 0:796d0f61a05b 509 typedef struct {
HannesTschofenig 0:796d0f61a05b 510 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 511 md_type_t md_alg;
HannesTschofenig 0:796d0f61a05b 512 } oid_md_alg_t;
HannesTschofenig 0:796d0f61a05b 513
HannesTschofenig 0:796d0f61a05b 514 static const oid_md_alg_t oid_md_alg[] =
HannesTschofenig 0:796d0f61a05b 515 {
HannesTschofenig 0:796d0f61a05b 516 {
HannesTschofenig 0:796d0f61a05b 517 { ADD_LEN( OID_DIGEST_ALG_MD2 ), "id-md2", "MD2" },
HannesTschofenig 0:796d0f61a05b 518 POLARSSL_MD_MD2,
HannesTschofenig 0:796d0f61a05b 519 },
HannesTschofenig 0:796d0f61a05b 520 {
HannesTschofenig 0:796d0f61a05b 521 { ADD_LEN( OID_DIGEST_ALG_MD4 ), "id-md4", "MD4" },
HannesTschofenig 0:796d0f61a05b 522 POLARSSL_MD_MD4,
HannesTschofenig 0:796d0f61a05b 523 },
HannesTschofenig 0:796d0f61a05b 524 {
HannesTschofenig 0:796d0f61a05b 525 { ADD_LEN( OID_DIGEST_ALG_MD5 ), "id-md5", "MD5" },
HannesTschofenig 0:796d0f61a05b 526 POLARSSL_MD_MD5,
HannesTschofenig 0:796d0f61a05b 527 },
HannesTschofenig 0:796d0f61a05b 528 {
HannesTschofenig 0:796d0f61a05b 529 { ADD_LEN( OID_DIGEST_ALG_SHA1 ), "id-sha1", "SHA-1" },
HannesTschofenig 0:796d0f61a05b 530 POLARSSL_MD_SHA1,
HannesTschofenig 0:796d0f61a05b 531 },
HannesTschofenig 0:796d0f61a05b 532 {
HannesTschofenig 0:796d0f61a05b 533 { ADD_LEN( OID_DIGEST_ALG_SHA1 ), "id-sha1", "SHA-1" },
HannesTschofenig 0:796d0f61a05b 534 POLARSSL_MD_SHA1,
HannesTschofenig 0:796d0f61a05b 535 },
HannesTschofenig 0:796d0f61a05b 536 {
HannesTschofenig 0:796d0f61a05b 537 { ADD_LEN( OID_DIGEST_ALG_SHA224 ), "id-sha224", "SHA-224" },
HannesTschofenig 0:796d0f61a05b 538 POLARSSL_MD_SHA224,
HannesTschofenig 0:796d0f61a05b 539 },
HannesTschofenig 0:796d0f61a05b 540 {
HannesTschofenig 0:796d0f61a05b 541 { ADD_LEN( OID_DIGEST_ALG_SHA256 ), "id-sha256", "SHA-256" },
HannesTschofenig 0:796d0f61a05b 542 POLARSSL_MD_SHA256,
HannesTschofenig 0:796d0f61a05b 543 },
HannesTschofenig 0:796d0f61a05b 544 {
HannesTschofenig 0:796d0f61a05b 545 { ADD_LEN( OID_DIGEST_ALG_SHA384 ), "id-sha384", "SHA-384" },
HannesTschofenig 0:796d0f61a05b 546 POLARSSL_MD_SHA384,
HannesTschofenig 0:796d0f61a05b 547 },
HannesTschofenig 0:796d0f61a05b 548 {
HannesTschofenig 0:796d0f61a05b 549 { ADD_LEN( OID_DIGEST_ALG_SHA512 ), "id-sha512", "SHA-512" },
HannesTschofenig 0:796d0f61a05b 550 POLARSSL_MD_SHA512,
HannesTschofenig 0:796d0f61a05b 551 },
HannesTschofenig 0:796d0f61a05b 552 {
HannesTschofenig 0:796d0f61a05b 553 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 554 0,
HannesTschofenig 0:796d0f61a05b 555 },
HannesTschofenig 0:796d0f61a05b 556 };
HannesTschofenig 0:796d0f61a05b 557
HannesTschofenig 0:796d0f61a05b 558 FN_OID_TYPED_FROM_ASN1(oid_md_alg_t, md_alg, oid_md_alg);
HannesTschofenig 0:796d0f61a05b 559 FN_OID_GET_ATTR1(oid_get_md_alg, oid_md_alg_t, md_alg, md_type_t, md_alg);
HannesTschofenig 0:796d0f61a05b 560 FN_OID_GET_OID_BY_ATTR1(oid_get_oid_by_md, oid_md_alg_t, oid_md_alg, md_type_t, md_alg);
HannesTschofenig 0:796d0f61a05b 561 #endif /* POLARSSL_MD_C */
HannesTschofenig 0:796d0f61a05b 562
HannesTschofenig 0:796d0f61a05b 563 #if defined(POLARSSL_PKCS12_C)
HannesTschofenig 0:796d0f61a05b 564 /*
HannesTschofenig 0:796d0f61a05b 565 * For PKCS#12 PBEs
HannesTschofenig 0:796d0f61a05b 566 */
HannesTschofenig 0:796d0f61a05b 567 typedef struct {
HannesTschofenig 0:796d0f61a05b 568 oid_descriptor_t descriptor;
HannesTschofenig 0:796d0f61a05b 569 md_type_t md_alg;
HannesTschofenig 0:796d0f61a05b 570 cipher_type_t cipher_alg;
HannesTschofenig 0:796d0f61a05b 571 } oid_pkcs12_pbe_alg_t;
HannesTschofenig 0:796d0f61a05b 572
HannesTschofenig 0:796d0f61a05b 573 static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] =
HannesTschofenig 0:796d0f61a05b 574 {
HannesTschofenig 0:796d0f61a05b 575 {
HannesTschofenig 0:796d0f61a05b 576 { ADD_LEN( OID_PKCS12_PBE_SHA1_DES3_EDE_CBC ), "pbeWithSHAAnd3-KeyTripleDES-CBC", "PBE with SHA1 and 3-Key 3DES" },
HannesTschofenig 0:796d0f61a05b 577 POLARSSL_MD_SHA1, POLARSSL_CIPHER_DES_EDE3_CBC,
HannesTschofenig 0:796d0f61a05b 578 },
HannesTschofenig 0:796d0f61a05b 579 {
HannesTschofenig 0:796d0f61a05b 580 { ADD_LEN( OID_PKCS12_PBE_SHA1_DES2_EDE_CBC ), "pbeWithSHAAnd2-KeyTripleDES-CBC", "PBE with SHA1 and 2-Key 3DES" },
HannesTschofenig 0:796d0f61a05b 581 POLARSSL_MD_SHA1, POLARSSL_CIPHER_DES_EDE_CBC,
HannesTschofenig 0:796d0f61a05b 582 },
HannesTschofenig 0:796d0f61a05b 583 {
HannesTschofenig 0:796d0f61a05b 584 { NULL, 0, NULL, NULL },
HannesTschofenig 0:796d0f61a05b 585 0, 0,
HannesTschofenig 0:796d0f61a05b 586 },
HannesTschofenig 0:796d0f61a05b 587 };
HannesTschofenig 0:796d0f61a05b 588
HannesTschofenig 0:796d0f61a05b 589 FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg);
HannesTschofenig 0:796d0f61a05b 590 FN_OID_GET_ATTR2(oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, md_type_t, md_alg, cipher_type_t, cipher_alg);
HannesTschofenig 0:796d0f61a05b 591 #endif /* POLARSSL_PKCS12_C */
HannesTschofenig 0:796d0f61a05b 592
HannesTschofenig 0:796d0f61a05b 593 #if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \
HannesTschofenig 0:796d0f61a05b 594 !defined(EFI32)
HannesTschofenig 0:796d0f61a05b 595 #include <stdarg.h>
HannesTschofenig 0:796d0f61a05b 596
HannesTschofenig 0:796d0f61a05b 597 #if !defined vsnprintf
HannesTschofenig 0:796d0f61a05b 598 #define vsnprintf _vsnprintf
HannesTschofenig 0:796d0f61a05b 599 #endif // vsnprintf
HannesTschofenig 0:796d0f61a05b 600
HannesTschofenig 0:796d0f61a05b 601 /*
HannesTschofenig 0:796d0f61a05b 602 * Windows _snprintf and _vsnprintf are not compatible to linux versions.
HannesTschofenig 0:796d0f61a05b 603 * Result value is not size of buffer needed, but -1 if no fit is possible.
HannesTschofenig 0:796d0f61a05b 604 *
HannesTschofenig 0:796d0f61a05b 605 * This fuction tries to 'fix' this by at least suggesting enlarging the
HannesTschofenig 0:796d0f61a05b 606 * size by 20.
HannesTschofenig 0:796d0f61a05b 607 */
HannesTschofenig 0:796d0f61a05b 608 static int compat_snprintf(char *str, size_t size, const char *format, ...)
HannesTschofenig 0:796d0f61a05b 609 {
HannesTschofenig 0:796d0f61a05b 610 va_list ap;
HannesTschofenig 0:796d0f61a05b 611 int res = -1;
HannesTschofenig 0:796d0f61a05b 612
HannesTschofenig 0:796d0f61a05b 613 va_start( ap, format );
HannesTschofenig 0:796d0f61a05b 614
HannesTschofenig 0:796d0f61a05b 615 res = vsnprintf( str, size, format, ap );
HannesTschofenig 0:796d0f61a05b 616
HannesTschofenig 0:796d0f61a05b 617 va_end( ap );
HannesTschofenig 0:796d0f61a05b 618
HannesTschofenig 0:796d0f61a05b 619 // No quick fix possible
HannesTschofenig 0:796d0f61a05b 620 if ( res < 0 )
HannesTschofenig 0:796d0f61a05b 621 return( (int) size + 20 );
HannesTschofenig 0:796d0f61a05b 622
HannesTschofenig 0:796d0f61a05b 623 return res;
HannesTschofenig 0:796d0f61a05b 624 }
HannesTschofenig 0:796d0f61a05b 625
HannesTschofenig 0:796d0f61a05b 626 #define snprintf compat_snprintf
HannesTschofenig 0:796d0f61a05b 627 #endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */
HannesTschofenig 0:796d0f61a05b 628
HannesTschofenig 0:796d0f61a05b 629 #define SAFE_SNPRINTF() \
HannesTschofenig 0:796d0f61a05b 630 { \
HannesTschofenig 0:796d0f61a05b 631 if( ret == -1 ) \
HannesTschofenig 0:796d0f61a05b 632 return POLARSSL_ERR_OID_BUF_TOO_SMALL; \
HannesTschofenig 0:796d0f61a05b 633 \
HannesTschofenig 0:796d0f61a05b 634 if ( (unsigned int) ret >= n ) { \
HannesTschofenig 0:796d0f61a05b 635 p[n - 1] = '\0'; \
HannesTschofenig 0:796d0f61a05b 636 return POLARSSL_ERR_OID_BUF_TOO_SMALL; \
HannesTschofenig 0:796d0f61a05b 637 } \
HannesTschofenig 0:796d0f61a05b 638 \
HannesTschofenig 0:796d0f61a05b 639 n -= (unsigned int) ret; \
HannesTschofenig 0:796d0f61a05b 640 p += (unsigned int) ret; \
HannesTschofenig 0:796d0f61a05b 641 }
HannesTschofenig 0:796d0f61a05b 642
HannesTschofenig 0:796d0f61a05b 643 /* Return the x.y.z.... style numeric string for the given OID */
HannesTschofenig 0:796d0f61a05b 644 int oid_get_numeric_string( char *buf, size_t size,
HannesTschofenig 0:796d0f61a05b 645 const asn1_buf *oid )
HannesTschofenig 0:796d0f61a05b 646 {
HannesTschofenig 0:796d0f61a05b 647 int ret;
HannesTschofenig 0:796d0f61a05b 648 size_t i, n;
HannesTschofenig 0:796d0f61a05b 649 unsigned int value;
HannesTschofenig 0:796d0f61a05b 650 char *p;
HannesTschofenig 0:796d0f61a05b 651
HannesTschofenig 0:796d0f61a05b 652 p = buf;
HannesTschofenig 0:796d0f61a05b 653 n = size;
HannesTschofenig 0:796d0f61a05b 654
HannesTschofenig 0:796d0f61a05b 655 /* First byte contains first two dots */
HannesTschofenig 0:796d0f61a05b 656 if( oid->len > 0 )
HannesTschofenig 0:796d0f61a05b 657 {
HannesTschofenig 0:796d0f61a05b 658 ret = snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 );
HannesTschofenig 0:796d0f61a05b 659 SAFE_SNPRINTF();
HannesTschofenig 0:796d0f61a05b 660 }
HannesTschofenig 0:796d0f61a05b 661
HannesTschofenig 0:796d0f61a05b 662 value = 0;
HannesTschofenig 0:796d0f61a05b 663 for( i = 1; i < oid->len; i++ )
HannesTschofenig 0:796d0f61a05b 664 {
HannesTschofenig 0:796d0f61a05b 665 /* Prevent overflow in value. */
HannesTschofenig 0:796d0f61a05b 666 if ( ( ( value << 7 ) >> 7 ) != value )
HannesTschofenig 0:796d0f61a05b 667 return( POLARSSL_ERR_OID_BUF_TOO_SMALL );
HannesTschofenig 0:796d0f61a05b 668
HannesTschofenig 0:796d0f61a05b 669 value <<= 7;
HannesTschofenig 0:796d0f61a05b 670 value += oid->p[i] & 0x7F;
HannesTschofenig 0:796d0f61a05b 671
HannesTschofenig 0:796d0f61a05b 672 if( !( oid->p[i] & 0x80 ) )
HannesTschofenig 0:796d0f61a05b 673 {
HannesTschofenig 0:796d0f61a05b 674 /* Last byte */
HannesTschofenig 0:796d0f61a05b 675 ret = snprintf( p, n, ".%d", value );
HannesTschofenig 0:796d0f61a05b 676 SAFE_SNPRINTF();
HannesTschofenig 0:796d0f61a05b 677 value = 0;
HannesTschofenig 0:796d0f61a05b 678 }
HannesTschofenig 0:796d0f61a05b 679 }
HannesTschofenig 0:796d0f61a05b 680
HannesTschofenig 0:796d0f61a05b 681 return( (int) ( size - n ) );
HannesTschofenig 0:796d0f61a05b 682 }
HannesTschofenig 0:796d0f61a05b 683
HannesTschofenig 0:796d0f61a05b 684 #endif /* POLARSSL_OID_C */
HannesTschofenig 0:796d0f61a05b 685
HannesTschofenig 0:796d0f61a05b 686