Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef _P12T_H_
6 #define _P12T_H_
8 #include "secoid.h"
9 #include "key.h"
10 #include "pkcs11.h"
11 #include "secpkcs7.h"
12 #include "secdig.h" /* for SGNDigestInfo */
13 #include "pkcs12t.h"
15 #define SEC_PKCS12_VERSION 3
17 /* structure declarations */
18 typedef struct sec_PKCS12PFXItemStr sec_PKCS12PFXItem;
19 typedef struct sec_PKCS12MacDataStr sec_PKCS12MacData;
20 typedef struct sec_PKCS12AuthenticatedSafeStr sec_PKCS12AuthenticatedSafe;
21 typedef struct sec_PKCS12SafeContentsStr sec_PKCS12SafeContents;
22 typedef struct sec_PKCS12SafeBagStr sec_PKCS12SafeBag;
23 typedef struct sec_PKCS12PKCS8ShroudedKeyBagStr sec_PKCS12PKCS8ShroudedKeyBag;
24 typedef struct sec_PKCS12CertBagStr sec_PKCS12CertBag;
25 typedef struct sec_PKCS12CRLBagStr sec_PKCS12CRLBag;
26 typedef struct sec_PKCS12SecretBag sec_PKCS12SecretBag;
27 typedef struct sec_PKCS12AttributeStr sec_PKCS12Attribute;
29 struct sec_PKCS12CertBagStr {
30 /* what type of cert is stored? */
31 SECItem bagID;
33 /* certificate information */
34 union {
35 SECItem x509Cert;
36 SECItem SDSICert;
37 } value;
38 };
40 struct sec_PKCS12CRLBagStr {
41 /* what type of cert is stored? */
42 SECItem bagID;
44 /* certificate information */
45 union {
46 SECItem x509CRL;
47 } value;
48 };
50 struct sec_PKCS12SecretBag {
51 /* what type of secret? */
52 SECItem secretType;
54 /* secret information. ssshhhh be vewy vewy quiet. */
55 SECItem secretContent;
56 };
58 struct sec_PKCS12AttributeStr {
59 SECItem attrType;
60 SECItem **attrValue;
61 };
63 struct sec_PKCS12SafeBagStr {
65 /* What type of bag are we using? */
66 SECItem safeBagType;
68 /* Dependent upon the type of bag being used. */
69 union {
70 SECKEYPrivateKeyInfo *pkcs8KeyBag;
71 SECKEYEncryptedPrivateKeyInfo *pkcs8ShroudedKeyBag;
72 sec_PKCS12CertBag *certBag;
73 sec_PKCS12CRLBag *crlBag;
74 sec_PKCS12SecretBag *secretBag;
75 sec_PKCS12SafeContents *safeContents;
76 } safeBagContent;
78 sec_PKCS12Attribute **attribs;
80 /* used locally */
81 SECOidData *bagTypeTag;
82 PLArenaPool *arena;
83 unsigned int nAttribs;
85 /* used for validation/importing */
86 PRBool problem, noInstall, validated, hasKey, unused, installed;
87 int error;
89 PRBool swapUnicodeBytes;
90 PK11SlotInfo *slot;
91 SECItem *pwitem;
92 PRBool oldBagType;
93 SECPKCS12TargetTokenCAs tokenCAs;
94 };
96 struct sec_PKCS12SafeContentsStr {
97 sec_PKCS12SafeBag **safeBags;
98 SECItem **encodedSafeBags;
100 /* used locally */
101 PLArenaPool *arena;
102 unsigned int bagCount;
103 };
105 struct sec_PKCS12MacDataStr {
106 SGNDigestInfo safeMac;
107 SECItem macSalt;
108 SECItem iter;
109 };
111 struct sec_PKCS12PFXItemStr {
113 SECItem version;
115 /* Content type will either be Data (password integrity mode)
116 * or signedData (public-key integrity mode)
117 */
118 SEC_PKCS7ContentInfo *authSafe;
119 SECItem encodedAuthSafe;
121 /* Only present in password integrity mode */
122 sec_PKCS12MacData macData;
123 SECItem encodedMacData;
124 };
126 struct sec_PKCS12AuthenticatedSafeStr {
127 /* Content type will either be encryptedData (password privacy mode)
128 * or envelopedData (public-key privacy mode)
129 */
130 SEC_PKCS7ContentInfo **safes;
131 SECItem **encodedSafes;
133 /* used locally */
134 unsigned int safeCount;
135 SECItem dummySafe;
136 };
138 extern const SEC_ASN1Template sec_PKCS12PFXItemTemplate[];
139 extern const SEC_ASN1Template sec_PKCS12MacDataTemplate[];
140 extern const SEC_ASN1Template sec_PKCS12AuthenticatedSafeTemplate[];
141 extern const SEC_ASN1Template sec_PKCS12SafeContentsTemplate[];
142 extern const SEC_ASN1Template sec_PKCS12SafeContentsDecodeTemplate[];
143 extern const SEC_ASN1Template sec_PKCS12NestedSafeContentsDecodeTemplate[];
144 extern const SEC_ASN1Template sec_PKCS12CertBagTemplate[];
145 extern const SEC_ASN1Template sec_PKCS12CRLBagTemplate[];
146 extern const SEC_ASN1Template sec_PKCS12SecretBagTemplate[];
147 extern const SEC_ASN1Template sec_PKCS12PointerToCertBagTemplate[];
148 extern const SEC_ASN1Template sec_PKCS12PointerToCRLBagTemplate[];
149 extern const SEC_ASN1Template sec_PKCS12PointerToSecretBagTemplate[];
150 extern const SEC_ASN1Template sec_PKCS12PointerToSafeContentsTemplate[];
151 extern const SEC_ASN1Template sec_PKCS12AttributeTemplate[];
152 extern const SEC_ASN1Template sec_PKCS12PointerToContentInfoTemplate[];
153 extern const SEC_ASN1Template sec_PKCS12SafeBagTemplate[];
155 #endif