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