4 * THE REGENTS OF THE UNIVERSITY OF MICHIGAN
7 * Permission is granted to use, copy, create derivative works
8 * and redistribute this software and such derivative works
9 * for any purpose, so long as the name of The University of
10 * Michigan is not used in any advertising or publicity
11 * pertaining to the use of distribution of this software
12 * without specific, written prior authorization. If the
13 * above copyright notice or any other identification of the
14 * University of Michigan is included in any copy of any
15 * portion of this software, then the disclaimer below must
18 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION
19 * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY
20 * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF
21 * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
22 * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF
23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
24 * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE
25 * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR
26 * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING
27 * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
28 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF
32 #ifndef _KRB5_INT_PKINIT_H
33 #define _KRB5_INT_PKINIT_H
40 typedef struct _krb5_pk_authenticator
{
41 krb5_int32 cusec
; /* (0..999999) */
43 krb5_int32 nonce
; /* (0..4294967295) */
44 krb5_checksum paChecksum
;
45 } krb5_pk_authenticator
;
47 /* PKAuthenticator draft9 */
48 typedef struct _krb5_pk_authenticator_draft9
{
49 krb5_principal kdcName
;
50 krb5_octet_data kdcRealm
;
51 krb5_int32 cusec
; /* (0..999999) */
53 krb5_int32 nonce
; /* (0..4294967295) */
54 } krb5_pk_authenticator_draft9
;
56 /* AlgorithmIdentifier */
57 typedef struct _krb5_algorithm_identifier
{
58 krb5_octet_data algorithm
; /* OID */
59 krb5_octet_data parameters
; /* Optional */
60 } krb5_algorithm_identifier
;
62 /* SubjectPublicKeyInfo */
63 typedef struct _krb5_subject_pk_info
{
64 krb5_algorithm_identifier algorithm
;
65 krb5_octet_data subjectPublicKey
; /* BIT STRING */
66 } krb5_subject_pk_info
;
69 typedef struct _krb5_auth_pack
{
70 krb5_pk_authenticator pkAuthenticator
;
71 krb5_subject_pk_info
*clientPublicValue
; /* Optional */
72 krb5_algorithm_identifier
**supportedCMSTypes
; /* Optional */
73 krb5_octet_data clientDHNonce
; /* Optional */
77 typedef struct _krb5_auth_pack_draft9
{
78 krb5_pk_authenticator_draft9 pkAuthenticator
;
79 krb5_subject_pk_info
*clientPublicValue
; /* Optional */
80 } krb5_auth_pack_draft9
;
82 /* ExternalPrincipalIdentifier */
83 typedef struct _krb5_external_principal_identifier
{
84 krb5_octet_data subjectName
; /* Optional */
85 krb5_octet_data issuerAndSerialNumber
; /* Optional */
86 krb5_octet_data subjectKeyIdentifier
; /* Optional */
87 } krb5_external_principal_identifier
;
90 typedef struct _krb5_trusted_ca
{
92 choice_trusted_cas_UNKNOWN
= -1,
93 choice_trusted_cas_principalName
= 0,
94 choice_trusted_cas_caName
= 1,
95 choice_trusted_cas_issuerAndSerial
= 2
98 krb5_principal principalName
;
99 krb5_octet_data caName
; /* fully-qualified X.500 "Name" as defined by X.509 (der-encoded) */
100 krb5_octet_data issuerAndSerial
; /* Optional -- IssuerAndSerialNumber (der-encoded) */
105 typedef struct _krb5_typed_data
{
112 /* PA-PK-AS-REQ (Draft 9 -- PA TYPE 14) */
113 typedef struct _krb5_pa_pk_as_req_draft9
{
114 krb5_octet_data signedAuthPack
;
115 krb5_trusted_ca
**trustedCertifiers
; /* Optional array */
116 krb5_octet_data kdcCert
; /* Optional */
117 krb5_octet_data encryptionCert
;
118 } krb5_pa_pk_as_req_draft9
;
120 /* PA-PK-AS-REQ (rfc4556 -- PA TYPE 16) */
121 typedef struct _krb5_pa_pk_as_req
{
122 krb5_octet_data signedAuthPack
;
123 krb5_external_principal_identifier
**trustedCertifiers
; /* Optional array */
124 krb5_octet_data kdcPkId
; /* Optional */
128 typedef struct _krb5_dh_rep_info
{
129 krb5_octet_data dhSignedData
;
130 krb5_octet_data serverDHNonce
; /* Optional */
134 typedef struct _krb5_kdc_dh_key_info
{
135 krb5_octet_data subjectPublicKey
; /* BIT STRING */
136 krb5_int32 nonce
; /* (0..4294967295) */
137 krb5_timestamp dhKeyExpiration
; /* Optional */
138 } krb5_kdc_dh_key_info
;
140 /* KDCDHKeyInfo draft9*/
141 typedef struct _krb5_kdc_dh_key_info_draft9
{
142 krb5_octet_data subjectPublicKey
; /* BIT STRING */
143 krb5_int32 nonce
; /* (0..4294967295) */
144 } krb5_kdc_dh_key_info_draft9
;
147 typedef struct _krb5_reply_key_pack
{
148 krb5_keyblock replyKey
;
149 krb5_checksum asChecksum
;
150 } krb5_reply_key_pack
;
153 typedef struct _krb5_reply_key_pack_draft9
{
154 krb5_keyblock replyKey
;
156 } krb5_reply_key_pack_draft9
;
158 /* PA-PK-AS-REP (Draft 9 -- PA TYPE 15) */
159 typedef struct _krb5_pa_pk_as_rep_draft9
{
161 choice_pa_pk_as_rep_draft9_UNKNOWN
= -1,
162 choice_pa_pk_as_rep_draft9_dhSignedData
= 0,
163 choice_pa_pk_as_rep_draft9_encKeyPack
= 1
166 krb5_octet_data dhSignedData
;
167 krb5_octet_data encKeyPack
;
169 } krb5_pa_pk_as_rep_draft9
;
171 /* PA-PK-AS-REP (rfc4556 -- PA TYPE 17) */
172 typedef struct _krb5_pa_pk_as_rep
{
174 choice_pa_pk_as_rep_UNKNOWN
= -1,
175 choice_pa_pk_as_rep_dhInfo
= 0,
176 choice_pa_pk_as_rep_encKeyPack
= 1
179 krb5_dh_rep_info dh_Info
;
180 krb5_octet_data encKeyPack
;
188 /*************************************************************************
189 * Prototypes for pkinit asn.1 encode routines
190 *************************************************************************/
192 krb5_error_code encode_krb5_pa_pk_as_req
193 (const krb5_pa_pk_as_req
*rep
, krb5_data
**code
);
195 krb5_error_code encode_krb5_pa_pk_as_req_draft9
196 (const krb5_pa_pk_as_req_draft9
*rep
, krb5_data
**code
);
198 krb5_error_code encode_krb5_pa_pk_as_rep
199 (const krb5_pa_pk_as_rep
*rep
, krb5_data
**code
);
201 krb5_error_code encode_krb5_pa_pk_as_rep_draft9
202 (const krb5_pa_pk_as_rep_draft9
*rep
, krb5_data
**code
);
204 krb5_error_code encode_krb5_auth_pack
205 (const krb5_auth_pack
*rep
, krb5_data
**code
);
207 krb5_error_code encode_krb5_auth_pack_draft9
208 (const krb5_auth_pack_draft9
*rep
, krb5_data
**code
);
210 krb5_error_code encode_krb5_kdc_dh_key_info
211 (const krb5_kdc_dh_key_info
*rep
, krb5_data
**code
);
213 krb5_error_code encode_krb5_reply_key_pack
214 (const krb5_reply_key_pack
*, krb5_data
**code
);
216 krb5_error_code encode_krb5_reply_key_pack_draft9
217 (const krb5_reply_key_pack_draft9
*, krb5_data
**code
);
219 krb5_error_code encode_krb5_typed_data
220 (const krb5_typed_data
**, krb5_data
**code
);
222 krb5_error_code encode_krb5_td_trusted_certifiers
223 (const krb5_external_principal_identifier
**, krb5_data
**code
);
225 krb5_error_code encode_krb5_td_dh_parameters
226 (const krb5_algorithm_identifier
**, krb5_data
**code
);
228 /*************************************************************************
229 * Prototypes for pkinit asn.1 decode routines
230 *************************************************************************/
232 krb5_error_code decode_krb5_pa_pk_as_req
233 (const krb5_data
*, krb5_pa_pk_as_req
**);
235 krb5_error_code decode_krb5_pa_pk_as_req_draft9
236 (const krb5_data
*, krb5_pa_pk_as_req_draft9
**);
238 krb5_error_code decode_krb5_pa_pk_as_rep
239 (const krb5_data
*, krb5_pa_pk_as_rep
**);
241 krb5_error_code decode_krb5_pa_pk_as_rep_draft9
242 (const krb5_data
*, krb5_pa_pk_as_rep_draft9
**);
244 krb5_error_code decode_krb5_auth_pack
245 (const krb5_data
*, krb5_auth_pack
**);
247 krb5_error_code decode_krb5_auth_pack_draft9
248 (const krb5_data
*, krb5_auth_pack_draft9
**);
250 krb5_error_code decode_krb5_kdc_dh_key_info
251 (const krb5_data
*, krb5_kdc_dh_key_info
**);
253 krb5_error_code decode_krb5_principal_name
254 (const krb5_data
*, krb5_principal_data
**);
256 krb5_error_code decode_krb5_reply_key_pack
257 (const krb5_data
*, krb5_reply_key_pack
**);
259 krb5_error_code decode_krb5_reply_key_pack_draft9
260 (const krb5_data
*, krb5_reply_key_pack_draft9
**);
262 krb5_error_code decode_krb5_typed_data
263 (const krb5_data
*, krb5_typed_data
***);
265 krb5_error_code decode_krb5_td_trusted_certifiers
266 (const krb5_data
*, krb5_external_principal_identifier
***);
268 krb5_error_code decode_krb5_td_dh_parameters
269 (const krb5_data
*, krb5_algorithm_identifier
***);
271 #endif /* _KRB5_INT_PKINIT_H */