| /* RxRPC key type | 
 |  * | 
 |  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | 
 |  * Written by David Howells (dhowells@redhat.com) | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU General Public License | 
 |  * as published by the Free Software Foundation; either version | 
 |  * 2 of the License, or (at your option) any later version. | 
 |  */ | 
 |  | 
 | #ifndef _KEYS_RXRPC_TYPE_H | 
 | #define _KEYS_RXRPC_TYPE_H | 
 |  | 
 | #include <linux/key.h> | 
 |  | 
 | /* | 
 |  * key type for AF_RXRPC keys | 
 |  */ | 
 | extern struct key_type key_type_rxrpc; | 
 |  | 
 | extern struct key *rxrpc_get_null_key(const char *); | 
 |  | 
 | /* | 
 |  * RxRPC key for Kerberos IV (type-2 security) | 
 |  */ | 
 | struct rxkad_key { | 
 | 	u32	vice_id; | 
 | 	u32	start;			/* time at which ticket starts */ | 
 | 	u32	expiry;			/* time at which ticket expires */ | 
 | 	u32	kvno;			/* key version number */ | 
 | 	u8	primary_flag;		/* T if key for primary cell for this user */ | 
 | 	u16	ticket_len;		/* length of ticket[] */ | 
 | 	u8	session_key[8];		/* DES session key */ | 
 | 	u8	ticket[0];		/* the encrypted ticket */ | 
 | }; | 
 |  | 
 | /* | 
 |  * Kerberos 5 principal | 
 |  *	name/name/name@realm | 
 |  */ | 
 | struct krb5_principal { | 
 | 	u8	n_name_parts;		/* N of parts of the name part of the principal */ | 
 | 	char	**name_parts;		/* parts of the name part of the principal */ | 
 | 	char	*realm;			/* parts of the realm part of the principal */ | 
 | }; | 
 |  | 
 | /* | 
 |  * Kerberos 5 tagged data | 
 |  */ | 
 | struct krb5_tagged_data { | 
 | 	/* for tag value, see /usr/include/krb5/krb5.h | 
 | 	 * - KRB5_AUTHDATA_* for auth data | 
 | 	 * -  | 
 | 	 */ | 
 | 	s32		tag; | 
 | 	u32		data_len; | 
 | 	u8		*data; | 
 | }; | 
 |  | 
 | /* | 
 |  * RxRPC key for Kerberos V (type-5 security) | 
 |  */ | 
 | struct rxk5_key { | 
 | 	u64			authtime;	/* time at which auth token generated */ | 
 | 	u64			starttime;	/* time at which auth token starts */ | 
 | 	u64			endtime;	/* time at which auth token expired */ | 
 | 	u64			renew_till;	/* time to which auth token can be renewed */ | 
 | 	s32			is_skey;	/* T if ticket is encrypted in another ticket's | 
 | 						 * skey */ | 
 | 	s32			flags;		/* mask of TKT_FLG_* bits (krb5/krb5.h) */ | 
 | 	struct krb5_principal	client;		/* client principal name */ | 
 | 	struct krb5_principal	server;		/* server principal name */ | 
 | 	u16			ticket_len;	/* length of ticket */ | 
 | 	u16			ticket2_len;	/* length of second ticket */ | 
 | 	u8			n_authdata;	/* number of authorisation data elements */ | 
 | 	u8			n_addresses;	/* number of addresses */ | 
 | 	struct krb5_tagged_data	session;	/* session data; tag is enctype */ | 
 | 	struct krb5_tagged_data *addresses;	/* addresses */ | 
 | 	u8			*ticket;	/* krb5 ticket */ | 
 | 	u8			*ticket2;	/* second krb5 ticket, if related to ticket (via | 
 | 						 * DUPLICATE-SKEY or ENC-TKT-IN-SKEY) */ | 
 | 	struct krb5_tagged_data *authdata;	/* authorisation data */ | 
 | }; | 
 |  | 
 | /* | 
 |  * list of tokens attached to an rxrpc key | 
 |  */ | 
 | struct rxrpc_key_token { | 
 | 	u16	security_index;		/* RxRPC header security index */ | 
 | 	struct rxrpc_key_token *next;	/* the next token in the list */ | 
 | 	union { | 
 | 		struct rxkad_key *kad; | 
 | 		struct rxk5_key *k5; | 
 | 	}; | 
 | }; | 
 |  | 
 | /* | 
 |  * structure of raw payloads passed to add_key() or instantiate key | 
 |  */ | 
 | struct rxrpc_key_data_v1 { | 
 | 	u16		security_index; | 
 | 	u16		ticket_length; | 
 | 	u32		expiry;			/* time_t */ | 
 | 	u32		kvno; | 
 | 	u8		session_key[8]; | 
 | 	u8		ticket[0]; | 
 | }; | 
 |  | 
 | /* | 
 |  * AF_RXRPC key payload derived from XDR format | 
 |  * - based on openafs-1.4.10/src/auth/afs_token.xg | 
 |  */ | 
 | #define AFSTOKEN_LENGTH_MAX		16384	/* max payload size */ | 
 | #define AFSTOKEN_STRING_MAX		256	/* max small string length */ | 
 | #define AFSTOKEN_DATA_MAX		64	/* max small data length */ | 
 | #define AFSTOKEN_CELL_MAX		64	/* max cellname length */ | 
 | #define AFSTOKEN_MAX			8	/* max tokens per payload */ | 
 | #define AFSTOKEN_BDATALN_MAX		16384	/* max big data length */ | 
 | #define AFSTOKEN_RK_TIX_MAX		12000	/* max RxKAD ticket size */ | 
 | #define AFSTOKEN_GK_KEY_MAX		64	/* max GSSAPI key size */ | 
 | #define AFSTOKEN_GK_TOKEN_MAX		16384	/* max GSSAPI token size */ | 
 | #define AFSTOKEN_K5_COMPONENTS_MAX	16	/* max K5 components */ | 
 | #define AFSTOKEN_K5_NAME_MAX		128	/* max K5 name length */ | 
 | #define AFSTOKEN_K5_REALM_MAX		64	/* max K5 realm name length */ | 
 | #define AFSTOKEN_K5_TIX_MAX		16384	/* max K5 ticket size */ | 
 | #define AFSTOKEN_K5_ADDRESSES_MAX	16	/* max K5 addresses */ | 
 | #define AFSTOKEN_K5_AUTHDATA_MAX	16	/* max K5 pieces of auth data */ | 
 |  | 
 | #endif /* _KEYS_RXRPC_TYPE_H */ |