#define EAP_EXPORT_CONTEXT_V1 1
-/* util_alloc.c */
-void *
-gssEapCalloc(size_t nmemb, size_t size);
-
-void *
-gssEapMalloc(size_t size);
-
-void
-gssEapFree(void *ptr);
-
-void *
-gssEapRealloc(void *ptr, size_t size);
-
/* util_buffer.c */
OM_uint32
makeStringBuffer(OM_uint32 *minor,
krb5_enctype enctype,
krb5_keyblock *pKey);
+/* util_exts.c */
+#define EXT_FLAG_CRITICAL 0x80000000
+#define EXT_FLAG_VERIFIED 0x40000000
+
+#define EXT_TYPE_GSS_CHANNEL_BINDINGS 0x00000000
+#define EXT_TYPE_REAUTH_CREDS 0x00000001
+#define EXT_TYPE_MASK (~(EXT_FLAG_CRITICAL | EXT_FLAG_VERIFIED))
+
+struct gss_eap_extension_provider {
+ OM_uint32 type;
+ int critical; /* client */
+ int required; /* server */
+ OM_uint32 (*make)(OM_uint32 *,
+ gss_cred_id_t,
+ gss_ctx_id_t,
+ gss_channel_bindings_t,
+ gss_buffer_t);
+ OM_uint32 (*verify)(OM_uint32 *,
+ gss_cred_id_t,
+ gss_ctx_id_t,
+ gss_channel_bindings_t,
+ const gss_buffer_t);
+};
+
+OM_uint32
+gssEapMakeExtensions(OM_uint32 *minor,
+ gss_cred_id_t cred,
+ gss_ctx_id_t ctx,
+ gss_channel_bindings_t chanBindings,
+ gss_buffer_t buffer);
+
+OM_uint32
+gssEapVerifyExtensions(OM_uint32 *minor,
+ gss_cred_id_t cred,
+ gss_ctx_id_t ctx,
+ gss_channel_bindings_t chanBindings,
+ const gss_buffer_t buffer);
+
/* util_krb.c */
OM_uint32
gssEapKerberosInit(OM_uint32 *minor, krb5_context *context);
/* Helper macros */
-#define GSSEAP_CALLOC(count, size) (gssEapCalloc((count), (size)))
-#define GSSEAP_MALLOC(size) (gssEapMalloc((size)))
-#define GSSEAP_FREE(ptr) (gssEapFree((ptr)))
-#define GSSEAP_REALLOC(ptr, size) (gssEapRealloc((ptr), (size)))
+#define GSSEAP_CALLOC calloc
+#define GSSEAP_MALLOC malloc
+#define GSSEAP_FREE free
+#define GSSEAP_REALLOC realloc
#define GSSEAP_NOT_IMPLEMENTED do { \
assert(0 && "not implemented"); \