Add PRIV stuff.
[shishi.git] / lib / shishi.h.in
blobace8a763340ca57a2262d2b894ec4a52f3e98a85
1 /* shishi.h Header file for Shishi library. -*- c -*-
2 * Copyright (C) 2002, 2003 Simon Josefsson
4 * This file is part of Shishi.
6 * Shishi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Shishi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Shishi; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #ifndef SHISHI_H
23 #define SHISHI_H
25 #include <stddef.h> /* size_t */
26 #include <stdio.h> /* FILE */
27 #include <time.h> /* time_t */
28 #include <shishi-int.h> /* uint32_t */
30 #define SHISHI_VERSION "@PACKAGE_VERSION@"
32 /* Error codes */
33 typedef enum
35 SHISHI_OK = 0,
36 SHISHI_ASN1_ERROR = 1,
37 SHISHI_FOPEN_ERROR = 2,
38 SHISHI_FCLOSE_ERROR = 3,
39 SHISHI_MALLOC_ERROR = 4,
40 SHISHI_BASE64_ERROR = 5,
41 SHISHI_REALM_MISMATCH = 6,
42 SHISHI_CNAME_MISMATCH = 7,
43 SHISHI_NONCE_MISMATCH = 8,
44 SHISHI_TGSREP_BAD_KEYTYPE = 9,
45 SHISHI_KDCREP_BAD_KEYTYPE = 10,
46 SHISHI_APREP_BAD_KEYTYPE = 11,
47 SHISHI_APREP_VERIFY_FAILED = 12,
48 SHISHI_APREQ_BAD_KEYTYPE = 13,
49 SHISHI_TOO_SMALL_BUFFER = 14,
50 SHISHI_DERIVEDKEY_TOO_SMALL = 15,
51 SHISHI_KEY_TOO_LARGE = 16,
52 SHISHI_CRYPTO_ERROR = 17,
53 SHISHI_CRYPTO_INTERNAL_ERROR = 18,
54 SHISHI_SOCKET_ERROR = 19,
55 SHISHI_BIND_ERROR = 20,
56 SHISHI_SENDTO_ERROR = 21,
57 SHISHI_RECVFROM_ERROR = 22,
58 SHISHI_CLOSE_ERROR = 23,
59 SHISHI_KDC_TIMEOUT = 24,
60 SHISHI_KDC_NOT_KNOWN_FOR_REALM = 25,
61 SHISHI_TTY_ERROR = 26,
62 SHISHI_GOT_KRBERROR = 27,
63 SHISHI_HANDLE_ERROR = 28,
64 SHISHI_INVALID_TKTS = 29,
65 SHISHI_TICKET_BAD_KEYTYPE = 30,
66 SHISHI_INVALID_KEY = 31,
67 SHISHI_APREQ_DECRYPT_FAILED = 32,
68 SHISHI_TICKET_DECRYPT_FAILED = 33,
69 SHISHI_INVALID_TICKET = 34,
70 SHISHI_OUT_OF_RANGE = 35,
71 SHISHI_ASN1_NO_ELEMENT = 36,
72 SHISHI_SAFE_BAD_KEYTYPE = 37,
73 SHISHI_SAFE_VERIFY_FAILED = 38,
74 SHISHI_PKCS5_INVALID_PRF = 39,
75 SHISHI_PKCS5_INVALID_ITERATION_COUNT = 40,
76 SHISHI_PKCS5_INVALID_DERIVED_KEY_LENGTH = 41,
77 SHISHI_PKCS5_DERIVED_KEY_TOO_LONG = 42,
78 SHISHI_INVALID_PRINCIPAL_NAME = 43,
79 SHISHI_INVALID_ARGUMENT = 44,
80 SHISHI_ASN1_NO_VALUE = 45,
81 SHISHI_CONNECT_ERROR = 46,
82 SHISHI_VERIFY_FAILED = 47,
83 SHISHI_PRIV_BAD_KEYTYPE = 48,
84 SHISHI_LAST_ERROR = 48
86 Shishi_rc;
88 typedef enum
90 /* Name type not known */
91 SHISHI_NT_UNKNOWN = 0,
92 /* Just the name of the principal as in DCE, or for users */
93 SHISHI_NT_PRINCIPAL = 1,
94 /* Service and other unique instance (krbtgt) */
95 SHISHI_NT_SRV_INST = 2,
96 /* Service with host name as instance (telnet, rcommands) */
97 SHISHI_NT_SRV_HST = 3,
98 /* Service with host as remaining components */
99 SHISHI_NT_SRV_XHST = 4,
100 /* Unique ID */
101 SHISHI_NT_UID = 5,
102 /* Encoded X.509 Distingished name [RFC 2253] */
103 SHISHI_NT_X500_PRINCIPAL = 6,
104 /* Name in form of SMTP email name (e.g. user@foo.com) */
105 SHISHI_NT_SMTP_NAME = 7,
106 /* Enterprise name - may be mapped to principal name */
107 SHISHI_NT_ENTERPRISE = 10
109 Shishi_name_type;
111 typedef enum
113 SHISHI_PA_TGS_REQ = 1,
114 SHISHI_PA_ENC_TIMESTAMP = 2,
115 SHISHI_PA_PW_SALT = 3,
116 SHISHI_PA_RESERVED = 4,
117 SHISHI_PA_ENC_UNIX_TIME = 5, /* (deprecated) */
118 SHISHI_PA_SANDIA_SECUREID = 6,
119 SHISHI_PA_SESAME = 7,
120 SHISHI_PA_OSF_DCE = 8,
121 SHISHI_PA_CYBERSAFE_SECUREID = 9,
122 SHISHI_PA_AFS3_SALT = 10,
123 SHISHI_PA_ETYPE_INFO = 11,
124 SHISHI_PA_SAM_CHALLENGE = 12, /* (sam/otp) */
125 SHISHI_PA_SAM_RESPONSE = 13, /* (sam/otp) */
126 SHISHI_PA_PK_AS_REQ = 14, /* (pkinit) */
127 SHISHI_PA_PK_AS_REP = 15, /* (pkinit) */
128 SHISHI_PA_ETYPE_INFO2 = 19, /* (replaces pa_etype_info) */
129 SHISHI_PA_USE_SPECIFIED_KVNO = 20,
130 SHISHI_PA_SAM_REDIRECT = 21, /* (sam/otp) */
131 SHISHI_PA_GET_FROM_TYPED_DATA = 22, /* (embedded in typed data) */
132 SHISHI_TD_PADATA = 22, /* (embeds padata) */
133 SHISHI_PA_SAM_ETYPE_INFO = 23, /* (sam/otp) */
134 SHISHI_PA_ALT_PRINC = 24, /* (crawdad@fnal.gov) */
135 SHISHI_PA_SAM_CHALLENGE2 = 30, /* (kenh@pobox.com) */
136 SHISHI_PA_SAM_RESPONSE2 = 31, /* (kenh@pobox.com) */
137 SHISHI_PA_EXTRA_TGT = 41, /* Reserved extra TGT */
138 SHISHI_TD_PKINIT_CMS_CERTIFICATES = 101, /* CertificateSet from CMS */
139 SHISHI_TD_KRB_PRINCIPAL = 102, /* PrincipalName */
140 SHISHI_TD_KRB_REALM = 103, /* Realm */
141 SHISHI_TD_TRUSTED_CERTIFIERS = 104, /* from PKINIT */
142 SHISHI_TD_CERTIFICATE_INDEX = 105, /* from PKINIT */
143 SHISHI_TD_APP_DEFINED_ERROR = 106, /* application specific */
144 SHISHI_TD_REQ_NONCE = 107, /* INTEGER */
145 SHISHI_TD_REQ_SEQ = 108, /* INTEGER */
146 SHISHI_PA_PAC_REQUEST = 128 /* (jbrezak@exchange.microsoft.com) */
148 Shishi_padata_type;
150 typedef enum
152 SHISHI_TR_DOMAIN_X500_COMPRESS = 1
154 Shishi_tr_type;
156 typedef enum
158 SHISHI_APOPTIONS_RESERVED = 0x1, /* bit 0 */
159 SHISHI_APOPTIONS_USE_SESSION_KEY = 0x2, /* bit 1 */
160 SHISHI_APOPTIONS_MUTUAL_REQUIRED = 0x4 /* bit 2 */
162 Shishi_apoptions;
164 typedef enum
166 SHISHI_TICKETFLAGS_RESERVED = 0x1, /* bit 0 */
167 SHISHI_TICKETFLAGS_FORWARDABLE = 0x2, /* bit 1 */
168 SHISHI_TICKETFLAGS_FORWARDED = 0x4, /* bit 2 */
169 SHISHI_TICKETFLAGS_PROXIABLE = 0x8, /* bit 3 */
170 SHISHI_TICKETFLAGS_PROXY = 0x10, /* bit 4 */
171 SHISHI_TICKETFLAGS_MAY_POSTDATE = 0x20, /* bit 5 */
172 SHISHI_TICKETFLAGS_POSTDATED = 0x40, /* bit 6 */
173 SHISHI_TICKETFLAGS_INVALID = 0x80, /* bit 7 */
174 SHISHI_TICKETFLAGS_RENEWABLE = 0x100, /* bit 8 */
175 SHISHI_TICKETFLAGS_INITIAL = 0x200, /* bit 9 */
176 SHISHI_TICKETFLAGS_PRE_AUTHENT = 0x400, /* bit 10 */
177 SHISHI_TICKETFLAGS_HW_AUTHENT = 0x800, /* bit 11 */
178 SHISHI_TICKETFLAGS_TRANSITED_POLICY_CHECKED = 0x1000, /* bit 12 */
179 SHISHI_TICKETFLAGS_OK_AS_DELEGATE = 0x2000 /* bit 13 */
181 Shishi_ticketflags;
183 typedef enum
185 SHISHI_KDCOPTIONS_RESERVED = 0x1, /* bit 0 */
186 SHISHI_KDCOPTIONS_FORWARDABLE = 0x2, /* bit 1 */
187 SHISHI_KDCOPTIONS_FORWARDED = 0x4, /* bit 2 */
188 SHISHI_KDCOPTIONS_PROXIABLE = 0x8, /* bit 3 */
189 SHISHI_KDCOPTIONS_PROXY = 0x10, /* bit 4 */
190 SHISHI_KDCOPTIONS_ALLOW_POSTDATE = 0x20, /* bit 5 */
191 SHISHI_KDCOPTIONS_POSTDATED = 0x40, /* bit 6 */
192 SHISHI_KDCOPTIONS_UNUSED7 = 0x80, /* bit 7 */
193 SHISHI_KDCOPTIONS_RENEWABLE = 0x100, /* bit 8 */
194 SHISHI_KDCOPTIONS_UNUSED9 = 0x200, /* bit 9 */
195 SHISHI_KDCOPTIONS_UNUSED10 = 0x400, /* bit 10 */
196 SHISHI_KDCOPTIONS_UNUSED11 = 0x800, /* bit 11 */
197 SHISHI_KDCOPTIONS_DISABLE_TRANSITED_CHECK = 0x4000000, /* bit 26 */
198 SHISHI_KDCOPTIONS_RENEWABLE_OK = 0x8000000, /* bit 27 */
199 SHISHI_KDCOPTIONS_ENC_TKT_IN_SKEY = 0x10000000, /* bit 28 */
200 SHISHI_KDCOPTIONS_RENEW = 0x40000000, /* bit 30 */
201 SHISHI_KDCOPTIONS_VALIDATE = 0x80000000 /* bit 31 */
203 Shishi_KDCOptions;
205 typedef enum
207 /* 0 unused */
208 /* 1 Ticket PDU */
209 /* 2 Authenticator non-PDU */
210 /* 3 EncTicketPart non-PDU */
211 /* 4-9 unused */
212 /* Request for initial authentication */
213 SHISHI_MSGTYPE_AS_REQ = 10,
214 /* Response to SHISHI_MSGTYPE_AS_REQ request */
215 SHISHI_MSGTYPE_AS_REP = 11,
216 /* Request for authentication based on TGT */
217 SHISHI_MSGTYPE_TGS_REQ = 12,
218 /* Response to SHISHI_MSGTYPE_TGS_REQ request */
219 SHISHI_MSGTYPE_TGS_REP = 13,
220 /* application request to server */
221 SHISHI_MSGTYPE_AP_REQ = 14,
222 /* Response to SHISHI_MSGTYPE_AP_REQ_MUTUAL */
223 SHISHI_MSGTYPE_AP_REP = 15,
224 /* Reserved for user-to-user krb_tgt_request */
225 SHISHI_MSGTYPE_RESERVED16 = 16,
226 /* Reserved for user-to-user krb_tgt_reply */
227 SHISHI_MSGTYPE_RESERVED17 = 17,
228 /* 18-19 unused */
229 /* Safe (checksummed) application message */
230 SHISHI_MSGTYPE_SAFE = 20,
231 /* Private (encrypted) application message */
232 SHISHI_MSGTYPE_PRIV = 21,
233 /* Private (encrypted) message to forward credentials */
234 SHISHI_MSGTYPE_CRED = 22,
235 /* 23-24 unused */
236 /* 25 EncASRepPart non-PDU */
237 /* 26 EncTGSRepPart non-PDU */
238 /* 27 EncApRepPart non-PDU */
239 /* 28 EncKrbPrivPart non-PDU */
240 /* 29 EncKrbCredPart non-PDU */
241 /* Error response */
242 SHISHI_MSGTYPE_ERROR = 30
244 Shishi_msgtype;
246 typedef enum
248 SHISHI_LRTYPE_LAST_INITIAL_TGT_REQUEST = 1,
249 SHISHI_LRTYPE_LAST_INITIAL_REQUEST = 2,
250 SHISHI_LRTYPE_NEWEST_TGT_ISSUE = 3,
251 SHISHI_LRTYPE_LAST_RENEWAL = 4,
252 SHISHI_LRTYPE_LAST_REQUEST = 5
254 Shishi_lrtype;
256 typedef enum
258 SHISHI_NULL = 0,
259 SHISHI_DES_CBC_CRC = 1,
260 SHISHI_DES_CBC_MD4 = 2,
261 SHISHI_DES_CBC_MD5 = 3,
262 SHISHI_DES_CBC_NONE = 4,
263 SHISHI_DES3_CBC_NONE = 6,
264 SHISHI_DES3_CBC_HMAC_SHA1_KD = 16,
265 SHISHI_AES128_CTS_HMAC_SHA1_96 = 17,
266 SHISHI_AES256_CTS_HMAC_SHA1_96 = 18,
267 SHISHI_RC4_HMAC = 23,
268 SHISHI_RC4_HMAC_EXP = 24
270 Shishi_etype;
272 typedef enum
274 SHISHI_CRC32 = 1,
275 SHISHI_RSA_MD4 = 2,
276 SHISHI_RSA_MD4_DES = 3,
277 SHISHI_DES_MAC = 4,
278 SHISHI_DES_MAC_K = 5,
279 SHISHI_RSA_MD4_DES_K = 6,
280 SHISHI_RSA_MD5 = 7,
281 SHISHI_RSA_MD5_DES = 8,
282 SHISHI_RSA_MD5_DES_GSS = 9, /* XXX */
283 SHISHI_HMAC_SHA1_DES3_KD = 12,
284 SHISHI_HMAC_SHA1_96_AES128 = 15,
285 SHISHI_HMAC_SHA1_96_AES256 = 16,
286 SHISHI_RC4_HMAC_MD5 = -138,
287 SHISHI_NO_CKSUMTYPE = -1
289 Shishi_cksumtype;
291 typedef enum
293 SHISHI_FILETYPE_TEXT = 0,
294 SHISHI_FILETYPE_DER,
295 SHISHI_FILETYPE_HEX,
296 SHISHI_FILETYPE_BASE64,
297 SHISHI_FILETYPE_BINARY
299 Shishi_filetype;
301 typedef enum
303 /* 1. AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with the
304 client key */
305 SHISHI_KEYUSAGE_ASREQ_PA_ENC_TIMESTAMP = 1,
306 /* 2. AS-REP Ticket and TGS-REP Ticket (includes TGS session key or
307 application session key), encrypted with the service key */
308 SHISHI_KEYUSAGE_ENCTICKETPART = 2,
309 /* 3. AS-REP encrypted part (includes TGS session key or application
310 session key), encrypted with the client key */
311 SHISHI_KEYUSAGE_ENCASREPPART = 3,
312 /* 4. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the TGS
313 session key */
314 SHISHI_KEYUSAGE_TGSREQ_AUTHORIZATIONDATA_TGS_SESSION_KEY = 4,
315 /* 5. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the TGS
316 authenticator subkey (section 5.4.1) */
317 SHISHI_KEYUSAGE_TGSREQ_AUTHORIZATIONDATA_TGS_AUTHENTICATOR_KEY = 5,
318 /* 6. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum, keyed with the
319 TGS session key */
320 SHISHI_KEYUSAGE_TGSREQ_APREQ_AUTHENTICATOR_CKSUM = 6,
321 /* 7. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator (includes TGS
322 authenticator subkey), encrypted with the TGS session key */
323 SHISHI_KEYUSAGE_TGSREQ_APREQ_AUTHENTICATOR = 7,
324 /* 8. TGS-REP encrypted part (includes application session key), encrypted
325 with the TGS session key */
326 SHISHI_KEYUSAGE_ENCTGSREPPART_SESSION_KEY = 8,
327 /* 9. TGS-REP encrypted part (includes application session key), encrypted
328 with the TGS authenticator subkey */
329 SHISHI_KEYUSAGE_ENCTGSREPPART_AUTHENTICATOR_KEY = 9,
330 /* 10. AP-REQ Authenticator cksum, keyed with the application
331 session key */
332 SHISHI_KEYUSAGE_APREQ_AUTHENTICATOR_CKSUM = 10,
333 /* 11. AP-REQ Authenticator (includes application authenticator subkey),
334 encrypted with the application session key */
335 SHISHI_KEYUSAGE_APREQ_AUTHENTICATOR = 11,
336 /* 12. AP-REP encrypted part (includes application session subkey),
337 encrypted with the application session key */
338 SHISHI_KEYUSAGE_ENCAPREPPART = 12,
339 /* 13. KRB-PRIV encrypted part, encrypted with a key chosen by the
340 application */
341 SHISHI_KEYUSAGE_KRB_PRIV = 13,
342 /* 14. KRB-CRED encrypted part, encrypted with a key chosen by the
343 application */
344 SHISHI_KEYUSAGE_KRB_CRED = 14,
345 /* 15. KRB-SAFE cksum, keyed with a key chosen by the application */
346 SHISHI_KEYUSAGE_KRB_SAFE = 15,
347 /* 18. KRB-ERROR checksum (e-cksum) */
348 SHISHI_KEYUSAGE_KRB_ERROR = 18,
349 /* 19. AD-KDCIssued checksum (ad-checksum) */
350 SHISHI_KEYUSAGE_AD_KDCISSUED = 19,
351 /* 20. Checksum for Mandatory Ticket Extensions */
352 SHISHI_KEYUSAGE_TICKET_EXTENSION = 20,
353 /* 21. Checksum in Authorization Data in Ticket Extensions */
354 SHISHI_KEYUSAGE_TICKET_EXTENSION_AUTHORIZATION = 21,
355 /* 22-24. Reserved for use in GSSAPI mechanisms derived from RFC 1964.
356 (raeburn/MIT) */
357 SHISHI_KEYUSAGE_GSS_R1 = 22,
358 SHISHI_KEYUSAGE_GSS_R2 = 23,
359 SHISHI_KEYUSAGE_GSS_R3 = 24
360 /* 16-18,20-21,25-511. Reserved for future use in Kerberos and related
361 protocols.
362 512-1023. Reserved for uses internal to a Kerberos
363 implementation.
364 1024. Encryption for application use in protocols that
365 do not specify key usage values
366 1025. Checksums for application use in protocols that
367 do not specify key usage values
368 1026-2047. Reserved for application use. */
370 Shishi_keyusage;
372 typedef enum
374 /* No error */
375 SHISHI_KDC_ERR_NONE = 0,
376 /* Client's entry in database has expired */
377 SHISHI_KDC_ERR_NAME_EXP = 1,
378 /* Server's entry in database has expired */
379 SHISHI_KDC_ERR_SERVICE_EXP = 2,
380 /* Requested protocol version number - not supported */
381 SHISHI_KDC_ERR_BAD_PVNO = 3,
382 /* Client's key encrypted in old master key */
383 SHISHI_KDC_ERR_C_OLD_MAST_KVNO = 4,
384 /* Server's key encrypted in old master key */
385 SHISHI_KDC_ERR_S_OLD_MAST_KVNO = 5,
386 /* Client not found in Kerberos database */
387 SHISHI_KDC_ERR_C_PRINCIPAL_UNKNOWN = 6,
388 /* Server not found in Kerberos database */
389 SHISHI_KDC_ERR_S_PRINCIPAL_UNKNOWN = 7,
390 /* Multiple principal entries in database */
391 SHISHI_KDC_ERR_PRINCIPAL_NOT_UNIQUE = 8,
392 /* The client or server has a null key */
393 SHISHI_KDC_ERR_NULL_KEY = 9,
394 /* Ticket not eligible for postdating */
395 SHISHI_KDC_ERR_CANNOT_POSTDATE = 10,
396 /* Requested start time is later than end time */
397 SHISHI_KDC_ERR_NEVER_VALID = 11,
398 /* KDC policy rejects request */
399 SHISHI_KDC_ERR_POLICY = 12,
400 /* KDC cannot accommodate requested option */
401 SHISHI_KDC_ERR_BADOPTION = 13,
402 /* KDC has no support for encryption type */
403 SHISHI_KDC_ERR_ETYPE_NOSUPP = 14,
404 /* KDC has no support for checksum type */
405 SHISHI_KDC_ERR_SUMTYPE_NOSUPP = 15,
406 /* KDC has no support for padata type */
407 SHISHI_KDC_ERR_PADATA_TYPE_NOSUPP = 16,
408 /* KDC has no support for transited type */
409 SHISHI_KDC_ERR_TRTYPE_NOSUPP = 17,
410 /* Clients credentials have been revoked */
411 SHISHI_KDC_ERR_CLIENT_REVOKED = 18,
412 /* Credentials for server have been revoked */
413 SHISHI_KDC_ERR_SERVICE_REVOKED = 19,
414 /* TGT has been revoked */
415 SHISHI_KDC_ERR_TGT_REVOKED = 20,
416 /* Client not yet valid - try again later */
417 SHISHI_KDC_ERR_CLIENT_NOTYET = 21,
418 /* Server not yet valid - try again later */
419 SHISHI_KDC_ERR_SERVICE_NOTYET = 22,
420 /* Password has expired - change password to reset */
421 SHISHI_KDC_ERR_KEY_EXPIRED = 23,
422 /* Pre-authentication information was invalid */
423 SHISHI_KDC_ERR_PREAUTH_FAILED = 24,
424 /* Additional pre-authenticationrequired */
425 SHISHI_KDC_ERR_PREAUTH_REQUIRED = 25,
426 /* Requested server and ticket don't match */
427 SHISHI_KDC_ERR_SERVER_NOMATCH = 26,
428 /* Server principal valid for user = 2,user only */
429 SHISHI_KDC_ERR_MUST_USE_USER2USER = 27,
430 /* KDC Policy rejects transited path */
431 SHISHI_KDC_ERR_PATH_NOT_ACCPETED = 28,
432 /* A service is not available */
433 SHISHI_KDC_ERR_SVC_UNAVAILABLE = 29,
434 /* Integrity check on decrypted field failed */
435 SHISHI_KRB_AP_ERR_BAD_INTEGRITY = 31,
436 /* Ticket expired */
437 SHISHI_KRB_AP_ERR_TKT_EXPIRED = 32,
438 /* Ticket not yet valid */
439 SHISHI_KRB_AP_ERR_TKT_NYV = 33,
440 /* Request is a replay */
441 SHISHI_KRB_AP_ERR_REPEAT = 34,
442 /* The ticket isn't for us */
443 SHISHI_KRB_AP_ERR_NOT_US = 35,
444 /* Ticket and authenticator don't match */
445 SHISHI_KRB_AP_ERR_BADMATCH = 36,
446 /* Clock skew too great */
447 SHISHI_KRB_AP_ERR_SKEW = 37,
448 /* Incorrect net address */
449 SHISHI_KRB_AP_ERR_BADADDR = 38,
450 /* Protocol version mismatch */
451 SHISHI_KRB_AP_ERR_BADVERSION = 39,
452 /* Invalid msg type */
453 SHISHI_KRB_AP_ERR_MSG_TYPE = 40,
454 /* Message stream modified */
455 SHISHI_KRB_AP_ERR_MODIFIED = 41,
456 /* Message out of order */
457 SHISHI_KRB_AP_ERR_BADORDER = 42,
458 /* Specified version of key is not available */
459 SHISHI_KRB_AP_ERR_BADKEYVER = 44,
460 /* Service key not available */
461 SHISHI_KRB_AP_ERR_NOKEY = 45,
462 /* Mutual authentication failed */
463 SHISHI_KRB_AP_ERR_MUT_FAIL = 46,
464 /* Incorrect message direction */
465 SHISHI_KRB_AP_ERR_BADDIRECTION = 47,
466 /* Alternative authentication method required */
467 SHISHI_KRB_AP_ERR_METHOD = 48,
468 /* Incorrect sequence number in message */
469 SHISHI_KRB_AP_ERR_BADSEQ = 49,
470 /* Inappropriate type of checksum in message */
471 SHISHI_KRB_AP_ERR_INAPP_CKSUM = 50,
472 /* Policy rejects transited path */
473 SHISHI_KRB_AP_PATH_NOT_ACCEPTED = 51,
474 /* Response too big for UDP, retry with TCP */
475 SHISHI_KRB_ERR_RESPONSE_TOO_BIG = 52,
476 /* Generic error (description in e-text) */
477 SHISHI_KRB_ERR_GENERIC = 60,
478 /* Field is too long for this implementation */
479 SHISHI_KRB_ERR_FIELD_TOOLONG = 61,
480 /* Reserved for PKINIT */
481 SHISHI_KDC_ERROR_CLIENT_NOT_TRUSTED = 62,
482 /* Reserved for PKINIT */
483 SHISHI_KDC_ERROR_KDC_NOT_TRUSTED = 63,
484 /* Reserved for PKINIT */
485 SHISHI_KDC_ERROR_INVALID_SIG = 64,
486 /* Reserved for PKINIT */
487 SHISHI_KDC_ERR_KEY_TOO_WEAK = 65,
488 /* Reserved for PKINIT */
489 SHISHI_KDC_ERR_CERTIFICATE_MISMATCH = 66,
490 /* No TGT available to validate USER-TO-USER */
491 SHISHI_KRB_AP_ERR_NO_TGT = 67,
492 /* USER-TO-USER TGT issued different KDC */
493 SHISHI_KDC_ERR_WRONG_REALM = 68,
494 /* Ticket must be for USER-TO-USER */
495 SHISHI_KRB_AP_ERR_USER_TO_USER_REQUIRED = 69,
496 /* Reserved for PKINIT */
497 SHISHI_KDC_ERR_CANT_VERIFY_CERTIFICATE = 70,
498 /* Reserved for PKINIT */
499 SHISHI_KDC_ERR_INVALID_CERTIFICATE = 71,
500 /* Reserved for PKINIT */
501 SHISHI_KDC_ERR_REVOKED_CERTIFICATE = 72,
502 /* Reserved for PKINIT */
503 SHISHI_KDC_ERR_REVOCATION_STATUS_UNKNOWN = 73,
504 /* Reserved for PKINIT */
505 SHISHI_KDC_ERR_REVOCATION_STATUS_UNAVAILABLE = 74,
506 /* Reserved for PKINIT */
507 SHISHI_KDC_ERR_CLIENT_NAME_MISMATCH = 75,
508 /* Reserved for PKINIT */
509 SHISHI_KDC_ERR_KDC_NAME_MISMATCH = 76,
510 SHISHI_LAST_ERROR_CODE = 76
512 Shishi_krb_error;
514 typedef enum
516 SHISHI_TKTSHINTFLAGS_ACCEPT_EXPIRED = 1
518 Shishi_tkts_hintflags;
520 struct Shishi_tkts_hint
522 int startpos;
523 char *server;
524 char *serverrealm;
525 char *client;
526 char *clientrealm;
527 int flags;
528 int32_t etype;
529 char *passwd;
530 time_t starttime;
531 time_t endtime;
532 time_t renew_till;
533 int renewable;
535 typedef struct Shishi_tkts_hint Shishi_tkts_hint;
537 typedef struct Shishi Shishi;
538 typedef struct Shishi_tkt Shishi_tkt;
539 typedef struct Shishi_tkts Shishi_tkts;
540 typedef struct Shishi_as Shishi_as;
541 typedef struct Shishi_tgs Shishi_tgs;
542 typedef struct Shishi_ap Shishi_ap;
543 typedef struct Shishi_key Shishi_key;
544 typedef struct Shishi_safe Shishi_safe;
545 typedef struct Shishi_priv Shishi_priv;
546 #ifndef _SHISHI_HAS_LIBTASN1_H
547 typedef struct node_asn_struct *ASN1_TYPE;
548 #endif
549 typedef ASN1_TYPE Shishi_asn1;
551 /* init.c */
552 extern Shishi *shishi (void);
553 extern void shishi_done (Shishi * handle);
554 extern int shishi_init (Shishi ** handle);
555 extern int shishi_init_with_paths (Shishi ** handle,
556 const char *tktsfile,
557 const char *systemcfgfile,
558 const char *usercfgfile);
559 extern int shishi_init_server (Shishi ** handle);
560 extern int shishi_init_server_with_paths (Shishi ** handle,
561 const char *systemcfgfile);
563 /* cfg.c */
564 extern int shishi_cfg (Shishi * handle, char *option);
565 extern int shishi_cfg_from_file (Shishi * handle, const char *cfg);
566 extern int shishi_cfg_print (Shishi * handle, FILE * fh);
567 extern const char *shishi_cfg_default_systemfile (Shishi * handle);
568 extern const char *shishi_cfg_default_userdirectory (Shishi * handle);
569 extern const char *shishi_cfg_default_userfile (Shishi * handle);
570 extern int shishi_cfg_clientkdcetype (Shishi * handle, int32_t ** etypes);
571 extern int shishi_cfg_clientkdcetype_set (Shishi * handle, char *value);
573 /* error.c */
574 extern const char *shishi_strerror (int err);
575 extern const char *shishi_error (Shishi * handle);
576 extern void shishi_error_clear (Shishi * handle);
577 extern void shishi_error_set (Shishi * handle, const char *error);
578 extern void shishi_error_printf (Shishi * handle, const char *format, ...);
579 extern void shishi_info (Shishi * handle, const char *format, ...);
580 extern void shishi_warn (Shishi * handle, const char *format, ...);
582 /* realm.c */
583 extern char *shishi_realm_default_guess (void);
584 extern const char *shishi_realm_default (Shishi * handle);
585 extern void shishi_realm_default_set (Shishi * handle, const char *realm);
586 extern char *shishi_realm_for_server_file (Shishi * handle, char *server);
587 extern char *shishi_realm_for_server_dns (Shishi * handle, char *server);
588 extern char *shishi_realm_for_server (Shishi * handle, char *server);
590 /* principal.c */
591 extern char *shishi_principal_default_guess (void);
592 extern const char *shishi_principal_default (Shishi * handle);
593 extern void shishi_principal_default_set (Shishi * handle,
594 const char *principal);
595 extern int shishi_principal_name_get (Shishi * handle, Shishi_asn1 namenode,
596 const char *namefield, char *out,
597 size_t * outlen);
598 extern int shishi_principal_name_realm_get (Shishi * handle,
599 Shishi_asn1 namenode,
600 const char *namefield,
601 Shishi_asn1 realmnode,
602 const char *realmfield,
603 char *out, size_t * outlen);
604 extern int shishi_principal_name_set (Shishi * handle,
605 Shishi_asn1 namenode,
606 const char *namefield,
607 Shishi_name_type name_type,
608 const char *name[]);
609 extern int shishi_principal_set (Shishi * handle,
610 Shishi_asn1 namenode,
611 const char *namefield, const char *name);
612 extern int shishi_parse_name (Shishi * handle, const char *name,
613 char **principal, char **realm);
614 extern char *shishi_server_for_local_service (Shishi * handle,
615 const char *service);
617 /* ticket.c */
618 extern int shishi_ticket_sname_get (Shishi * handle,
619 Shishi_asn1 ticket,
620 char *server, size_t * serverlen);
621 extern int shishi_ticket_sname_set (Shishi * handle,
622 Shishi_asn1 ticket,
623 Shishi_name_type name_type,
624 char *sname[]);
625 extern int shishi_ticket_snamerealm_get (Shishi * handle, Shishi_asn1 ticket,
626 char *serverrealm,
627 size_t * serverrealmlen);
628 extern int shishi_ticket_srealmserver_set (Shishi * handle,
629 Shishi_asn1 ticket, char *realm,
630 char *server);
631 extern int shishi_ticket_set_server (Shishi * handle, Shishi_asn1 ticket,
632 const char *server);
633 extern int shishi_ticket_realm_get (Shishi * handle,
634 Shishi_asn1 ticket,
635 char **realm, size_t * realmlen);
636 extern int shishi_ticket_realm_set (Shishi * handle, Shishi_asn1 ticket,
637 const char *realm);
638 extern int shishi_ticket_get_enc_part_etype (Shishi * handle,
639 Shishi_asn1 ticket,
640 int32_t * etype);
641 extern int shishi_ticket_set_enc_part (Shishi * handle, Shishi_asn1 ticket,
642 int etype, int kvno,
643 char *buf, size_t buflen);
644 extern int shishi_ticket_add_enc_part (Shishi * handle, Shishi_asn1 ticket,
645 Shishi_key * key,
646 Shishi_asn1 encticketpart);
647 extern int shishi_enckdcreppart_key_set (Shishi * handle,
648 Shishi_asn1 enckdcreppart,
649 Shishi_key * key);
650 extern int shishi_ticket_decrypt (Shishi * handle, Shishi_asn1 ticket,
651 Shishi_key * key,
652 Shishi_asn1 * encticketpart);
654 /* tkt.c */
655 extern Shishi_asn1 shishi_tkt_ticket (Shishi_tkt * tkt);
656 extern Shishi_asn1 shishi_tkt_kdcrep (Shishi_tkt * tkt);
657 extern Shishi_asn1 shishi_tkt_enckdcreppart (Shishi_tkt * tkt);
658 extern void shishi_tkt_enckdcreppart_set (Shishi_tkt * tkt,
659 Shishi_asn1 enckdcreppart);
660 extern Shishi_asn1 shishi_tkt_encticketpart (Shishi_tkt * tkt);
661 extern void shishi_tkt_encticketpart_set (Shishi_tkt * tkt,
662 Shishi_asn1 encticketpart);
663 extern Shishi_key *shishi_tkt_key (Shishi_tkt * tkt);
664 extern int shishi_tkt_key_set (Shishi_tkt * tkt, Shishi_key * key);
665 extern int shishi_tkt (Shishi * handle, Shishi_tkt ** tkt);
666 extern Shishi_tkt *shishi_tkt2 (Shishi * handle,
667 Shishi_asn1 ticket,
668 Shishi_asn1 enckdcreppart,
669 Shishi_asn1 kdcrep);
670 extern int shishi_tkt_pretty_print (Shishi_tkt * tkt, FILE * fh);
671 extern int shishi_tkt_realm (Shishi_tkt * tkt, char **realm,
672 size_t * realmlen);
673 extern int shishi_tkt_cnamerealm (Shishi_tkt * tkt, char *cnamerealm,
674 size_t * cnamerealmlen);
675 extern int shishi_tkt_cnamerealm_p (Shishi_tkt * tkt, const char *client);
676 extern int shishi_tkt_client (Shishi_tkt * tkt,
677 char *client, size_t * clientlen);
678 extern int shishi_tkt_client_p (Shishi_tkt * tkt, const char *client);
679 extern int shishi_tkt_clientrealm_set (Shishi_tkt * tkt,
680 char *realm, char *client);
681 extern int shishi_tkt_serverrealm_set (Shishi_tkt * tkt,
682 char *realm, char *server);
683 extern int shishi_tkt_build (Shishi_tkt * tkt, Shishi_key * key);
684 extern int shishi_tkt_lastreq (Shishi_tkt * tkt,
685 char *lrtime, size_t * lrtimelen, int lrtype);
686 extern time_t shishi_tkt_lastreqc (Shishi_tkt * tkt, Shishi_lrtype lrtype);
687 extern int shishi_tkt_lastreq_pretty_print (Shishi_tkt * tkt, FILE * fh);
688 extern int shishi_tkt_authtime (Shishi_tkt * tkt,
689 char *authtime, size_t * authtimelen);
690 extern time_t shishi_tkt_authctime (Shishi_tkt * tkt);
691 extern int shishi_tkt_starttime (Shishi_tkt * tkt,
692 char *starttime, size_t * starttimelen);
693 extern time_t shishi_tkt_startctime (Shishi_tkt * tkt);
694 extern int shishi_tkt_endtime (Shishi_tkt * tkt,
695 char *endtime, size_t * endtimelen);
696 extern time_t shishi_tkt_endctime (Shishi_tkt * tkt);
697 extern int shishi_tkt_renew_till (Shishi_tkt * tkt,
698 char *renewtilltime, size_t * renewtilllen);
699 extern time_t shishi_tkt_renew_tillc (Shishi_tkt * tkt);
700 extern int shishi_tkt_keytype (Shishi_tkt * tkt, int32_t * etype);
701 extern int shishi_tkt_keytype_p (Shishi_tkt * tkt, int32_t etype);
702 extern int shishi_tkt_server (Shishi_tkt * tkt,
703 char *service, size_t * servicelen);
704 extern int shishi_tkt_server_p (Shishi_tkt * tkt, const char *service);
705 extern int shishi_tkt_server_realm (Shishi_tkt * tkt,
706 char *serverrealm,
707 size_t * serverrealmlen);
708 extern int shishi_tkt_valid_at_time_p (Shishi_tkt * tkt, time_t now);
709 extern int shishi_tkt_valid_now_p (Shishi_tkt * tkt);
710 extern int shishi_tkt_decrypt (Shishi_tkt * tkt, Shishi_key * key);
711 extern void shishi_tkt_done (Shishi_tkt * tkt);
712 extern int shishi_tkt_flags (Shishi_tkt * tkt, int *flags);
713 extern int shishi_tkt_flags_set (Shishi_tkt * tkt, int flags);
714 extern int shishi_tkt_forwardable_p (Shishi_tkt * tkt);
715 extern int shishi_tkt_forwarded_p (Shishi_tkt * tkt);
716 extern int shishi_tkt_proxiable_p (Shishi_tkt * tkt);
717 extern int shishi_tkt_proxy_p (Shishi_tkt * tkt);
718 extern int shishi_tkt_may_postdate_p (Shishi_tkt * tkt);
719 extern int shishi_tkt_postdated_p (Shishi_tkt * tkt);
720 extern int shishi_tkt_invalid_p (Shishi_tkt * tkt);
721 extern int shishi_tkt_renewable_p (Shishi_tkt * tkt);
722 extern int shishi_tkt_initial_p (Shishi_tkt * tkt);
723 extern int shishi_tkt_pre_authent_p (Shishi_tkt * tkt);
724 extern int shishi_tkt_hw_authent_p (Shishi_tkt * tkt);
725 extern int shishi_tkt_transited_policy_checked_p (Shishi_tkt * tkt);
726 extern int shishi_tkt_ok_as_delegate_p (Shishi_tkt * tkt);
728 /* tkts.c */
729 extern char *shishi_tkts_default_file_guess (void);
730 extern const char *shishi_tkts_default_file (Shishi * handle);
731 extern void shishi_tkts_default_file_set (Shishi * handle,
732 const char *tktsfile);
733 extern Shishi_tkts *shishi_tkts_default (Shishi * handle);
734 extern int shishi_tkts_default_to_file (Shishi_tkts * tkts);
735 extern int shishi_tkts (Shishi * handle, Shishi_tkts ** tkts);
736 extern Shishi_tkt *shishi_tkts_nth (Shishi_tkts * tkts, int ticketno);
737 extern int shishi_tkts_size (Shishi_tkts * tkts);
738 extern int shishi_tkts_add (Shishi_tkts * tkts, Shishi_tkt * tkt);
739 extern int shishi_tkts_new (Shishi_tkts * tkts,
740 Shishi_asn1 ticket,
741 Shishi_asn1 enckdcreppart, Shishi_asn1 kdcrep);
742 extern int shishi_tkts_remove (Shishi_tkts * tkts, int ticketno);
743 extern int shishi_tkts_expire (Shishi_tkts * tkts);
744 extern int shishi_tkts_print_for_service (Shishi_tkts * tkts,
745 FILE * fh, const char *service);
746 extern int shishi_tkts_print (Shishi_tkts * tkts, FILE * fh);
747 extern int shishi_tkts_write (Shishi_tkts * tkts, FILE * fh);
748 extern int shishi_tkts_to_file (Shishi_tkts * tkts, const char *filename);
749 extern int shishi_tkts_read (Shishi_tkts * tkts, FILE * fh);
750 extern int shishi_tkts_from_file (Shishi_tkts * tkts, const char *filename);
751 extern void shishi_tkts_done (Shishi_tkts ** tkts);
752 extern int shishi_tkt_match_p (Shishi_tkt * tkt, Shishi_tkts_hint * hint);
753 extern Shishi_tkt *shishi_tkts_find (Shishi_tkts * tkts,
754 Shishi_tkts_hint * hint);
755 extern Shishi_tkt *shishi_tkts_find_for_clientserver (Shishi_tkts * tkts,
756 const char *client,
757 const char *server);
758 extern Shishi_tkt *shishi_tkts_find_for_server (Shishi_tkts * tkts,
759 const char *server);
760 extern Shishi_tkt *shishi_tkts_get (Shishi_tkts * tkts,
761 Shishi_tkts_hint * hint);
762 extern Shishi_tkt *shishi_tkts_get_for_clientserver (Shishi_tkts * tkts,
763 const char *client,
764 const char *server);
765 extern Shishi_tkt *shishi_tkts_get_for_server (Shishi_tkts * tkts,
766 const char *server);
767 extern Shishi_tkt *shishi_tkts_get_for_localservicepasswd (Shishi_tkts * tkts,
768 const char
769 *service,
770 const char
771 *passwd);
773 /* diskio.c */
774 extern int
775 shishi_enckdcreppart_print (Shishi * handle,
776 FILE * fh, Shishi_asn1 enckdcreppart);
777 extern int
778 shishi_enckdcreppart_save (Shishi * handle,
779 FILE * fh, Shishi_asn1 enckdcreppart);
780 extern int
781 shishi_enckdcreppart_parse (Shishi * handle,
782 FILE * fh, Shishi_asn1 * enckdcreppart);
783 extern int
784 shishi_enckdcreppart_read (Shishi * handle,
785 FILE * fh, Shishi_asn1 * enckdcreppart);
786 extern int shishi_ticket_save (Shishi * handle, FILE * fh,
787 Shishi_asn1 ticket);
788 extern int shishi_ticket_print (Shishi * handle, FILE * fh,
789 Shishi_asn1 ticket);
790 extern int shishi_kdc_req_print (Shishi * handle, FILE * fh,
791 Shishi_asn1 asreq);
792 extern int shishi_kdc_rep_print (Shishi * handle, FILE * fh,
793 Shishi_asn1 asreq);
794 extern int shishi_kdc_print (Shishi * handle, FILE * fh, Shishi_asn1 asreq,
795 Shishi_asn1 asrep, Shishi_asn1 encasreppart);
796 extern int shishi_kdc_req_parse (Shishi * handle, FILE * fh,
797 Shishi_asn1 * asreq);
798 extern int shishi_kdc_rep_parse (Shishi * handle, FILE * fh,
799 Shishi_asn1 * asrep);
800 extern int shishi_ticket_parse (Shishi * handle, FILE * fh,
801 Shishi_asn1 * ticket);
802 extern int shishi_ticket_read (Shishi * handle, FILE * fh,
803 Shishi_asn1 * ticket);
805 /* authenticator.c */
806 extern Shishi_asn1 shishi_authenticator (Shishi * handle);
807 extern int shishi_authenticator_set_crealm (Shishi * handle,
808 Shishi_asn1 authenticator,
809 const char *crealm);
810 extern int shishi_authenticator_set_cname (Shishi * handle,
811 Shishi_asn1 authenticator,
812 Shishi_name_type name_type,
813 const char *cname[]);
814 extern int shishi_authenticator_client_set (Shishi * handle,
815 Shishi_asn1 authenticator,
816 const char *client);
817 extern int shishi_authenticator_ctime (Shishi * handle,
818 Shishi_asn1 authenticator,
819 char **ctime);
820 extern int shishi_authenticator_ctime_set (Shishi * handle,
821 Shishi_asn1 authenticator,
822 char *ctime);
823 extern int shishi_authenticator_cusec_get (Shishi * handle,
824 Shishi_asn1 authenticator,
825 int *cusec);
826 extern int shishi_authenticator_cusec_set (Shishi * handle,
827 Shishi_asn1 authenticator,
828 int cusec);
829 extern int shishi_authenticator_cname_get (Shishi * handle,
830 Shishi_asn1 authenticator,
831 char *cname, size_t * cnamelen);
832 extern int shishi_authenticator_cnamerealm_get (Shishi * handle,
833 Shishi_asn1 authenticator,
834 char *cnamerealm,
835 size_t * cnamerealmlen);
836 extern int shishi_authenticator_remove_cksum (Shishi * handle,
837 Shishi_asn1 authenticator);
838 extern int shishi_authenticator_cksum (Shishi * handle,
839 Shishi_asn1 authenticator,
840 int32_t * cksumtype,
841 char *cksum, size_t * cksumlen);
842 extern int shishi_authenticator_set_cksum (Shishi * handle,
843 Shishi_asn1 authenticator,
844 int cksumtype,
845 char *cksum, size_t cksumlen);
846 extern int shishi_authenticator_add_cksum (Shishi * handle,
847 Shishi_asn1 authenticator,
848 Shishi_key * key,
849 int keyusage,
850 char *data, size_t datalen);
851 extern int
852 shishi_authenticator_add_cksum_type (Shishi * handle,
853 Shishi_asn1 authenticator,
854 Shishi_key * key,
855 int keyusage, int cksumtype,
856 char *data, size_t datalen);
857 extern int
858 shishi_authenticator_remove_subkey (Shishi * handle,
859 Shishi_asn1 authenticator);
860 extern Shishi_asn1 shishi_authenticator_subkey (Shishi * handle);
861 extern int
862 shishi_authenticator_get_subkey (Shishi * handle,
863 Shishi_asn1 authenticator,
864 Shishi_key ** subkey);
865 extern int
866 shishi_authenticator_set_subkey (Shishi * handle,
867 Shishi_asn1 authenticator,
868 int32_t subkeytype,
869 char *subkey, size_t subkeylen);
870 extern int
871 shishi_authenticator_add_random_subkey (Shishi * handle,
872 Shishi_asn1 authenticator);
873 extern int
874 shishi_authenticator_add_subkey (Shishi * handle,
875 Shishi_asn1 authenticator,
876 Shishi_key * subkey);
877 extern int
878 shishi_authenticator_clear_authorizationdata (Shishi * handle,
879 Shishi_asn1 authenticator);
880 extern int
881 shishi_authenticator_add_authorizationdata (Shishi * handle,
882 Shishi_asn1 authenticator,
883 int adtype,
884 char *addata, size_t addatalen);
885 extern int
886 shishi_authenticator_authorizationdata (Shishi * handle,
887 Shishi_asn1 authenticator,
888 int *adtype,
889 char *addata, size_t * addatalen,
890 int nth);
891 extern int shishi_authenticator_read (Shishi * handle, FILE * fh,
892 Shishi_asn1 * authenticator);
893 extern int shishi_authenticator_parse (Shishi * handle, FILE * fh,
894 Shishi_asn1 * authenticator);
895 extern int shishi_authenticator_from_file (Shishi * handle,
896 Shishi_asn1 * authenticator,
897 int filetype, char *filename);
898 extern int shishi_authenticator_print (Shishi * handle, FILE * fh,
899 Shishi_asn1 authenticator);
900 extern int shishi_authenticator_to_file (Shishi * handle,
901 Shishi_asn1 authenticator,
902 int filetype, char *filename);
903 extern int shishi_authenticator_save (Shishi * handle, FILE * fh,
904 Shishi_asn1 authenticator);
906 /* as.c */
907 extern int shishi_as (Shishi * handle, Shishi_as ** as);
908 extern void shishi_as_done (Shishi_as * as);
909 extern Shishi_asn1 shishi_as_req (Shishi_as * as);
910 extern int shishi_as_req_build (Shishi_as * as);
911 extern void shishi_as_req_set (Shishi_as * as, Shishi_asn1 asreq);
912 extern int shishi_as_req_der (Shishi_as * as, char **out, size_t * outlen);
913 extern int shishi_as_req_der_set (Shishi_as * as, char *der, size_t derlen);
914 extern Shishi_asn1 shishi_as_rep (Shishi_as * as);
915 extern void shishi_as_rep_set (Shishi_as * as, Shishi_asn1 asrep);
916 extern int shishi_as_rep_build (Shishi_as * as, Shishi_key * key);
917 extern int shishi_as_rep_der (Shishi_as * as, char **out, size_t * outlen);
918 extern int shishi_as_rep_der_set (Shishi_as * as, char *der, size_t derlen);
919 extern Shishi_asn1 shishi_as_encasreppart (Shishi_as * as);
920 extern void shishi_as_encasreppart_set (Shishi_as * as,
921 Shishi_asn1 encasreppart);
922 extern Shishi_asn1 shishi_as_krberror (Shishi_as * as);
923 extern int shishi_as_krberror_der (Shishi_as * as, char **out,
924 size_t * outlen);
925 extern void shishi_as_krberror_set (Shishi_as * as, Shishi_asn1 krberror);
926 extern Shishi_tkt *shishi_as_tkt (Shishi_as * as);
927 extern void shishi_as_tkt_set (Shishi_as * as, Shishi_tkt * tkt);
928 extern int shishi_as_sendrecv (Shishi_as * as);
929 extern int shishi_as_rep_process (Shishi_as * as,
930 Shishi_key * key, const char *password);
932 /* tgs.c */
933 extern int shishi_tgs (Shishi * handle, Shishi_tgs ** tgs);
934 extern void shishi_tgs_done (Shishi_tgs * tgs);
935 extern Shishi_tkt *shishi_tgs_tgtkt (Shishi_tgs * tgs);
936 extern void shishi_tgs_tgtkt_set (Shishi_tgs * tgs, Shishi_tkt * tgtkt);
937 extern Shishi_ap *shishi_tgs_ap (Shishi_tgs * tgs);
938 extern Shishi_asn1 shishi_tgs_req (Shishi_tgs * tgs);
939 extern int shishi_tgs_req_der (Shishi_tgs * tgs, char **out, size_t * outlen);
940 extern int shishi_tgs_req_der_set (Shishi_tgs * tgs, char *der,
941 size_t derlen);
942 extern void shishi_tgs_req_set (Shishi_tgs * tgs, Shishi_asn1 tgsreq);
943 extern int shishi_tgs_req_build (Shishi_tgs * tgs);
944 extern int shishi_tgs_req_process (Shishi_tgs * tgs);
945 extern Shishi_asn1 shishi_tgs_rep (Shishi_tgs * tgs);
946 extern int shishi_tgs_rep_der (Shishi_tgs * tgs, char **out, size_t * outlen);
947 extern int shishi_tgs_rep_build (Shishi_tgs * tgs, Shishi_key * key);
948 extern int shishi_tgs_rep_process (Shishi_tgs * tgs);
949 extern Shishi_asn1 shishi_tgs_krberror (Shishi_tgs * tgs);
950 extern int shishi_tgs_krberror_der (Shishi_tgs * tgs, char **out,
951 size_t * outlen);
952 extern void shishi_tgs_krberror_set (Shishi_tgs * tgs, Shishi_asn1 krberror);
953 extern Shishi_tkt *shishi_tgs_tkt (Shishi_tgs * tgs);
954 extern void shishi_tgs_tkt_set (Shishi_tgs * tgs, Shishi_tkt * tkt);
955 extern int shishi_tgs_sendrecv (Shishi_tgs * tgs);
956 extern int shishi_tgs_set_server (Shishi_tgs * tgs, const char *server);
957 extern int shishi_tgs_set_realm (Shishi_tgs * tgs, const char *realm);
958 extern int shishi_tgs_set_realmserver (Shishi_tgs * tgs,
959 const char *realm, const char *server);
961 /* kdcreq.c */
962 extern int shishi_kdcreq (Shishi * handle, char *realm,
963 char *service, Shishi_asn1 * req);
964 extern Shishi_asn1 shishi_asreq (Shishi * handle);
965 extern Shishi_asn1 shishi_asreq_rsc (Shishi * handle, char *realm,
966 char *server, char *client);
967 extern Shishi_asn1 shishi_tgsreq (Shishi * handle);
968 extern Shishi_asn1 shishi_tgsreq_rst (Shishi * handle, char *realm,
969 char *server, Shishi_tkt * tkt);
970 extern int shishi_kdcreq_save (Shishi * handle, FILE * fh,
971 Shishi_asn1 kdcreq);
972 extern int shishi_kdcreq_print (Shishi * handle, FILE * fh,
973 Shishi_asn1 kdcreq);
974 extern int shishi_kdcreq_to_file (Shishi * handle, Shishi_asn1 kdcreq,
975 int filetype, char *filename);
976 extern int shishi_kdcreq_parse (Shishi * handle, FILE * fh,
977 Shishi_asn1 * kdcreq);
978 extern int shishi_kdcreq_read (Shishi * handle, FILE * fh,
979 Shishi_asn1 * kdcreq);
980 extern int shishi_kdcreq_from_file (Shishi * handle, Shishi_asn1 * kdcreq,
981 int filetype, char *filename);
982 extern int shishi_asreq_cnamerealm_get (Shishi * handle, Shishi_asn1 kdcreq,
983 char *cnamerealm,
984 size_t * cnamerealmlen);
985 extern int shishi_kdcreq_nonce (Shishi * handle, Shishi_asn1 kdcreq,
986 uint32_t * nonce);
987 extern int shishi_kdcreq_cname_get (Shishi * handle,
988 Shishi_asn1 kdcreq,
989 char *cname, size_t * cnamelen);
990 extern int shishi_kdcreq_set_cname (Shishi * handle, Shishi_asn1 kdcreq,
991 Shishi_name_type name_type,
992 const char *principal);
993 extern int shishi_kdcreq_sname_get (Shishi * handle, Shishi_asn1 kdcreq,
994 char *sname, size_t * snamelen);
995 extern int shishi_kdcreq_snamerealm_get (Shishi * handle, Shishi_asn1 kdcreq,
996 char *snamerealm,
997 size_t * snamerealmlen);
998 extern int shishi_kdcreq_set_sname (Shishi * handle, Shishi_asn1 kdcreq,
999 Shishi_name_type name_type,
1000 const char *sname[]);
1001 extern int shishi_kdcreq_realm_get (Shishi * handle, Shishi_asn1 kdcreq,
1002 char *realm, size_t * realmlen);
1003 extern int shishi_kdcreq_set_realm (Shishi * handle, Shishi_asn1 kdcreq,
1004 const char *realm);
1005 extern int shishi_kdcreq_set_server (Shishi * handle, Shishi_asn1 req,
1006 const char *service);
1007 extern int shishi_kdcreq_set_realmserver (Shishi * handle, Shishi_asn1 req,
1008 char *realm, char *service);
1009 extern int shishi_kdcreq_etype (Shishi * handle, Shishi_asn1 kdcreq,
1010 int32_t * etype, int netype);
1011 extern int shishi_kdcreq_set_etype (Shishi * handle, Shishi_asn1 kdcreq,
1012 int32_t * etype, int netype);
1013 extern int shishi_kdcreq_options (Shishi * handle, Shishi_asn1 kdcreq,
1014 int *flags);
1015 extern int shishi_kdcreq_renewable_p (Shishi * handle, Shishi_asn1 kdcreq);
1016 extern int shishi_kdcreq_options_set (Shishi * handle, Shishi_asn1 kdcreq,
1017 int options);
1018 extern int shishi_kdcreq_options_add (Shishi * handle, Shishi_asn1 kdcreq,
1019 int option);
1020 extern int shishi_kdcreq_clear_padata (Shishi * handle, Shishi_asn1 kdcreq);
1021 extern int shishi_kdcreq_get_padata (Shishi * handle,
1022 Shishi_asn1 kdcreq,
1023 Shishi_padata_type padatatype,
1024 char **out, size_t * outlen);
1025 extern int shishi_kdcreq_get_padata_tgs (Shishi * handle,
1026 Shishi_asn1 kdcreq,
1027 Shishi_asn1 * apreq);
1028 extern int shishi_kdcreq_add_padata (Shishi * handle,
1029 Shishi_asn1 kdcreq,
1030 int padatatype,
1031 const char *data, size_t datalen);
1032 extern int shishi_kdcreq_add_padata_tgs (Shishi * handle,
1033 Shishi_asn1 kdcreq,
1034 Shishi_asn1 apreq);
1035 extern int shishi_kdcreq_build (Shishi * handle, Shishi_asn1 kdcreq);
1037 /* enckdcreppart.c */
1038 extern Shishi_asn1 shishi_enckdcreppart (Shishi * handle);
1039 extern Shishi_asn1 shishi_encasreppart (Shishi * handle);
1040 extern int shishi_enckdcreppart_srealmserver_set (Shishi * handle,
1041 Shishi_asn1 enckdcreppart,
1042 const char *srealm,
1043 const char *server);
1044 extern int shishi_enckdcreppart_nonce_set (Shishi * handle,
1045 Shishi_asn1 enckdcreppart,
1046 uint32_t nonce);
1047 extern int
1048 shishi_enckdcreppart_populate_encticketpart (Shishi * handle,
1049 Shishi_asn1 enckdcreppart,
1050 Shishi_asn1 encticketpart);
1051 extern int shishi_enckdcreppart_flags_set (Shishi * handle,
1052 Shishi_asn1 enckdcreppart,
1053 int flags);
1055 /* kdc.c */
1056 extern int shishi_as_derive_salt (Shishi * handle,
1057 Shishi_asn1 asreq,
1058 Shishi_asn1 asrep, char *salt,
1059 size_t * saltlen);
1060 extern int shishi_tgs_process (Shishi * handle,
1061 Shishi_asn1 tgsreq,
1062 Shishi_asn1 tgsrep,
1063 Shishi_asn1 authenticator,
1064 Shishi_asn1 oldenckdcreppart,
1065 Shishi_asn1 * enckdcreppart);
1066 extern int shishi_as_process (Shishi * handle, Shishi_asn1 asreq,
1067 Shishi_asn1 asrep,
1068 const char *string,
1069 Shishi_asn1 * enckdcreppart);
1070 extern int shishi_kdc_process (Shishi * handle, Shishi_asn1 kdcreq,
1071 Shishi_asn1 kdcrep, Shishi_key * key,
1072 int keyusage, Shishi_asn1 * enckdcreppart);
1073 extern int shishi_kdcreq_sendrecv (Shishi * handle, Shishi_asn1 kdcreq,
1074 Shishi_asn1 * kdcrep);
1075 extern int shishi_kdc_copy_crealm (Shishi * handle, Shishi_asn1 kdcrep,
1076 Shishi_asn1 encticketpart);
1077 extern int shishi_as_check_crealm (Shishi * handle, Shishi_asn1 asreq,
1078 Shishi_asn1 asrep);
1079 extern int shishi_kdc_copy_cname (Shishi * handle, Shishi_asn1 kdcrep,
1080 Shishi_asn1 encticketpart);
1081 extern int shishi_as_check_cname (Shishi * handle, Shishi_asn1 asreq,
1082 Shishi_asn1 asrep);
1083 extern int shishi_kdc_copy_nonce (Shishi * handle, Shishi_asn1 kdcreq,
1084 Shishi_asn1 enckdcreppart);
1085 extern int shishi_kdc_check_nonce (Shishi * handle, Shishi_asn1 kdcreq,
1086 Shishi_asn1 enckdcreppart);
1088 /* kdcrep.c */
1089 extern Shishi_asn1 shishi_asrep (Shishi * handle);
1090 extern Shishi_asn1 shishi_tgsrep (Shishi * handle);
1091 extern int shishi_kdcrep_save (Shishi * handle, FILE * fh,
1092 Shishi_asn1 kdcrep);
1093 extern int shishi_kdcrep_print (Shishi * handle, FILE * fh,
1094 Shishi_asn1 kdcrep);
1095 extern int shishi_kdcrep_to_file (Shishi * handle, Shishi_asn1 kdcrep,
1096 int filetype, char *filename);
1097 extern int shishi_kdcrep_parse (Shishi * handle, FILE * fh,
1098 Shishi_asn1 * kdcrep);
1099 extern int shishi_kdcrep_read (Shishi * handle, FILE * fh,
1100 Shishi_asn1 * kdcrep);
1101 extern int shishi_kdcrep_from_file (Shishi * handle, Shishi_asn1 * kdcrep,
1102 int filetype, char *filename);
1103 extern int shishi_kdcrep_clear_padata (Shishi * handle, Shishi_asn1 kdcrep);
1104 extern int shishi_kdcrep_get_enc_part_etype (Shishi * handle,
1105 Shishi_asn1 kdcrep,
1106 int32_t * etype);
1107 extern int shishi_kdcrep_add_enc_part (Shishi * handle,
1108 Shishi_asn1 kdcrep,
1109 Shishi_key * key,
1110 int keyusage,
1111 Shishi_asn1 enckdcreppart);
1112 extern int shishi_kdcrep_get_ticket (Shishi * handle,
1113 Shishi_asn1 kdcrep,
1114 Shishi_asn1 * ticket);
1115 extern int shishi_kdcrep_set_ticket (Shishi * handle, Shishi_asn1 kdcrep,
1116 Shishi_asn1 ticket);
1117 extern int shishi_kdcrep_crealm_set (Shishi * handle,
1118 Shishi_asn1 kdcrep, const char *crealm);
1119 extern int shishi_kdcrep_cname_set (Shishi * handle,
1120 Shishi_asn1 kdcrep,
1121 Shishi_name_type name_type,
1122 const char *cname[]);
1123 extern int shishi_kdcrep_client_set (Shishi * handle, Shishi_asn1 kdcrep,
1124 const char *client);
1125 extern int shishi_kdcrep_crealmserver_set (Shishi * handle,
1126 Shishi_asn1 kdcrep,
1127 const char *crealm,
1128 const char *client);
1129 extern int shishi_kdcrep_set_enc_part (Shishi * handle, Shishi_asn1 kdcrep,
1130 int etype, int kvno,
1131 const char *buf, size_t buflen);
1133 /* krberror.c */
1134 extern Shishi_asn1 shishi_krberror (Shishi * handle);
1135 extern int shishi_krberror_print (Shishi * handle, FILE * fh,
1136 Shishi_asn1 krberror);
1137 extern int shishi_krberror_save (Shishi * handle, FILE * fh,
1138 Shishi_asn1 krberror);
1139 extern int shishi_krberror_to_file (Shishi * handle, Shishi_asn1 krberror,
1140 int filetype, char *filename);
1141 extern int shishi_krberror_parse (Shishi * handle, FILE * fh,
1142 Shishi_asn1 * krberror);
1143 extern int shishi_krberror_read (Shishi * handle, FILE * fh,
1144 Shishi_asn1 * krberror);
1145 extern int shishi_krberror_from_file (Shishi * handle, Shishi_asn1 * krberror,
1146 int filetype, char *filename);
1147 extern int shishi_krberror_build (Shishi * handle, Shishi_asn1 krberror);
1148 extern int shishi_krberror_der (Shishi * handle,
1149 Shishi_asn1 krberror,
1150 char **out, size_t * outlen);
1151 extern int shishi_krberror_crealm (Shishi * handle,
1152 Shishi_asn1 krberror,
1153 char **realm, size_t * realmlen);
1154 extern int shishi_krberror_remove_crealm (Shishi * handle,
1155 Shishi_asn1 krberror);
1156 extern int shishi_krberror_set_crealm (Shishi * handle,
1157 Shishi_asn1 krberror,
1158 const char *crealm);
1159 extern int shishi_krberror_cname (Shishi * handle,
1160 Shishi_asn1 krberror,
1161 char *out, size_t * outlen);
1162 extern int shishi_krberror_set_cname (Shishi * handle,
1163 Shishi_asn1 krberror,
1164 Shishi_name_type name_type,
1165 const char *cname[]);
1166 extern int shishi_krberror_remove_cname (Shishi * handle,
1167 Shishi_asn1 krberror);
1168 extern int shishi_krberror_client_set (Shishi * handle,
1169 Shishi_asn1 krberror,
1170 const char *client);
1171 extern int shishi_krberror_realm (Shishi * handle,
1172 Shishi_asn1 krberror,
1173 char **realm, size_t * realmlen);
1174 extern int shishi_krberror_set_realm (Shishi * handle,
1175 Shishi_asn1 krberror,
1176 const char *realm);
1177 extern int shishi_krberror_sname (Shishi * handle,
1178 Shishi_asn1 krberror,
1179 char *out, size_t * outlen);
1180 extern int shishi_krberror_remove_sname (Shishi * handle,
1181 Shishi_asn1 krberror);
1182 extern int shishi_krberror_set_sname (Shishi * handle,
1183 Shishi_asn1 krberror,
1184 Shishi_name_type name_type,
1185 const char *sname[]);
1186 extern int shishi_krberror_server_set (Shishi * handle,
1187 Shishi_asn1 krberror,
1188 const char *server);
1189 extern int shishi_krberror_ctime (Shishi * handle,
1190 Shishi_asn1 krberror, char **ctime);
1191 extern int shishi_krberror_ctime_set (Shishi * handle,
1192 Shishi_asn1 krberror,
1193 const char *ctime);
1194 extern int shishi_krberror_remove_ctime (Shishi * handle,
1195 Shishi_asn1 krberror);
1196 extern int shishi_krberror_cusec (Shishi * handle, Shishi_asn1 krberror,
1197 int *cusec);
1198 extern int shishi_krberror_cusec_set (Shishi * handle, Shishi_asn1 krberror,
1199 int cusec);
1200 extern int shishi_krberror_remove_cusec (Shishi * handle,
1201 Shishi_asn1 krberror);
1202 extern int shishi_krberror_stime (Shishi * handle, Shishi_asn1 krberror,
1203 char **stime);
1204 extern int shishi_krberror_stime_set (Shishi * handle, Shishi_asn1 krberror,
1205 const char *stime);
1206 extern int shishi_krberror_susec (Shishi * handle, Shishi_asn1 krberror,
1207 int *susec);
1208 extern int shishi_krberror_susec_set (Shishi * handle, Shishi_asn1 krberror,
1209 int susec);
1210 extern int shishi_krberror_errorcode_set (Shishi * handle,
1211 Shishi_asn1 krberror,
1212 int errorcode);
1213 extern int shishi_krberror_etext (Shishi * handle, Shishi_asn1 krberror,
1214 char **etext, size_t * etextlen);
1215 extern int shishi_krberror_set_etext (Shishi * handle, Shishi_asn1 krberror,
1216 const char *etext);
1217 extern int shishi_krberror_remove_etext (Shishi * handle,
1218 Shishi_asn1 krberror);
1219 extern int shishi_krberror_edata (Shishi * handle, Shishi_asn1 krberror,
1220 char **edata, size_t * edatalen);
1221 extern int shishi_krberror_set_edata (Shishi * handle, Shishi_asn1 krberror,
1222 const char *edata);
1223 extern int shishi_krberror_remove_edata (Shishi * handle,
1224 Shishi_asn1 krberror);
1225 extern int shishi_krberror_errorcode (Shishi * handle, Shishi_asn1 krberror,
1226 int *errorcode);
1227 extern int shishi_krberror_errorcode_fast (Shishi * handle,
1228 Shishi_asn1 krberror);
1229 extern int shishi_krberror_pretty_print (Shishi * handle, FILE * fh,
1230 Shishi_asn1 krberror);
1231 extern const char *shishi_krberror_errorcode_message (Shishi * handle,
1232 int errorcode);
1233 extern const char *shishi_krberror_message (Shishi * handle,
1234 Shishi_asn1 krberror);
1236 /* gztime.c */
1237 extern const char *shishi_generalize_time (Shishi * handle, time_t t);
1238 extern const char *shishi_generalize_now (Shishi * handle);
1239 extern time_t shishi_generalize_ctime (Shishi * handle, const char *t);
1240 extern int shishi_time (Shishi * handle, Shishi_asn1 node,
1241 const char *field, char **time);
1243 /* crypto.c */
1244 extern int shishi_cipher_supported_p (int type);
1245 extern const char *shishi_cipher_name (int type);
1246 extern int shishi_cipher_blocksize (int type);
1247 extern int shishi_cipher_minpadsize (int type);
1248 extern int shishi_cipher_confoundersize (int type);
1249 extern size_t shishi_cipher_keylen (int type);
1250 extern size_t shishi_cipher_randomlen (int type);
1251 extern int shishi_cipher_defaultcksumtype (int32_t type);
1252 extern int shishi_cipher_parse (const char *cipher);
1253 extern int shishi_checksum_supported_p (int32_t type);
1254 extern const char *shishi_checksum_name (int32_t type);
1255 extern size_t shishi_checksum_cksumlen (int32_t type);
1256 extern int shishi_checksum_parse (const char *checksum);
1257 extern int shishi_string_to_key (Shishi * handle,
1258 int32_t keytype,
1259 const char *password, size_t passwordlen,
1260 const char *salt, size_t saltlen,
1261 const char *parameter, Shishi_key * outkey);
1262 extern int shishi_random_to_key (Shishi * handle,
1263 int32_t keytype,
1264 char *random, size_t randomlen,
1265 Shishi_key * outkey);
1266 extern int shishi_encrypt_ivupdate_etype (Shishi * handle,
1267 Shishi_key * key,
1268 int keyusage,
1269 int32_t etype,
1270 const char *iv, size_t ivlen,
1271 char **ivout, size_t * ivoutlen,
1272 const char *in, size_t inlen,
1273 char **out, size_t * outlen);
1274 extern int shishi_encrypt_iv_etype (Shishi * handle,
1275 Shishi_key * key,
1276 int keyusage,
1277 int32_t etype,
1278 const char *iv, size_t ivlen,
1279 const char *in, size_t inlen,
1280 char **out, size_t * outlen);
1281 extern int shishi_encrypt_etype (Shishi * handle,
1282 Shishi_key * key,
1283 int keyusage,
1284 int32_t etype,
1285 const char *in, size_t inlen,
1286 char **out, size_t * outlen);
1287 extern int shishi_encrypt_ivupdate (Shishi * handle,
1288 Shishi_key * key,
1289 int keyusage,
1290 const char *iv, size_t ivlen,
1291 char **ivout, size_t * ivoutlen,
1292 const char *in, size_t inlen,
1293 char **out, size_t * outlen);
1294 extern int shishi_encrypt_iv (Shishi * handle,
1295 Shishi_key * key,
1296 int keyusage,
1297 const char *iv, size_t ivlen,
1298 const char *in, size_t inlen,
1299 char **out, size_t * outlen);
1300 extern int shishi_encrypt (Shishi * handle,
1301 Shishi_key * key,
1302 int keyusage,
1303 char *in, size_t inlen,
1304 char **out, size_t * outlen);
1305 extern int shishi_decrypt_ivupdate_etype (Shishi * handle,
1306 Shishi_key * key,
1307 int keyusage,
1308 int32_t etype,
1309 const char *iv, size_t ivlen,
1310 char **ivout, size_t * ivoutlen,
1311 const char *in, size_t inlen,
1312 char **out, size_t * outlen);
1313 extern int shishi_decrypt_iv_etype (Shishi * handle,
1314 Shishi_key * key,
1315 int keyusage,
1316 int32_t etype,
1317 const char *iv, size_t ivlen,
1318 const char *in, size_t inlen,
1319 char **out, size_t * outlen);
1320 extern int shishi_decrypt_etype (Shishi * handle,
1321 Shishi_key * key,
1322 int keyusage,
1323 int32_t etype,
1324 const char *in, size_t inlen,
1325 char **out, size_t * outlen);
1326 extern int shishi_decrypt_ivupdate (Shishi * handle,
1327 Shishi_key * key,
1328 int keyusage,
1329 const char *iv, size_t ivlen,
1330 char **ivout, size_t * ivoutlen,
1331 const char *in, size_t inlen,
1332 char **out, size_t * outlen);
1333 extern int shishi_decrypt_iv (Shishi * handle,
1334 Shishi_key * key,
1335 int keyusage,
1336 const char *iv, size_t ivlen,
1337 const char *in, size_t inlen,
1338 char **out, size_t * outlen);
1339 extern int shishi_decrypt (Shishi * handle,
1340 Shishi_key * key,
1341 int keyusage,
1342 const char *in, size_t inlen,
1343 char **out, size_t * outlen);
1344 extern int shishi_checksum (Shishi * handle,
1345 Shishi_key * key,
1346 int keyusage,
1347 int32_t cksumtype,
1348 const char *in, size_t inlen,
1349 char **out, size_t * outlen);
1350 extern int shishi_verify (Shishi * handle,
1351 Shishi_key * key,
1352 int keyusage,
1353 int cksumtype,
1354 const char *in, size_t inlen,
1355 const char *cksum, size_t cksumlen);
1356 extern int shishi_randomize (Shishi * handle, char *data, size_t datalen);
1357 extern int shishi_dk (Shishi * handle,
1358 Shishi_key * key,
1359 const char *constant, size_t constantlen,
1360 Shishi_key * derivedkey);
1361 extern int shishi_dr (Shishi * handle,
1362 Shishi_key * key,
1363 const char *constant, size_t constantlen,
1364 char *derivedrandom, size_t derivedrandomlen);
1365 extern int shishi_n_fold (Shishi * handle, const char *in, size_t inlen,
1366 char *out, size_t outlen);
1367 extern int shishi_pbkdf2_sha1 (const char *P, size_t Plen,
1368 const char *S, size_t Slen,
1369 unsigned int c, unsigned int dkLen, char *DK);
1371 /* version.c */
1372 extern const char *shishi_check_version (const char *req_version);
1374 /* password.c */
1375 extern int shishi_read_password (FILE * fh, char *s, int size);
1376 extern int
1377 shishi_prompt_password_raw (FILE * in, char *s, int size,
1378 FILE * out, char *format, ...);
1379 extern int
1380 shishi_prompt_password (Shishi * handle,
1381 FILE * in, char *s, int size,
1382 FILE * out, char *format, ...);
1384 /* asn1.c */
1385 extern int shishi_a2d_field (Shishi * handle,
1386 Shishi_asn1 node,
1387 const char *field, char *der, size_t * len);
1388 extern int shishi_a2d (Shishi * handle, Shishi_asn1 node,
1389 char *der, size_t * len);
1390 extern int shishi_a2d_new_field (Shishi * handle, Shishi_asn1 node,
1391 const char *field, char **der, size_t * len);
1392 extern int shishi_new_a2d (Shishi * handle, Shishi_asn1 node,
1393 char **der, size_t * len);
1394 extern void shishi_asn1_done (Shishi * handle, Shishi_asn1 node);
1395 extern int shishi_asn1_read (Shishi * handle, Shishi_asn1 node,
1396 const char *field, char *data, size_t * datalen);
1397 extern int shishi_asn1_read2 (Shishi * handle, Shishi_asn1 node,
1398 const char *field,
1399 char **data, size_t * datalen);
1400 extern int shishi_asn1_read_integer (Shishi * handle, Shishi_asn1 node,
1401 const char *field, int *i);
1402 extern int shishi_asn1_read_int32 (Shishi * handle, Shishi_asn1 node,
1403 const char *field, int32_t * i);
1404 extern int shishi_asn1_read_uint32 (Shishi * handle, Shishi_asn1 node,
1405 const char *field, uint32_t * i);
1406 extern int shishi_asn1_read_bitstring (Shishi * handle, Shishi_asn1 node,
1407 const char *field, int *flags);
1408 extern int shishi_asn1_read_optional (Shishi * handle,
1409 Shishi_asn1 node, const char *field,
1410 char *data, size_t * datalen);
1411 extern int shishi_asn1_read_empty_p (Shishi * handle,
1412 Shishi_asn1 node, const char *field);
1413 extern int shishi_asn1_write (Shishi * handle, Shishi_asn1 node,
1414 const char *field,
1415 const char *data, size_t datalen);
1416 extern int shishi_asn1_write_integer (Shishi * handle, Shishi_asn1 node,
1417 const char *field, int n);
1418 extern int shishi_asn1_write_int32 (Shishi * handle, Shishi_asn1 node,
1419 const char *field, int32_t n);
1420 extern int shishi_asn1_write_uint32 (Shishi * handle, Shishi_asn1 node,
1421 const char *field, uint32_t n);
1422 extern int shishi_asn1_write_bitstring (Shishi * handle, Shishi_asn1 node,
1423 const char *field, int flags);
1424 extern int shishi_asn1_number_of_elements (Shishi * handle,
1425 Shishi_asn1 node,
1426 const char *field, size_t * n);
1427 extern Shishi_asn1 shishi_asn1_asreq (Shishi * handle);
1428 extern Shishi_asn1 shishi_asn1_asrep (Shishi * handle);
1429 extern Shishi_asn1 shishi_asn1_tgsreq (Shishi * handle);
1430 extern Shishi_asn1 shishi_asn1_tgsrep (Shishi * handle);
1431 extern Shishi_asn1 shishi_asn1_apreq (Shishi * handle);
1432 extern Shishi_asn1 shishi_asn1_aprep (Shishi * handle);
1433 extern Shishi_asn1 shishi_asn1_ticket (Shishi * handle);
1434 extern Shishi_asn1 shishi_asn1_encapreppart (Shishi * handle);
1435 extern Shishi_asn1 shishi_asn1_encticketpart (Shishi * handle);
1436 extern Shishi_asn1 shishi_asn1_authenticator (Shishi * handle);
1437 extern Shishi_asn1 shishi_asn1_enckdcreppart (Shishi * handle);
1438 extern Shishi_asn1 shishi_asn1_encasreppart (Shishi * handle);
1439 extern Shishi_asn1 shishi_asn1_krberror (Shishi * handle);
1440 extern Shishi_asn1 shishi_asn1_krbsafe (Shishi * handle);
1441 extern Shishi_asn1 shishi_asn1_priv (Shishi * handle);
1442 extern Shishi_asn1 shishi_asn1_encprivpart (Shishi * handle);
1444 extern Shishi_asn1 shishi_der2asn1 (Shishi * handle,
1445 const char *fieldname,
1446 const char *nodename,
1447 const char *der, size_t derlen);
1448 extern Shishi_asn1 shishi_der2asn1_ticket (Shishi * handle,
1449 const char *der, size_t derlen);
1450 extern Shishi_asn1 shishi_der2asn1_encticketpart (Shishi * handle,
1451 const char *der,
1452 size_t derlen);
1453 extern Shishi_asn1 shishi_der2asn1_asreq (Shishi * handle,
1454 const char *der, size_t derlen);
1455 extern Shishi_asn1 shishi_der2asn1_tgsreq (Shishi * handle,
1456 const char *der, size_t derlen);
1457 extern Shishi_asn1 shishi_der2asn1_asrep (Shishi * handle,
1458 const char *der, size_t derlen);
1459 extern Shishi_asn1 shishi_der2asn1_tgsrep (Shishi * handle,
1460 const char *der, size_t derlen);
1461 extern Shishi_asn1 shishi_der2asn1_kdcrep (Shishi * handle,
1462 const char *der, size_t derlen);
1463 extern Shishi_asn1 shishi_der2asn1_kdcreq (Shishi * handle,
1464 const char *der, size_t derlen);
1465 extern Shishi_asn1 shishi_der2asn1_apreq (Shishi * handle,
1466 const char *der, size_t derlen);
1467 extern Shishi_asn1 shishi_der2asn1_aprep (Shishi * handle,
1468 const char *der, size_t derlen);
1469 extern Shishi_asn1 shishi_der2asn1_authenticator (Shishi * handle,
1470 const char *der,
1471 size_t derlen);
1472 extern Shishi_asn1 shishi_der2asn1_krberror (Shishi * handle,
1473 const char *der, size_t derlen);
1474 extern Shishi_asn1 shishi_der2asn1_krbsafe (Shishi * handle,
1475 const char *der, size_t derlen);
1476 extern Shishi_asn1 shishi_der2asn1_priv (Shishi * handle,
1477 const char *der, size_t derlen);
1478 extern Shishi_asn1 shishi_der2asn1_encasreppart (Shishi * handle,
1479 const char *der,
1480 size_t derlen);
1481 extern Shishi_asn1 shishi_der2asn1_enctgsreppart (Shishi * handle,
1482 const char *der,
1483 size_t derlen);
1484 extern Shishi_asn1 shishi_der2asn1_enckdcreppart (Shishi * handle,
1485 const char *der,
1486 size_t derlen);
1487 extern Shishi_asn1 shishi_der2asn1_encapreppart (Shishi * handle,
1488 const char *der,
1489 size_t derlen);
1490 extern Shishi_asn1 shishi_der2asn1_encprivpart (Shishi * handle,
1491 const char *der,
1492 size_t derlen);
1494 /* ap.c */
1495 extern int shishi_ap (Shishi * handle, Shishi_ap ** ap);
1496 extern void shishi_ap_done (Shishi_ap * ap);
1497 extern int shishi_ap_nosubkey (Shishi * handle, Shishi_ap ** ap);
1498 extern int shishi_ap_set_tktoptions (Shishi_ap * ap,
1499 Shishi_tkt * tkt, int options);
1500 extern int shishi_ap_tktoptions (Shishi * handle,
1501 Shishi_ap ** ap,
1502 Shishi_tkt * tkt, int options);
1503 extern int shishi_ap_set_tktoptionsdata (Shishi_ap * ap,
1504 Shishi_tkt * tkt,
1505 int options,
1506 const char *data, size_t len);
1507 extern int shishi_ap_tktoptionsdata (Shishi * handle,
1508 Shishi_ap ** ap,
1509 Shishi_tkt * tkt,
1510 int options,
1511 const char *data, size_t len);
1512 extern int shishi_ap_set_tktoptionsasn1usage (Shishi_ap * ap,
1513 Shishi_tkt * tkt,
1514 int options,
1515 Shishi_asn1 node,
1516 char *field,
1517 int authenticatorcksumkeyusage,
1518 int authenticatorkeyusage);
1519 extern int shishi_ap_tktoptionsasn1usage (Shishi * handle,
1520 Shishi_ap ** ap,
1521 Shishi_tkt * tkt,
1522 int options,
1523 Shishi_asn1 node,
1524 char *field,
1525 int authenticatorcksumkeyusage,
1526 int authenticatorkeyusage);
1528 extern Shishi_tkt *shishi_ap_tkt (Shishi_ap * ap);
1529 extern void shishi_ap_tkt_set (Shishi_ap * ap, Shishi_tkt * tkt);
1531 extern int shishi_ap_authenticator_cksumdata (Shishi_ap * ap,
1532 char *out, size_t * len);
1533 extern void
1534 shishi_ap_authenticator_cksumdata_set (Shishi_ap * ap,
1535 const char *authenticatorcksumdata,
1536 size_t authenticatorcksumdatalen);
1537 extern int shishi_ap_authenticator_cksumtype (Shishi_ap * ap);
1538 extern void shishi_ap_authenticator_cksumtype_set (Shishi_ap * ap,
1539 int cksumtype);
1541 extern Shishi_asn1 shishi_ap_authenticator (Shishi_ap * ap);
1542 extern void shishi_ap_authenticator_set (Shishi_ap * ap,
1543 Shishi_asn1 authenticator);
1545 extern Shishi_asn1 shishi_ap_req (Shishi_ap * ap);
1546 extern void shishi_ap_req_set (Shishi_ap * ap, Shishi_asn1 apreq);
1547 extern int shishi_ap_req_der (Shishi_ap * ap, char **out, size_t * outlen);
1548 extern int shishi_ap_req_der_set (Shishi_ap * ap, char *der, size_t derlen);
1549 extern int shishi_ap_req_build (Shishi_ap * ap);
1550 extern int shishi_ap_req_asn1 (Shishi_ap * ap, Shishi_asn1 * apreq);
1551 extern Shishi_key *shishi_ap_key (Shishi_ap * ap);
1552 extern int shishi_ap_req_process (Shishi_ap * ap, Shishi_key * key);
1553 extern int shishi_ap_req_process_keyusage (Shishi_ap * ap,
1554 Shishi_key * key,
1555 int32_t keyusage);
1556 extern int shishi_ap_req_build (Shishi_ap * ap);
1558 extern Shishi_asn1 shishi_ap_rep (Shishi_ap * ap);
1559 extern void shishi_ap_rep_set (Shishi_ap * ap, Shishi_asn1 aprep);
1560 extern int shishi_ap_rep_der (Shishi_ap * ap, char **out, size_t * outlen);
1561 extern int shishi_ap_rep_der_set (Shishi_ap * ap, char *der, size_t derlen);
1562 extern int shishi_ap_rep_verify (Shishi_ap * ap);
1563 extern int shishi_ap_rep_verify_der (Shishi_ap * ap, char *der,
1564 size_t derlen);
1565 extern int shishi_ap_rep_verify_asn1 (Shishi_ap * ap, Shishi_asn1 aprep);
1566 extern int shishi_ap_rep_asn1 (Shishi_ap * ap, Shishi_asn1 * aprep);
1567 extern int shishi_ap_rep_build (Shishi_ap * ap);
1569 extern Shishi_asn1 shishi_ap_encapreppart (Shishi_ap * ap);
1570 extern void shishi_ap_encapreppart_set (Shishi_ap * ap,
1571 Shishi_asn1 encapreppart);
1573 extern const char *shishi_ap_option2string (Shishi_apoptions option);
1574 extern Shishi_apoptions shishi_ap_string2option (const char *str);
1576 /* key.c */
1577 extern const char *shishi_key_principal (Shishi_key * key);
1578 extern void shishi_key_principal_set (Shishi_key * key,
1579 const char *principal);
1580 extern const char *shishi_key_realm (Shishi_key * key);
1581 extern void shishi_key_realm_set (Shishi_key * key, const char *realm);
1582 extern int shishi_key_type (Shishi_key * key);
1583 extern void shishi_key_type_set (Shishi_key * key, int32_t type);
1584 extern char *shishi_key_value (Shishi_key * key);
1585 extern void shishi_key_value_set (Shishi_key * key, const char *value);
1586 extern int shishi_key_value_set_random (Shishi_key * key,
1587 char *random, size_t randomlen);
1588 extern const char *shishi_key_name (Shishi_key * key);
1589 extern size_t shishi_key_length (Shishi_key * key);
1590 extern int shishi_key_version (Shishi_key * key);
1591 extern void shishi_key_version_set (Shishi_key * key, int version);
1592 extern int shishi_key (Shishi * handle, Shishi_key ** key);
1593 extern void shishi_key_done (Shishi_key * key);
1594 extern void shishi_key_copy (Shishi_key * dstkey, Shishi_key * srckey);
1595 extern int shishi_key_print (Shishi * handle, FILE * fh, Shishi_key * key);
1596 extern int shishi_key_to_file (Shishi * handle,
1597 const char *filename, Shishi_key * key);
1598 extern int shishi_key_parse (Shishi * handle, FILE * fh, Shishi_key ** key);
1599 extern int shishi_key_random (Shishi * handle,
1600 int32_t type, Shishi_key ** key);
1601 extern int shishi_key_from_value (Shishi * handle,
1602 int32_t type,
1603 char *value, Shishi_key ** key);
1604 extern int shishi_key_from_base64 (Shishi * handle,
1605 int32_t type,
1606 char *value, Shishi_key ** key);
1607 extern int shishi_key_from_random (Shishi * handle,
1608 int32_t type,
1609 char *random, size_t randomlen,
1610 Shishi_key ** outkey);
1611 extern int shishi_key_from_string (Shishi * handle,
1612 int32_t type,
1613 const char *password, size_t passwordlen,
1614 const char *salt, size_t saltlen,
1615 const char *parameter,
1616 Shishi_key ** outkey);
1618 /* keys.c */
1619 extern Shishi_key *shishi_keys_for_serverrealm_in_file (Shishi * handle,
1620 const char *filename,
1621 const char *server,
1622 const char *realm);
1623 extern Shishi_key *shishi_keys_for_server_in_file (Shishi * handle,
1624 const char *filename,
1625 const char *server);
1626 extern Shishi_key *shishi_keys_for_localservicerealm_in_file (Shishi * handle,
1627 const char
1628 *filename,
1629 const char
1630 *service,
1631 const char
1632 *realm);
1634 /* hostkeys.c */
1635 extern const char *shishi_hostkeys_default_file (Shishi * handle);
1636 extern void shishi_hostkeys_default_file_set (Shishi * handle,
1637 const char *hostkeysfile);
1638 extern Shishi_key *shishi_hostkeys_for_server (Shishi * handle,
1639 const char *server);
1640 extern Shishi_key *shishi_hostkeys_for_serverrealm (Shishi * handle,
1641 const char *server,
1642 const char *realm);
1643 extern Shishi_key *shishi_hostkeys_for_localservicerealm (Shishi * handle,
1644 const char *service,
1645 const char *realm);
1646 extern Shishi_key *shishi_hostkeys_for_localservice (Shishi * handle,
1647 const char *service);
1649 /* encapreppart.c */
1650 extern Shishi_asn1 shishi_encapreppart (Shishi * handle);
1651 extern int shishi_encapreppart_time_copy (Shishi * handle,
1652 Shishi_asn1 encapreppart,
1653 Shishi_asn1 authenticator);
1654 extern int shishi_encapreppart_ctime (Shishi * handle,
1655 Shishi_asn1 encapreppart, char **ctime);
1656 extern int shishi_encapreppart_ctime_set (Shishi * handle,
1657 Shishi_asn1 encapreppart,
1658 char *ctime);
1659 extern int shishi_encapreppart_cusec_get (Shishi * handle,
1660 Shishi_asn1 encapreppart,
1661 int *cusec);
1662 extern int shishi_encapreppart_cusec_set (Shishi * handle,
1663 Shishi_asn1 encapreppart,
1664 int cusec);
1665 extern int shishi_encapreppart_print (Shishi * handle, FILE * fh,
1666 Shishi_asn1 encapreppart);
1667 extern int shishi_encapreppart_save (Shishi * handle, FILE * fh,
1668 Shishi_asn1 encapreppart);
1669 extern int shishi_encapreppart_to_file (Shishi * handle,
1670 Shishi_asn1 encapreppart,
1671 int filetype, char *filename);
1672 extern int shishi_encapreppart_read (Shishi * handle, FILE * fh,
1673 Shishi_asn1 * encapreppart);
1674 extern int shishi_encapreppart_parse (Shishi * handle, FILE * fh,
1675 Shishi_asn1 * encapreppart);
1676 extern int shishi_encapreppart_from_file (Shishi * handle,
1677 Shishi_asn1 * encapreppart,
1678 int filetype, char *filename);
1679 extern int shishi_encapreppart_get_key (Shishi * handle,
1680 Shishi_asn1 encapreppart,
1681 int32_t * keytype,
1682 char *keyvalue,
1683 size_t * keyvalue_len);
1684 extern int shishi_encapreppart_seqnumber_get (Shishi * handle,
1685 Shishi_asn1 encapreppart,
1686 uint32_t * seqnumber);
1688 /* apreq.c */
1689 extern Shishi_asn1 shishi_apreq (Shishi * handle);
1690 extern int shishi_apreq_parse (Shishi * handle, FILE * fh,
1691 Shishi_asn1 * apreq);
1692 extern int shishi_apreq_from_file (Shishi * handle, Shishi_asn1 * apreq,
1693 int filetype, char *filename);
1694 extern int shishi_apreq_print (Shishi * handle, FILE * fh, Shishi_asn1 apreq);
1695 extern int shishi_apreq_to_file (Shishi * handle, Shishi_asn1 apreq,
1696 int filetype, char *filename);
1697 extern int shishi_apreq_read (Shishi * handle, FILE * fh,
1698 Shishi_asn1 * apreq);
1699 extern int shishi_apreq_save (Shishi * handle, FILE * fh, Shishi_asn1 apreq);
1700 extern int shishi_apreq_set_ticket (Shishi * handle, Shishi_asn1 apreq,
1701 Shishi_asn1 ticket);
1702 extern int shishi_apreq_set_authenticator (Shishi * handle, Shishi_asn1 apreq,
1703 int32_t etype,
1704 const char *buf, size_t buflen);
1705 extern int shishi_apreq_add_authenticator (Shishi * handle, Shishi_asn1 apreq,
1706 Shishi_key * key, int keyusage,
1707 Shishi_asn1 authenticator);
1708 extern int shishi_apreq_options (Shishi * handle, Shishi_asn1 apreq,
1709 int *flags);
1710 extern int shishi_apreq_use_session_key_p (Shishi * handle,
1711 Shishi_asn1 apreq);
1712 extern int shishi_apreq_mutual_required_p (Shishi * handle,
1713 Shishi_asn1 apreq);
1714 extern int shishi_apreq_options_set (Shishi * handle, Shishi_asn1 apreq,
1715 int options);
1716 extern int shishi_apreq_options_add (Shishi * handle, Shishi_asn1 apreq,
1717 int option);
1718 extern int shishi_apreq_options_remove (Shishi * handle, Shishi_asn1 apreq,
1719 int option);
1720 extern int shishi_apreq_get_ticket (Shishi * handle, Shishi_asn1 apreq,
1721 Shishi_asn1 * ticket);
1722 extern int shishi_apreq_get_authenticator_etype (Shishi * handle,
1723 Shishi_asn1 apreq,
1724 int32_t * etype);
1725 extern int shishi_apreq_decrypt (Shishi * handle, Shishi_asn1 apreq,
1726 Shishi_key * key, int keyusage,
1727 Shishi_asn1 * authenticator);
1729 /* kdcrep.c */
1730 extern int shishi_kdcrep_decrypt (Shishi * handle,
1731 Shishi_asn1 kdcrep,
1732 Shishi_key * key,
1733 int keyusage, Shishi_asn1 * enckdcreppart);
1734 /* enckdcreppart.c */
1735 extern int shishi_enckdcreppart_get_key (Shishi * handle,
1736 Shishi_asn1 enckdcreppart,
1737 Shishi_key ** key);
1738 extern int shishi_enckdcreppart_srealm_set (Shishi * handle,
1739 Shishi_asn1 enckdcreppart,
1740 const char *srealm);
1741 extern int shishi_enckdcreppart_sname_set (Shishi * handle,
1742 Shishi_asn1 enckdcreppart,
1743 Shishi_name_type name_type,
1744 char *sname[]);
1745 extern int shishi_enckdcreppart_server_set (Shishi * handle,
1746 Shishi_asn1 enckdcreppart,
1747 const char *server);
1749 /* aprep.c */
1750 extern Shishi_asn1 shishi_aprep (Shishi * handle);
1751 extern int shishi_aprep_print (Shishi * handle, FILE * fh, Shishi_asn1 aprep);
1752 extern int shishi_aprep_save (Shishi * handle, FILE * fh, Shishi_asn1 aprep);
1753 extern int shishi_aprep_to_file (Shishi * handle, Shishi_asn1 aprep,
1754 int filetype, char *filename);
1755 extern int shishi_aprep_read (Shishi * handle, FILE * fh,
1756 Shishi_asn1 * aprep);
1757 extern int shishi_aprep_parse (Shishi * handle, FILE * fh,
1758 Shishi_asn1 * aprep);
1759 extern int shishi_aprep_from_file (Shishi * handle, Shishi_asn1 * aprep,
1760 int filetype, char *filename);
1761 extern int shishi_aprep_decrypt (Shishi * handle, Shishi_asn1 aprep,
1762 Shishi_key * key, int keyusage,
1763 Shishi_asn1 * encapreppart);
1764 extern int shishi_aprep_verify (Shishi * handle, Shishi_asn1 authenticator,
1765 Shishi_asn1 encapreppart);
1766 extern int shishi_aprep_enc_part_set (Shishi * handle, Shishi_asn1 aprep,
1767 int etype,
1768 const char *buf, size_t buflen);
1769 extern int shishi_aprep_enc_part_add (Shishi * handle, Shishi_asn1 aprep,
1770 Shishi_asn1 encticketpart,
1771 Shishi_asn1 encapreppart);
1772 extern int shishi_aprep_enc_part_make (Shishi * handle, Shishi_asn1 aprep,
1773 Shishi_asn1 authenticator,
1774 Shishi_asn1 encticketpart);
1775 extern int shishi_aprep_get_enc_part_etype (Shishi * handle,
1776 Shishi_asn1 aprep,
1777 int32_t * etype);
1779 /* netio.c */
1780 extern int shishi_kdc_sendrecv (Shishi * handle, char *realm,
1781 const char *indata, size_t inlen,
1782 char **outdata, size_t * outlen);
1784 /* encticketpart.c */
1785 extern Shishi_asn1 shishi_encticketpart (Shishi * handle);
1786 extern int shishi_encticketpart_key_set (Shishi * handle,
1787 Shishi_asn1 encticketpart,
1788 Shishi_key * key);
1789 extern int shishi_encticketpart_get_enc_part_etype (Shishi * handle,
1790 Shishi_asn1 encticketpart,
1791 int32_t * etype);
1792 extern int shishi_encticketpart_get_key (Shishi * handle,
1793 Shishi_asn1 encticketpart,
1794 Shishi_key ** key);
1795 extern int shishi_encticketpart_crealm_set (Shishi * handle,
1796 Shishi_asn1 encticketpart,
1797 const char *realm);
1798 extern int shishi_encticketpart_cname_get (Shishi * handle,
1799 Shishi_asn1 encticketpart,
1800 char *cname, size_t * cnamelen);
1801 extern int shishi_encticketpart_cname_set (Shishi * handle,
1802 Shishi_asn1 encticketpart,
1803 Shishi_name_type name_type,
1804 const char *principal);
1805 extern int shishi_encticketpart_cnamerealm_get (Shishi * handle,
1806 Shishi_asn1 encticketpart,
1807 char *cnamerealm,
1808 size_t * cnamerealmlen);
1809 extern int shishi_encticketpart_print (Shishi * handle, FILE * fh,
1810 Shishi_asn1 encticketpart);
1811 extern int shishi_encticketpart_flags_set (Shishi * handle,
1812 Shishi_asn1 encticketpart,
1813 int flags);
1814 extern int shishi_encticketpart_transited_set (Shishi * handle,
1815 Shishi_asn1 encticketpart,
1816 int trtype,
1817 char *trdata,
1818 size_t trdatalen);
1819 extern int shishi_encticketpart_authtime_set (Shishi * handle,
1820 Shishi_asn1 encticketpart,
1821 const char *authtime);
1822 extern int shishi_encticketpart_endtime_set (Shishi * handle,
1823 Shishi_asn1 encticketpart,
1824 const char *endtime);
1825 extern int shishi_encticketpart_authtime (Shishi * handle,
1826 Shishi_asn1 encticketpart,
1827 char *authtime,
1828 size_t * authtimelen);
1829 extern time_t shishi_encticketpart_authctime (Shishi * handle,
1830 Shishi_asn1 encticketpart);
1832 /* safe.c */
1833 extern int shishi_safe (Shishi * handle, Shishi_safe ** safe);
1834 extern void shishi_safe_done (Shishi_safe * safe);
1835 extern Shishi_key *shishi_safe_key (Shishi_safe * safe);
1836 extern void shishi_safe_key_set (Shishi_safe * safe, Shishi_key * key);
1837 extern Shishi_asn1 shishi_safe_safe (Shishi_safe * safe);
1838 extern void shishi_safe_safe_set (Shishi_safe * safe, Shishi_asn1 asn1safe);
1839 extern int shishi_safe_safe_der (Shishi_safe * safe, char **out,
1840 size_t * outlen);
1841 extern int shishi_safe_safe_der_set (Shishi_safe * safe,
1842 char *der, size_t derlen);
1843 extern int shishi_safe_print (Shishi * handle, FILE * fh, Shishi_asn1 safe);
1844 extern int shishi_safe_save (Shishi * handle, FILE * fh, Shishi_asn1 safe);
1845 extern int shishi_safe_to_file (Shishi * handle, Shishi_asn1 safe,
1846 int filetype, char *filename);
1847 extern int shishi_safe_parse (Shishi * handle, FILE * fh, Shishi_asn1 * safe);
1848 extern int shishi_safe_read (Shishi * handle, FILE * fh, Shishi_asn1 * safe);
1849 extern int shishi_safe_from_file (Shishi * handle, Shishi_asn1 * safe,
1850 int filetype, const char *filename);
1851 extern int shishi_safe_cksum (Shishi * handle,
1852 Shishi_asn1 safe,
1853 int32_t * cksumtype,
1854 char **cksum, size_t * cksumlen);
1855 extern int shishi_safe_set_cksum (Shishi * handle,
1856 Shishi_asn1 safe,
1857 int32_t cksumtype,
1858 const char *cksum, size_t cksumlen);
1859 extern int shishi_safe_user_data (Shishi * handle,
1860 Shishi_asn1 safe,
1861 char **userdata, size_t * userdatalen);
1862 extern int shishi_safe_set_user_data (Shishi * handle,
1863 Shishi_asn1 safe,
1864 const char *userdata,
1865 size_t userdatalen);
1866 extern int shishi_safe_build (Shishi_safe * safe, Shishi_key * key);
1867 extern int shishi_safe_verify (Shishi_safe * safe, Shishi_key * key);
1869 /* priv.c */
1870 extern int shishi_priv (Shishi * handle, Shishi_priv ** priv);
1871 extern void shishi_priv_done (Shishi_priv * priv);
1872 extern Shishi_key *shishi_priv_key (Shishi_priv * priv);
1873 extern void shishi_priv_key_set (Shishi_priv * priv, Shishi_key * key);
1874 extern Shishi_asn1 shishi_priv_priv (Shishi_priv * priv);
1875 extern void shishi_priv_priv_set (Shishi_priv * priv, Shishi_asn1 asn1priv);
1876 extern int shishi_priv_priv_der (Shishi_priv * priv, char **out,
1877 size_t * outlen);
1878 extern int shishi_priv_priv_der_set (Shishi_priv * priv,
1879 char *der, size_t derlen);
1880 extern Shishi_asn1 shishi_priv_encprivpart (Shishi_priv * priv);
1881 extern void shishi_priv_encprivpart_set (Shishi_priv * priv,
1882 Shishi_asn1 asn1priv);
1883 extern int shishi_priv_encprivpart_der (Shishi_priv * priv, char **out,
1884 size_t * outlen);
1885 extern int shishi_priv_encprivpart_der_set (Shishi_priv * priv,
1886 char *der, size_t derlen);
1887 extern int shishi_priv_print (Shishi * handle, FILE * fh, Shishi_asn1 priv);
1888 extern int shishi_priv_save (Shishi * handle, FILE * fh, Shishi_asn1 priv);
1889 extern int shishi_priv_to_file (Shishi * handle, Shishi_asn1 priv,
1890 int filetype, char *filename);
1891 extern int shishi_priv_parse (Shishi * handle, FILE * fh, Shishi_asn1 * priv);
1892 extern int shishi_priv_read (Shishi * handle, FILE * fh, Shishi_asn1 * priv);
1893 extern int shishi_priv_from_file (Shishi * handle, Shishi_asn1 * priv,
1894 int filetype, const char *filename);
1895 extern int shishi_priv_enc_part_etype (Shishi * handle,
1896 Shishi_asn1 priv,
1897 int32_t * etype);
1898 extern int shishi_priv_set_enc_part (Shishi * handle,
1899 Shishi_asn1 priv,
1900 int etype,
1901 const char *encpart, size_t encpartlen);
1902 extern int shishi_encprivpart_user_data (Shishi * handle,
1903 Shishi_asn1 encprivpart,
1904 char **userdata,
1905 size_t * userdatalen);
1906 extern int shishi_encprivpart_set_user_data (Shishi * handle,
1907 Shishi_asn1 encprivpart,
1908 const char *userdata,
1909 size_t userdatalen);
1910 extern int shishi_priv_build (Shishi_priv * priv, Shishi_key * key);
1911 extern int shishi_priv_process (Shishi_priv * priv, Shishi_key * key);
1913 #endif