lib/gssapi/krb5: implement gss_[un]wrap_iov[_length] with arcfour-hmac-md5

Pair-Programmed-With: Andreas Schneider <asn@samba.org>

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
Stefan Metzmacher
2009-08-11 19:48:50 +02:00
committed by Andrew Bartlett
parent bafefad87f
commit ad3acc2aef
2 changed files with 640 additions and 3 deletions

View File

@@ -46,6 +46,9 @@ _gk_wrap_iov(OM_uint32 * minor_status,
{
const gsskrb5_ctx ctx = (const gsskrb5_ctx) context_handle;
krb5_context context;
OM_uint32 ret;
krb5_keyblock *key;
krb5_keytype keytype;
GSSAPI_KRB5_INIT (&context);
@@ -54,7 +57,30 @@ _gk_wrap_iov(OM_uint32 * minor_status,
conf_req_flag, conf_state,
iov, iov_count);
return GSS_S_FAILURE;
HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
ret = _gsskrb5i_get_token_key(ctx, context, &key);
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
if (ret) {
*minor_status = ret;
return GSS_S_FAILURE;
}
krb5_enctype_to_keytype(context, key->keytype, &keytype);
switch (keytype) {
case KEYTYPE_ARCFOUR:
case KEYTYPE_ARCFOUR_56:
ret = _gssapi_wrap_iov_arcfour(minor_status, ctx, context,
conf_req_flag, conf_state,
iov, iov_count, key);
break;
default:
ret = GSS_S_FAILURE;
break;
}
krb5_free_keyblock(context, key);
return ret;
}
OM_uint32 GSSAPI_CALLCONV
@@ -67,6 +93,9 @@ _gk_unwrap_iov(OM_uint32 *minor_status,
{
const gsskrb5_ctx ctx = (const gsskrb5_ctx) context_handle;
krb5_context context;
OM_uint32 ret;
krb5_keytype keytype;
krb5_keyblock *key;
GSSAPI_KRB5_INIT (&context);
@@ -74,7 +103,30 @@ _gk_unwrap_iov(OM_uint32 *minor_status,
return _gssapi_unwrap_cfx_iov(minor_status, ctx, context,
conf_state, qop_state, iov, iov_count);
return GSS_S_FAILURE;
HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
ret = _gsskrb5i_get_token_key(ctx, context, &key);
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
if (ret) {
*minor_status = ret;
return GSS_S_FAILURE;
}
krb5_enctype_to_keytype(context, key->keytype, &keytype);
switch (keytype) {
case KEYTYPE_ARCFOUR:
case KEYTYPE_ARCFOUR_56:
ret = _gssapi_unwrap_iov_arcfour(minor_status, ctx, context,
conf_state, qop_state,
iov, iov_count, key);
break;
default:
ret = GSS_S_FAILURE;
break;
}
krb5_free_keyblock(context, key);
return ret;
}
OM_uint32 GSSAPI_CALLCONV
@@ -88,6 +140,9 @@ _gk_wrap_iov_length(OM_uint32 * minor_status,
{
const gsskrb5_ctx ctx = (const gsskrb5_ctx) context_handle;
krb5_context context;
OM_uint32 ret;
krb5_keytype keytype;
krb5_keyblock *key;
GSSAPI_KRB5_INIT (&context);
@@ -96,5 +151,28 @@ _gk_wrap_iov_length(OM_uint32 * minor_status,
conf_req_flag, qop_req, conf_state,
iov, iov_count);
return GSS_S_FAILURE;
HEIMDAL_MUTEX_lock(&ctx->ctx_id_mutex);
ret = _gsskrb5i_get_token_key(ctx, context, &key);
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
if (ret) {
*minor_status = ret;
return GSS_S_FAILURE;
}
krb5_enctype_to_keytype(context, key->keytype, &keytype);
switch (keytype) {
case KEYTYPE_ARCFOUR:
case KEYTYPE_ARCFOUR_56:
ret = _gssapi_wrap_iov_length_arcfour(minor_status, ctx, context,
conf_req_flag, qop_req, conf_state,
iov, iov_count);
break;
default:
ret = GSS_S_FAILURE;
break;
}
krb5_free_keyblock(context, key);
return ret;
}