#define KRB_KEYTYPE(key) ((key)->enctype)
+enum gss_eap_token_type {
+ TOK_TYPE_NONE = 0x0000, /* no token */
+ TOK_TYPE_MIC = 0x0404, /* RFC 4121 MIC token */
+ TOK_TYPE_WRAP = 0x0504, /* RFC 4121 wrap token */
+ TOK_TYPE_EXPORT_NAME = 0x0401, /* RFC 2743 exported name */
+ TOK_TYPE_EXPORT_NAME_COMPOSITE = 0x0402, /* draft-ietf-kitten-gss-naming */
+ TOK_TYPE_DELETE_CONTEXT = 0x0405, /* RFC 2743 delete context */
+ TOK_TYPE_EAP_RESP = 0x0601, /* draft-howlett-eap-gss */
+ TOK_TYPE_EAP_REQ = 0x0602, /* draft-howlett-eap-gss */
+ TOK_TYPE_GSS_CHANNEL_BINDINGS = 0x0603, /* draft-howlett-eap-gss */
+};
+
+/* util_buffer.c */
+OM_uint32
+makeStringBuffer(OM_uint32 *minor,
+ const char *string,
+ gss_buffer_t buffer);
+
+OM_uint32
+bufferToString(OM_uint32 *minor,
+ const gss_buffer_t buffer,
+ char **pString);
+
+OM_uint32
+duplicateBuffer(OM_uint32 *minor,
+ const gss_buffer_t src,
+ gss_buffer_t dst);
+
+/* util_cksum.c */
int
gssEapSign(krb5_context context,
krb5_cksumtype type,
OM_uint32 gssEapAllocContext(OM_uint32 *minor, gss_ctx_id_t *pCtx);
OM_uint32 gssEapReleaseContext(OM_uint32 *minor, gss_ctx_id_t *pCtx);
+OM_uint32
+gssEapMakeToken(OM_uint32 *minor,
+ gss_ctx_id_t ctx,
+ const gss_buffer_t innerToken,
+ enum gss_eap_token_type tokenType,
+ gss_buffer_t outputToken);
+
+OM_uint32
+gssEapVerifyToken(OM_uint32 *minor,
+ gss_ctx_id_t ctx,
+ const gss_buffer_t inputToken,
+ enum gss_eap_token_type tokenType,
+ gss_buffer_t innerInputToken);
+
/* util_cred.c */
OM_uint32 gssEapAllocCred(OM_uint32 *minor, gss_cred_id_t *pCred);
OM_uint32 gssEapReleaseCred(OM_uint32 *minor, gss_cred_id_t *pCred);
} while (0)
/* util_mech.c */
-void
+int
gssEapInternalizeOid(const gss_OID oid,
gss_OID *const pInternalizedOid);
int
gssEapIsMechanismOid(const gss_OID oid);
+int
+gssEapIsConcreteMechanismOid(const gss_OID oid);
+
OM_uint32
gssEapValidateMechs(OM_uint32 *minor,
const gss_OID_set mechs);
/* util_name.c */
+enum gss_eap_attribute_type {
+ ATTR_TYPE_NONE = 0,
+ ATTR_TYPE_SAML_AAA_ASSERTION = 1,
+ ATTR_TYPE_SAML_ATTR = 2,
+ ATTR_TYPE_RADIUS_AVP = 3
+};
+
OM_uint32 gssEapAllocName(OM_uint32 *minor, gss_name_t *pName);
OM_uint32 gssEapReleaseName(OM_uint32 *minor, gss_name_t *pName);
OM_uint32 gssEapExportName(OM_uint32 *minor,
gss_OID input_name_type,
gss_name_t *output_name);
+enum gss_eap_attribute_type
+gssEapAttributePrefixToType(const gss_buffer_t prefix);
+gss_buffer_t
+gssEapAttributeTypeToPrefix(enum gss_eap_attribute_type type);
+OM_uint32
+decomposeAttributeName(OM_uint32 *minor,
+ const gss_buffer_t attribute,
+ gss_buffer_t prefix,
+ gss_buffer_t suffix);
+OM_uint32
+composeAttributeName(OM_uint32 *minor,
+ const gss_buffer_t prefix,
+ const gss_buffer_t suffix,
+ gss_buffer_t attribute);
+
/* util_oid.c */
OM_uint32
composeOid(OM_uint32 *minor_status,
int *suffix) ;
OM_uint32
+duplicateOid(OM_uint32 *minor_status,
+ const gss_OID_desc * const oid,
+ gss_OID *new_oid);
+
+OM_uint32
duplicateOidSet(OM_uint32 *minor,
const gss_OID_set src,
gss_OID_set *dst);
int do_replay, int do_sequence, int wide_nums);
/* util_token.c */
-enum gss_eap_token_type {
- TOK_TYPE_NONE = 0x0000,
- TOK_TYPE_EAP_RESP = 0x0601,
- TOK_TYPE_EAP_REQ = 0x0602,
- TOK_TYPE_GSS_CHANNEL_BINDINGS = 0x0603,
- TOK_TYPE_MIC = 0x0404,
- TOK_TYPE_WRAP = 0x0504,
- TOK_TYPE_EXPORT_NAME = 0x0401,
- TOK_TYPE_EXPORT_NAME_COMPOSITE = 0x0402,
- TOK_TYPE_DELETE_CONTEXT = 0x0405,
-};
-
size_t
tokenSize(const gss_OID_desc *mech, size_t body_size);
enum gss_eap_token_type tok_type);
int
-verifyTokenHeader(const gss_OID_desc * mech,
+verifyTokenHeader(gss_OID mech,
size_t *body_size,
unsigned char **buf_in,
size_t toksize_in,
return ((uint64_t)load_uint32_be(p) << 32) | load_uint32_be(p + 4);
}
-static OM_uint32
-makeStringBuffer(OM_uint32 *minor,
- const char *string,
- gss_buffer_t buffer)
-{
- size_t len = strlen(string);
-
- buffer->value = GSSEAP_MALLOC(len + 1);
- if (buffer->value == NULL) {
- *minor = ENOMEM;
- return GSS_S_FAILURE;
- }
- memcpy(buffer->value, string, len + 1);
- buffer->length = len;
-
- *minor = 0;
- return GSS_S_COMPLETE;
-}
-
-static OM_uint32
-bufferToString(OM_uint32 *minor,
- const gss_buffer_t buffer,
- char **pString)
-{
- char *s;
-
- s = GSSEAP_MALLOC(buffer->length + 1);
- if (s == NULL) {
- *minor = ENOMEM;
- return GSS_S_FAILURE;
- }
- memcpy(s, buffer->value, buffer->length);
- s[buffer->length] = '\0';
-
- *pString = s;
-
- *minor = 0;
- return GSS_S_COMPLETE;
-}
-
-static OM_uint32
-duplicateBuffer(OM_uint32 *minor,
- const gss_buffer_t src,
- gss_buffer_t dst)
-{
- dst->length = 0;
- dst->value = NULL;
-
- if (src == GSS_C_NO_BUFFER)
- return GSS_S_COMPLETE;
-
- dst->value = GSSEAP_MALLOC(src->length + 1);
- if (dst->value == NULL) {
- *minor = ENOMEM;
- return GSS_S_FAILURE;
- }
-
- dst->length = src->length;
- memcpy(dst->value, src->value, dst->length);
-
- ((unsigned char *)dst->value)[dst->length] = '\0';
-
- *minor = 0;
- return GSS_S_COMPLETE;
-}
-
#endif /* _UTIL_H_ */