]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_asn1/lib/pkcs7Templates.h
Security-57337.20.44.tar.gz
[apple/security.git] / OSX / libsecurity_asn1 / lib / pkcs7Templates.h
1 /*
2 * Copyright (c) 2003-2004,2008,2010,2012 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23 /*
24 * pkcs7Templates.h
25 */
26
27 #ifndef _PKCS7_TEMPLATES_H_
28 #define _PKCS7_TEMPLATES_H_
29
30 #include <Security/SecAsn1Types.h>
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 /*
37 * DigestInfo ::= SEQUENCE {
38 * digestAlgorithm DigestAlgorithmIdentifier,
39 * digest Digest
40 * }
41 *
42 * Digest ::= OCTET STRING
43 */
44 typedef struct {
45 SecAsn1AlgId digestAlgorithm;
46 SecAsn1Item digest;
47 } NSS_P7_DigestInfo;
48
49 extern const SecAsn1Template NSS_P7_DigestInfoTemplate[];
50
51 /*
52 * Uninterpreted ContentInfo, with content stripped from its
53 * EXPLICIT CONTEXT_SPECIFIC wrapper
54 *
55 * ContentInfo ::= SEQUENCE {
56 * contentType ContentType,
57 * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL
58 * }
59 */
60 typedef struct {
61 SecAsn1Oid contentType;
62 SecAsn1Item content;
63 } NSS_P7_RawContentInfo;
64
65 extern const SecAsn1Template NSS_P7_RawContentInfoTemplate[];
66
67 // MARK: ---- ContentInfo.content types -----
68
69 /*
70 * Expand beyond ASN_ANY/CSSM_DATA as needed
71 */
72 typedef SecAsn1Item NSS_P7_SignedData;
73 typedef SecAsn1Item NSS_P7_EnvelData;
74 typedef SecAsn1Item NSS_P7_SignEnvelData;
75 typedef SecAsn1Item NSS_P7_DigestedData;
76
77 /* EncryptedData */
78
79 /*
80 * EncryptedContentInfo ::= SEQUENCE {
81 * contentType ContentType,
82 * contentEncryptionAlgorithm
83 * ContentEncryptionAlgorithmIdentifier,
84 * encryptedContent
85 * [0] IMPLICIT EncryptedContent OPTIONAL
86 * }
87 *
88 * EncryptedContent ::= OCTET STRING
89 */
90
91 typedef struct {
92 SecAsn1Oid contentType;
93 SecAsn1AlgId encrAlg;
94 SecAsn1Item encrContent;
95 } NSS_P7_EncrContentInfo;
96
97 /*
98 * EncryptedData ::= SEQUENCE {
99 * version Version,
100 * encryptedContentInfo EncryptedContentInfo
101 * }
102 */
103 typedef struct {
104 SecAsn1Item version;
105 NSS_P7_EncrContentInfo contentInfo;
106 } NSS_P7_EncryptedData;
107
108 extern const SecAsn1Template NSS_P7_EncrContentInfoTemplate[];
109 extern const SecAsn1Template NSS_P7_EncryptedDataTemplate[];
110 extern const SecAsn1Template NSS_P7_PtrToEncryptedDataTemplate[];
111
112 /* the stub templates for unimplemented contentTypes */
113 #define NSS_P7_PtrToSignedDataTemplate kSecAsn1PointerToAnyTemplate
114 #define NSS_P7_PtrToEnvelDataTemplate kSecAsn1PointerToAnyTemplate
115 #define NSS_P7_PtrToSignEnvelDataTemplate kSecAsn1PointerToAnyTemplate
116 #define NSS_P7_PtrToDigestedDataTemplate kSecAsn1PointerToAnyTemplate
117
118 // MARK: ---- decoded ContentInfo -----
119
120 /*
121 * For convenience, out dynamic template chooser for ContentInfo.content
122 * drops one of these into the decoded struct. Thus, higher level
123 * code doesn't have to grunge around comparing OIDs to figure out
124 * what's there.
125 */
126 typedef enum {
127 CT_None = 0,
128 CT_Data,
129 CT_SignedData,
130 CT_EnvData,
131 CT_SignedEnvData,
132 CT_DigestData,
133 CT_EncryptedData
134 } NSS_P7_CI_Type;
135
136 /*
137 * Decoded ContentInfo. Decoded via SEC_ASN1_DYNAMIC per contentType.
138 */
139 typedef struct {
140 SecAsn1Oid contentType;
141 NSS_P7_CI_Type type;
142 union {
143 SecAsn1Item *data; // CSSMOID_PKCS7_Data
144 // contents of Octet String
145 NSS_P7_SignedData *signedData;
146 // CSSMOID_PKCS7_SignedData
147 NSS_P7_EnvelData *envData; // CSSMOID_PKCS7_EnvelopedData
148 NSS_P7_SignEnvelData *signEnvelData;
149 // CSSMOID_PKCS7_SignedAndEnvelopedData
150 NSS_P7_DigestedData *digestedData;
151 // CSSMOID_PKCS7_DigestedData
152 NSS_P7_EncryptedData *encryptData;
153 //CSSMOID_PKCS7_EncryptedData
154
155 } content;
156 } NSS_P7_DecodedContentInfo;
157
158 extern const SecAsn1Template NSS_P7_DecodedContentInfoTemplate[];
159
160 #ifdef __cplusplus
161 }
162 #endif
163
164 #endif /* _PKCS7_TEMPLATES_H_ */
165