1 /*
2 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /*
7 * Copyright (C) 1998 by the FundsXpress, INC.
8 *
9 * All rights reserved.
10 *
11 * Export of this software from the United States of America may require
12 * a specific license from the United States Government. It is the
13 * responsibility of any person or organization contemplating export to
14 * obtain such a license before exporting.
15 *
16 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
17 * distribute this software and its documentation for any purpose and
18 * without fee is hereby granted, provided that the above copyright
19 * notice appear in all copies and that both that copyright notice and
20 * this permission notice appear in supporting documentation, and that
21 * the name of FundsXpress. not be used in advertising or publicity pertaining
22 * to distribution of the software without specific, written prior
23 * permission. FundsXpress makes no representations about the suitability of
24 * this software for any purpose. It is provided "as is" without express
25 * or implied warranty.
26 *
27 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
28 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
29 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 */
31
32 #include "k5-int.h"
33 #include "etypes.h"
34
35 /*ARGSUSED*/
36 krb5_error_code KRB5_CALLCONV
krb5_c_decrypt(krb5_context context,const krb5_keyblock * key,krb5_keyusage usage,const krb5_data * ivec,const krb5_enc_data * input,krb5_data * output)37 krb5_c_decrypt(krb5_context context, const krb5_keyblock *key,
38 krb5_keyusage usage, const krb5_data *ivec,
39 const krb5_enc_data *input, krb5_data *output)
40 {
41 int i;
42 krb5_error_code ret = 0;
43
44 for (i=0; i<krb5_enctypes_length; i++) {
45 if (krb5_enctypes_list[i].etype == key->enctype)
46 break;
47 }
48
49 if (i == krb5_enctypes_length)
50 return(KRB5_BAD_ENCTYPE);
51
52 if ((input->enctype != ENCTYPE_UNKNOWN) &&
53 (krb5_enctypes_list[i].etype != input->enctype))
54 return(KRB5_BAD_ENCTYPE);
55
56 /* Solaris Kerberos */
57 #ifdef _KERNEL
58 context->kef_cipher_mt = krb5_enctypes_list[i].kef_cipher_mt;
59 context->kef_hash_mt = krb5_enctypes_list[i].kef_hash_mt;
60 if (key->kef_key.ck_data == NULL)
61 ret = init_key_kef(context->kef_cipher_mt, (krb5_keyblock *)key);
62 if (ret)
63 return(ret);
64
65 #else
66 if ((ret = init_key_uef(krb_ctx_hSession(context), (krb5_keyblock *)key)))
67 return (ret);
68
69 #endif /* _KERNEL */
70
71 /* Solaris Kerberos */
72 return((*(krb5_enctypes_list[i].decrypt))
73 (context, krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash,
74 key, usage, ivec, &input->ciphertext, output));
75 }
76