(shishi_kdcreq_build): Add.
[shishi.git] / lib / shishi.h.in
blob71f02ed07e4ae3b69219a1d86f7eacab4ba0fc58
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 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
82 /* This is not specified in the ASN.1 syntax for some reason. */
83 typedef enum
85 SHISHI_NT_UNKNOWN = 0, /* Name type not known */
86 SHISHI_NT_PRINCIPAL, /* Just the name of the principal as in */
87 /* DCE, or for users */
88 SHISHI_NT_SRV_INST, /* Service and other unique instance (krbtgt) */
89 SHISHI_NT_SRV_HST, /* Service with host name as instance */
90 /* (telnet, rcommands) */
91 SHISHI_NT_SRV_XHST, /* Service with host as remaining components */
92 SHISHI_NT_UID /* Unique ID */
94 Shishi_name_type;
96 /* This is not specified in the ASN.1 syntax for some reason. */
97 typedef enum
99 SHISHI_PA_TGS_REQ = 1, /* padata is APREQ */
100 SHISHI_PA_ENC_TIMESTAMP, /* timestamp pre authentication */
101 SHISHI_PA_PW_SALT, /* salt for string-to-key */
102 SHISHI_PA_ETYPE_INFO = 10, /* in krb-error, request for preauth */
103 SHISHI_PA_USE_SPECIFIED_KVNO = 20 /* use specified kvno */
105 Shishi_padata_type;
107 /* This is not specified in the ASN.1 syntax for some reason. */
108 typedef enum
110 SHISHI_TR_DOMAIN_X500_COMPRESS = 1
112 Shishi_tr_type;
114 typedef enum
116 SHISHI_APOPTIONS_RESERVED = 0x1, /* bit 0 */
117 SHISHI_APOPTIONS_USE_SESSION_KEY = 0x2, /* bit 1 */
118 SHISHI_APOPTIONS_MUTUAL_REQUIRED = 0x4 /* bit 2 */
120 Shishi_apoptions;
122 typedef enum
124 SHISHI_TICKETFLAGS_RESERVED = 0x1, /* bit 0 */
125 SHISHI_TICKETFLAGS_FORWARDABLE = 0x2, /* bit 1 */
126 SHISHI_TICKETFLAGS_FORWARDED = 0x4, /* bit 2 */
127 SHISHI_TICKETFLAGS_PROXIABLE = 0x8, /* bit 3 */
128 SHISHI_TICKETFLAGS_PROXY = 0x10, /* bit 4 */
129 SHISHI_TICKETFLAGS_MAY_POSTDATE = 0x20, /* bit 5 */
130 SHISHI_TICKETFLAGS_POSTDATED = 0x40, /* bit 6 */
131 SHISHI_TICKETFLAGS_INVALID = 0x80, /* bit 7 */
132 SHISHI_TICKETFLAGS_RENEWABLE = 0x100, /* bit 8 */
133 SHISHI_TICKETFLAGS_INITIAL = 0x200, /* bit 9 */
134 SHISHI_TICKETFLAGS_PRE_AUTHENT = 0x400, /* bit 10 */
135 SHISHI_TICKETFLAGS_HW_AUTHENT = 0x800, /* bit 11 */
136 SHISHI_TICKETFLAGS_TRANSITED_POLICY_CHECKED = 0x1000, /* bit 12 */
137 SHISHI_TICKETFLAGS_OK_AS_DELEGATE = 0x2000 /* bit 13 */
139 Shishi_ticketflags;
141 typedef enum
143 SHISHI_KDCOPTIONS_RESERVED = 0x1, /* bit 0 */
144 SHISHI_KDCOPTIONS_FORWARDABLE = 0x2, /* bit 1 */
145 SHISHI_KDCOPTIONS_FORWARDED = 0x4, /* bit 2 */
146 SHISHI_KDCOPTIONS_PROXIABLE = 0x8, /* bit 3 */
147 SHISHI_KDCOPTIONS_PROXY = 0x10, /* bit 4 */
148 SHISHI_KDCOPTIONS_ALLOW_POSTDATE = 0x20, /* bit 5 */
149 SHISHI_KDCOPTIONS_POSTDATED = 0x40, /* bit 6 */
150 SHISHI_KDCOPTIONS_UNUSED7 = 0x80, /* bit 7 */
151 SHISHI_KDCOPTIONS_RENEWABLE = 0x100, /* bit 8 */
152 SHISHI_KDCOPTIONS_UNUSED9 = 0x200, /* bit 9 */
153 SHISHI_KDCOPTIONS_UNUSED10 = 0x400, /* bit 10 */
154 SHISHI_KDCOPTIONS_UNUSED11 = 0x800, /* bit 11 */
155 SHISHI_KDCOPTIONS_DISABLE_TRANSITED_CHECK = 0x4000000, /* bit 26 */
156 SHISHI_KDCOPTIONS_RENEWABLE_OK = 0x8000000, /* bit 27 */
157 SHISHI_KDCOPTIONS_ENC_TKT_IN_SKEY = 0x10000000, /* bit 28 */
158 SHISHI_KDCOPTIONS_RENEW = 0x40000000, /* bit 30 */
159 SHISHI_KDCOPTIONS_VALIDATE = 0x80000000 /* bit 31 */
161 Shishi_KDCOptions;
163 typedef enum
165 SHISHI_MSGTYPE_AS_REQ = 0x10,
166 SHISHI_MSGTYPE_AS_REP = 0x11,
167 SHISHI_MSGTYPE_TGS_REQ = 0x12,
168 SHISHI_MSGTYPE_TGS_REP = 0x13
170 Shishi_msgtype;
172 typedef enum
174 SHISHI_LRTYPE_LAST_INITIAL_TGT_REQUEST = 1,
175 SHISHI_LRTYPE_LAST_INITIAL_REQUEST = 2,
176 SHISHI_LRTYPE_NEWEST_TGT_ISSUE = 3,
177 SHISHI_LRTYPE_LAST_RENEWAL = 4,
178 SHISHI_LRTYPE_LAST_REQUEST = 5
180 Shishi_lrtype;
182 typedef enum
184 SHISHI_NULL = 0,
185 SHISHI_DES_CBC_CRC = 1,
186 SHISHI_DES_CBC_MD4 = 2,
187 SHISHI_DES_CBC_MD5 = 3,
188 SHISHI_DES_CBC_NONE = 4,
189 SHISHI_DES3_CBC_NONE = 6,
190 SHISHI_DES3_CBC_HMAC_SHA1_KD = 16,
191 SHISHI_AES128_CTS_HMAC_SHA1_96 = 17,
192 SHISHI_AES256_CTS_HMAC_SHA1_96 = 18
194 Shishi_etype;
196 typedef enum
198 SHISHI_CRC32 = 1,
199 SHISHI_RSA_MD4 = 2,
200 SHISHI_RSA_MD4_DES = 3,
201 SHISHI_DES_MAC = 4,
202 SHISHI_DES_MAC_K = 5,
203 SHISHI_RSA_MD4_DES_K = 6,
204 SHISHI_RSA_MD5 = 7,
205 SHISHI_RSA_MD5_DES = 8,
206 SHISHI_RSA_MD5_DES_GSS = 9, /* XXX */
207 SHISHI_HMAC_SHA1_96_AES128 = 10,
208 SHISHI_HMAC_SHA1_96_AES256 = 11,
209 SHISHI_HMAC_SHA1_DES3_KD = 12
211 Shishi_cksumtype;
213 typedef enum
215 SHISHI_FILETYPE_TEXT = 0,
216 SHISHI_FILETYPE_DER,
217 SHISHI_FILETYPE_HEX,
218 SHISHI_FILETYPE_BASE64,
219 SHISHI_FILETYPE_BINARY
221 Shishi_filetype;
223 typedef enum
225 /* 1. AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with the
226 client key */
227 SHISHI_KEYUSAGE_ASREQ_PA_ENC_TIMESTAMP = 1,
228 /* 2. AS-REP Ticket and TGS-REP Ticket (includes TGS session key or
229 application session key), encrypted with the service key */
230 SHISHI_KEYUSAGE_ENCTICKETPART = 2,
231 /* 3. AS-REP encrypted part (includes TGS session key or application
232 session key), encrypted with the client key */
233 SHISHI_KEYUSAGE_ENCASREPPART = 3,
234 /* 4. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the TGS
235 session key */
236 SHISHI_KEYUSAGE_TGSREQ_AUTHORIZATIONDATA_TGS_SESSION_KEY = 4,
237 /* 5. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the TGS
238 authenticator subkey (section 5.4.1) */
239 SHISHI_KEYUSAGE_TGSREQ_AUTHORIZATIONDATA_TGS_AUTHENTICATOR_KEY = 5,
240 /* 6. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum, keyed with the
241 TGS session key */
242 SHISHI_KEYUSAGE_TGSREQ_APREQ_AUTHENTICATOR_CKSUM = 6,
243 /* 7. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator (includes TGS
244 authenticator subkey), encrypted with the TGS session key */
245 SHISHI_KEYUSAGE_TGSREQ_APREQ_AUTHENTICATOR = 7,
246 /* 8. TGS-REP encrypted part (includes application session key), encrypted
247 with the TGS session key */
248 SHISHI_KEYUSAGE_ENCTGSREPPART_SESSION_KEY = 8,
249 /* 9. TGS-REP encrypted part (includes application session key), encrypted
250 with the TGS authenticator subkey */
251 SHISHI_KEYUSAGE_ENCTGSREPPART_AUTHENTICATOR_KEY = 9,
252 /* 10. AP-REQ Authenticator cksum, keyed with the application
253 session key */
254 SHISHI_KEYUSAGE_APREQ_AUTHENTICATOR_CKSUM = 10,
255 /* 11. AP-REQ Authenticator (includes application authenticator subkey),
256 encrypted with the application session key */
257 SHISHI_KEYUSAGE_APREQ_AUTHENTICATOR = 11,
258 /* 12. AP-REP encrypted part (includes application session subkey),
259 encrypted with the application session key */
260 SHISHI_KEYUSAGE_ENCAPREPPART = 12,
261 /* 13. KRB-PRIV encrypted part, encrypted with a key chosen by the
262 application */
263 SHISHI_KEYUSAGE_KRB_PRIV = 13,
264 /* 14. KRB-CRED encrypted part, encrypted with a key chosen by the
265 application */
266 SHISHI_KEYUSAGE_KRB_CRED = 14,
267 /* 15. KRB-SAFE cksum, keyed with a key chosen by the application */
268 SHISHI_KEYUSAGE_KRB_SAFE = 15,
269 /* 18. KRB-ERROR checksum (e-cksum) */
270 SHISHI_KEYUSAGE_KRB_ERROR = 18,
271 /* 19. AD-KDCIssued checksum (ad-checksum) */
272 SHISHI_KEYUSAGE_AD_KDCISSUED = 19,
273 /* 20. Checksum for Mandatory Ticket Extensions */
274 SHISHI_KEYUSAGE_TICKET_EXTENSION = 20,
275 /* 21. Checksum in Authorization Data in Ticket Extensions */
276 SHISHI_KEYUSAGE_TICKET_EXTENSION_AUTHORIZATION = 21,
277 /* 22-24. Reserved for use in GSSAPI mechanisms derived from RFC 1964.
278 (raeburn/MIT) */
279 SHISHI_KEYUSAGE_GSS_R1 = 22,
280 SHISHI_KEYUSAGE_GSS_R2 = 23,
281 SHISHI_KEYUSAGE_GSS_R3 = 24
282 /* 25-511. Reserved for future use in Kerberos and related protocols. */
283 /* 512-1023. Reserved for uses internal to a Kerberos implementation. */
285 Shishi_keyusage;
287 typedef enum
289 SHISHI_TKTSHINTFLAGS_ACCEPT_EXPIRED = 1
291 Shishi_tkts_hintflags;
293 struct Shishi_tkts_hint
295 int startpos;
296 char *server;
297 char *serverrealm;
298 char *client;
299 char *clientrealm;
300 int flags;
301 int32_t etype;
302 char *passwd;
303 time_t starttime;
304 time_t endtime;
305 time_t renew_till;
306 int renewable;
308 typedef struct Shishi_tkts_hint Shishi_tkts_hint;
310 typedef struct Shishi Shishi;
311 typedef struct Shishi_tkt Shishi_tkt;
312 typedef struct Shishi_tkts Shishi_tkts;
313 typedef struct Shishi_as Shishi_as;
314 typedef struct Shishi_tgs Shishi_tgs;
315 typedef struct Shishi_ap Shishi_ap;
316 typedef struct Shishi_key Shishi_key;
317 typedef struct Shishi_safe Shishi_safe;
318 #ifndef _SHISHI_HAS_LIBTASN1_H
319 typedef struct node_asn_struct *ASN1_TYPE;
320 #endif
321 typedef ASN1_TYPE Shishi_asn1;
323 /* init.c */
324 extern Shishi *shishi (void);
325 extern int shishi_init (Shishi ** handle);
326 extern int shishi_init_with_paths (Shishi ** handle,
327 const char *tktsfile,
328 const char *systemcfgfile,
329 const char *usercfgfile);
330 extern int shishi_init_server (Shishi ** handle);
331 extern int shishi_init_server_with_paths (Shishi ** handle,
332 const char *systemcfgfile);
333 extern void shishi_info (Shishi * handle, const char *fmt, ...);
334 extern void shishi_warn (Shishi * handle, const char *fmt, ...);
336 /* done.c */
337 extern void shishi_done (Shishi * handle);
339 /* cfg.c */
340 extern int shishi_cfg (Shishi * handle, char *option);
341 extern int shishi_cfg_from_file (Shishi * handle, const char *cfg);
342 extern int shishi_cfg_print (Shishi * handle, FILE * fh);
343 extern const char *shishi_cfg_default_systemfile (Shishi * handle);
344 extern const char *shishi_cfg_default_userdirectory (Shishi * handle);
345 extern const char *shishi_cfg_default_userfile (Shishi * handle);
346 extern int shishi_cfg_clientkdcetype (Shishi * handle, int32_t ** etypes);
347 extern int shishi_cfg_clientkdcetype_set (Shishi * handle, char *value);
349 /* error.c */
350 extern const char *shishi_strerror (int err);
351 extern const char *shishi_strerror_details (Shishi * handle);
352 extern void shishi_error_set (Shishi * handle, const char *error);
353 extern void shishi_error_printf (Shishi * handle, char *format, ...);
354 extern void shishi_error_clear (Shishi * handle);
356 /* realm.c */
357 extern char *shishi_realm_default_guess (void);
358 extern const char *shishi_realm_default (Shishi * handle);
359 extern void shishi_realm_default_set (Shishi * handle, const char *realm);
360 extern const char *shishi_realm_for_server_file (Shishi * handle,
361 char *server);
362 extern const char *shishi_realm_for_server_dns (Shishi * handle,
363 char *server);
364 extern const char *shishi_realm_for_server (Shishi * handle, char *server);
366 /* principal.c */
367 extern char *shishi_principal_default_guess (void);
368 extern const char *shishi_principal_default (Shishi * handle);
369 extern void shishi_principal_default_set (Shishi * handle,
370 const char *principal);
371 extern int shishi_principal_name_get (Shishi * handle, Shishi_asn1 namenode,
372 const char *namefield, char *out,
373 size_t * outlen);
374 extern int shishi_principal_name_realm_get (Shishi * handle,
375 Shishi_asn1 namenode,
376 const char *namefield,
377 Shishi_asn1 realmnode,
378 const char *realmfield,
379 char *out, size_t * outlen);
380 extern int shishi_principal_name_set (Shishi * handle,
381 Shishi_asn1 namenode,
382 const char *namefield,
383 Shishi_name_type name_type,
384 const char *name[]);
385 extern int shishi_principal_set (Shishi * handle,
386 Shishi_asn1 namenode,
387 const char *namefield, const char *name);
388 extern int shishi_parse_name (Shishi * handle, const char *name,
389 char **principal, char **realm);
390 extern char *shishi_server_for_local_service (Shishi * handle,
391 const char *service);
393 /* ticket.c */
394 extern int shishi_ticket_sname_get (Shishi * handle,
395 Shishi_asn1 ticket,
396 char *server, size_t * serverlen);
397 extern int shishi_ticket_sname_set (Shishi * handle,
398 Shishi_asn1 ticket,
399 Shishi_name_type name_type,
400 char *sname[]);
401 extern int shishi_ticket_snamerealm_get (Shishi * handle, Shishi_asn1 ticket,
402 char *serverrealm,
403 int *serverrealmlen);
404 extern int shishi_ticket_srealmserver_set (Shishi * handle,
405 Shishi_asn1 ticket, char *realm,
406 char *server);
407 extern int shishi_ticket_set_server (Shishi * handle, Shishi_asn1 ticket,
408 const char *server);
409 extern int shishi_ticket_realm_get (Shishi * handle, Shishi_asn1 ticket,
410 char *realm, int *realmlen);
411 extern int shishi_ticket_realm_set (Shishi * handle, Shishi_asn1 ticket,
412 const char *realm);
413 extern int shishi_ticket_get_enc_part_etype (Shishi * handle,
414 Shishi_asn1 ticket,
415 int32_t * etype);
416 extern int shishi_ticket_set_enc_part (Shishi * handle, Shishi_asn1 ticket,
417 int etype, int kvno,
418 char *buf, size_t buflen);
419 extern int shishi_ticket_add_enc_part (Shishi * handle, Shishi_asn1 ticket,
420 Shishi_key * key,
421 Shishi_asn1 encticketpart);
422 extern int shishi_enckdcreppart_key_set (Shishi * handle,
423 Shishi_asn1 enckdcreppart,
424 Shishi_key * key);
425 extern int shishi_ticket_decrypt (Shishi * handle, Shishi_asn1 ticket,
426 Shishi_key * key,
427 Shishi_asn1 * encticketpart);
429 /* tkt.c */
430 extern Shishi_asn1 shishi_tkt_ticket (Shishi_tkt * tkt);
431 extern Shishi_asn1 shishi_tkt_kdcrep (Shishi_tkt * tkt);
432 extern Shishi_asn1 shishi_tkt_enckdcreppart (Shishi_tkt * tkt);
433 extern void shishi_tkt_enckdcreppart_set (Shishi_tkt * tkt,
434 Shishi_asn1 enckdcreppart);
435 extern Shishi_asn1 shishi_tkt_encticketpart (Shishi_tkt * tkt);
436 extern void shishi_tkt_encticketpart_set (Shishi_tkt * tkt,
437 Shishi_asn1 encticketpart);
438 extern Shishi_key *shishi_tkt_key (Shishi_tkt * tkt);
439 extern int shishi_tkt_key_set (Shishi_tkt * tkt, Shishi_key * key);
440 extern int shishi_tkt (Shishi * handle, Shishi_tkt ** tkt);
441 extern Shishi_tkt *shishi_tkt2 (Shishi * handle,
442 Shishi_asn1 ticket,
443 Shishi_asn1 enckdcreppart,
444 Shishi_asn1 kdcrep);
445 extern int shishi_tkt_pretty_print (Shishi_tkt * tkt, FILE * fh);
446 extern int shishi_tkt_realm (Shishi_tkt * tkt, char *realm, int *realmlen);
447 extern int shishi_tkt_cnamerealm (Shishi_tkt * tkt,
448 char *cnamerealm, int *cnamerealmlen);
449 extern int shishi_tkt_cnamerealm_p (Shishi_tkt * tkt, const char *client);
450 extern int shishi_tkt_client (Shishi_tkt * tkt, char *client, int *clientlen);
451 extern int shishi_tkt_client_p (Shishi_tkt * tkt, const char *client);
452 extern int shishi_tkt_clientrealm_set (Shishi_tkt * tkt,
453 char *realm, char *client);
454 extern int shishi_tkt_serverrealm_set (Shishi_tkt * tkt,
455 char *realm, char *server);
456 extern int shishi_tkt_build (Shishi_tkt * tkt, Shishi_key * key);
457 extern int shishi_tkt_lastreq (Shishi_tkt * tkt,
458 char *lrtime, int *lrtimelen, int lrtype);
459 extern time_t shishi_tkt_lastreqc (Shishi_tkt * tkt, Shishi_lrtype lrtype);
460 extern int shishi_tkt_lastreq_pretty_print (Shishi_tkt * tkt, FILE * fh);
461 extern int shishi_tkt_authtime (Shishi_tkt * tkt,
462 char *authtime, int *authtimelen);
463 extern time_t shishi_tkt_authctime (Shishi_tkt * tkt);
464 extern int shishi_tkt_starttime (Shishi_tkt * tkt,
465 char *starttime, int *starttimelen);
466 extern time_t shishi_tkt_startctime (Shishi_tkt * tkt);
467 extern int shishi_tkt_endtime (Shishi_tkt * tkt,
468 char *endtime, int *endtimelen);
469 extern time_t shishi_tkt_endctime (Shishi_tkt * tkt);
470 extern int shishi_tkt_renew_till (Shishi_tkt * tkt,
471 char *renewtilltime, int *renewtilllen);
472 extern time_t shishi_tkt_renew_tillc (Shishi_tkt * tkt);
473 extern int shishi_tkt_keytype (Shishi_tkt * tkt, int32_t * etype);
474 extern int shishi_tkt_keytype_p (Shishi_tkt * tkt, int32_t etype);
475 extern int shishi_tkt_server (Shishi_tkt * tkt,
476 char *service, int *servicelen);
477 extern int shishi_tkt_server_p (Shishi_tkt * tkt, const char *service);
478 extern int shishi_tkt_server_realm (Shishi_tkt * tkt,
479 char *serverrealm, int *serverrealmlen);
480 extern int shishi_tkt_valid_at_time_p (Shishi_tkt * tkt, time_t now);
481 extern int shishi_tkt_valid_now_p (Shishi_tkt * tkt);
482 extern int shishi_tkt_decrypt (Shishi_tkt * tkt, Shishi_key * key);
483 extern void shishi_tkt_done (Shishi_tkt * tkt);
484 extern int shishi_tkt_flags (Shishi_tkt * tkt, int *flags);
485 extern int shishi_tkt_flags_set (Shishi_tkt * tkt, int flags);
486 extern int shishi_tkt_forwardable_p (Shishi_tkt * tkt);
487 extern int shishi_tkt_forwarded_p (Shishi_tkt * tkt);
488 extern int shishi_tkt_proxiable_p (Shishi_tkt * tkt);
489 extern int shishi_tkt_proxy_p (Shishi_tkt * tkt);
490 extern int shishi_tkt_may_postdate_p (Shishi_tkt * tkt);
491 extern int shishi_tkt_postdated_p (Shishi_tkt * tkt);
492 extern int shishi_tkt_invalid_p (Shishi_tkt * tkt);
493 extern int shishi_tkt_renewable_p (Shishi_tkt * tkt);
494 extern int shishi_tkt_initial_p (Shishi_tkt * tkt);
495 extern int shishi_tkt_pre_authent_p (Shishi_tkt * tkt);
496 extern int shishi_tkt_hw_authent_p (Shishi_tkt * tkt);
497 extern int shishi_tkt_transited_policy_checked_p (Shishi_tkt * tkt);
498 extern int shishi_tkt_ok_as_delegate_p (Shishi_tkt * tkt);
500 /* tkts.c */
501 extern char *shishi_tkts_default_file_guess (void);
502 extern const char *shishi_tkts_default_file (Shishi * handle);
503 extern void shishi_tkts_default_file_set (Shishi * handle,
504 const char *tktsfile);
505 extern Shishi_tkts *shishi_tkts_default (Shishi * handle);
506 extern int shishi_tkts (Shishi * handle, Shishi_tkts ** tkts);
507 extern Shishi_tkt *shishi_tkts_nth (Shishi_tkts * tkts, int ticketno);
508 extern int shishi_tkts_size (Shishi_tkts * tkts);
509 extern int shishi_tkts_add (Shishi_tkts * tkts, Shishi_tkt * ticket);
510 extern int shishi_tkts_new (Shishi_tkts * tkts,
511 Shishi_asn1 ticket,
512 Shishi_asn1 enckdcreppart, Shishi_asn1 kdcrep);
513 extern int shishi_tkts_remove (Shishi_tkts * tkts, int ticketno);
514 extern int shishi_tkts_expire (Shishi_tkts * tkts);
515 extern int shishi_tkts_print_for_service (Shishi_tkts * tkts,
516 FILE * fh, const char *service);
517 extern int shishi_tkts_print (Shishi_tkts * tkts, FILE * fh);
518 extern int shishi_tkts_write (Shishi_tkts * tkts, FILE * fh);
519 extern int shishi_tkts_to_file (Shishi_tkts * tkts, const char *filename);
520 extern int shishi_tkts_read (Shishi_tkts * tkts, FILE * fh);
521 extern int shishi_tkts_from_file (Shishi_tkts * tkts, const char *filename);
522 extern void shishi_tkts_done (Shishi_tkts ** tkts);
523 extern int shishi_tkt_match_p (Shishi_tkt * tkt, Shishi_tkts_hint * hint);
524 extern Shishi_tkt *shishi_tkts_find (Shishi_tkts * tkts,
525 Shishi_tkts_hint * hint);
526 extern Shishi_tkt *shishi_tkts_find_for_clientserver (Shishi_tkts * tkts,
527 const char *client,
528 const char *server);
529 extern Shishi_tkt *shishi_tkts_find_for_server (Shishi_tkts * tkts,
530 const char *server);
531 extern Shishi_tkt *shishi_tkts_get (Shishi_tkts * tkts,
532 Shishi_tkts_hint * hint);
533 extern Shishi_tkt *shishi_tkts_get_for_clientserver (Shishi_tkts * tkts,
534 const char *client,
535 const char *server);
536 extern Shishi_tkt *shishi_tkts_get_for_server (Shishi_tkts * tkts,
537 const char *server);
538 extern Shishi_tkt *shishi_tkts_get_for_localservicepasswd (Shishi_tkts * tkts,
539 const char
540 *service,
541 const char
542 *passwd);
544 /* diskio.c */
545 extern int
546 shishi_enckdcreppart_print (Shishi * handle,
547 FILE * fh, Shishi_asn1 enckdcreppart);
548 extern int
549 shishi_enckdcreppart_save (Shishi * handle,
550 FILE * fh, Shishi_asn1 enckdcreppart);
551 extern int
552 shishi_enckdcreppart_parse (Shishi * handle,
553 FILE * fh, Shishi_asn1 * enckdcreppart);
554 extern int
555 shishi_enckdcreppart_read (Shishi * handle,
556 FILE * fh, Shishi_asn1 * enckdcreppart);
557 extern int shishi_ticket_save (Shishi * handle, FILE * fh,
558 Shishi_asn1 ticket);
559 extern int shishi_ticket_print (Shishi * handle, FILE * fh,
560 Shishi_asn1 ticket);
561 extern int shishi_kdc_req_print (Shishi * handle, FILE * fh,
562 Shishi_asn1 asreq);
563 extern int shishi_kdc_rep_print (Shishi * handle, FILE * fh,
564 Shishi_asn1 asreq);
565 extern int shishi_kdc_print (Shishi * handle, FILE * fh, Shishi_asn1 asreq,
566 Shishi_asn1 asrep, Shishi_asn1 encasreppart);
567 extern int shishi_kdc_req_parse (Shishi * handle, FILE * fh,
568 Shishi_asn1 * asreq);
569 extern int shishi_kdc_rep_parse (Shishi * handle, FILE * fh,
570 Shishi_asn1 * asrep);
571 extern int shishi_ticket_parse (Shishi * handle, FILE * fh,
572 Shishi_asn1 * ticket);
573 extern int shishi_ticket_read (Shishi * handle, FILE * fh,
574 Shishi_asn1 * ticket);
576 /* authenticator.c */
577 extern Shishi_asn1 shishi_authenticator (Shishi * handle);
578 extern int shishi_authenticator_set_crealm (Shishi * handle,
579 Shishi_asn1 node,
580 const char *crealm);
581 extern int shishi_authenticator_set_cname (Shishi * handle,
582 Shishi_asn1 authenticator,
583 Shishi_name_type name_type,
584 const char *cname[]);
585 extern int shishi_authenticator_client_set (Shishi * handle,
586 Shishi_asn1 authenticator,
587 const char *client);
588 extern int shishi_authenticator_ctime_get (Shishi * handle,
589 Shishi_asn1 authenticator,
590 char *ctime);
591 extern int shishi_authenticator_cusec_get (Shishi * handle,
592 Shishi_asn1 authenticator,
593 int *cusec);
594 extern int shishi_authenticator_cname_get (Shishi * handle,
595 Shishi_asn1 authenticator,
596 char *cname, int *cnamelen);
597 extern int shishi_authenticator_cnamerealm_get (Shishi * handle,
598 Shishi_asn1 authenticator,
599 char *cnamerealm,
600 int *cnamerealmlen);
601 extern int shishi_authenticator_remove_cksum (Shishi * handle,
602 Shishi_asn1 authenticator);
603 extern int shishi_authenticator_cksum (Shishi * handle,
604 Shishi_asn1 authenticator,
605 int32_t * cksumtype,
606 char *cksum, size_t * cksumlen);
607 extern int shishi_authenticator_set_cksum (Shishi * handle,
608 Shishi_asn1 authenticator,
609 int cksumtype,
610 char *cksum, size_t cksumlen);
611 extern int shishi_authenticator_add_cksum (Shishi * handle,
612 Shishi_asn1 authenticator,
613 Shishi_key * key,
614 int keyusage,
615 char *data, int datalen);
616 extern int
617 shishi_authenticator_clear_authorizationdata (Shishi * handle,
618 Shishi_asn1 authenticator);
619 extern int
620 shishi_authenticator_add_authorizationdata (Shishi * handle,
621 Shishi_asn1 authenticator,
622 int adtype,
623 char *addata, int addatalen);
624 extern int
625 shishi_authenticator_authorizationdata (Shishi * handle,
626 Shishi_asn1 authenticator,
627 int *adtype,
628 char *addata, int *addatalen,
629 int nth);
630 extern int shishi_authenticator_read (Shishi * handle, FILE * fh,
631 Shishi_asn1 * authenticator);
632 extern int shishi_authenticator_parse (Shishi * handle, FILE * fh,
633 Shishi_asn1 * authenticator);
634 extern int shishi_authenticator_from_file (Shishi * handle,
635 Shishi_asn1 * authenticator,
636 int filetype, char *filename);
637 extern int shishi_authenticator_print (Shishi * handle, FILE * fh,
638 Shishi_asn1 authenticator);
639 extern int shishi_authenticator_to_file (Shishi * handle,
640 Shishi_asn1 authenticator,
641 int filetype, char *filename);
642 extern int shishi_authenticator_save (Shishi * handle, FILE * fh,
643 Shishi_asn1 authenticator);
645 /* as.c */
646 extern Shishi_asn1 shishi_as_req (Shishi_as * as);
647 extern int shishi_as_req_build (Shishi_as * as);
648 extern void shishi_as_req_set (Shishi_as * as, Shishi_asn1 asreq);
649 extern int shishi_as_req_der (Shishi_as * as, char *out, int *outlen);
650 extern int shishi_as_req_der_set (Shishi_as * as, char *der, size_t derlen);
651 extern Shishi_asn1 shishi_as_rep (Shishi_as * as);
652 extern void shishi_as_rep_set (Shishi_as * as, Shishi_asn1 asrep);
653 extern int shishi_as_rep_build (Shishi_as * as, Shishi_key * key);
654 extern int shishi_as_rep_der (Shishi_as * as, char *out, int *outlen);
655 extern int shishi_as_rep_der_set (Shishi_as * as, char *der, size_t derlen);
656 extern Shishi_asn1 shishi_as_encasreppart (Shishi_as * as);
657 extern void shishi_as_encasreppart_set (Shishi_as * as,
658 Shishi_asn1 encasreppart);
659 extern Shishi_asn1 shishi_as_krberror (Shishi_as * as);
660 extern int shishi_as_krberror_der (Shishi_as * as, char *out, int *outlen);
661 extern void shishi_as_krberror_set (Shishi_as * as, Shishi_asn1 krberror);
662 extern Shishi_tkt *shishi_as_tkt (Shishi_as * as);
663 extern void shishi_as_tkt_set (Shishi_as * as, Shishi_tkt * ticket);
664 extern int shishi_as (Shishi * handle, Shishi_as ** as);
665 extern int shishi_as_password_cnamerealmsname (Shishi * handle,
666 char *password,
667 Shishi_as ** as,
668 char *cname,
669 char *realm, char *sname);
670 extern int shishi_as_key_cnamerealmsname (Shishi * handle,
671 Shishi_key * key,
672 Shishi_as ** as,
673 char *cname,
674 char *realm, char *sname);
675 extern int shishi_as_cnamerealmsname (Shishi * handle,
676 char *password,
677 Shishi_key * key,
678 Shishi_as ** as,
679 char *cname, char *realm, char *sname);
680 extern int shishi_as_sendrecv (Shishi_as * as);
681 extern int shishi_as_rep_process (Shishi_as * as,
682 Shishi_key * key, const char *password);
684 /* tgs.c */
685 extern int shishi_tgs (Shishi * handle, Shishi_tgs ** tgs);
686 extern Shishi_tkt *shishi_tgs_tgtkt (Shishi_tgs * tgs);
687 extern void shishi_tgs_tgtkt_set (Shishi_tgs * tgs, Shishi_tkt * tgticket);
688 extern Shishi_ap *shishi_tgs_ap (Shishi_tgs * tgs);
689 extern Shishi_asn1 shishi_tgs_req (Shishi_tgs * tgs);
690 extern int shishi_tgs_req_build (Shishi_tgs * tgs);
691 extern Shishi_asn1 shishi_tgs_rep (Shishi_tgs * tgs);
692 extern int shishi_tgs_rep_process (Shishi_tgs * tgs);
693 extern Shishi_asn1 shishi_tgs_krberror (Shishi_tgs * tgs);
694 extern Shishi_tkt *shishi_tgs_tkt (Shishi_tgs * tgs);
695 extern void shishi_tgs_tkt_set (Shishi_tgs * tgs, Shishi_tkt * ticket);
696 extern int shishi_tgs_sendrecv (Shishi_tgs * tgs);
697 extern int shishi_tgs_set_server (Shishi_tgs * tgs, const char *server);
698 extern int shishi_tgs_set_realm (Shishi_tgs * tgs, const char *realm);
699 extern int shishi_tgs_set_realmserver (Shishi_tgs * tgs,
700 const char *realm, const char *server);
702 /* kdcreq.c */
703 extern int shishi_kdcreq (Shishi * handle, char *realm,
704 char *service, Shishi_asn1 * req);
705 extern Shishi_asn1 shishi_asreq (Shishi * handle);
706 extern Shishi_asn1 shishi_asreq_rsc (Shishi * handle, char *realm,
707 char *server, char *client);
708 extern Shishi_asn1 shishi_tgsreq (Shishi * handle);
709 extern Shishi_asn1 shishi_tgsreq_rst (Shishi * handle, char *realm,
710 char *server, Shishi_tkt * ticket);
711 extern int shishi_kdcreq_save (Shishi * handle, FILE * fh,
712 Shishi_asn1 kdcreq);
713 extern int shishi_kdcreq_print (Shishi * handle, FILE * fh,
714 Shishi_asn1 kdcreq);
715 extern int shishi_kdcreq_to_file (Shishi * handle, Shishi_asn1 kdcreq,
716 int filetype, char *filename);
717 extern int shishi_kdcreq_parse (Shishi * handle, FILE * fh,
718 Shishi_asn1 * kdcreq);
719 extern int shishi_kdcreq_read (Shishi * handle, FILE * fh,
720 Shishi_asn1 * kdcreq);
721 extern int shishi_kdcreq_from_file (Shishi * handle, Shishi_asn1 * kdcreq,
722 int filetype, char *filename);
723 extern int shishi_asreq_cnamerealm_get (Shishi * handle, Shishi_asn1 kdcreq,
724 char *cnamerealm,
725 size_t * cnamerealmlen);
726 extern int shishi_kdcreq_nonce (Shishi * handle, Shishi_asn1 kdcreq,
727 uint32_t * nonce);
728 extern int shishi_kdcreq_cname_get (Shishi * handle,
729 Shishi_asn1 kdcreq,
730 char *cname, size_t * cnamelen);
731 extern int shishi_kdcreq_set_cname (Shishi * handle, Shishi_asn1 kdcreq,
732 Shishi_name_type name_type,
733 const char *principal);
734 extern int shishi_kdcreq_sname_get (Shishi * handle, Shishi_asn1 kdcreq,
735 char *sname, size_t * snamelen);
736 extern int shishi_kdcreq_snamerealm_get (Shishi * handle, Shishi_asn1 kdcreq,
737 char *snamerealm,
738 size_t * snamerealmlen);
739 extern int shishi_kdcreq_set_sname (Shishi * handle, Shishi_asn1 kdcreq,
740 Shishi_name_type name_type,
741 const char *sname[]);
742 extern int shishi_kdcreq_realm_get (Shishi * handle, Shishi_asn1 kdcreq,
743 char *realm, int *realmlen);
744 extern int shishi_kdcreq_set_realm (Shishi * handle, Shishi_asn1 node,
745 const char *realm);
746 extern int shishi_kdcreq_set_server (Shishi * handle, Shishi_asn1 req,
747 const char *service);
748 extern int shishi_kdcreq_set_realmserver (Shishi * handle, Shishi_asn1 req,
749 char *realm, char *service);
750 extern int shishi_kdcreq_etype (Shishi * handle, Shishi_asn1 kdcreq,
751 int32_t * etype, int netype);
752 extern int shishi_kdcreq_set_etype (Shishi * handle, Shishi_asn1 kdcreq,
753 int32_t * etype, int netype);
754 extern int shishi_kdcreq_options (Shishi * handle, Shishi_asn1 kdcreq,
755 int *flags);
756 extern int shishi_kdcreq_renewable_p (Shishi * handle, Shishi_asn1 kdcreq);
757 extern int shishi_kdcreq_options_set (Shishi * handle, Shishi_asn1 kdcreq,
758 int options);
759 extern int shishi_kdcreq_options_add (Shishi * handle, Shishi_asn1 kdcreq,
760 int option);
761 extern int shishi_kdcreq_clear_padata (Shishi * handle, Shishi_asn1 kdcreq);
762 extern int shishi_kdcreq_add_padata (Shishi * handle,
763 Shishi_asn1 kdcreq,
764 int padatatype, char *data, int datalen);
765 extern int shishi_kdcreq_add_padata_tgs (Shishi * handle,
766 Shishi_asn1 kdcreq,
767 Shishi_asn1 apreq);
768 extern int shishi_kdcreq_build (Shishi * handle, Shishi_asn1 kdcreq);
770 /* enckdcreppart.c */
771 extern Shishi_asn1 shishi_enckdcreppart (Shishi * handle);
772 extern Shishi_asn1 shishi_encasreppart (Shishi * handle);
773 extern int shishi_enckdcreppart_srealmserver_set (Shishi * handle,
774 Shishi_asn1 enckdcreppart,
775 const char *srealm,
776 const char *server);
777 extern int shishi_enckdcreppart_nonce_set (Shishi * handle,
778 Shishi_asn1 enckdcreppart,
779 uint32_t nonce);
780 extern int
781 shishi_enckdcreppart_populate_encticketpart (Shishi * handle,
782 Shishi_asn1 enckdcreppart,
783 Shishi_asn1 encticketpart);
784 extern int shishi_enckdcreppart_flags_set (Shishi * handle,
785 Shishi_asn1 enckdcreppart,
786 int flags);
788 /* kdc.c */
789 extern int shishi_as_derive_salt (Shishi * handle,
790 Shishi_asn1 asreq,
791 Shishi_asn1 asrep, char *salt,
792 size_t * saltlen);
793 extern int shishi_tgs_process (Shishi * handle, Shishi_asn1 tgsreq,
794 Shishi_asn1 tgsrep,
795 Shishi_asn1 oldenckdcreppart,
796 Shishi_asn1 * enckdcreppart);
797 extern int shishi_as_process (Shishi * handle, Shishi_asn1 asreq,
798 Shishi_asn1 asrep,
799 const char *string,
800 Shishi_asn1 * enckdcreppart);
801 extern int shishi_kdc_process (Shishi * handle, Shishi_asn1 kdcreq,
802 Shishi_asn1 kdcrep, Shishi_key * key,
803 int keyusage, Shishi_asn1 * enckdcreppart);
804 extern int shishi_kdcreq_sendrecv (Shishi * handle, Shishi_asn1 kdcreq,
805 Shishi_asn1 * kdcrep);
806 extern int shishi_kdc_copy_crealm (Shishi * handle, Shishi_asn1 kdcrep,
807 Shishi_asn1 encticketpart);
808 extern int shishi_as_check_crealm (Shishi * handle, Shishi_asn1 asreq,
809 Shishi_asn1 asrep);
810 extern int shishi_kdc_copy_cname (Shishi * handle, Shishi_asn1 kdcrep,
811 Shishi_asn1 encticketpart);
812 extern int shishi_as_check_cname (Shishi * handle, Shishi_asn1 asreq,
813 Shishi_asn1 asrep);
814 extern int shishi_kdc_copy_nonce (Shishi * handle, Shishi_asn1 kdcreq,
815 Shishi_asn1 enckdcreppart);
816 extern int shishi_kdc_check_nonce (Shishi * handle, Shishi_asn1 kdcreq,
817 Shishi_asn1 enckdcreppart);
819 /* kdcrep.c */
820 extern Shishi_asn1 shishi_asrep (Shishi * handle);
821 extern Shishi_asn1 shishi_tgsrep (Shishi * handle);
822 extern int shishi_kdcrep_save (Shishi * handle, FILE * fh,
823 Shishi_asn1 kdcrep);
824 extern int shishi_kdcrep_print (Shishi * handle, FILE * fh,
825 Shishi_asn1 kdcrep);
826 extern int shishi_kdcrep_to_file (Shishi * handle, Shishi_asn1 kdcrep,
827 int filetype, char *filename);
828 extern int shishi_kdcrep_parse (Shishi * handle, FILE * fh,
829 Shishi_asn1 * kdcrep);
830 extern int shishi_kdcrep_read (Shishi * handle, FILE * fh,
831 Shishi_asn1 * kdcrep);
832 extern int shishi_kdcrep_from_file (Shishi * handle, Shishi_asn1 * kdcrep,
833 int filetype, char *filename);
834 extern int shishi_kdcrep_clear_padata (Shishi * handle, Shishi_asn1 kdcrep);
835 extern int shishi_kdcrep_get_enc_part_etype (Shishi * handle,
836 Shishi_asn1 asrep,
837 int32_t * etype);
838 extern int shishi_kdcrep_add_enc_part (Shishi * handle,
839 Shishi_asn1 kdcrep,
840 Shishi_key * key,
841 int keyusage,
842 Shishi_asn1 enckdcreppart);
843 extern int shishi_kdcrep_get_ticket (Shishi * handle,
844 Shishi_asn1 kdcrep,
845 Shishi_asn1 * ticket);
846 extern int shishi_kdcrep_set_ticket (Shishi * handle, Shishi_asn1 kdcrep,
847 Shishi_asn1 ticket);
848 extern int shishi_kdcrep_crealm_set (Shishi * handle,
849 Shishi_asn1 kdcrep, const char *crealm);
850 extern int shishi_kdcrep_cname_set (Shishi * handle,
851 Shishi_asn1 kdcrep,
852 Shishi_name_type name_type,
853 const char *cname[]);
854 extern int shishi_kdcrep_client_set (Shishi * handle, Shishi_asn1 kdcrep,
855 const char *client);
856 extern int shishi_kdcrep_crealmserver_set (Shishi * handle,
857 Shishi_asn1 kdcrep,
858 const char *crealm,
859 const char *client);
860 extern int shishi_kdcrep_set_enc_part (Shishi * handle, Shishi_asn1 kdcrep,
861 int etype, int kvno, char *buf,
862 int buflen);
864 /* krberror.c */
865 extern Shishi_asn1 shishi_krberror (Shishi * handle);
866 extern int shishi_krberror_print (Shishi * handle, FILE * fh,
867 Shishi_asn1 krberror);
868 extern int shishi_krberror_save (Shishi * handle, FILE * fh,
869 Shishi_asn1 krberror);
870 extern int shishi_krberror_to_file (Shishi * handle, Shishi_asn1 krberror,
871 int filetype, char *filename);
872 extern int shishi_krberror_parse (Shishi * handle, FILE * fh,
873 Shishi_asn1 * krberror);
874 extern int shishi_krberror_read (Shishi * handle, FILE * fh,
875 Shishi_asn1 * krberror);
876 extern int shishi_krberror_from_file (Shishi * handle, Shishi_asn1 * krberror,
877 int filetype, char *filename);
878 extern const char *shishi_krberror_errorcode_message (Shishi * handle,
879 int errorcode);
880 extern const char *shishi_krberror_message (Shishi * handle,
881 Shishi_asn1 krberror);
882 extern int shishi_krberror_etext (Shishi * handle, Shishi_asn1 krberror,
883 char *etext, size_t * etextlen);
884 extern int shishi_krberror_errorcode (Shishi * handle,
885 Shishi_asn1 krberror, int *errorcode);
886 extern int shishi_krberror_errorcode_fast (Shishi * handle,
887 Shishi_asn1 krberror);
888 extern int shishi_krberror_pretty_print (Shishi * handle,
889 FILE * fh, Shishi_asn1 krberror);
891 /* base64.c */
892 extern void shishi_to_base64 (unsigned char *out, const unsigned char *in,
893 int len, int olen);
894 extern int shishi_from_base64 (unsigned char *out, const unsigned char *in);
896 /* vasprintf.c */
897 extern int shishi_asprintf (char **result, char *format, ...);
899 /* gztime.c */
900 extern const char *shishi_generalize_time (Shishi * handle, time_t t);
901 extern time_t shishi_generalize_ctime (Shishi * handle, const char *t);
903 /* crypto.c */
904 extern int shishi_cipher_supported_p (int type);
905 extern const char *shishi_cipher_name (int type);
906 extern int shishi_cipher_blocksize (int type);
907 extern int shishi_cipher_minpadsize (int type);
908 extern int shishi_cipher_confoundersize (int type);
909 extern size_t shishi_cipher_keylen (int type);
910 extern size_t shishi_cipher_randomlen (int type);
911 extern int shishi_cipher_defaultcksumtype (int32_t type);
912 extern int shishi_cipher_parse (const char *cipher);
913 extern int shishi_checksum_supported_p (int32_t type);
914 extern const char *shishi_checksum_name (int32_t type);
915 extern size_t shishi_checksum_cksumlen (int32_t type);
916 extern int shishi_checksum_parse (const char *checksum);
917 extern int shishi_string_to_key (Shishi * handle,
918 int32_t keytype,
919 const char *password, size_t passwordlen,
920 const char *salt, size_t saltlen,
921 const char *parameter, Shishi_key * outkey);
922 extern int shishi_random_to_key (Shishi * handle,
923 int32_t keytype,
924 char *random, size_t randomlen,
925 Shishi_key * outkey);
926 extern int shishi_encrypt (Shishi * handle,
927 Shishi_key * key,
928 int keyusage,
929 char *in, size_t inlen,
930 char **out, size_t * outlen);
931 extern int shishi_encrypt_iv (Shishi * handle,
932 Shishi_key * key,
933 int keyusage,
934 char *iv, size_t ivlen,
935 char *in, size_t inlen,
936 char **out, size_t * outlen);
937 extern int shishi_encrypt_iv_etype (Shishi * handle,
938 Shishi_key * key,
939 int keyusage,
940 int32_t etype,
941 char *iv, size_t ivlen,
942 char *in, size_t inlen,
943 char **out, size_t * outlen);
944 extern int shishi_decrypt (Shishi * handle,
945 Shishi_key * key,
946 int keyusage,
947 char *in, size_t inlen,
948 char **out, size_t * outlen);
949 extern int shishi_decrypt_iv (Shishi * handle,
950 Shishi_key * key,
951 int keyusage,
952 char *iv, size_t ivlen,
953 char *in, size_t inlen,
954 char **out, size_t * outlen);
955 extern int shishi_decrypt_iv_etype (Shishi * handle,
956 Shishi_key * key,
957 int keyusage,
958 int32_t etype,
959 char *iv, size_t ivlen,
960 char *in, size_t inlen,
961 char **out, size_t * outlen);
962 extern int shishi_checksum (Shishi * handle,
963 Shishi_key * key,
964 int keyusage,
965 int32_t cksumtype,
966 char *in, size_t inlen,
967 char **out, size_t * outlen);
968 extern int shishi_randomize (Shishi * handle, char *data, size_t datalen);
969 extern int shishi_dk (Shishi * handle,
970 Shishi_key * key,
971 char *constant, int constantlen,
972 Shishi_key * derivedkey);
973 extern int shishi_dr (Shishi * handle,
974 Shishi_key * key,
975 char *derivedkey, size_t derivedkeylen,
976 char *constant, size_t constantlen);
977 extern int shishi_n_fold (Shishi * handle, char *in, size_t m, char *out,
978 size_t n);
979 extern int shishi_pbkdf2_sha1 (const char *P, size_t Plen,
980 const char *S, size_t Slen,
981 unsigned int c,
982 unsigned int dkLen,
983 char *DK);
985 /* version.c */
986 extern const char *shishi_check_version (const char *req_version);
988 /* password.c */
989 extern int shishi_read_password (FILE * fh, char *s, int size);
990 extern int
991 shishi_prompt_password_raw (FILE * in, char *s, int size,
992 FILE * out, char *format, ...);
993 extern int
994 shishi_prompt_password (Shishi * handle,
995 FILE * in, char *s, int size,
996 FILE * out, char *format, ...);
998 /* asn1.c */
999 extern int shishi_a2d_field (Shishi * handle,
1000 Shishi_asn1 node,
1001 const char *field, char *der, int *len);
1002 extern int shishi_a2d (Shishi * handle, Shishi_asn1 node,
1003 char *der, int *len);
1004 extern int shishi_a2d_new_field (Shishi * handle, Shishi_asn1 node,
1005 const char *field, char **der, int *len);
1006 extern int shishi_new_a2d (Shishi * handle, Shishi_asn1 node,
1007 char **der, int *len);
1008 extern int shishi_asn1_done (Shishi * handle, Shishi_asn1 node);
1009 extern int shishi_asn1_read (Shishi * handle, Shishi_asn1 node,
1010 const char *field, char *data, size_t * datalen);
1011 extern int shishi_asn1_read_int32 (Shishi * handle, Shishi_asn1 node,
1012 const char *field, int32_t * i);
1013 extern int shishi_asn1_read_uint32 (Shishi * handle, Shishi_asn1 node,
1014 const char *field, uint32_t * i);
1015 extern int shishi_asn1_read_bitstring (Shishi * handle, Shishi_asn1 node,
1016 const char *field, int *flags);
1017 extern int shishi_asn1_write (Shishi * handle, Shishi_asn1 node,
1018 const char *field,
1019 const char *data, size_t datalen);
1020 extern int shishi_asn1_write_int32 (Shishi * handle, Shishi_asn1 node,
1021 const char *field, int32_t n);
1022 extern int shishi_asn1_write_uint32 (Shishi * handle, Shishi_asn1 node,
1023 const char *field, uint32_t n);
1024 extern int shishi_asn1_write_bitstring (Shishi * handle, Shishi_asn1 node,
1025 const char *field, int flags);
1026 extern int shishi_asn1_field (Shishi * handle,
1027 Shishi_asn1 node,
1028 char *data, size_t * datalen,
1029 const char *field);
1030 extern int shishi_asn1_optional_field (Shishi * handle,
1031 Shishi_asn1 node,
1032 char *data, size_t * datalen,
1033 const char *field);
1034 extern int shishi_asn1_empty_field (Shishi * handle,
1035 Shishi_asn1 node,
1036 char *data, size_t * datalen,
1037 const char *field);
1038 extern int shishi_asn1_number_of_elements (Shishi * handle,
1039 Shishi_asn1 node,
1040 const char *field, int *n);
1041 extern Shishi_asn1 shishi_asn1_asreq (Shishi * handle);
1042 extern Shishi_asn1 shishi_asn1_asrep (Shishi * handle);
1043 extern Shishi_asn1 shishi_asn1_tgsreq (Shishi * handle);
1044 extern Shishi_asn1 shishi_asn1_tgsrep (Shishi * handle);
1045 extern Shishi_asn1 shishi_asn1_apreq (Shishi * handle);
1046 extern Shishi_asn1 shishi_asn1_aprep (Shishi * handle);
1047 extern Shishi_asn1 shishi_asn1_ticket (Shishi * handle);
1048 extern Shishi_asn1 shishi_asn1_encapreppart (Shishi * handle);
1049 extern Shishi_asn1 shishi_asn1_encticketpart (Shishi * handle);
1050 extern Shishi_asn1 shishi_asn1_authenticator (Shishi * handle);
1051 extern Shishi_asn1 shishi_asn1_enckdcreppart (Shishi * handle);
1052 extern Shishi_asn1 shishi_asn1_encasreppart (Shishi * handle);
1053 extern Shishi_asn1 shishi_asn1_krberror (Shishi * handle);
1054 extern Shishi_asn1 shishi_asn1_krbsafe (Shishi * handle);
1055 extern Shishi_asn1 shishi_der2asn1 (Shishi * handle,
1056 const char *fieldname,
1057 const char *nodename,
1058 const char *der, size_t derlen);
1059 extern Shishi_asn1 shishi_der2asn1_ticket (Shishi * handle,
1060 const char *der, size_t derlen);
1061 extern Shishi_asn1 shishi_der2asn1_encticketpart (Shishi * handle,
1062 const char *der,
1063 size_t derlen);
1064 extern Shishi_asn1 shishi_der2asn1_asreq (Shishi * handle,
1065 const char *der, size_t derlen);
1066 extern Shishi_asn1 shishi_der2asn1_tgsreq (Shishi * handle,
1067 const char *der, size_t derlen);
1068 extern Shishi_asn1 shishi_der2asn1_asrep (Shishi * handle,
1069 const char *der, size_t derlen);
1070 extern Shishi_asn1 shishi_der2asn1_tgsrep (Shishi * handle,
1071 const char *der, size_t derlen);
1072 extern Shishi_asn1 shishi_der2asn1_kdcrep (Shishi * handle,
1073 const char *der, size_t derlen);
1074 extern Shishi_asn1 shishi_der2asn1_kdcreq (Shishi * handle,
1075 const char *der, size_t derlen);
1076 extern Shishi_asn1 shishi_der2asn1_encasreppart (Shishi * handle,
1077 const char *der,
1078 size_t derlen);
1079 extern Shishi_asn1 shishi_der2asn1_enctgsreppart (Shishi * handle,
1080 const char *der,
1081 size_t derlen);
1082 extern Shishi_asn1 shishi_der2asn1_enckdcreppart (Shishi * handle,
1083 const char *der,
1084 size_t derlen);
1085 extern Shishi_asn1 shishi_der2asn1_authenticator (Shishi * handle,
1086 const char *der,
1087 size_t derlen);
1088 extern Shishi_asn1 shishi_der2asn1_krberror (Shishi * handle,
1089 const char *der, size_t derlen);
1090 extern Shishi_asn1 shishi_der2asn1_krbsafe (Shishi * handle,
1091 const char *der, size_t derlen);
1092 extern Shishi_asn1 shishi_der2asn1_apreq (Shishi * handle,
1093 const char *der, size_t derlen);
1094 extern Shishi_asn1 shishi_der2asn1_aprep (Shishi * handle,
1095 const char *der, size_t derlen);
1096 extern Shishi_asn1 shishi_der2asn1_encapreppart (Shishi * handle,
1097 const char *der,
1098 size_t derlen);
1100 /* ap.c */
1101 extern const char *shishi_ap_option2string (int option);
1102 extern int shishi_ap_string2option (const char *str);
1104 extern int shishi_ap (Shishi * handle, Shishi_ap ** ap);
1105 extern int shishi_ap_set_tktoptions (Shishi_ap * ap,
1106 Shishi_tkt * ticket, int options);
1107 extern int shishi_ap_tktoptions (Shishi * handle,
1108 Shishi_ap ** ap,
1109 Shishi_tkt * ticket, int options);
1110 extern int shishi_ap_set_tktoptionsdata (Shishi_ap * ap,
1111 Shishi_tkt * ticket,
1112 int options, char *data, int len);
1113 extern int shishi_ap_tktoptionsdata (Shishi * handle,
1114 Shishi_ap ** ap,
1115 Shishi_tkt * ticket,
1116 int options, char *data, int len);
1117 extern int shishi_ap_set_tktoptionsasn1usage (Shishi_ap * ap,
1118 Shishi_tkt * ticket,
1119 int options,
1120 Shishi_asn1 node,
1121 char *field,
1122 int authenticatorcksumkeyusage,
1123 int authenticatorkeyusage);
1124 extern int shishi_ap_tktoptionsasn1usage (Shishi * handle,
1125 Shishi_ap ** ap,
1126 Shishi_tkt * ticket,
1127 int options,
1128 Shishi_asn1 node,
1129 char *field,
1130 int authenticatorcksumkeyusage,
1131 int authenticatorkeyusage);
1133 extern Shishi_tkt *shishi_ap_tkt (Shishi_ap * ap);
1134 extern void shishi_ap_tkt_set (Shishi_ap * ap, Shishi_tkt * ticket);
1136 extern int shishi_ap_authenticator_cksumdata (Shishi_ap * ap,
1137 char *out, int *len);
1138 extern void
1139 shishi_ap_authenticator_cksumdata_set (Shishi_ap * ap,
1140 char *authenticatorcksumdata,
1141 int authenticatorcksumdatalen);
1143 extern Shishi_asn1 shishi_ap_authenticator (Shishi_ap * ap);
1144 extern void shishi_ap_authenticator_set (Shishi_ap * ap,
1145 Shishi_asn1 authenticator);
1147 extern Shishi_asn1 shishi_ap_req (Shishi_ap * ap);
1148 extern void shishi_ap_req_set (Shishi_ap * ap, Shishi_asn1 apreq);
1149 extern int shishi_ap_req_der (Shishi_ap * ap, char *out, int *outlen);
1150 extern int shishi_ap_req_der_set (Shishi_ap * ap, char *der, size_t derlen);
1151 extern int shishi_ap_req_der_new (Shishi_ap * ap, char **out, int *outlen);
1152 extern int shishi_ap_req_build (Shishi_ap * ap);
1153 extern int shishi_ap_req_asn1 (Shishi_ap * ap, Shishi_asn1 * apreq);
1154 extern int shishi_ap_req_process (Shishi_ap * ap, Shishi_key * key);
1155 extern int shishi_ap_req_build (Shishi_ap * ap);
1157 extern Shishi_asn1 shishi_ap_rep (Shishi_ap * ap);
1158 extern void shishi_ap_rep_set (Shishi_ap * ap, Shishi_asn1 aprep);
1159 extern int shishi_ap_rep_der (Shishi_ap * ap, char *out, size_t * outlen);
1160 extern int shishi_ap_rep_der_set (Shishi_ap * ap, char *der, size_t derlen);
1161 extern int shishi_ap_rep_verify (Shishi_ap * ap);
1162 extern int shishi_ap_rep_verify_der (Shishi_ap * ap, char *der,
1163 size_t derlen);
1164 extern int shishi_ap_rep_verify_asn1 (Shishi_ap * ap, Shishi_asn1 aprep);
1165 extern int shishi_ap_rep_asn1 (Shishi_ap * ap, Shishi_asn1 * aprep);
1166 extern int shishi_ap_rep_build (Shishi_ap * ap);
1168 extern Shishi_asn1 shishi_ap_encapreppart (Shishi_ap * ap);
1169 extern void shishi_ap_encapreppart_set (Shishi_ap * ap,
1170 Shishi_asn1 encapreppart);
1172 /* key.c */
1173 extern const char *shishi_key_principal (Shishi_key * key);
1174 extern void shishi_key_principal_set (Shishi_key * key,
1175 const char *principal);
1176 extern const char *shishi_key_realm (Shishi_key * key);
1177 extern void shishi_key_realm_set (Shishi_key * key, const char *realm);
1178 extern int shishi_key_type (Shishi_key * key);
1179 extern void shishi_key_type_set (Shishi_key * key, int32_t type);
1180 extern char *shishi_key_value (Shishi_key * key);
1181 extern void shishi_key_value_set (Shishi_key * key, const char *value);
1182 extern int shishi_key_value_set_random (Shishi_key * key,
1183 char *random, size_t randomlen);
1184 extern const char *shishi_key_name (Shishi_key * key);
1185 extern size_t shishi_key_length (Shishi_key * key);
1186 extern int shishi_key_version (Shishi_key * key);
1187 extern void shishi_key_version_set (Shishi_key * key, int version);
1188 extern int shishi_key (Shishi * handle, Shishi_key ** key);
1189 extern void shishi_key_done (Shishi_key ** key);
1190 extern void shishi_key_copy (Shishi_key * dstkey, Shishi_key * srckey);
1191 extern int shishi_key_print (Shishi * handle, FILE * fh, Shishi_key * key);
1192 extern int shishi_key_to_file (Shishi * handle,
1193 const char *filename, Shishi_key * key);
1194 extern int shishi_key_parse (Shishi * handle, FILE * fh, Shishi_key ** key);
1195 extern int shishi_key_random (Shishi * handle,
1196 int32_t type, Shishi_key ** key);
1197 extern int shishi_key_from_value (Shishi * handle,
1198 int32_t type,
1199 char *value, Shishi_key ** key);
1200 extern int shishi_key_from_base64 (Shishi * handle,
1201 int32_t type,
1202 char *value, Shishi_key ** key);
1203 extern int shishi_key_from_random (Shishi * handle,
1204 int32_t type,
1205 char *random, size_t randomlen,
1206 Shishi_key ** outkey);
1207 extern int shishi_key_from_string (Shishi * handle,
1208 int32_t type,
1209 const char *password, size_t passwordlen,
1210 const char *salt, size_t saltlen,
1211 const char *parameter,
1212 Shishi_key ** outkey);
1214 /* keys.c */
1215 extern Shishi_key *
1216 shishi_keys_for_serverrealm_in_file (Shishi * handle,
1217 const char *filename,
1218 const char *server,
1219 const char *realm);
1220 extern Shishi_key *
1221 shishi_keys_for_server_in_file (Shishi * handle,
1222 const char *filename,
1223 const char *server);
1224 extern Shishi_key *
1225 shishi_keys_for_localservicerealm_in_file (Shishi * handle,
1226 const char *filename,
1227 const char *service,
1228 const char *realm);
1230 /* hostkeys.c */
1231 extern const char *shishi_hostkeys_default_file (Shishi * handle);
1232 extern void shishi_hostkeys_default_file_set (Shishi * handle,
1233 const char *hostkeysfile);
1234 extern Shishi_key *shishi_hostkeys_for_server (Shishi * handle,
1235 const char *server);
1236 extern Shishi_key *shishi_hostkeys_for_serverrealm (Shishi * handle,
1237 const char *server,
1238 const char *realm);
1239 extern Shishi_key *shishi_hostkeys_for_localservicerealm (Shishi * handle,
1240 const char *service,
1241 const char *realm);
1242 extern Shishi_key *shishi_hostkeys_for_localservice (Shishi * handle,
1243 const char *service);
1245 /* encapreppart.c */
1246 extern Shishi_asn1 shishi_encapreppart (Shishi * handle);
1247 extern int shishi_encapreppart_time_copy (Shishi * handle,
1248 Shishi_asn1 encapreppart,
1249 Shishi_asn1 authenticator);
1250 extern int shishi_encapreppart_ctime_get (Shishi * handle,
1251 Shishi_asn1 encapreppart,
1252 char *ctime);
1253 extern int shishi_encapreppart_ctime_set (Shishi * handle,
1254 Shishi_asn1 encapreppart,
1255 char *ctime);
1256 extern int shishi_encapreppart_cusec_get (Shishi * handle,
1257 Shishi_asn1 encapreppart,
1258 int *cusec);
1259 extern int shishi_encapreppart_cusec_set (Shishi * handle,
1260 Shishi_asn1 encapreppart,
1261 int cusec);
1262 extern int shishi_encapreppart_print (Shishi * handle, FILE * fh,
1263 Shishi_asn1 encapreppart);
1264 extern int shishi_encapreppart_save (Shishi * handle, FILE * fh,
1265 Shishi_asn1 encapreppart);
1266 extern int shishi_encapreppart_to_file (Shishi * handle,
1267 Shishi_asn1 encapreppart,
1268 int filetype, char *filename);
1269 extern int shishi_encapreppart_read (Shishi * handle, FILE * fh,
1270 Shishi_asn1 * encapreppart);
1271 extern int shishi_encapreppart_parse (Shishi * handle, FILE * fh,
1272 Shishi_asn1 * encapreppart);
1273 extern int shishi_encapreppart_from_file (Shishi * handle,
1274 Shishi_asn1 * encapreppart,
1275 int filetype, char *filename);
1276 extern int shishi_encapreppart_get_key (Shishi * handle,
1277 Shishi_asn1 encapreppart,
1278 int32_t * keytype,
1279 char *keyvalue,
1280 size_t * keyvalue_len);
1281 extern int shishi_encapreppart_seqnumber_get (Shishi * handle,
1282 Shishi_asn1 encapreppart,
1283 uint32_t *seqnumber);
1285 /* apreq.c */
1286 extern Shishi_asn1 shishi_apreq (Shishi * handle);
1287 extern int shishi_apreq_parse (Shishi * handle, FILE * fh,
1288 Shishi_asn1 * apreq);
1289 extern int shishi_apreq_from_file (Shishi * handle, Shishi_asn1 * apreq,
1290 int filetype, char *filename);
1291 extern int shishi_apreq_print (Shishi * handle, FILE * fh, Shishi_asn1 apreq);
1292 extern int shishi_apreq_to_file (Shishi * handle, Shishi_asn1 apreq,
1293 int filetype, char *filename);
1294 extern int shishi_apreq_read (Shishi * handle, FILE * fh,
1295 Shishi_asn1 * apreq);
1296 extern int shishi_apreq_save (Shishi * handle, FILE * fh, Shishi_asn1 apreq);
1297 extern int shishi_apreq_options (Shishi * handle, Shishi_asn1 apreq,
1298 int *flags);
1299 extern int shishi_apreq_options_set (Shishi * handle, Shishi_asn1 apreq,
1300 int options);
1301 extern int shishi_apreq_set_ticket (Shishi * handle, Shishi_asn1 apreq,
1302 Shishi_asn1 ticket);
1303 extern int shishi_apreq_set_authenticator (Shishi * handle, Shishi_asn1 apreq,
1304 int32_t etype,
1305 char *buf, int buflen);
1306 extern int shishi_apreq_add_authenticator (Shishi * handle, Shishi_asn1 apreq,
1307 Shishi_key * key, int keyusage,
1308 Shishi_asn1 authenticator);
1309 extern int shishi_apreq_options (Shishi * handle, Shishi_asn1 apreq,
1310 int *flags);
1311 extern int shishi_apreq_use_session_key_p (Shishi * handle,
1312 Shishi_asn1 apreq);
1313 extern int shishi_apreq_mutual_required_p (Shishi * handle,
1314 Shishi_asn1 apreq);
1315 extern int shishi_apreq_options_set (Shishi * handle, Shishi_asn1 apreq,
1316 int options);
1317 extern int shishi_apreq_options_add (Shishi * handle, Shishi_asn1 apreq,
1318 int option);
1319 extern int shishi_apreq_get_ticket (Shishi * handle, Shishi_asn1 apreq,
1320 Shishi_asn1 * ticket);
1321 extern int shishi_apreq_get_authenticator_etype (Shishi * handle,
1322 Shishi_asn1 apreq,
1323 int32_t * etype);
1324 extern int shishi_apreq_decrypt (Shishi * handle, Shishi_asn1 apreq,
1325 Shishi_key * key, int keyusage,
1326 Shishi_asn1 * authenticator);
1328 /* kdcrep.c */
1329 extern int shishi_kdcrep_decrypt (Shishi * handle,
1330 Shishi_asn1 kdcrep,
1331 Shishi_key * key,
1332 int keyusage, Shishi_asn1 * enckdcreppart);
1333 /* enckdcreppart.c */
1334 extern int shishi_enckdcreppart_get_key (Shishi * handle,
1335 Shishi_asn1 enckdcreppart,
1336 Shishi_key ** key);
1337 extern int shishi_enckdcreppart_srealm_set (Shishi * handle,
1338 Shishi_asn1 enckdcreppart,
1339 const char *srealm);
1340 extern int shishi_enckdcreppart_sname_set (Shishi * handle,
1341 Shishi_asn1 enckdcreppart,
1342 Shishi_name_type name_type,
1343 char *sname[]);
1344 extern int shishi_enckdcreppart_server_set (Shishi * handle,
1345 Shishi_asn1 enckdcreppart,
1346 const char *server);
1348 /* aprep.c */
1349 extern Shishi_asn1 shishi_aprep (Shishi * handle);
1350 extern int shishi_aprep_print (Shishi * handle, FILE * fh, Shishi_asn1 aprep);
1351 extern int shishi_aprep_save (Shishi * handle, FILE * fh, Shishi_asn1 aprep);
1352 extern int shishi_aprep_to_file (Shishi * handle, Shishi_asn1 aprep,
1353 int filetype, char *filename);
1354 extern int shishi_aprep_read (Shishi * handle, FILE * fh,
1355 Shishi_asn1 * aprep);
1356 extern int shishi_aprep_parse (Shishi * handle, FILE * fh,
1357 Shishi_asn1 * aprep);
1358 extern int shishi_aprep_from_file (Shishi * handle, Shishi_asn1 * aprep,
1359 int filetype, char *filename);
1360 extern int shishi_aprep_decrypt (Shishi * handle, Shishi_asn1 aprep,
1361 Shishi_key * key, int keyusage,
1362 Shishi_asn1 * encapreppart);
1363 extern int shishi_aprep_verify (Shishi * handle, Shishi_asn1 authenticator,
1364 Shishi_asn1 encapreppart);
1365 extern int shishi_aprep_enc_part_set (Shishi * handle, Shishi_asn1 aprep,
1366 int etype, const char *buf, int buflen);
1367 extern int shishi_aprep_enc_part_add (Shishi * handle, Shishi_asn1 aprep,
1368 Shishi_asn1 encticketpart,
1369 Shishi_asn1 encapreppart);
1370 extern int shishi_aprep_enc_part_make (Shishi * handle, Shishi_asn1 aprep,
1371 Shishi_asn1 authenticator,
1372 Shishi_asn1 encticketpart);
1373 extern int shishi_aprep_get_enc_part_etype (Shishi * handle,
1374 Shishi_asn1 aprep,
1375 int32_t * etype);
1377 /* netio.c */
1378 extern int shishi_kdc_sendrecv (Shishi * handle,
1379 char *realm,
1380 const char *indata,
1381 size_t inlen, char *outdata, size_t * outlen);
1383 /* encticketpart.c */
1384 extern Shishi_asn1 shishi_encticketpart (Shishi * handle);
1385 extern int shishi_encticketpart_key_set (Shishi * handle,
1386 Shishi_asn1 encticketpart,
1387 Shishi_key * key);
1388 extern int shishi_encticketpart_get_enc_part_etype (Shishi * handle,
1389 Shishi_asn1 encticketpart,
1390 int32_t * etype);
1391 extern int shishi_encticketpart_get_key (Shishi * handle,
1392 Shishi_asn1 encticketpart,
1393 Shishi_key ** key);
1394 extern int shishi_encticketpart_crealm_set (Shishi * handle,
1395 Shishi_asn1 encticketpart,
1396 const char *realm);
1397 extern int shishi_encticketpart_cname_get (Shishi * handle,
1398 Shishi_asn1 encticketpart,
1399 char *cname, int *cnamelen);
1400 extern int shishi_encticketpart_cname_set (Shishi * handle,
1401 Shishi_asn1 encticketpart,
1402 Shishi_name_type name_type,
1403 const char *principal);
1404 extern int shishi_encticketpart_cnamerealm_get (Shishi * handle,
1405 Shishi_asn1 encticketpart,
1406 char *cnamerealm,
1407 int *cnamerealmlen);
1408 extern int shishi_encticketpart_print (Shishi * handle, FILE * fh,
1409 Shishi_asn1 encticketpart);
1410 extern int shishi_encticketpart_flags_set (Shishi * handle,
1411 Shishi_asn1 encticketpart,
1412 int flags);
1413 extern int shishi_encticketpart_transited_set (Shishi * handle,
1414 Shishi_asn1 encticketpart,
1415 int trtype,
1416 char *trdata,
1417 size_t trdatalen);
1418 extern int shishi_encticketpart_authtime_set (Shishi * handle,
1419 Shishi_asn1 encticketpart,
1420 const char *authtime);
1421 extern int shishi_encticketpart_endtime_set (Shishi * handle,
1422 Shishi_asn1 encticketpart,
1423 const char *endtime);
1424 extern int shishi_encticketpart_authtime (Shishi * handle,
1425 Shishi_asn1 encticketpart,
1426 char *authtime, int *authtimelen);
1427 extern time_t shishi_encticketpart_authctime (Shishi * handle,
1428 Shishi_asn1 encticketpart);
1430 /* safe.c */
1431 extern int shishi_safe (Shishi * handle, Shishi_safe ** safe);
1432 extern Shishi_key *shishi_safe_key (Shishi_safe * safe);
1433 extern void shishi_safe_key_set (Shishi_safe * safe, Shishi_key * key);
1434 extern Shishi_asn1 shishi_safe_safe (Shishi_safe * safe);
1435 extern void shishi_safe_safe_set (Shishi_safe * safe, Shishi_asn1 asn1safe);
1436 extern int shishi_safe_safe_der (Shishi_safe * safe, char *out, int *outlen);
1437 extern int shishi_safe_safe_der_set (Shishi_safe * safe,
1438 char *der, size_t derlen);
1439 extern int shishi_safe_print (Shishi * handle, FILE * fh, Shishi_asn1 safe);
1440 extern int shishi_safe_save (Shishi * handle, FILE * fh, Shishi_asn1 safe);
1441 extern int shishi_safe_to_file (Shishi * handle, Shishi_asn1 safe,
1442 int filetype, char *filename);
1443 extern int shishi_safe_parse (Shishi * handle, FILE * fh, Shishi_asn1 * safe);
1444 extern int shishi_safe_read (Shishi * handle, FILE * fh, Shishi_asn1 * safe);
1445 extern int shishi_safe_from_file (Shishi * handle, Shishi_asn1 * safe,
1446 int filetype, char *filename);
1447 extern int shishi_safe_cksum (Shishi * handle,
1448 Shishi_asn1 safe,
1449 int32_t * cksumtype,
1450 char *cksum, size_t * cksumlen);
1451 extern int shishi_safe_set_cksum (Shishi * handle,
1452 Shishi_asn1 safe,
1453 int32_t cksumtype,
1454 char *cksum, size_t cksumlen);
1455 extern int shishi_safe_user_data (Shishi * handle,
1456 Shishi_asn1 safe,
1457 char *userdata, size_t * userdatalen);
1458 extern int shishi_safe_set_user_data (Shishi * handle,
1459 Shishi_asn1 safe,
1460 char *userdata, size_t userdatalen);
1461 extern int shishi_safe_build (Shishi_safe * safe, Shishi_key * key);
1462 extern int shishi_safe_verify (Shishi_safe * safe, Shishi_key * key);
1464 #endif