X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=gssapiP_eap.h;h=eef420601963975e10d11c5c387b81e7105cb500;hb=cff9dae64ddb2ead188889c9164961bd364e8cd2;hp=10a6e8223c13faf8b0816cf41cd87a3b3dcaa63c;hpb=31cef49681566dc99790812f31de834dfce02c74;p=mech_eap.orig diff --git a/gssapiP_eap.h b/gssapiP_eap.h index 10a6e82..eef4206 100644 --- a/gssapiP_eap.h +++ b/gssapiP_eap.h @@ -29,3 +29,166 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + +#ifndef _GSSAPIP_EAP_H_ +#define _GSSAPIP_EAP_H_ 1 + +#include +#include +#include +#include +#include +#include + +/* GSS includes */ +#include +#include +#include "gssapi_eap.h" +#include "util.h" + +/* Kerberos includes */ +#include + +/* EAP includes */ +#ifndef __cplusplus +#include +#include +#include +#include +#include +#endif + +#ifdef __cplusplus +struct rc_conf; +typedef struct rc_conf rc_handle; + +struct value_pair; +typedef struct value_pair VALUE_PAIR; +#else +#include +#include +#endif + +/* These name flags are informative and not actually used by anything yet */ +#define NAME_FLAG_NAI 0x00000001 +#define NAME_FLAG_SERVICE 0x00000002 +#define NAME_FLAG_COMPOSITE 0x00000004 + +struct gss_eap_saml_attr_ctx; +struct gss_eap_attr_ctx; + +struct gss_name_struct { + GSSEAP_MUTEX mutex; /* mutex protects attrCtx */ + OM_uint32 flags; + krb5_principal krbPrincipal; /* this is immutable */ + struct gss_eap_attr_ctx *attrCtx; +}; + +#define CRED_FLAG_INITIATE 0x00000001 +#define CRED_FLAG_ACCEPT 0x00000002 +#define CRED_FLAG_DEFAULT_IDENTITY 0x00000004 +#define CRED_FLAG_PASSWORD 0x00000008 + +struct gss_cred_id_struct { + GSSEAP_MUTEX mutex; + OM_uint32 flags; + gss_name_t name; + gss_buffer_desc password; + gss_OID_set mechanisms; + time_t expiryTime; +}; + +#define CTX_FLAG_INITIATOR 0x00000001 + +#define CTX_IS_INITIATOR(ctx) (((ctx)->flags & CTX_FLAG_INITIATOR) != 0) + +enum gss_eap_state { + EAP_STATE_AUTHENTICATE = 0, +#if 0 + EAP_STATE_KEY_TRANSPORT, + EAP_STATE_SECURE_ASSOCIATION, +#endif + EAP_STATE_GSS_CHANNEL_BINDINGS, + EAP_STATE_ESTABLISHED +}; + +#define CTX_IS_ESTABLISHED(ctx) ((ctx)->state == EAP_STATE_ESTABLISHED) + +/* Initiator context flags */ +#define CTX_FLAG_EAP_SUCCESS 0x00010000 +#define CTX_FLAG_EAP_RESTART 0x00020000 +#define CTX_FLAG_EAP_FAIL 0x00040000 +#define CTX_FLAG_EAP_RESP 0x00080000 +#define CTX_FLAG_EAP_NO_RESP 0x00100000 +#define CTX_FLAG_EAP_REQ 0x00200000 +#define CTX_FLAG_EAP_PORT_ENABLED 0x00400000 +#define CTX_FLAG_EAP_ALT_ACCEPT 0x00800000 +#define CTX_FLAG_EAP_ALT_REJECT 0x01000000 +#define CTX_FLAG_EAP_MASK 0xFFFF0000 + +struct gss_eap_initiator_ctx { + unsigned int idleWhile; +#ifndef __cplusplus + struct eap_peer_config eapPeerConfig; + struct eap_sm *eap; + struct wpabuf reqData; +#endif +}; + +struct gss_eap_acceptor_ctx { + rc_handle *radHandle; + VALUE_PAIR *avps; +}; + +struct gss_ctx_id_struct { + GSSEAP_MUTEX mutex; + enum gss_eap_state state; + OM_uint32 flags; + OM_uint32 gssFlags; + gss_OID mechanismUsed; + krb5_cksumtype checksumType; + krb5_enctype encryptionType; + krb5_keyblock rfc3961Key; + gss_name_t initiatorName; + gss_name_t acceptorName; + time_t expiryTime; + uint64_t sendSeq, recvSeq; + void *seqState; + union { + struct gss_eap_initiator_ctx initiator; + #define initiatorCtx ctxU.initiator + struct gss_eap_acceptor_ctx acceptor; + #define acceptorCtx ctxU.acceptor + } ctxU; +}; + +#define TOK_FLAG_SENDER_IS_ACCEPTOR 0x01 +#define TOK_FLAG_WRAP_CONFIDENTIAL 0x02 +#define TOK_FLAG_ACCEPTOR_SUBKEY 0x04 + +#define KEY_USAGE_ACCEPTOR_SEAL 22 +#define KEY_USAGE_ACCEPTOR_SIGN 23 +#define KEY_USAGE_INITIATOR_SEAL 24 +#define KEY_USAGE_INITIATOR_SIGN 25 +#define KEY_USAGE_CHANNEL_BINDINGS 64 + +/* wrap_iov.c */ +OM_uint32 +gssEapWrapOrGetMIC(OM_uint32 *minor, + gss_ctx_id_t ctx, + int conf_req_flag, + int *conf_state, + gss_iov_buffer_desc *iov, + int iov_count, + enum gss_eap_token_type toktype); + +OM_uint32 +gssEapUnwrapOrVerifyMIC(OM_uint32 *minor_status, + gss_ctx_id_t ctx, + int *conf_state, + gss_qop_t *qop_state, + gss_iov_buffer_desc *iov, + int iov_count, + enum gss_eap_token_type toktype); + +#endif /* _GSSAPIP_EAP_H_ */