1 /* Microsoft Reference Implementation for TPM 2.0 2 * 3 * The copyright in this software is being made available under the BSD License, 4 * included below. This software may be subject to other third party and 5 * contributor rights, including patent rights, and no such rights are granted 6 * under this license. 7 * 8 * Copyright (c) Microsoft Corporation 9 * 10 * All rights reserved. 11 * 12 * BSD License 13 * 14 * Redistribution and use in source and binary forms, with or without modification, 15 * are permitted provided that the following conditions are met: 16 * 17 * Redistributions of source code must retain the above copyright notice, this list 18 * of conditions and the following disclaimer. 19 * 20 * Redistributions in binary form must reproduce the above copyright notice, this 21 * list of conditions and the following disclaimer in the documentation and/or 22 * other materials provided with the distribution. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS"" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 28 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 29 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 31 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 #ifndef _OIDS_H_ 37 #define _OIDS_H_ 38 39 // All the OIDs in this file are defined as DER-encoded values with a leading tag 40 // 0x06 (ASN1_OBJECT_IDENTIFIER), followed by a single length byte. This allows the 41 // OID size to be determined by looking at octet[1] of the OID (total size is 42 // OID[1] + 2). 43 44 // These macros allow OIDs to be defined (or not) depending on whether the associated 45 // hash algorithm is implemented. 46 // NOTE: When one of these macros is used, the NAME needs '_" on each side. The 47 // exception is when the macro is used for the hash OID when only a single '_' is 48 // used. 49 #ifndef ALG_SHA1 50 # define ALG_SHA1 NO 51 #endif 52 #if ALG_SHA1 53 #define SHA1_OID(NAME) MAKE_OID(NAME##SHA1) 54 #else 55 #define SHA1_OID(NAME) 56 #endif 57 #ifndef ALG_SHA256 58 # define ALG_SHA256 NO 59 #endif 60 #if ALG_SHA256 61 #define SHA256_OID(NAME) MAKE_OID(NAME##SHA256) 62 #else 63 #define SHA256_OID(NAME) 64 #endif 65 #ifndef ALG_SHA384 66 # define ALG_SHA384 NO 67 #endif 68 #if ALG_SHA384 69 #define SHA384_OID(NAME) MAKE_OID(NAME##SHA384) 70 #else 71 #define SHA384_OID(NAME) 72 #endif 73 #ifndef ALG_SHA512 74 # define ALG_SHA512 NO 75 #endif 76 #if ALG_SHA512 77 #define SHA512_OID(NAME) MAKE_OID(NAME##SHA512) 78 #else 79 #define SHA512_OID(NAME) 80 #endif 81 #ifndef ALG_SM3_256 82 # define ALG_SM3_256 NO 83 #endif 84 #if ALG_SM3_256 85 #define SM3_256_OID(NAME) MAKE_OID(NAME##SM3_256) 86 #else 87 #define SM3_256_OID(NAME) 88 #endif 89 #ifndef ALG_SHA3_256 90 # define ALG_SHA3_256 NO 91 #endif 92 #if ALG_SHA3_256 93 #define SHA3_256_OID(NAME) MAKE_OID(NAME##SHA3_256) 94 #else 95 #define SHA3_256_OID(NAME) 96 #endif 97 #ifndef ALG_SHA3_384 98 # define ALG_SHA3_384 NO 99 #endif 100 #if ALG_SHA3_384 101 #define SHA3_384_OID(NAME) MAKE_OID(NAME##SHA3_384) 102 #else 103 #define SHA3_384_OID(NAME) 104 #endif 105 #ifndef ALG_SHA3_512 106 # define ALG_SHA3_512 NO 107 #endif 108 #if ALG_SHA3_512 109 #define SHA3_512_OID(NAME) MAKE_OID(NAME##SHA3_512) 110 #else 111 #define SHA3_512_OID(NAME) 112 #endif 113 114 // These are encoded to take one additional byte of algorithm selector 115 #define NIST_HASH 0x06, 0x09, 0x60, 0x86, 0x48, 1, 101, 3, 4, 2 116 #define NIST_SIG 0x06, 0x09, 0x60, 0x86, 0x48, 1, 101, 3, 4, 3 117 118 // These hash OIDs used in a lot of places. 119 #define OID_SHA1_VALUE 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A 120 SHA1_OID(_); // Expands to: 121 // MAKE_OID(_SHA1) 122 // which expands to: 123 // EXTERN const BYTE OID_SHA1[] INITIALIZER({OID_SHA1_VALUE}) 124 // which, depending on the setting of EXTERN and 125 // INITIALIZER, expands to either: 126 // extern const BYTE OID_SHA1[] 127 // or 128 // const BYTE OID_SHA1[] = {OID_SHA1_VALUE} 129 // which is: 130 // const BYTE OID_SHA1[] = {0x06, 0x05, 0x2B, 0x0E, 131 // 0x03, 0x02, 0x1A} 132 133 134 #define OID_SHA256_VALUE NIST_HASH, 1 135 SHA256_OID(_); 136 137 #define OID_SHA384_VALUE NIST_HASH, 2 138 SHA384_OID(_); 139 140 #define OID_SHA512_VALUE NIST_HASH, 3 141 SHA512_OID(_); 142 143 #define OID_SM3_256_VALUE 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, \ 144 0x83, 0x11 145 SM3_256_OID(_); // (1.2.156.10197.1.401) 146 147 #define OID_SHA3_256_VALUE NIST_HASH, 8 148 SHA3_256_OID(_); 149 150 #define OID_SHA3_384_VALUE NIST_HASH, 9 151 SHA3_384_OID(_); 152 153 #define OID_SHA3_512_VALUE NIST_HASH, 10 154 SHA3_512_OID(_); 155 156 // These are used for RSA-PSS 157 #if ALG_RSA 158 159 #define OID_MGF1_VALUE 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, \ 160 0x01, 0x01, 0x08 161 MAKE_OID(_MGF1); 162 163 #define OID_RSAPSS_VALUE 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, \ 164 0x01, 0x01, 0x0A 165 MAKE_OID(_RSAPSS); 166 167 // This is the OID to designate the public part of an RSA key. 168 #define OID_PKCS1_PUB_VALUE 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, \ 169 0x01, 0x01, 0x01 170 MAKE_OID(_PKCS1_PUB); 171 172 // These are used for RSA PKCS1 signature Algorithms 173 #define OID_PKCS1_SHA1_VALUE 0x06,0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, \ 174 0x0D, 0x01, 0x01, 0x05 175 SHA1_OID(_PKCS1_); // (1.2.840.113549.1.1.5) 176 177 #define OID_PKCS1_SHA256_VALUE 0x06,0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, \ 178 0x0D, 0x01, 0x01, 0x0B 179 SHA256_OID(_PKCS1_); // (1.2.840.113549.1.1.11) 180 181 #define OID_PKCS1_SHA384_VALUE 0x06,0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, \ 182 0x0D, 0x01, 0x01, 0x0C 183 SHA384_OID(_PKCS1_); // (1.2.840.113549.1.1.12) 184 185 #define OID_PKCS1_SHA512_VALUE 0x06,0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, \ 186 0x0D, 0x01, 0x01, 0x0D 187 SHA512_OID(_PKCS1_); //(1.2.840.113549.1.1.13) 188 189 #define OID_PKCS1_SM3_256_VALUE 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, \ 190 0x01, 0x83, 0x78 191 SM3_256_OID(_PKCS1_); // 1.2.156.10197.1.504 192 193 #define OID_PKCS1_SHA3_256_VALUE NIST_SIG, 14 194 SHA3_256_OID(_PKCS1_); 195 #define OID_PKCS1_SHA3_384_VALUE NIST_SIG, 15 196 SHA3_384_OID(_PKCS1_); 197 #define OID_PKCS1_SHA3_512_VALUE NIST_SIG, 16 198 SHA3_512_OID(_PKCS1_); 199 200 #endif // ALG_RSA 201 202 #if ALG_ECDSA 203 204 #define OID_ECDSA_SHA1_VALUE 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, \ 205 0x01 206 SHA1_OID(_ECDSA_); // (1.2.840.10045.4.1) SHA1 digest signed by an ECDSA key. 207 208 #define OID_ECDSA_SHA256_VALUE 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, \ 209 0x03, 0x02 210 SHA256_OID(_ECDSA_); // (1.2.840.10045.4.3.2) SHA256 digest signed by an ECDSA key. 211 212 #define OID_ECDSA_SHA384_VALUE 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, \ 213 0x03, 0x03 214 SHA384_OID(_ECDSA_); // (1.2.840.10045.4.3.3) SHA384 digest signed by an ECDSA key. 215 216 #define OID_ECDSA_SHA512_VALUE 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, \ 217 0x03, 0x04 218 SHA512_OID(_ECDSA_); // (1.2.840.10045.4.3.4) SHA512 digest signed by an ECDSA key. 219 220 #define OID_ECDSA_SM3_256_VALUE 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, \ 221 0x83, 0x75 222 SM3_256_OID(_ECDSA_); // 1.2.156.10197.1.501 223 224 #define OID_ECDSA_SHA3_256_VALUE NIST_SIG, 10 225 SHA3_256_OID(_ECDSA_); 226 #define OID_ECDSA_SHA3_384_VALUE NIST_SIG, 11 227 SHA3_384_OID(_ECDSA_); 228 #define OID_ECDSA_SHA3_512_VALUE NIST_SIG, 12 229 SHA3_512_OID(_ECDSA_); 230 231 #endif // ALG_ECDSA 232 233 #if ALG_ECC 234 235 #define OID_ECC_PUBLIC_VALUE 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, \ 236 0x01 237 MAKE_OID(_ECC_PUBLIC); 238 239 240 #define OID_ECC_NIST_P192_VALUE 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, \ 241 0x01, 0x01 242 #if ECC_NIST_P192 243 MAKE_OID(_ECC_NIST_P192); // (1.2.840.10045.3.1.1) 'nistP192' 244 #endif // ECC_NIST_P192 245 246 #define OID_ECC_NIST_P224_VALUE 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x21 247 #if ECC_NIST_P224 248 MAKE_OID(_ECC_NIST_P224); // (1.3.132.0.33) 'nistP224' 249 #endif // ECC_NIST_P224 250 251 #define OID_ECC_NIST_P256_VALUE 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, \ 252 0x01, 0x07 253 #if ECC_NIST_P256 254 MAKE_OID(_ECC_NIST_P256); // (1.2.840.10045.3.1.7) 'nistP256' 255 #endif // ECC_NIST_P256 256 257 #define OID_ECC_NIST_P384_VALUE 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22 258 #if ECC_NIST_P384 259 MAKE_OID(_ECC_NIST_P384); // (1.3.132.0.34) 'nistP384' 260 #endif // ECC_NIST_P384 261 262 #define OID_ECC_NIST_P521_VALUE 0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x23 263 #if ECC_NIST_P521 264 MAKE_OID(_ECC_NIST_P521); // (1.3.132.0.35) 'nistP521' 265 #endif // ECC_NIST_P521 266 267 // No OIDs defined for these anonymous curves 268 #define OID_ECC_BN_P256_VALUE 0x00 269 #if ECC_BN_P256 270 MAKE_OID(_ECC_BN_P256); 271 #endif // ECC_BN_P256 272 273 #define OID_ECC_BN_P638_VALUE 0x00 274 #if ECC_BN_P638 275 MAKE_OID(_ECC_BN_P638); 276 #endif // ECC_BN_P638 277 278 #define OID_ECC_SM2_P256_VALUE 0x06, 0x08, 0x2A, 0x81, 0x1C, 0xCF, 0x55, 0x01, \ 279 0x82, 0x2D 280 #if ECC_SM2_P256 281 MAKE_OID(_ECC_SM2_P256); // Don't know where I found this OID. It needs checking 282 #endif // ECC_SM2_P256 283 284 #if ECC_BN_P256 285 #define OID_ECC_BN_P256 NULL 286 #endif // ECC_BN_P256 287 288 #endif // ALG_ECC 289 290 #define OID_SIZE(OID) (OID[1] + 2) 291 292 #endif // !_OIDS_H_ 293