call cleanup callback on free schedule in setup
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24155 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -164,6 +164,9 @@ static krb5_error_code hmac(krb5_context context,
|
|||||||
static void free_key_data(krb5_context,
|
static void free_key_data(krb5_context,
|
||||||
struct key_data *,
|
struct key_data *,
|
||||||
struct encryption_type *);
|
struct encryption_type *);
|
||||||
|
static void free_key_schedule(krb5_context,
|
||||||
|
struct key_data *,
|
||||||
|
struct encryption_type *);
|
||||||
static krb5_error_code usage2arcfour (krb5_context, unsigned *);
|
static krb5_error_code usage2arcfour (krb5_context, unsigned *);
|
||||||
static void xor (DES_cblock *, const unsigned char *);
|
static void xor (DES_cblock *, const unsigned char *);
|
||||||
|
|
||||||
@@ -3871,7 +3874,7 @@ derive_key(krb5_context context,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (key->schedule) {
|
if (key->schedule) {
|
||||||
krb5_free_data(context, key->schedule);
|
free_key_schedule(context, key, et);
|
||||||
key->schedule = NULL;
|
key->schedule = NULL;
|
||||||
}
|
}
|
||||||
memset(k, 0, nblocks * et->blocksize);
|
memset(k, 0, nblocks * et->blocksize);
|
||||||
@@ -3997,16 +4000,25 @@ krb5_crypto_init(krb5_context context,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_key_schedule(krb5_context context,
|
||||||
|
struct key_data *key,
|
||||||
|
struct encryption_type *et)
|
||||||
|
{
|
||||||
|
if (et->keytype->cleanup)
|
||||||
|
(*et->keytype->cleanup)(context, key);
|
||||||
|
memset(key->schedule->data, 0, key->schedule->length);
|
||||||
|
krb5_free_data(context, key->schedule);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_key_data(krb5_context context, struct key_data *key,
|
free_key_data(krb5_context context, struct key_data *key,
|
||||||
struct encryption_type *et)
|
struct encryption_type *et)
|
||||||
{
|
{
|
||||||
krb5_free_keyblock(context, key->key);
|
krb5_free_keyblock(context, key->key);
|
||||||
if(key->schedule) {
|
if(key->schedule) {
|
||||||
if (et->keytype->cleanup)
|
free_key_schedule(context, key, et);
|
||||||
(*et->keytype->cleanup)(context, key);
|
key->schedule = NULL;
|
||||||
memset(key->schedule->data, 0, key->schedule->length);
|
|
||||||
krb5_free_data(context, key->schedule);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user