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