summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/lib/krb5/generate_subkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/lib/krb5/generate_subkey.c')
-rw-r--r--crypto/heimdal/lib/krb5/generate_subkey.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/crypto/heimdal/lib/krb5/generate_subkey.c b/crypto/heimdal/lib/krb5/generate_subkey.c
index 3fb22f9..fb99cbb 100644
--- a/crypto/heimdal/lib/krb5/generate_subkey.c
+++ b/crypto/heimdal/lib/krb5/generate_subkey.c
@@ -33,13 +33,22 @@
#include <krb5_locl.h>
-RCSID("$Id: generate_subkey.c,v 1.8 2001/05/14 06:14:46 assar Exp $");
+RCSID("$Id: generate_subkey.c 14455 2005-01-05 02:39:21Z lukeh $");
-krb5_error_code
+krb5_error_code KRB5_LIB_FUNCTION
krb5_generate_subkey(krb5_context context,
const krb5_keyblock *key,
krb5_keyblock **subkey)
{
+ return krb5_generate_subkey_extended(context, key, key->keytype, subkey);
+}
+
+krb5_error_code KRB5_LIB_FUNCTION
+krb5_generate_subkey_extended(krb5_context context,
+ const krb5_keyblock *key,
+ krb5_enctype etype,
+ krb5_keyblock **subkey)
+{
krb5_error_code ret;
ALLOC(*subkey, 1);
@@ -47,8 +56,17 @@ krb5_generate_subkey(krb5_context context,
krb5_set_error_string(context, "malloc: out of memory");
return ENOMEM;
}
- ret = krb5_generate_random_keyblock(context, key->keytype, *subkey);
- if(ret)
+
+ if (etype == ETYPE_NULL)
+ etype = key->keytype; /* use session key etype */
+
+ /* XXX should we use the session key as input to the RF? */
+ ret = krb5_generate_random_keyblock(context, etype, *subkey);
+ if (ret != 0) {
free(*subkey);
+ *subkey = NULL;
+ }
+
return ret;
}
+
OpenPOWER on IntegriCloud