Home | History | Annotate | Download | only in crypto
      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
     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