}
return retval;
}
-
-krb5_error_code
-krb5_kdb_decrypt_key(in, out, eblock)
-krb5_keyblock *in;
-krb5_keyblock *out;
-krb5_encrypt_block *eblock;
-{
- krb5_error_code retval;
-
- *out = *in;
- out->length = krb5_encrypt_size(in->length, eblock->crypto_entry);
- out->contents = (krb5_octet *)malloc(out->length);
- if (!out->contents) {
- out->contents = 0;
- out->length = 0;
- return ENOMEM;
- }
- if (retval = (*eblock->crypto_entry->
- decrypt_func)((krb5_pointer) in->contents,
- (krb5_pointer) out->contents,
- in->length, eblock)) {
- free((char *)out->contents);
- out->contents = 0;
- out->length = 0;
- return retval;
- }
- out->length -= sizeof(out->length);
- if (out->length < 0) {
- free((char *)out->contents);
- out->contents = 0;
- out->length = 0;
- return KRB5_KDB_INVALIDKEYSIZE;
- }
- /* shift key down to beginning of contents, and ignore extra wasted
- space */
- bcopy(out->contents, ((krb5_pointer) out->contents ) + sizeof(out->length),
- out->length);
- return retval;
-}