New functions set_master_key, unseal_key and free_key.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2597 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1997-07-24 07:41:44 +00:00
parent 276ba6d4c1
commit 1b6b414c80

View File

@@ -65,3 +65,46 @@ db_fetch(krb5_context context, krb5_principal principal)
}
return ent;
}
static des_key_schedule master_key;
static int master_key_set;
void
set_master_key(EncryptionKey *key)
{
if(key->keytype != KEYTYPE_DES || key->keyvalue.length != 8)
abort();
des_set_random_generator_seed(key->keyvalue.data);
des_set_key(key->keyvalue.data, master_key);
master_key_set = 1;
}
Key *
unseal_key(Key *key)
{
int i;
des_cblock iv;
int num = 0;
Key *new_key;
ALLOC(new_key);
copy_Key(key, new_key);
if(master_key_set){
memset(&iv, 0, sizeof(iv));
des_cfb64_encrypt(key->key.keyvalue.data,
new_key->key.keyvalue.data,
key->key.keyvalue.length,
master_key, &iv, &num, 0);
}
return new_key;
}
void
free_key(Key *key)
{
memset(key->key.keyvalue.data,
0,
key->key.keyvalue.length);
free_Key(key);
free(key);
}