diff options
author | Luke Howard <lukeh@padl.com> | 2009-11-22 14:46:32 +0000 |
---|---|---|
committer | Luke Howard <lukeh@padl.com> | 2009-11-22 14:46:32 +0000 |
commit | c2ff314a8ea2cfffefe608d9a9aeecd5f531038a (patch) | |
tree | 52370dae0072532aa6bded88cad266dde0cd2020 /src/lib | |
parent | 1bb1b45c3b5e4cd7e84df8de5d3d700d7224268e (diff) | |
download | krb5-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.c | 1 | ||||
-rw-r--r-- | src/lib/gssapi/krb5/prf.c | 19 |
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: |