1 /*
   2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
   3  * Use is subject to license terms.
   4  */
   5 
   6 
   7 /*
   8  * des_cbc_cksum.c - compute an 8 byte checksum using DES in CBC mode
   9  */
  10 #include "des_int.h"
  11 
  12 /*
  13  * This routine performs DES cipher-block-chaining checksum operation,
  14  * a.k.a.  Message Authentication Code.  It ALWAYS encrypts from input
  15  * to a single 64 bit output MAC checksum.
  16  *
  17  * The key schedule is passed as an arg, as well as the cleartext or
  18  * ciphertext. The cleartext and ciphertext should be in host order.
  19  *
  20  * NOTE-- the output is ALWAYS 8 bytes long.  If not enough space was
  21  * provided, your program will get trashed.
  22  *
  23  * The input is null padded, at the end (highest addr), to an integral
  24  * multiple of eight bytes.
  25  */
  26 unsigned long
  27 mit_des_cbc_cksum(krb5_context context,
  28         const krb5_octet *in, krb5_octet *out,
  29         unsigned long length, krb5_keyblock *key,
  30         const krb5_octet  *ivec)
  31 {
  32         krb5_error_code ret = 0;
  33 /* EXPORT DELETE START */
  34         krb5_data input;
  35         krb5_data output;
  36         krb5_data ivecdata;
  37 
  38         input.data = (char *)in;
  39         input.length = length;
  40         output.data = (char *)out;
  41         output.length = MIT_DES_BLOCK_LENGTH;
  42         ivecdata.data = (char *)ivec;
  43         ivecdata.length = MIT_DES_BLOCK_LENGTH;
  44 
  45         ret = k5_ef_mac(context, key, &ivecdata,
  46                 (const krb5_data *)&input, &output);
  47 
  48 /* EXPORT DELETE END */
  49         return (ret);
  50 }