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:
		
							
								
								
									
										43
									
								
								kdc/misc.c
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								kdc/misc.c
									
									
									
									
									
								
							| @@ -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); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Johan Danielsson
					Johan Danielsson