From 152a23f2cee89656cf6bf0b415e11e02879ee579 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Wed, 31 Dec 2014 11:59:03 +0000 Subject: [PATCH] krb5: Reorder checks in _key_schedule _krb5_find_enctype is a moderately expensive operation, as it does a linear search of the enctype lists. Avoid calling it in _key_schedule when we already have a key schedule in place. This change makes the most common check the first in the function. --- lib/krb5/crypto.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/krb5/crypto.c b/lib/krb5/crypto.c index ff1e4663c..29fc8a8d8 100644 --- a/lib/krb5/crypto.c +++ b/lib/krb5/crypto.c @@ -132,9 +132,14 @@ _key_schedule(krb5_context context, struct _krb5_key_data *key) { krb5_error_code ret; - struct _krb5_encryption_type *et = _krb5_find_enctype(key->key->keytype); + struct _krb5_encryption_type *et; struct _krb5_key_type *kt; + if (key->schedule != NULL) + return 0; + + et = _krb5_find_enctype(key->key->keytype); + if (et == NULL) { return unsupported_enctype (context, key->key->keytype); @@ -144,8 +149,6 @@ _key_schedule(krb5_context context, if(kt->schedule == NULL) return 0; - if (key->schedule != NULL) - return 0; ALLOC(key->schedule, 1); if (key->schedule == NULL) return krb5_enomem(context);