1 | /********************************************************************************/
|
---|
2 | /* */
|
---|
3 | /* Macro and Structure Definitions for the X509 Commands and Functions. */
|
---|
4 | /* Written by Ken Goldman */
|
---|
5 | /* IBM Thomas J. Watson Research Center */
|
---|
6 | /* $Id: X509.h 1658 2021-01-22 23:14:01Z kgoldman $ */
|
---|
7 | /* */
|
---|
8 | /* Licenses and Notices */
|
---|
9 | /* */
|
---|
10 | /* 1. Copyright Licenses: */
|
---|
11 | /* */
|
---|
12 | /* - Trusted Computing Group (TCG) grants to the user of the source code in */
|
---|
13 | /* this specification (the "Source Code") a worldwide, irrevocable, */
|
---|
14 | /* nonexclusive, royalty free, copyright license to reproduce, create */
|
---|
15 | /* derivative works, distribute, display and perform the Source Code and */
|
---|
16 | /* derivative works thereof, and to grant others the rights granted herein. */
|
---|
17 | /* */
|
---|
18 | /* - The TCG grants to the user of the other parts of the specification */
|
---|
19 | /* (other than the Source Code) the rights to reproduce, distribute, */
|
---|
20 | /* display, and perform the specification solely for the purpose of */
|
---|
21 | /* developing products based on such documents. */
|
---|
22 | /* */
|
---|
23 | /* 2. Source Code Distribution Conditions: */
|
---|
24 | /* */
|
---|
25 | /* - Redistributions of Source Code must retain the above copyright licenses, */
|
---|
26 | /* this list of conditions and the following disclaimers. */
|
---|
27 | /* */
|
---|
28 | /* - Redistributions in binary form must reproduce the above copyright */
|
---|
29 | /* licenses, this list of conditions and the following disclaimers in the */
|
---|
30 | /* documentation and/or other materials provided with the distribution. */
|
---|
31 | /* */
|
---|
32 | /* 3. Disclaimers: */
|
---|
33 | /* */
|
---|
34 | /* - THE COPYRIGHT LICENSES SET FORTH ABOVE DO NOT REPRESENT ANY FORM OF */
|
---|
35 | /* LICENSE OR WAIVER, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, WITH */
|
---|
36 | /* RESPECT TO PATENT RIGHTS HELD BY TCG MEMBERS (OR OTHER THIRD PARTIES) */
|
---|
37 | /* THAT MAY BE NECESSARY TO IMPLEMENT THIS SPECIFICATION OR OTHERWISE. */
|
---|
38 | /* Contact TCG Administration ([email protected]) for */
|
---|
39 | /* information on specification licensing rights available through TCG */
|
---|
40 | /* membership agreements. */
|
---|
41 | /* */
|
---|
42 | /* - THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO EXPRESS OR IMPLIED */
|
---|
43 | /* WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR */
|
---|
44 | /* FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS, OR */
|
---|
45 | /* NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS, OR ANY WARRANTY */
|
---|
46 | /* OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE. */
|
---|
47 | /* */
|
---|
48 | /* - Without limitation, TCG and its members and licensors disclaim all */
|
---|
49 | /* liability, including liability for infringement of any proprietary */
|
---|
50 | /* rights, relating to use of information in this specification and to the */
|
---|
51 | /* implementation of this specification, and TCG disclaims all liability for */
|
---|
52 | /* cost of procurement of substitute goods or services, lost profits, loss */
|
---|
53 | /* of use, loss of data or any incidental, consequential, direct, indirect, */
|
---|
54 | /* or special damages, whether under contract, tort, warranty or otherwise, */
|
---|
55 | /* arising in any way out of use or reliance upon this specification or any */
|
---|
56 | /* information herein. */
|
---|
57 | /* */
|
---|
58 | /* (c) Copyright IBM Corp. and others, 2019 - 2021 */
|
---|
59 | /* */
|
---|
60 | /********************************************************************************/
|
---|
61 |
|
---|
62 | // 10.1.16 X509.h
|
---|
63 | // 10.1.16.1 Introduction
|
---|
64 | // This file contains the macro and structure definitions for the X509 commands and functions.
|
---|
65 | #ifndef _X509_H_
|
---|
66 | #define _X509_H_
|
---|
67 | // 10.1.16.2 Includes
|
---|
68 | #include "Tpm.h"
|
---|
69 | #include "TpmASN1.h"
|
---|
70 | // 10.1.16.3 Defined Constants
|
---|
71 | // 10.1.16.3.1 X509 Application-specific types
|
---|
72 | #define X509_SELECTION 0xA0
|
---|
73 | #define X509_ISSUER_UNIQUE_ID 0xA1
|
---|
74 | #define X509_SUBJECT_UNIQUE_ID 0xA2
|
---|
75 | #define X509_EXTENSIONS 0xA3
|
---|
76 | // These defines give the order in which values appear in the TBScertificate of an x.509
|
---|
77 | // certificate. These values are used to index into an array of
|
---|
78 | #define ENCODED_SIZE_REF 0
|
---|
79 | #define VERSION_REF (ENCODED_SIZE_REF + 1)
|
---|
80 | #define SERIAL_NUMBER_REF (VERSION_REF + 1)
|
---|
81 | #define SIGNATURE_REF (SERIAL_NUMBER_REF + 1)
|
---|
82 | #define ISSUER_REF (SIGNATURE_REF + 1)
|
---|
83 | #define VALIDITY_REF (ISSUER_REF + 1)
|
---|
84 | #define SUBJECT_KEY_REF (VALIDITY_REF + 1)
|
---|
85 | #define SUBJECT_PUBLIC_KEY_REF (SUBJECT_KEY_REF + 1)
|
---|
86 | #define EXTENSIONS_REF (SUBJECT_PUBLIC_KEY_REF + 1)
|
---|
87 | #define REF_COUNT (EXTENSIONS_REF + 1)
|
---|
88 |
|
---|
89 | // 10.1.16.4 Structures Used to access the fields of a TBSsignature some of which are in the
|
---|
90 | // in_CertifyX509 structure and some of which are in the out_CertifyX509 structure.
|
---|
91 | typedef struct stringRef
|
---|
92 | {
|
---|
93 | BYTE *buf;
|
---|
94 | INT16 len;
|
---|
95 | } stringRef;
|
---|
96 | // This is defined to avoid bit by bit comparisons within a UINT32
|
---|
97 | typedef union x509KeyUsageUnion {
|
---|
98 | TPMA_X509_KEY_USAGE x509;
|
---|
99 | UINT32 integer;
|
---|
100 | } x509KeyUsageUnion;
|
---|
101 |
|
---|
102 | // 10.1.16.5 Global X509 Constants
|
---|
103 |
|
---|
104 | // These values are instanced by X509_spt.c and referenced by other X509-related files. This is the
|
---|
105 | // DER-encoded value for the Key Usage OID (2.5.29.15). This is the full OID, not just the numeric
|
---|
106 | // value
|
---|
107 |
|
---|
108 | #define OID_KEY_USAGE_EXTENSION_VALUE 0x06, 0x03, 0x55, 0x1D, 0x0F
|
---|
109 | MAKE_OID(_KEY_USAGE_EXTENSION);
|
---|
110 |
|
---|
111 | // This is the DER-encoded value for the TCG-defined TPMA_OBJECT OID (2.23.133.10.1.1.1)
|
---|
112 |
|
---|
113 | #define OID_TCG_TPMA_OBJECT_VALUE 0x06, 0x07, 0x67, 0x81, 0x05, 0x0a, 0x01, \
|
---|
114 | 0x01, 0x01
|
---|
115 | MAKE_OID(_TCG_TPMA_OBJECT);
|
---|
116 |
|
---|
117 | #ifdef _X509_SPT_
|
---|
118 |
|
---|
119 | // If a bit is SET in KEY_USAGE_SIGN is also SET in keyUsage then the associated key has to have
|
---|
120 | // sign SET.
|
---|
121 |
|
---|
122 | const x509KeyUsageUnion KEY_USAGE_SIGN =
|
---|
123 | {TPMA_X509_KEY_USAGE_INITIALIZER(
|
---|
124 | /* bits_at_0 */ 0, /* decipheronly */ 0, /* encipheronly */ 0,
|
---|
125 | /* crlsign */ 1, /* keycertsign */ 1, /* keyagreement */ 0,
|
---|
126 | /* dataencipherment */ 0, /* keyencipherment */ 0, /* nonrepudiation */ 0,
|
---|
127 | /* digitalsignature */ 1)};
|
---|
128 |
|
---|
129 | // If a bit is SET in KEY_USAGE_DECRYPT is also SET in keyUsage then the associated key has to have decrypt SET.
|
---|
130 |
|
---|
131 | const x509KeyUsageUnion KEY_USAGE_DECRYPT =
|
---|
132 | {TPMA_X509_KEY_USAGE_INITIALIZER(
|
---|
133 | /* bits_at_0 */ 0, /* decipheronly */ 1, /* encipheronly */ 1,
|
---|
134 | /* crlsign */ 0, /* keycertsign */ 0, /* keyagreement */ 1,
|
---|
135 | /* dataencipherment */ 1, /* keyencipherment */ 1, /* nonrepudiation */ 0,
|
---|
136 | /* digitalsignature */ 0)};
|
---|
137 | #else
|
---|
138 | extern x509KeyUsageUnion KEY_USAGE_SIGN;
|
---|
139 | extern x509KeyUsageUnion KEY_USAGE_DECRYPT;
|
---|
140 | #endif
|
---|
141 |
|
---|
142 | #endif // _X509_H_
|
---|