-: 0:Source:prf_dk.c -: 0:Graph:/var/tsitkova/Sources/v10/trunk/src/lib/crypto/krb/prf_dk.so.gcno -: 0:Data:/var/tsitkova/Sources/v10/trunk/src/lib/crypto/krb/prf_dk.so.gcda -: 0:Runs:1630 -: 0:Programs:1 -: 1:/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -: 2:/* lib/crypto/krb/prf_dk.c - RFC 3961 simplified profile PRF */ -: 3:/* -: 4: * Copyright (C) 2004 by the Massachusetts Institute of Technology. -: 5: * All rights reserved. -: 6: * -: 7: * Export of this software from the United States of America may -: 8: * require a specific license from the United States Government. -: 9: * It is the responsibility of any person or organization contemplating -: 10: * export to obtain such a license before exporting. -: 11: * -: 12: * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and -: 13: * distribute this software and its documentation for any purpose and -: 14: * without fee is hereby granted, provided that the above copyright -: 15: * notice appear in all copies and that both that copyright notice and -: 16: * this permission notice appear in supporting documentation, and that -: 17: * the name of M.I.T. not be used in advertising or publicity pertaining -: 18: * to distribution of the software without specific, written prior -: 19: * permission. Furthermore if you modify this software you must label -: 20: * your software as modified software and not distribute it in such a -: 21: * fashion that it might be confused with the original M.I.T. software. -: 22: * M.I.T. makes no representations about the suitability of -: 23: * this software for any purpose. It is provided "as is" without express -: 24: * or implied warranty. -: 25: */ -: 26: -: 27:#include "crypto_int.h" -: 28: -: 29:krb5_error_code 182: 30:krb5int_dk_prf(const struct krb5_keytypes *ktp, krb5_key key, -: 31: const krb5_data *in, krb5_data *out) -: 32:{ 182: 33: const struct krb5_enc_provider *enc = ktp->enc; 182: 34: const struct krb5_hash_provider *hash = ktp->hash; -: 35: krb5_crypto_iov iov; 182: 36: krb5_data cksum = empty_data(), prfconst = make_data("prf", 3); 182: 37: krb5_key kp = NULL; -: 38: krb5_error_code ret; -: 39: -: 40: /* Hash the input data into an allocated buffer. */ 182: 41: ret = alloc_data(&cksum, hash->hashsize); 182: 42: if (ret != 0) #####: 43: goto cleanup; 182: 44: iov.flags = KRB5_CRYPTO_TYPE_DATA; 182: 45: iov.data = *in; 182: 46: ret = hash->hash(&iov, 1, &cksum); 182: 47: if (ret != 0) #####: 48: goto cleanup; -: 49: -: 50: /* Derive a key using the PRF constant. */ 182: 51: ret = krb5int_derive_key(ktp->enc, key, &kp, &prfconst, DERIVE_RFC3961); 182: 52: if (ret != 0) #####: 53: goto cleanup; -: 54: -: 55: /* Truncate the hash to the closest multiple of the block size. */ 182: 56: iov.data.data = cksum.data; 182: 57: iov.data.length = (hash->hashsize / enc->block_size) * enc->block_size; -: 58: -: 59: /* Encrypt the truncated hash in the derived key to get the output. */ 182: 60: ret = ktp->enc->encrypt(kp, NULL, &iov, 1); 182: 61: if (ret != 0) #####: 62: goto cleanup; 182: 63: memcpy(out->data, iov.data.data, out->length); -: 64: -: 65:cleanup: 182: 66: zapfree(cksum.data, hash->hashsize); 182: 67: krb5_k_free_key(NULL, kp); 182: 68: return ret; -: 69:}