aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorLuke Howard <lukeh@padl.com>2009-11-22 14:46:32 +0000
committerLuke Howard <lukeh@padl.com>2009-11-22 14:46:32 +0000
commitc2ff314a8ea2cfffefe608d9a9aeecd5f531038a (patch)
tree52370dae0072532aa6bded88cad266dde0cd2020 /src/lib
parent1bb1b45c3b5e4cd7e84df8de5d3d700d7224268e (diff)
downloadkrb5-c2ff314a8ea2cfffefe608d9a9aeecd5f531038a.zip
krb5-c2ff314a8ea2cfffefe608d9a9aeecd5f531038a.tar.gz
krb5-c2ff314a8ea2cfffefe608d9a9aeecd5f531038a.tar.bz2
PRF bugfixes
git-svn-id: svn://anonsvn.mit.edu/krb5/users/lhoward/gssextras@23304 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/gssapi/krb5/gssapi_krb5.c1
-rw-r--r--src/lib/gssapi/krb5/prf.c19
2 files changed, 13 insertions, 7 deletions
diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c
index d2509df..35ba777 100644
--- a/src/lib/gssapi/krb5/gssapi_krb5.c
+++ b/src/lib/gssapi/krb5/gssapi_krb5.c
@@ -693,6 +693,7 @@ static struct gss_config krb5_mechanism = {
krb5_gss_export_name_composite,
krb5_gss_map_name_to_any,
krb5_gss_release_any_name_mapping,
+ krb5_gss_pseudo_random,
};
diff --git a/src/lib/gssapi/krb5/prf.c b/src/lib/gssapi/krb5/prf.c
index 2c0f37e..f1383e0 100644
--- a/src/lib/gssapi/krb5/prf.c
+++ b/src/lib/gssapi/krb5/prf.c
@@ -50,11 +50,6 @@ krb5_gss_pseudo_random(OM_uint32 *minor_status,
krb5_data t, ns;
unsigned char *p;
- t.length = 0;
- t.data = NULL;
- ns.length = 0;
- ns.data = NULL;
-
prf_out->length = 0;
prf_out->value = NULL;
@@ -63,6 +58,12 @@ krb5_gss_pseudo_random(OM_uint32 *minor_status,
return GSS_S_NO_CONTEXT;
}
+ t.length = 0;
+ t.data = NULL;
+
+ ns.length = 0;
+ ns.data = NULL;
+
ctx = (krb5_gss_ctx_id_t)context;
switch (prf_key) {
@@ -90,6 +91,7 @@ krb5_gss_pseudo_random(OM_uint32 *minor_status,
code = KG_INPUT_TOO_LONG;
goto cleanup;
}
+ prf_out->length = desired_output_len;
code = krb5_c_prf_length(ctx->k5_context,
krb5_k_key_enctype(ctx->k5_context, key),
@@ -108,6 +110,11 @@ krb5_gss_pseudo_random(OM_uint32 *minor_status,
goto cleanup;
}
+ t.length = prflen;
+ t.data = k5alloc(t.length, &code);
+ if (t.data == NULL)
+ goto cleanup;
+
memcpy(ns.data + 4, prf_in->value, prf_in->length);
i = 0;
p = (unsigned char *)prf_out->value;
@@ -123,8 +130,6 @@ krb5_gss_pseudo_random(OM_uint32 *minor_status,
p += t.length;
desired_output_len -= t.length;
i++;
-
- krb5_free_data_contents(ctx->k5_context, &t);
}
cleanup: