X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=blobdiff_plain;f=mech_eap%2Fverify_mic.c;h=a93f5f831d9866df37071c2e11a0dcfa57c33b7e;hp=c0829f58285a3e6e10e5dd2d3e2b037336bb658e;hb=HEAD;hpb=49c65b803b43e159e38f6a16505bad54de153916 diff --git a/mech_eap/verify_mic.c b/mech_eap/verify_mic.c index c0829f5..a93f5f8 100644 --- a/mech_eap/verify_mic.c +++ b/mech_eap/verify_mic.c @@ -36,36 +36,58 @@ #include "gssapiP_eap.h" +static OM_uint32 +gssEapVerifyMIC(OM_uint32 *minor, + gss_ctx_id_t ctx, + gss_qop_t *qop_state, + gss_iov_buffer_desc *iov, + int iov_count) +{ + OM_uint32 major; + + if (ctx == GSS_C_NO_CONTEXT) { + *minor = EINVAL; + return GSS_S_CALL_INACCESSIBLE_READ | GSS_S_NO_CONTEXT; + } + + GSSEAP_MUTEX_LOCK(&((gss_ctx_id_t)ctx)->mutex); + + major = gssEapUnwrapOrVerifyMIC(minor, (gss_ctx_id_t)ctx, NULL, qop_state, + iov, iov_count, TOK_TYPE_MIC); + + GSSEAP_MUTEX_UNLOCK(&((gss_ctx_id_t)ctx)->mutex); + + return major; +} + OM_uint32 GSSAPI_CALLCONV gss_verify_mic(OM_uint32 *minor, +#ifdef HAVE_HEIMDAL_VERSION + gss_const_ctx_id_t ctx, +#else gss_ctx_id_t ctx, +#endif gss_buffer_t message_buffer, gss_buffer_t message_token, gss_qop_t *qop_state) { - OM_uint32 major; - gss_iov_buffer_desc iov[3]; - int conf_state; - - if (message_token->length < 16) { - *minor = GSSEAP_TOK_TRUNC; - return GSS_S_BAD_SIG; - } - - *minor = 0; + gss_iov_buffer_desc iov[2]; iov[0].type = GSS_IOV_BUFFER_TYPE_DATA; iov[0].buffer = *message_buffer; - iov[1].type = GSS_IOV_BUFFER_TYPE_HEADER; + iov[1].type = GSS_IOV_BUFFER_TYPE_MIC_TOKEN; iov[1].buffer = *message_token; - GSSEAP_MUTEX_LOCK(&ctx->mutex); - - major = gssEapUnwrapOrVerifyMIC(minor, ctx, &conf_state, qop_state, - iov, 2, TOK_TYPE_MIC); - - GSSEAP_MUTEX_UNLOCK(&ctx->mutex); + return gssEapVerifyMIC(minor, (gss_ctx_id_t)ctx, qop_state, iov, 2); +} - return major; +OM_uint32 GSSAPI_CALLCONV +gss_verify_mic_iov(OM_uint32 *minor, + gss_ctx_id_t ctx, + gss_qop_t *qop_state, + gss_iov_buffer_desc *iov, + int iov_count) +{ + return gssEapVerifyMIC(minor, ctx, qop_state, iov, iov_count); }