From 42a66c690316a2e88be0501d29aa13a1e918ec22 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Mon, 12 Mar 2001 07:44:05 +0000 Subject: [PATCH] (krb5_derive_key): new function, used by derived-key-test.c git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9744 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/crypto.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/krb5/crypto.c b/lib/krb5/crypto.c index 9c3bbc337..abdbe63fa 100644 --- a/lib/krb5/crypto.c +++ b/lib/krb5/crypto.c @@ -2665,7 +2665,7 @@ static krb5_error_code derive_key(krb5_context context, struct encryption_type *et, struct key_data *key, - void *constant, + const void *constant, size_t len) { unsigned char *k; @@ -2737,6 +2737,35 @@ _new_derived_key(krb5_crypto crypto, unsigned usage) return &d->key; } +krb5_error_code +krb5_derive_key(krb5_context context, + const krb5_keyblock *key, + krb5_enctype etype, + const void *constant, + size_t constant_len, + krb5_keyblock **derived_key) +{ + krb5_error_code ret; + struct encryption_type *et; + struct key_data d; + + et = _find_enctype (etype); + if (et == NULL) + return KRB5_PROG_ETYPE_NOSUPP; + + ret = krb5_copy_keyblock(context, key, derived_key); + if (ret) + return ret; + + d.key = *derived_key; + d.schedule = NULL; + ret = derive_key(context, et, &d, constant, constant_len); + if (ret) + return ret; + ret = krb5_copy_keyblock(context, d.key, derived_key); + return ret; +} + static krb5_error_code _get_derived_key(krb5_context context, krb5_crypto crypto, @@ -2765,7 +2794,7 @@ _get_derived_key(krb5_context context, krb5_error_code krb5_crypto_init(krb5_context context, - krb5_keyblock *key, + const krb5_keyblock *key, krb5_enctype etype, krb5_crypto *crypto) {