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
25 #include <stdio.h> /* FILE */
26 #include <stddef.h> /* size_t */
28 #define SHISHI_VERSION "@PACKAGE_VERSION@"
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. */
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 */
88 /* This is not specified in the ASN.1 syntax for some reason. */
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 */
99 /* This is not specified in the ASN.1 syntax for some reason. */
102 SHISHI_TR_DOMAIN_X500_COMPRESS
= 1
108 SHISHI_APOPTIONS_RESERVED
= 0x1, /* bit 0 */
109 SHISHI_APOPTIONS_USE_SESSION_KEY
= 0x2, /* bit 1 */
110 SHISHI_APOPTIONS_MUTUAL_REQUIRED
= 0x4 /* bit 2 */
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 */
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 */
157 SHISHI_MSGTYPE_AS_REQ
= 10,
158 SHISHI_MSGTYPE_AS_REP
= 11,
159 SHISHI_MSGTYPE_TGS_REQ
= 12,
160 SHISHI_MSGTYPE_TGS_REP
= 13
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
177 SHISHI_DES_CBC_CRC
= 1,
178 SHISHI_DES_CBC_MD4
= 2,
179 SHISHI_DES_CBC_MD5
= 3,
180 SHISHI_DES_CBC_NONE
= 4,
181 SHISHI_DES3_CBC_NONE
= 6,
182 SHISHI_DES3_CBC_HMAC_SHA1_KD
= 16,
183 SHISHI_AES128_CTS_HMAC_SHA1_96
= 17,
184 SHISHI_AES256_CTS_HMAC_SHA1_96
= 18
192 SHISHI_RSA_MD4_DES
= 3,
194 SHISHI_DES_MAC_K
= 5,
195 SHISHI_RSA_MD4_DES_K
= 6,
197 SHISHI_RSA_MD5_DES
= 8,
198 SHISHI_HMAC_SHA1_96_AES128
= 10,
199 SHISHI_HMAC_SHA1_96_AES256
= 11,
200 SHISHI_HMAC_SHA1_DES3_KD
= 12
206 SHISHI_FILETYPE_TEXT
= 0,
209 SHISHI_FILETYPE_BASE64
,
210 SHISHI_FILETYPE_BINARY
216 /* 1. AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with the
218 SHISHI_KEYUSAGE_ASREQ_PA_ENC_TIMESTAMP
= 1,
219 /* 2. AS-REP Ticket and TGS-REP Ticket (includes TGS session key or
220 application session key), encrypted with the service key */
221 SHISHI_KEYUSAGE_ENCTICKETPART
= 2,
222 /* 3. AS-REP encrypted part (includes TGS session key or application
223 session key), encrypted with the client key */
224 SHISHI_KEYUSAGE_ENCASREPPART
= 3,
225 /* 4. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the TGS
227 SHISHI_KEYUSAGE_TGSREQ_AUTHORIZATIONDATA_TGS_SESSION_KEY
= 4,
228 /* 5. TGS-REQ KDC-REQ-BODY AuthorizationData, encrypted with the TGS
229 authenticator subkey (section 5.4.1) */
230 SHISHI_KEYUSAGE_TGSREQ_AUTHORIZATIONDATA_TGS_AUTHENTICATOR_KEY
= 5,
231 /* 6. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum, keyed with the
233 SHISHI_KEYUSAGE_TGSREQ_APREQ_AUTHENTICATOR_CKSUM
= 6,
234 /* 7. TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator (includes TGS
235 authenticator subkey), encrypted with the TGS session key */
236 SHISHI_KEYUSAGE_TGSREQ_APREQ_AUTHENTICATOR
= 7,
237 /* 8. TGS-REP encrypted part (includes application session key), encrypted
238 with the TGS session key */
239 SHISHI_KEYUSAGE_ENCTGSREPPART_SESSION_KEY
= 8,
240 /* 9. TGS-REP encrypted part (includes application session key), encrypted
241 with the TGS authenticator subkey */
242 SHISHI_KEYUSAGE_ENCTGSREPPART_AUTHENTICATOR_KEY
= 9,
243 /* 10. AP-REQ Authenticator cksum, keyed with the application
245 SHISHI_KEYUSAGE_APREQ_AUTHENTICATOR_CKSUM
= 10,
246 /* 11. AP-REQ Authenticator (includes application authenticator subkey),
247 encrypted with the application session key */
248 SHISHI_KEYUSAGE_APREQ_AUTHENTICATOR
= 11,
249 /* 12. AP-REP encrypted part (includes application session subkey),
250 encrypted with the application session key */
251 SHISHI_KEYUSAGE_ENCAPREPPART
= 12,
252 /* 13. KRB-PRIV encrypted part, encrypted with a key chosen by the
254 SHISHI_KEYUSAGE_KRB_PRIV
= 13,
255 /* 14. KRB-CRED encrypted part, encrypted with a key chosen by the
257 SHISHI_KEYUSAGE_KRB_CRED
= 14,
258 /* 15. KRB-SAFE cksum, keyed with a key chosen by the application */
259 SHISHI_KEYUSAGE_KRB_SAFE
= 15,
260 /* 18. KRB-ERROR checksum (e-cksum) */
261 SHISHI_KEYUSAGE_KRB_ERROR
= 18,
262 /* 19. AD-KDCIssued checksum (ad-checksum) */
263 SHISHI_KEYUSAGE_AD_KDCISSUED
= 19,
264 /* 20. Checksum for Mandatory Ticket Extensions */
265 SHISHI_KEYUSAGE_TICKET_EXTENSION
= 20,
266 /* 21. Checksum in Authorization Data in Ticket Extensions */
267 SHISHI_KEYUSAGE_TICKET_EXTENSION_AUTHORIZATION
= 21,
268 /* 22-24. Reserved for use in GSSAPI mechanisms derived from RFC 1964.
270 SHISHI_KEYUSAGE_GSS_R1
= 22,
271 SHISHI_KEYUSAGE_GSS_R2
= 23,
272 SHISHI_KEYUSAGE_GSS_R3
= 24
273 /* 25-511. Reserved for future use in Kerberos and related protocols. */
274 /* 512-1023. Reserved for uses internal to a Kerberos implementation. */
280 SHISHI_TKTSHINTFLAGS_ACCEPT_EXPIRED
= 1
282 Shishi_tkts_hintflags
;
284 struct Shishi_tkts_hint
288 const char *serverrealm
;
290 const char *clientrealm
;
295 typedef struct Shishi_tkts_hint Shishi_tkts_hint
;
297 typedef struct Shishi Shishi
;
298 typedef struct Shishi_tkt Shishi_tkt
;
299 typedef struct Shishi_tkts Shishi_tkts
;
300 typedef struct Shishi_as Shishi_as
;
301 typedef struct Shishi_tgs Shishi_tgs
;
302 typedef struct Shishi_ap Shishi_ap
;
303 typedef struct Shishi_key Shishi_key
;
304 typedef struct Shishi_safe Shishi_safe
;
305 #ifndef _SHISHI_HAS_LIBTASN1_H
306 typedef struct node_asn_struct
*ASN1_TYPE
;
308 typedef ASN1_TYPE Shishi_asn1
;
311 extern Shishi
*shishi (void);
312 extern int shishi_init (Shishi
** handle
);
313 extern int shishi_init_with_paths (Shishi
** handle
,
314 const char *tktsfile
,
315 const char *systemcfgfile
,
316 const char *usercfgfile
);
317 extern int shishi_init_server (Shishi
** handle
);
318 extern int shishi_init_server_with_paths (Shishi
** handle
,
319 const char *systemcfgfile
);
320 extern void shishi_warn (Shishi
* handle
, const char *fmt
, ...);
323 extern void shishi_done (Shishi
* handle
);
326 extern int shishi_cfg (Shishi
* handle
, char *option
);
327 extern int shishi_cfg_from_file (Shishi
* handle
, const char *cfg
);
328 extern int shishi_cfg_print (Shishi
* handle
, FILE * fh
);
329 extern const char *shishi_cfg_default_systemfile (Shishi
* handle
);
330 extern const char *shishi_cfg_default_userfile (Shishi
* handle
);
331 extern int shishi_cfg_clientkdcetype (Shishi
* handle
, int **etypes
);
332 extern int shishi_cfg_clientkdcetype_set (Shishi
* handle
, char *value
);
335 extern const char *shishi_strerror (int err
);
336 extern const char *shishi_strerror_details (Shishi
* handle
);
337 extern void shishi_error_set (Shishi
* handle
, const char *error
);
338 extern void shishi_error_printf (Shishi
* handle
, char *format
, ...);
339 extern void shishi_error_clear (Shishi
* handle
);
342 extern char *shishi_realm_default_guess (void);
343 extern const char *shishi_realm_default (Shishi
* handle
);
344 extern void shishi_realm_default_set (Shishi
* handle
, const char *realm
);
345 extern const char *shishi_realm_for_server_file (Shishi
* handle
,
347 extern const char *shishi_realm_for_server_dns (Shishi
* handle
,
349 extern const char *shishi_realm_for_server (Shishi
* handle
, char *server
);
352 extern char *shishi_principal_default_guess (void);
353 extern const char *shishi_principal_default (Shishi
* handle
);
354 extern void shishi_principal_default_set (Shishi
* handle
,
355 const char *principal
);
356 extern int shishi_principal_name_get (Shishi
* handle
, Shishi_asn1 namenode
,
357 const char *namefield
, char *out
,
359 extern int shishi_principal_name_realm_get (Shishi
* handle
,
360 Shishi_asn1 namenode
,
361 const char *namefield
,
362 Shishi_asn1 realmnode
,
363 const char *realmfield
,
364 char *out
, size_t * outlen
);
365 extern int shishi_principal_name_set (Shishi
* handle
,
366 Shishi_asn1 namenode
,
367 const char *namefield
,
368 Shishi_name_type name_type
,
370 extern int shishi_principal_set (Shishi
* handle
,
371 Shishi_asn1 namenode
,
372 const char *namefield
,
376 extern int shishi_ticket_sname_get (Shishi
* handle
,
378 char *server
, int *serverlen
);
379 extern int shishi_ticket_sname_set (Shishi
* handle
,
381 Shishi_name_type name_type
,
383 extern int shishi_ticket_snamerealm_get (Shishi
* handle
, Shishi_asn1 ticket
,
385 int *serverrealmlen
);
386 extern int shishi_ticket_srealmserver_set (Shishi
* handle
,
387 Shishi_asn1 ticket
, char *realm
,
389 extern int shishi_ticket_set_server (Shishi
* handle
, Shishi_asn1 ticket
,
391 extern int shishi_ticket_realm_get (Shishi
* handle
, Shishi_asn1 ticket
,
392 char *realm
, int *realmlen
);
393 extern int shishi_ticket_realm_set (Shishi
* handle
, Shishi_asn1 ticket
,
395 extern int shishi_ticket_get_enc_part_etype (Shishi
* handle
,
396 Shishi_asn1 ticket
, int *etype
);
397 extern int shishi_ticket_set_enc_part (Shishi
* handle
, Shishi_asn1 ticket
,
398 int etype
, int kvno
, char *buf
,
400 extern int shishi_ticket_add_enc_part (Shishi
* handle
, Shishi_asn1 ticket
,
402 Shishi_asn1 encticketpart
);
403 extern int shishi_enckdcreppart_key_set (Shishi
* handle
,
404 Shishi_asn1 enckdcreppart
,
406 extern int shishi_ticket_decrypt (Shishi
* handle
, Shishi_asn1 ticket
,
408 Shishi_asn1
* encticketpart
);
411 extern Shishi_asn1
shishi_tkt_ticket (Shishi_tkt
* tkt
);
412 extern Shishi_asn1
shishi_tkt_kdcrep (Shishi_tkt
* tkt
);
413 extern Shishi_asn1
shishi_tkt_enckdcreppart (Shishi_tkt
* tkt
);
414 extern void shishi_tkt_enckdcreppart_set (Shishi_tkt
* tkt
,
415 Shishi_asn1 enckdcreppart
);
416 extern Shishi_asn1
shishi_tkt_encticketpart (Shishi_tkt
* tkt
);
417 extern void shishi_tkt_encticketpart_set (Shishi_tkt
* tkt
,
418 Shishi_asn1 encticketpart
);
419 extern Shishi_key
*shishi_tkt_key (Shishi_tkt
* tkt
);
420 extern int shishi_tkt_key_set (Shishi_tkt
* tkt
, Shishi_key
* key
);
421 extern int shishi_tkt (Shishi
* handle
, Shishi_tkt
** tkt
);
422 extern Shishi_tkt
*shishi_tkt2 (Shishi
* handle
,
424 Shishi_asn1 enckdcreppart
,
426 extern int shishi_tkt_pretty_print (Shishi_tkt
* tkt
, FILE * fh
);
427 extern int shishi_tkt_realm (Shishi_tkt
* tkt
, char *realm
, int *realmlen
);
428 extern int shishi_tkt_cnamerealm (Shishi_tkt
* tkt
,
429 char *cnamerealm
, int *cnamerealmlen
);
430 extern int shishi_tkt_cnamerealm_p (Shishi_tkt
* tkt
, const char *client
);
431 extern int shishi_tkt_client (Shishi_tkt
* tkt
, char *client
, int *clientlen
);
432 extern int shishi_tkt_client_p (Shishi_tkt
* tkt
, const char *client
);
433 extern int shishi_tkt_clientrealm_set (Shishi_tkt
* tkt
,
434 char *realm
, char *client
);
435 extern int shishi_tkt_serverrealm_set (Shishi_tkt
* tkt
,
436 char *realm
, char *server
);
437 extern int shishi_tkt_build (Shishi_tkt
* tkt
, Shishi_key
* key
);
438 extern int shishi_tkt_lastreq (Shishi_tkt
* tkt
,
439 char *lrtime
, int *lrtimelen
, int lrtype
);
440 extern time_t shishi_tkt_lastreqc (Shishi_tkt
* tkt
, Shihi_lrtype lrtype
);
441 extern int shishi_tkt_lastreq_pretty_print (Shishi_tkt
* tkt
, FILE * fh
);
442 extern int shishi_tkt_authtime (Shishi_tkt
* tkt
,
443 char *authtime
, int *authtimelen
);
444 extern time_t shishi_tkt_authctime (Shishi_tkt
* tkt
);
445 extern int shishi_tkt_starttime (Shishi_tkt
* tkt
,
446 char *starttime
, int *starttimelen
);
447 extern time_t shishi_tkt_startctime (Shishi_tkt
* tkt
);
448 extern int shishi_tkt_endtime (Shishi_tkt
* tkt
,
449 char *endtime
, int *endtimelen
);
450 extern time_t shishi_tkt_endctime (Shishi_tkt
* tkt
);
451 extern int shishi_tkt_renew_till (Shishi_tkt
* tkt
,
452 char *renewtilltime
, int *renewtilllen
);
453 extern time_t shishi_tkt_renew_tillc (Shishi_tkt
* tkt
);
454 extern int shishi_tkt_keytype (Shishi_tkt
* tkt
, int *etype
);
455 extern int shishi_tkt_keytype_p (Shishi_tkt
* tkt
, int etype
);
456 extern int shishi_tkt_server (Shishi_tkt
* tkt
,
457 char *service
, int *servicelen
);
458 extern int shishi_tkt_server_p (Shishi_tkt
* tkt
, const char *service
);
459 extern int shishi_tkt_server_realm (Shishi_tkt
* tkt
,
460 char *serverrealm
, int *serverrealmlen
);
461 extern int shishi_tkt_valid_at_time_p (Shishi_tkt
* tkt
, time_t now
);
462 extern int shishi_tkt_valid_now_p (Shishi_tkt
* tkt
);
463 extern int shishi_tkt_decrypt (Shishi_tkt
* tkt
, Shishi_key
* key
);
464 extern void shishi_tkt_done (Shishi_tkt
* tkt
);
465 extern int shishi_tkt_flags (Shishi_tkt
* tkt
, int *flags
);
466 extern int shishi_tkt_flags_set (Shishi_tkt
* tkt
, int flags
);
467 extern int shishi_tkt_forwardable_p (Shishi_tkt
* tkt
);
468 extern int shishi_tkt_forwarded_p (Shishi_tkt
* tkt
);
469 extern int shishi_tkt_proxiable_p (Shishi_tkt
* tkt
);
470 extern int shishi_tkt_proxy_p (Shishi_tkt
* tkt
);
471 extern int shishi_tkt_may_postdate_p (Shishi_tkt
* tkt
);
472 extern int shishi_tkt_postdated_p (Shishi_tkt
* tkt
);
473 extern int shishi_tkt_invalid_p (Shishi_tkt
* tkt
);
474 extern int shishi_tkt_renewable_p (Shishi_tkt
* tkt
);
475 extern int shishi_tkt_initial_p (Shishi_tkt
* tkt
);
476 extern int shishi_tkt_pre_authent_p (Shishi_tkt
* tkt
);
477 extern int shishi_tkt_hw_authent_p (Shishi_tkt
* tkt
);
478 extern int shishi_tkt_transited_policy_checked_p (Shishi_tkt
* tkt
);
479 extern int shishi_tkt_ok_as_delegate_p (Shishi_tkt
* tkt
);
482 extern char *shishi_tkts_default_file_guess (void);
483 extern const char *shishi_tkts_default_file (Shishi
* handle
);
484 extern void shishi_tkts_default_file_set (Shishi
* handle
,
485 const char *tktsfile
);
486 extern Shishi_tkts
*shishi_tkts_default (Shishi
* handle
);
487 extern int shishi_tkts (Shishi
* handle
, Shishi_tkts
** tkts
);
488 extern Shishi_tkt
*shishi_tkts_nth (Shishi_tkts
* tkts
, int ticketno
);
489 extern int shishi_tkts_size (Shishi_tkts
* tkts
);
490 extern int shishi_tkts_add (Shishi_tkts
* tkts
, Shishi_tkt
* ticket
);
491 extern int shishi_tkts_new (Shishi_tkts
* tkts
,
493 Shishi_asn1 enckdcreppart
, Shishi_asn1 kdcrep
);
494 extern int shishi_tkts_remove (Shishi_tkts
* tkts
, int ticketno
);
495 extern int shishi_tkts_expire (Shishi_tkts
* tkts
);
496 extern int shishi_tkts_print_for_service (Shishi_tkts
* tkts
,
498 const char *service
);
499 extern int shishi_tkts_print (Shishi_tkts
* tkts
, FILE * fh
);
500 extern int shishi_tkts_write (Shishi_tkts
* tkts
, FILE * fh
);
501 extern int shishi_tkts_to_file (Shishi_tkts
* tkts
, const char *filename
);
502 extern int shishi_tkts_read (Shishi_tkts
* tkts
, FILE * fh
);
503 extern int shishi_tkts_from_file (Shishi_tkts
* tkts
, const char *filename
);
504 extern void shishi_tkts_done (Shishi_tkts
** tkts
);
505 extern int shishi_tkt_match_p (Shishi_tkt
* tkt
, Shishi_tkts_hint
* hint
);
506 extern Shishi_tkt
*shishi_tkts_find (Shishi_tkts
* tkts
,
507 Shishi_tkts_hint
* hint
);
508 extern Shishi_tkt
*shishi_tkts_find_for_clientserver (Shishi_tkts
* tkts
,
511 extern Shishi_tkt
*shishi_tkts_find_for_server (Shishi_tkts
* tkts
,
513 extern Shishi_tkt
*shishi_tkts_get (Shishi_tkts
* tkts
,
514 Shishi_tkts_hint
* hint
);
515 extern Shishi_tkt
*shishi_tkts_get_for_clientserver (Shishi_tkts
* tkts
,
518 extern Shishi_tkt
*shishi_tkts_get_for_server (Shishi_tkts
* tkts
,
520 extern Shishi_tkt
*shishi_tkts_get_for_localservicepasswd (Shishi_tkts
* tkts
,
528 shishi_enckdcreppart_print (Shishi
* handle
,
529 FILE * fh
, Shishi_asn1 enckdcreppart
);
531 shishi_enckdcreppart_save (Shishi
* handle
,
532 FILE * fh
, Shishi_asn1 enckdcreppart
);
534 shishi_enckdcreppart_parse (Shishi
* handle
,
535 FILE * fh
, Shishi_asn1
* enckdcreppart
);
537 shishi_enckdcreppart_read (Shishi
* handle
,
538 FILE * fh
, Shishi_asn1
* enckdcreppart
);
539 extern int shishi_ticket_save (Shishi
* handle
, FILE * fh
,
541 extern int shishi_ticket_print (Shishi
* handle
, FILE * fh
,
543 extern int shishi_kdc_req_print (Shishi
* handle
, FILE * fh
,
545 extern int shishi_kdc_rep_print (Shishi
* handle
, FILE * fh
,
547 extern int shishi_kdc_print (Shishi
* handle
, FILE * fh
, Shishi_asn1 asreq
,
548 Shishi_asn1 asrep
, Shishi_asn1 encasreppart
);
549 extern int shishi_kdc_req_parse (Shishi
* handle
, FILE * fh
,
550 Shishi_asn1
* asreq
);
551 extern int shishi_kdc_rep_parse (Shishi
* handle
, FILE * fh
,
552 Shishi_asn1
* asrep
);
553 extern int shishi_ticket_parse (Shishi
* handle
, FILE * fh
,
554 Shishi_asn1
* ticket
);
555 extern int shishi_ticket_read (Shishi
* handle
, FILE * fh
,
556 Shishi_asn1
* ticket
);
558 /* authenticator.c */
559 extern Shishi_asn1
shishi_authenticator (Shishi
* handle
);
560 extern int shishi_authenticator_set_crealm (Shishi
* handle
,
563 extern int shishi_authenticator_set_cname (Shishi
* handle
,
564 Shishi_asn1 authenticator
,
565 Shishi_name_type name_type
,
566 const char *cname
[]);
567 extern int shishi_authenticator_client_set (Shishi
* handle
,
568 Shishi_asn1 authenticator
,
570 extern int shishi_authenticator_ctime_get (Shishi
* handle
,
571 Shishi_asn1 authenticator
,
573 extern int shishi_authenticator_cusec_get (Shishi
* handle
,
574 Shishi_asn1 authenticator
,
576 extern int shishi_authenticator_cname_get (Shishi
* handle
,
577 Shishi_asn1 authenticator
,
578 char *cname
, int *cnamelen
);
579 extern int shishi_authenticator_cnamerealm_get (Shishi
* handle
,
580 Shishi_asn1 authenticator
,
583 extern int shishi_authenticator_remove_cksum (Shishi
* handle
,
584 Shishi_asn1 authenticator
);
585 extern int shishi_authenticator_cksum (Shishi
* handle
,
586 Shishi_asn1 authenticator
,
588 char *cksum
, size_t * cksumlen
);
589 extern int shishi_authenticator_set_cksum (Shishi
* handle
,
590 Shishi_asn1 authenticator
,
592 char *cksum
, int cksumlen
);
593 extern int shishi_authenticator_add_cksum (Shishi
* handle
,
594 Shishi_asn1 authenticator
,
597 char *data
, int datalen
);
599 shishi_authenticator_clear_authorizationdata (Shishi
* handle
,
600 Shishi_asn1 authenticator
);
602 shishi_authenticator_add_authorizationdata (Shishi
* handle
,
603 Shishi_asn1 authenticator
,
605 char *addata
, int addatalen
);
607 shishi_authenticator_authorizationdata (Shishi
* handle
,
608 Shishi_asn1 authenticator
,
610 char *addata
, int *addatalen
,
612 extern int shishi_authenticator_read (Shishi
* handle
, FILE * fh
,
613 Shishi_asn1
* authenticator
);
614 extern int shishi_authenticator_parse (Shishi
* handle
, FILE * fh
,
615 Shishi_asn1
* authenticator
);
616 extern int shishi_authenticator_from_file (Shishi
* handle
,
617 Shishi_asn1
* authenticator
,
618 int filetype
, char *filename
);
619 extern int shishi_authenticator_print (Shishi
* handle
, FILE * fh
,
620 Shishi_asn1 authenticator
);
621 extern int shishi_authenticator_to_file (Shishi
* handle
,
622 Shishi_asn1 authenticator
,
623 int filetype
, char *filename
);
624 extern int shishi_authenticator_save (Shishi
* handle
, FILE * fh
,
625 Shishi_asn1 authenticator
);
628 extern Shishi_asn1
shishi_as_req (Shishi_as
* as
);
629 extern void shishi_as_req_set (Shishi_as
* as
, Shishi_asn1 asreq
);
630 extern int shishi_as_req_der (Shishi_as
* as
, char *out
, int *outlen
);
631 extern int shishi_as_req_der_set (Shishi_as
* as
, char *der
, int derlen
);
632 extern Shishi_asn1
shishi_as_rep (Shishi_as
* as
);
633 extern void shishi_as_rep_set (Shishi_as
* as
, Shishi_asn1 asrep
);
634 extern int shishi_as_rep_build (Shishi_as
* as
, Shishi_key
* key
);
635 extern int shishi_as_rep_der (Shishi_as
* as
, char *out
, int *outlen
);
636 extern int shishi_as_rep_der_set (Shishi_as
* as
, char *der
, int derlen
);
637 extern Shishi_asn1
shishi_as_encasreppart (Shishi_as
* as
);
638 extern void shishi_as_encasreppart_set (Shishi_as
* as
,
639 Shishi_asn1 encasreppart
);
640 extern Shishi_asn1
shishi_as_krberror (Shishi_as
* as
);
641 extern int shishi_as_krberror_der (Shishi_as
* as
, char *out
, int *outlen
);
642 extern void shishi_as_krberror_set (Shishi_as
* as
, Shishi_asn1 krberror
);
643 extern Shishi_tkt
*shishi_as_tkt (Shishi_as
* as
);
644 extern void shishi_as_tkt_set (Shishi_as
* as
, Shishi_tkt
* ticket
);
645 extern int shishi_as (Shishi
* handle
, Shishi_as
** as
);
646 extern int shishi_as_password_cnamerealmsname (Shishi
* handle
,
650 char *realm
, char *sname
);
651 extern int shishi_as_key_cnamerealmsname (Shishi
* handle
,
655 char *realm
, char *sname
);
656 extern int shishi_as_cnamerealmsname (Shishi
* handle
,
660 char *cname
, char *realm
, char *sname
);
661 extern int shishi_as_sendrecv (Shishi_as
* as
);
662 extern int shishi_as_rep_process (Shishi_as
* as
,
663 Shishi_key
* key
, const char *password
);
666 extern int shishi_tgs (Shishi
* handle
, Shishi_tgs
** tgs
);
667 extern Shishi_tkt
*shishi_tgs_tgtkt (Shishi_tgs
* tgs
);
668 extern void shishi_tgs_tgtkt_set (Shishi_tgs
* tgs
, Shishi_tkt
* tgticket
);
669 extern Shishi_ap
*shishi_tgs_ap (Shishi_tgs
* tgs
);
670 extern Shishi_asn1
shishi_tgs_req (Shishi_tgs
* tgs
);
671 extern int shishi_tgs_req_build (Shishi_tgs
* tgs
);
672 extern Shishi_asn1
shishi_tgs_rep (Shishi_tgs
* tgs
);
673 extern int shishi_tgs_rep_process (Shishi_tgs
* tgs
);
674 extern Shishi_asn1
shishi_tgs_krberror (Shishi_tgs
* tgs
);
675 extern Shishi_tkt
*shishi_tgs_tkt (Shishi_tgs
* tgs
);
676 extern void shishi_tgs_tkt_set (Shishi_tgs
* tgs
, Shishi_tkt
* ticket
);
677 extern int shishi_tgs_sendrecv (Shishi_tgs
* tgs
);
678 extern int shishi_tgs_set_server (Shishi_tgs
* tgs
, const char *server
);
679 extern int shishi_tgs_set_realm (Shishi_tgs
* tgs
, const char *realm
);
680 extern int shishi_tgs_set_realmserver (Shishi_tgs
* tgs
,
681 const char *realm
, const char *server
);
684 extern int shishi_kdcreq (Shishi
* handle
, char *realm
,
685 char *service
, Shishi_asn1
* req
);
686 extern Shishi_asn1
shishi_asreq (Shishi
* handle
);
687 extern Shishi_asn1
shishi_asreq_rsc (Shishi
* handle
, char *realm
,
688 char *server
, char *client
);
689 extern Shishi_asn1
shishi_tgsreq (Shishi
* handle
);
690 extern Shishi_asn1
shishi_tgsreq_rst (Shishi
* handle
, char *realm
,
691 char *server
, Shishi_tkt
* ticket
);
692 extern int shishi_kdcreq_save (Shishi
* handle
, FILE * fh
,
694 extern int shishi_kdcreq_print (Shishi
* handle
, FILE * fh
,
696 extern int shishi_kdcreq_to_file (Shishi
* handle
, Shishi_asn1 kdcreq
,
697 int filetype
, char *filename
);
698 extern int shishi_kdcreq_parse (Shishi
* handle
, FILE * fh
,
699 Shishi_asn1
* kdcreq
);
700 extern int shishi_kdcreq_read (Shishi
* handle
, FILE * fh
,
701 Shishi_asn1
* kdcreq
);
702 extern int shishi_kdcreq_from_file (Shishi
* handle
, Shishi_asn1
* kdcreq
,
703 int filetype
, char *filename
);
704 extern int shishi_asreq_cnamerealm_get (Shishi
* handle
, Shishi_asn1 kdcreq
,
706 size_t * cnamerealmlen
);
707 extern int shishi_kdcreq_nonce (Shishi
* handle
, Shishi_asn1 kdcreq
,
708 unsigned long *nonce
);
709 extern int shishi_kdcreq_cname_get (Shishi
* handle
,
711 char *cname
, size_t * cnamelen
);
712 extern int shishi_kdcreq_set_cname (Shishi
* handle
, Shishi_asn1 kdcreq
,
713 Shishi_name_type name_type
,
714 const char *principal
);
715 extern int shishi_kdcreq_sname_get (Shishi
* handle
, Shishi_asn1 kdcreq
,
716 char *sname
, size_t * snamelen
);
717 extern int shishi_kdcreq_snamerealm_get (Shishi
* handle
, Shishi_asn1 kdcreq
,
719 size_t * snamerealmlen
);
720 extern int shishi_kdcreq_set_sname (Shishi
* handle
, Shishi_asn1 kdcreq
,
721 Shishi_name_type name_type
,
722 const char *sname
[]);
723 extern int shishi_kdcreq_realm_get (Shishi
* handle
, Shishi_asn1 kdcreq
,
724 char *realm
, int *realmlen
);
725 extern int shishi_kdcreq_set_realm (Shishi
* handle
, Shishi_asn1 node
,
727 extern int shishi_kdcreq_set_server (Shishi
* handle
, Shishi_asn1 req
,
728 const char *service
);
729 extern int shishi_kdcreq_set_realmserver (Shishi
* handle
, Shishi_asn1 req
,
730 char *realm
, char *service
);
731 extern int shishi_kdcreq_etype (Shishi
* handle
, Shishi_asn1 kdcreq
,
732 int *etype
, int netype
);
733 extern int shishi_kdcreq_set_etype (Shishi
* handle
, Shishi_asn1 kdcreq
,
734 int *etype
, int netype
);
735 extern int shishi_kdcreq_clear_padata (Shishi
* handle
, Shishi_asn1 kdcreq
);
736 extern int shishi_kdcreq_add_padata (Shishi
* handle
,
738 int padatatype
, char *data
, int datalen
);
739 extern int shishi_kdcreq_add_padata_tgs (Shishi
* handle
,
743 /* enckdcreppart.c */
744 extern Shishi_asn1
shishi_enckdcreppart (Shishi
* handle
);
745 extern Shishi_asn1
shishi_encasreppart (Shishi
* handle
);
746 extern int shishi_enckdcreppart_srealmserver_set (Shishi
* handle
,
747 Shishi_asn1 enckdcreppart
,
750 extern int shishi_enckdcreppart_nonce_set (Shishi
* handle
,
751 Shishi_asn1 enckdcreppart
,
752 unsigned long nonce
);
754 shishi_enckdcreppart_populate_encticketpart (Shishi
* handle
,
755 Shishi_asn1 enckdcreppart
,
756 Shishi_asn1 encticketpart
);
757 extern int shishi_enckdcreppart_flags_set (Shishi
* handle
,
758 Shishi_asn1 enckdcreppart
,
762 extern int shishi_as_derive_salt (Shishi
* handle
,
764 Shishi_asn1 asrep
, char *salt
,
766 extern int shishi_tgs_process (Shishi
* handle
, Shishi_asn1 tgsreq
,
768 Shishi_asn1 oldenckdcreppart
,
769 Shishi_asn1
* enckdcreppart
);
770 extern int shishi_as_process (Shishi
* handle
, Shishi_asn1 asreq
,
773 Shishi_asn1
* enckdcreppart
);
774 extern int shishi_kdc_process (Shishi
* handle
, Shishi_asn1 kdcreq
,
775 Shishi_asn1 kdcrep
, Shishi_key
* key
,
776 int keyusage
, Shishi_asn1
* enckdcreppart
);
777 extern int shishi_kdcreq_sendrecv (Shishi
* handle
, Shishi_asn1 kdcreq
,
778 Shishi_asn1
* kdcrep
);
779 extern int shishi_kdc_copy_crealm (Shishi
* handle
, Shishi_asn1 kdcrep
,
780 Shishi_asn1 encticketpart
);
781 extern int shishi_as_check_crealm (Shishi
* handle
, Shishi_asn1 asreq
,
783 extern int shishi_kdc_copy_cname (Shishi
* handle
, Shishi_asn1 kdcrep
,
784 Shishi_asn1 encticketpart
);
785 extern int shishi_as_check_cname (Shishi
* handle
, Shishi_asn1 asreq
,
787 extern int shishi_kdc_copy_nonce (Shishi
* handle
, Shishi_asn1 kdcreq
,
788 Shishi_asn1 enckdcreppart
);
789 extern int shishi_kdc_check_nonce (Shishi
* handle
, Shishi_asn1 kdcreq
,
790 Shishi_asn1 enckdcreppart
);
793 extern Shishi_asn1
shishi_asrep (Shishi
* handle
);
794 extern Shishi_asn1
shishi_tgsrep (Shishi
* handle
);
795 extern int shishi_kdcrep_save (Shishi
* handle
, FILE * fh
,
797 extern int shishi_kdcrep_print (Shishi
* handle
, FILE * fh
,
799 extern int shishi_kdcrep_to_file (Shishi
* handle
, Shishi_asn1 kdcrep
,
800 int filetype
, char *filename
);
801 extern int shishi_kdcrep_parse (Shishi
* handle
, FILE * fh
,
802 Shishi_asn1
* kdcrep
);
803 extern int shishi_kdcrep_read (Shishi
* handle
, FILE * fh
,
804 Shishi_asn1
* kdcrep
);
805 extern int shishi_kdcrep_from_file (Shishi
* handle
, Shishi_asn1
* kdcrep
,
806 int filetype
, char *filename
);
807 extern int shishi_kdcrep_clear_padata (Shishi
* handle
, Shishi_asn1 kdcrep
);
808 extern int shishi_kdcrep_get_enc_part_etype (Shishi
* handle
,
809 Shishi_asn1 asrep
, int *etype
);
810 extern int shishi_kdcrep_add_enc_part (Shishi
* handle
,
814 Shishi_asn1 enckdcreppart
);
815 extern int shishi_kdcrep_get_ticket (Shishi
* handle
,
817 Shishi_asn1
* ticket
);
818 extern int shishi_kdcrep_set_ticket (Shishi
* handle
, Shishi_asn1 kdcrep
,
820 extern int shishi_kdcrep_crealm_set (Shishi
* handle
,
821 Shishi_asn1 kdcrep
, const char *crealm
);
822 extern int shishi_kdcrep_cname_set (Shishi
* handle
,
824 Shishi_name_type name_type
,
826 extern int shishi_kdcrep_client_set (Shishi
* handle
, Shishi_asn1 kdcrep
,
828 extern int shishi_kdcrep_crealmserver_set (Shishi
* handle
,
832 extern int shishi_kdcrep_set_enc_part (Shishi
* handle
, Shishi_asn1 kdcrep
,
833 int etype
, int kvno
, char *buf
,
837 extern Shishi_asn1
shishi_krberror (Shishi
* handle
);
838 extern int shishi_krberror_print (Shishi
* handle
, FILE * fh
,
839 Shishi_asn1 krberror
);
840 extern int shishi_krberror_save (Shishi
* handle
, FILE * fh
,
841 Shishi_asn1 krberror
);
842 extern int shishi_krberror_to_file (Shishi
* handle
, Shishi_asn1 krberror
,
843 int filetype
, char *filename
);
844 extern int shishi_krberror_parse (Shishi
* handle
, FILE * fh
,
845 Shishi_asn1
* krberror
);
846 extern int shishi_krberror_read (Shishi
* handle
, FILE * fh
,
847 Shishi_asn1
* krberror
);
848 extern int shishi_krberror_from_file (Shishi
* handle
, Shishi_asn1
* krberror
,
849 int filetype
, char *filename
);
850 extern const char *shishi_krberror_errorcode_message (Shishi
* handle
,
852 extern const char *shishi_krberror_message (Shishi
* handle
,
853 Shishi_asn1 krberror
);
854 extern int shishi_krberror_etext (Shishi
* handle
, Shishi_asn1 krberror
,
855 char *etext
, size_t * etextlen
);
856 extern int shishi_krberror_errorcode (Shishi
* handle
,
857 Shishi_asn1 krberror
, int *errorcode
);
858 extern int shishi_krberror_errorcode_fast (Shishi
* handle
,
859 Shishi_asn1 krberror
);
860 extern int shishi_krberror_pretty_print (Shishi
* handle
,
861 FILE * fh
, Shishi_asn1 krberror
);
864 extern void shishi_to_base64 (unsigned char *out
, const unsigned char *in
,
866 extern int shishi_from_base64 (unsigned char *out
, const unsigned char *in
);
869 extern int shishi_asprintf (char **result
, char *format
, ...);
872 extern const char *shishi_generalize_time (Shishi
* handle
, time_t t
);
873 extern time_t shishi_generalize_ctime (Shishi
* handle
, const char *t
);
876 extern int shishi_cipher_supported_p (int type
);
877 extern const char *shishi_cipher_name (int type
);
878 extern int shishi_cipher_blocksize (int type
);
879 extern int shishi_cipher_minpadsize (int type
);
880 extern int shishi_cipher_confoundersize (int type
);
881 extern size_t shishi_cipher_keylen (int type
);
882 extern size_t shishi_cipher_randomlen (int type
);
883 extern int shishi_cipher_defaultcksumtype (int type
);
884 extern int shishi_cipher_parse (const char *cipher
);
885 extern int shishi_string_to_key (Shishi
* handle
,
887 const char *password
,
891 const char *parameter
, Shishi_key
* outkey
);
892 extern int shishi_random_to_key (Shishi
* handle
,
895 int randomlen
, Shishi_key
* outkey
);
896 extern int shishi_encrypt (Shishi
* handle
,
899 char *in
, int inlen
, char *out
, int *outlen
);
900 extern int shishi_encrypt_iv (Shishi
* handle
,
905 char *out
, int *outlen
);
906 extern int shishi_encrypt_iv_etype (Shishi
* handle
,
912 char *out
, int *outlen
);
913 extern int shishi_decrypt (Shishi
* handle
,
916 char *in
, int inlen
, char *out
, int *outlen
);
917 extern int shishi_decrypt_iv (Shishi
* handle
,
922 char *out
, int *outlen
);
923 extern int shishi_decrypt_iv_etype (Shishi
* handle
,
929 char *out
, int *outlen
);
930 extern int shishi_checksum (Shishi
* handle
,
934 char *in
, int inlen
, char *out
, int *outlen
);
935 extern int shishi_randomize (Shishi
* handle
, char *data
, int datalen
);
936 extern int shishi_dk (Shishi
* handle
,
939 int constantlen
, Shishi_key
* derivedkey
);
940 extern int shishi_dr (Shishi
* handle
,
943 int derivedkeylen
, char *constant
, int constantlen
);
944 extern int shishi_n_fold (Shishi
* handle
, char *in
, int m
, char *out
, int n
);
947 extern const char *shishi_check_version (const char *req_version
);
950 extern int shishi_read_password (FILE * fh
, char *s
, int size
);
952 shishi_prompt_password_raw (FILE * in
, char *s
, int size
,
953 FILE * out
, char *format
, ...);
955 shishi_prompt_password (Shishi
* handle
,
956 FILE * in
, char *s
, int size
,
957 FILE * out
, char *format
, ...);
960 extern int shishi_a2d_field (Shishi
* handle
,
962 const char *field
, char *der
, int *len
);
963 extern int shishi_a2d (Shishi
* handle
, Shishi_asn1 node
,
964 char *der
, int *len
);
965 extern int shishi_a2d_new_field (Shishi
* handle
, Shishi_asn1 node
,
966 const char *field
, char **der
, int *len
);
967 extern int shishi_new_a2d (Shishi
* handle
, Shishi_asn1 node
,
968 char **der
, int *len
);
969 extern int shishi_asn1_done (Shishi
* handle
, Shishi_asn1 node
);
970 extern int shishi_asn1_read (Shishi
* handle
, Shishi_asn1 node
,
971 const char *field
, char *data
, size_t * datalen
);
972 extern int shishi_asn1_read_integer (Shishi
* handle
, Shishi_asn1 node
,
973 const char *field
, int *i
);
974 extern int shishi_asn1_write (Shishi
* handle
, Shishi_asn1 node
,
976 const char *data
, size_t datalen
);
977 extern int shishi_asn1_field (Shishi
* handle
,
979 char *data
, size_t * datalen
,
981 extern int shishi_asn1_optional_field (Shishi
* handle
,
983 char *data
, size_t * datalen
,
985 extern int shishi_asn1_integer_field (Shishi
* handle
,
986 Shishi_asn1 node
, int *i
,
988 extern int shishi_asn1_number_of_elements (Shishi
* handle
,
990 const char *field
, int *n
);
991 extern Shishi_asn1
shishi_asn1_asreq (Shishi
* handle
);
992 extern Shishi_asn1
shishi_asn1_asrep (Shishi
* handle
);
993 extern Shishi_asn1
shishi_asn1_tgsreq (Shishi
* handle
);
994 extern Shishi_asn1
shishi_asn1_tgsrep (Shishi
* handle
);
995 extern Shishi_asn1
shishi_asn1_apreq (Shishi
* handle
);
996 extern Shishi_asn1
shishi_asn1_aprep (Shishi
* handle
);
997 extern Shishi_asn1
shishi_asn1_ticket (Shishi
* handle
);
998 extern Shishi_asn1
shishi_asn1_encapreppart (Shishi
* handle
);
999 extern Shishi_asn1
shishi_asn1_encticketpart (Shishi
* handle
);
1000 extern Shishi_asn1
shishi_asn1_authenticator (Shishi
* handle
);
1001 extern Shishi_asn1
shishi_asn1_enckdcreppart (Shishi
* handle
);
1002 extern Shishi_asn1
shishi_asn1_encasreppart (Shishi
* handle
);
1003 extern Shishi_asn1
shishi_asn1_krberror (Shishi
* handle
);
1004 extern Shishi_asn1
shishi_asn1_krbsafe (Shishi
* handle
);
1005 extern Shishi_asn1
shishi_der2asn1 (Shishi
* handle
,
1006 const char *fieldname
,
1007 const char *nodename
,
1008 const char *der
, size_t derlen
);
1009 extern Shishi_asn1
shishi_der2asn1_ticket (Shishi
* handle
,
1010 const char *der
, size_t derlen
);
1011 extern Shishi_asn1
shishi_der2asn1_encticketpart (Shishi
* handle
,
1014 extern Shishi_asn1
shishi_der2asn1_asreq (Shishi
* handle
,
1015 const char *der
, size_t derlen
);
1016 extern Shishi_asn1
shishi_der2asn1_tgsreq (Shishi
* handle
,
1017 const char *der
, size_t derlen
);
1018 extern Shishi_asn1
shishi_der2asn1_asrep (Shishi
* handle
,
1019 const char *der
, size_t derlen
);
1020 extern Shishi_asn1
shishi_der2asn1_tgsrep (Shishi
* handle
,
1021 const char *der
, size_t derlen
);
1022 extern Shishi_asn1
shishi_der2asn1_kdcrep (Shishi
* handle
,
1023 const char *der
, size_t derlen
);
1024 extern Shishi_asn1
shishi_der2asn1_kdcreq (Shishi
* handle
,
1025 const char *der
, size_t derlen
);
1026 extern Shishi_asn1
shishi_der2asn1_encasreppart (Shishi
* handle
,
1029 extern Shishi_asn1
shishi_der2asn1_enctgsreppart (Shishi
* handle
,
1032 extern Shishi_asn1
shishi_der2asn1_enckdcreppart (Shishi
* handle
,
1035 extern Shishi_asn1
shishi_der2asn1_authenticator (Shishi
* handle
,
1038 extern Shishi_asn1
shishi_der2asn1_krberror (Shishi
* handle
,
1039 const char *der
, size_t derlen
);
1040 extern Shishi_asn1
shishi_der2asn1_krbsafe (Shishi
* handle
,
1041 const char *der
, size_t derlen
);
1042 extern Shishi_asn1
shishi_der2asn1_apreq (Shishi
* handle
,
1043 const char *der
, size_t derlen
);
1044 extern Shishi_asn1
shishi_der2asn1_aprep (Shishi
* handle
,
1045 const char *der
, size_t derlen
);
1046 extern Shishi_asn1
shishi_der2asn1_encapreppart (Shishi
* handle
,
1051 extern const char *shishi_ap_option2string (int option
);
1052 extern int shishi_ap_string2option (const char *str
);
1054 extern int shishi_ap (Shishi
* handle
, Shishi_ap
** ap
);
1055 extern int shishi_ap_set_tktoptions (Shishi_ap
* ap
,
1056 Shishi_tkt
* ticket
, int options
);
1057 extern int shishi_ap_tktoptions (Shishi
* handle
,
1059 Shishi_tkt
* ticket
, int options
);
1060 extern int shishi_ap_set_tktoptionsdata (Shishi_ap
* ap
,
1061 Shishi_tkt
* ticket
,
1062 int options
, char *data
, int len
);
1063 extern int shishi_ap_tktoptionsdata (Shishi
* handle
,
1065 Shishi_tkt
* ticket
,
1066 int options
, char *data
, int len
);
1067 extern int shishi_ap_set_tktoptionsasn1usage (Shishi_ap
* ap
,
1068 Shishi_tkt
* ticket
,
1072 int authenticatorcksumkeyusage
,
1073 int authenticatorkeyusage
);
1074 extern int shishi_ap_tktoptionsasn1usage (Shishi
* handle
,
1076 Shishi_tkt
* ticket
,
1080 int authenticatorcksumkeyusage
,
1081 int authenticatorkeyusage
);
1083 extern Shishi_tkt
*shishi_ap_tkt (Shishi_ap
* ap
);
1084 extern void shishi_ap_tkt_set (Shishi_ap
* ap
, Shishi_tkt
* ticket
);
1086 extern int shishi_ap_authenticator_cksumdata (Shishi_ap
* ap
,
1087 char *out
, int *len
);
1089 shishi_ap_authenticator_cksumdata_set (Shishi_ap
* ap
,
1090 char *authenticatorcksumdata
,
1091 int authenticatorcksumdatalen
);
1093 extern Shishi_asn1
shishi_ap_authenticator (Shishi_ap
* ap
);
1094 extern void shishi_ap_authenticator_set (Shishi_ap
* ap
,
1095 Shishi_asn1 authenticator
);
1097 extern Shishi_asn1
shishi_ap_req (Shishi_ap
* ap
);
1098 extern void shishi_ap_req_set (Shishi_ap
* ap
, Shishi_asn1 apreq
);
1099 extern int shishi_ap_req_der (Shishi_ap
* ap
, char *out
, int *outlen
);
1100 extern int shishi_ap_req_der_set (Shishi_ap
* ap
, char *der
, int derlen
);
1101 extern int shishi_ap_req_der_new (Shishi_ap
* ap
, char **out
, int *outlen
);
1102 extern int shishi_ap_req_build (Shishi_ap
* ap
);
1103 extern int shishi_ap_req_asn1 (Shishi_ap
* ap
, Shishi_asn1
* apreq
);
1104 extern int shishi_ap_req_process (Shishi_ap
* ap
, Shishi_key
* key
);
1105 extern int shishi_ap_req_build (Shishi_ap
* ap
);
1107 extern Shishi_asn1
shishi_ap_rep (Shishi_ap
* ap
);
1108 extern void shishi_ap_rep_set (Shishi_ap
* ap
, Shishi_asn1 aprep
);
1109 extern int shishi_ap_rep_der (Shishi_ap
* ap
, char *out
, int *outlen
);
1110 extern int shishi_ap_rep_der_set (Shishi_ap
* ap
, char *der
, int derlen
);
1111 extern int shishi_ap_rep_verify (Shishi_ap
* ap
);
1112 extern int shishi_ap_rep_verify_der (Shishi_ap
* ap
, char *der
, int derlen
);
1113 extern int shishi_ap_rep_verify_asn1 (Shishi_ap
* ap
, Shishi_asn1 aprep
);
1114 extern int shishi_ap_rep_asn1 (Shishi_ap
* ap
, Shishi_asn1
* aprep
);
1115 extern int shishi_ap_rep_build (Shishi_ap
* ap
);
1117 extern Shishi_asn1
shishi_ap_encapreppart (Shishi_ap
* ap
);
1118 extern void shishi_ap_encapreppart_set (Shishi_ap
* ap
,
1119 Shishi_asn1 encapreppart
);
1122 extern const char *shishi_key_principal (Shishi_key
* key
);
1123 extern void shishi_key_principal_set (Shishi_key
* key
,
1124 const char *principal
);
1125 extern const char *shishi_key_realm (Shishi_key
* key
);
1126 extern void shishi_key_realm_set (Shishi_key
* key
, const char *realm
);
1127 extern int shishi_key_type (Shishi_key
* key
);
1128 extern void shishi_key_type_set (Shishi_key
* key
, int type
);
1129 extern char *shishi_key_value (Shishi_key
* key
);
1130 extern void shishi_key_value_set (Shishi_key
* key
, const char *value
);
1131 extern int shishi_key_value_set_random (Shishi_key
* key
,
1132 char *random
, int randomlen
);
1133 extern int shishi_key_value_set_string (Shishi_key
* key
,
1137 int saltlen
, char *parameter
);
1138 extern const char *shishi_key_name (Shishi_key
* key
);
1139 extern size_t shishi_key_length (Shishi_key
* key
);
1140 extern int shishi_key_version (Shishi_key
* key
);
1141 extern void shishi_key_version_set (Shishi_key
* key
, int version
);
1142 extern int shishi_key (Shishi
* handle
, Shishi_key
** key
);
1143 extern void shishi_key_done (Shishi_key
** key
);
1144 extern void shishi_key_copy (Shishi_key
* dstkey
, Shishi_key
* srckey
);
1145 extern int shishi_key_print (Shishi
* handle
, FILE * fh
, Shishi_key
* key
);
1146 extern int shishi_key_to_file (Shishi
* handle
,
1147 const char *filename
, Shishi_key
* key
);
1148 extern int shishi_key_parse (Shishi
* handle
, FILE * fh
, Shishi_key
** key
);;
1149 extern int shishi_key_random (Shishi
* handle
, int type
, Shishi_key
** key
);
1150 extern int shishi_key_from_value (Shishi
* handle
,
1151 int type
, char *value
, Shishi_key
** key
);
1152 extern int shishi_key_from_base64 (Shishi
* handle
,
1153 int type
, char *value
, Shishi_key
** key
);
1154 extern int shishi_key_from_random (Shishi
* handle
,
1157 int randomlen
, Shishi_key
** outkey
);
1158 extern int shishi_key_from_string (Shishi
* handle
,
1160 const char *password
,
1164 const char *parameter
,
1165 Shishi_key
** outkey
);
1168 extern const char *shishi_hostkeys_default_file (Shishi
* handle
);
1169 extern void shishi_hostkeys_default_file_set (Shishi
* handle
,
1170 const char *hostkeysfile
);
1171 extern Shishi_key
*shishi_hostkeys_for_serverrealm_in_file (Shishi
* handle
,
1178 extern Shishi_key
*shishi_hostkeys_for_server_in_file (Shishi
* handle
,
1179 const char *filename
,
1180 const char *server
);
1181 extern Shishi_key
*shishi_hostkeys_for_server (Shishi
* handle
,
1182 const char *server
);
1183 extern Shishi_key
*shishi_hostkeys_for_serverrealm (Shishi
* handle
,
1186 extern Shishi_key
*shishi_hostkeys_for_localservicerealm (Shishi
* handle
,
1187 const char *service
,
1189 extern Shishi_key
*shishi_hostkeys_for_localservice (Shishi
* handle
,
1190 const char *service
);
1192 /* encapreppart.c */
1193 extern Shishi_asn1
shishi_encapreppart (Shishi
* handle
);
1194 extern int shishi_encapreppart_time_copy (Shishi
* handle
,
1195 Shishi_asn1 encapreppart
,
1196 Shishi_asn1 authenticator
);
1197 extern int shishi_encapreppart_ctime_get (Shishi
* handle
,
1198 Shishi_asn1 encapreppart
,
1200 extern int shishi_encapreppart_ctime_set (Shishi
* handle
,
1201 Shishi_asn1 encapreppart
,
1203 extern int shishi_encapreppart_cusec_get (Shishi
* handle
,
1204 Shishi_asn1 encapreppart
,
1206 extern int shishi_encapreppart_cusec_set (Shishi
* handle
,
1207 Shishi_asn1 encapreppart
,
1209 extern int shishi_encapreppart_print (Shishi
* handle
, FILE * fh
,
1210 Shishi_asn1 encapreppart
);
1211 extern int shishi_encapreppart_save (Shishi
* handle
, FILE * fh
,
1212 Shishi_asn1 encapreppart
);
1213 extern int shishi_encapreppart_to_file (Shishi
* handle
,
1214 Shishi_asn1 encapreppart
,
1215 int filetype
, char *filename
);
1216 extern int shishi_encapreppart_read (Shishi
* handle
, FILE * fh
,
1217 Shishi_asn1
* encapreppart
);
1218 extern int shishi_encapreppart_parse (Shishi
* handle
, FILE * fh
,
1219 Shishi_asn1
* encapreppart
);
1220 extern int shishi_encapreppart_from_file (Shishi
* handle
,
1221 Shishi_asn1
* encapreppart
,
1222 int filetype
, char *filename
);
1223 extern int shishi_encapreppart_get_key (Shishi
* handle
,
1224 Shishi_asn1 encapreppart
,
1225 int *keytype
, unsigned char *keyvalue
,
1227 extern int shishi_encapreppart_seqnumber_get (Shishi
* handle
,
1228 Shishi_asn1 encapreppart
,
1232 extern Shishi_asn1
shishi_apreq (Shishi
* handle
);
1233 extern int shishi_apreq_parse (Shishi
* handle
, FILE * fh
,
1234 Shishi_asn1
* apreq
);
1235 extern int shishi_apreq_from_file (Shishi
* handle
, Shishi_asn1
* apreq
,
1236 int filetype
, char *filename
);
1237 extern int shishi_apreq_print (Shishi
* handle
, FILE * fh
, Shishi_asn1 apreq
);
1238 extern int shishi_apreq_to_file (Shishi
* handle
, Shishi_asn1 apreq
,
1239 int filetype
, char *filename
);
1240 extern int shishi_apreq_read (Shishi
* handle
, FILE * fh
,
1241 Shishi_asn1
* apreq
);
1242 extern int shishi_apreq_save (Shishi
* handle
, FILE * fh
, Shishi_asn1 apreq
);
1243 extern int shishi_apreq_options (Shishi
* handle
, Shishi_asn1 apreq
,
1245 extern int shishi_apreq_options_set (Shishi
* handle
, Shishi_asn1 apreq
,
1247 extern int shishi_apreq_set_ticket (Shishi
* handle
, Shishi_asn1 apreq
,
1248 Shishi_asn1 ticket
);
1249 extern int shishi_apreq_set_authenticator (Shishi
* handle
, Shishi_asn1 apreq
,
1250 int etype
, char *buf
, int buflen
);
1251 extern int shishi_apreq_add_authenticator (Shishi
* handle
, Shishi_asn1 apreq
,
1252 Shishi_key
* key
, int keyusage
,
1253 Shishi_asn1 authenticator
);
1254 extern int shishi_apreq_options (Shishi
* handle
, Shishi_asn1 apreq
,
1256 extern int shishi_apreq_use_session_key_p (Shishi
* handle
,
1258 extern int shishi_apreq_mutual_required_p (Shishi
* handle
,
1260 extern int shishi_apreq_options_set (Shishi
* handle
, Shishi_asn1 apreq
,
1262 extern int shishi_apreq_options_add (Shishi
* handle
, Shishi_asn1 apreq
,
1264 extern int shishi_apreq_get_ticket (Shishi
* handle
, Shishi_asn1 apreq
,
1265 Shishi_asn1
* ticket
);
1266 extern int shishi_apreq_get_authenticator_etype (Shishi
* handle
,
1269 extern int shishi_apreq_decrypt (Shishi
* handle
, Shishi_asn1 apreq
,
1270 Shishi_key
* key
, int keyusage
,
1271 Shishi_asn1
* authenticator
);
1274 extern int shishi_kdcrep_decrypt (Shishi
* handle
,
1277 int keyusage
, Shishi_asn1
* enckdcreppart
);
1278 /* enckdcreppart.c */
1279 extern int shishi_enckdcreppart_get_key (Shishi
* handle
,
1280 Shishi_asn1 enckdcreppart
,
1282 extern int shishi_enckdcreppart_srealm_set (Shishi
* handle
,
1283 Shishi_asn1 enckdcreppart
,
1284 const char *srealm
);
1285 extern int shishi_enckdcreppart_sname_set (Shishi
* handle
,
1286 Shishi_asn1 enckdcreppart
,
1287 Shishi_name_type name_type
,
1289 extern int shishi_enckdcreppart_server_set (Shishi
* handle
,
1290 Shishi_asn1 enckdcreppart
,
1291 const char *server
);
1294 extern Shishi_asn1
shishi_aprep (Shishi
* handle
);
1295 extern int shishi_aprep_print (Shishi
* handle
, FILE * fh
, Shishi_asn1 aprep
);
1296 extern int shishi_aprep_save (Shishi
* handle
, FILE * fh
, Shishi_asn1 aprep
);
1297 extern int shishi_aprep_to_file (Shishi
* handle
, Shishi_asn1 aprep
,
1298 int filetype
, char *filename
);
1299 extern int shishi_aprep_read (Shishi
* handle
, FILE * fh
,
1300 Shishi_asn1
* aprep
);
1301 extern int shishi_aprep_parse (Shishi
* handle
, FILE * fh
,
1302 Shishi_asn1
* aprep
);
1303 extern int shishi_aprep_from_file (Shishi
* handle
, Shishi_asn1
* aprep
,
1304 int filetype
, char *filename
);
1305 extern int shishi_aprep_decrypt (Shishi
* handle
, Shishi_asn1 aprep
,
1306 Shishi_key
* key
, int keyusage
,
1307 Shishi_asn1
* encapreppart
);
1308 extern int shishi_aprep_verify (Shishi
* handle
, Shishi_asn1 authenticator
,
1309 Shishi_asn1 encapreppart
);
1310 extern int shishi_aprep_enc_part_set (Shishi
* handle
, Shishi_asn1 aprep
,
1311 int etype
, const char *buf
, int buflen
);
1312 extern int shishi_aprep_enc_part_add (Shishi
* handle
, Shishi_asn1 aprep
,
1313 Shishi_asn1 encticketpart
,
1314 Shishi_asn1 encapreppart
);
1315 extern int shishi_aprep_enc_part_make (Shishi
* handle
, Shishi_asn1 aprep
,
1316 Shishi_asn1 authenticator
,
1317 Shishi_asn1 encticketpart
);
1318 extern int shishi_aprep_get_enc_part_etype (Shishi
* handle
,
1319 Shishi_asn1 aprep
, int *etype
);
1322 extern int shishi_kdc_sendrecv (Shishi
* handle
,
1325 size_t inlen
, char *outdata
, size_t * outlen
);
1327 /* encticketpart.c */
1328 extern Shishi_asn1
shishi_encticketpart (Shishi
* handle
);
1329 extern int shishi_encticketpart_key_set (Shishi
* handle
,
1330 Shishi_asn1 encticketpart
,
1332 extern int shishi_encticketpart_get_enc_part_etype (Shishi
* handle
,
1333 Shishi_asn1 encticketpart
,
1335 extern int shishi_encticketpart_get_key (Shishi
* handle
,
1336 Shishi_asn1 encticketpart
,
1338 extern int shishi_encticketpart_crealm_set (Shishi
* handle
,
1339 Shishi_asn1 encticketpart
,
1341 extern int shishi_encticketpart_cname_get (Shishi
* handle
,
1342 Shishi_asn1 encticketpart
,
1343 char *cname
, int *cnamelen
);
1344 extern int shishi_encticketpart_cname_set (Shishi
* handle
,
1345 Shishi_asn1 encticketpart
,
1346 Shishi_name_type name_type
,
1347 const char *principal
);
1348 extern int shishi_encticketpart_cnamerealm_get (Shishi
* handle
,
1349 Shishi_asn1 encticketpart
,
1351 int *cnamerealmlen
);
1352 extern int shishi_encticketpart_print (Shishi
* handle
, FILE * fh
,
1353 Shishi_asn1 encticketpart
);
1354 extern int shishi_encticketpart_flags_set (Shishi
* handle
,
1355 Shishi_asn1 encticketpart
,
1357 extern int shishi_encticketpart_transited_set (Shishi
* handle
,
1358 Shishi_asn1 encticketpart
,
1362 extern int shishi_encticketpart_authtime_set (Shishi
* handle
,
1363 Shishi_asn1 encticketpart
,
1364 const char *authtime
);
1365 extern int shishi_encticketpart_endtime_set (Shishi
* handle
,
1366 Shishi_asn1 encticketpart
,
1367 const char *endtime
);
1368 extern int shishi_encticketpart_authtime (Shishi
* handle
,
1369 Shishi_asn1 encticketpart
,
1370 char *authtime
, int *authtimelen
);
1371 extern time_t shishi_encticketpart_authctime (Shishi
* handle
,
1372 Shishi_asn1 encticketpart
);
1375 extern int shishi_safe (Shishi
* handle
, Shishi_safe
** safe
);
1376 extern Shishi_key
*shishi_safe_key (Shishi_safe
* safe
);
1377 extern void shishi_safe_key_set (Shishi_safe
* safe
, Shishi_key
* key
);
1378 extern Shishi_asn1
shishi_safe_safe (Shishi_safe
* safe
);
1379 extern void shishi_safe_safe_set (Shishi_safe
* safe
, Shishi_asn1 asn1safe
);
1380 extern int shishi_safe_safe_der (Shishi_safe
* safe
, char *out
, int *outlen
);
1381 extern int shishi_safe_safe_der_set (Shishi_safe
* safe
,
1382 char *der
, int derlen
);
1383 extern int shishi_safe_print (Shishi
* handle
, FILE * fh
, Shishi_asn1 safe
);
1384 extern int shishi_safe_save (Shishi
* handle
, FILE * fh
, Shishi_asn1 safe
);
1385 extern int shishi_safe_to_file (Shishi
* handle
, Shishi_asn1 safe
,
1386 int filetype
, char *filename
);
1387 extern int shishi_safe_parse (Shishi
* handle
, FILE * fh
, Shishi_asn1
* safe
);
1388 extern int shishi_safe_read (Shishi
* handle
, FILE * fh
, Shishi_asn1
* safe
);
1389 extern int shishi_safe_from_file (Shishi
* handle
, Shishi_asn1
* safe
,
1390 int filetype
, char *filename
);
1391 extern int shishi_safe_cksum (Shishi
* handle
,
1393 int *cksumtype
, char *cksum
, size_t * cksumlen
);
1394 extern int shishi_safe_set_cksum (Shishi
* handle
,
1396 int cksumtype
, char *cksum
, int cksumlen
);
1397 extern int shishi_safe_user_data (Shishi
* handle
,
1399 char *userdata
, size_t * userdatalen
);
1400 extern int shishi_safe_set_user_data (Shishi
* handle
,
1402 char *userdata
, int userdatalen
);
1403 extern int shishi_safe_build (Shishi_safe
* safe
, Shishi_key
* key
);
1404 extern int shishi_safe_verify (Shishi_safe
* safe
, Shishi_key
* key
);