root/source4/heimdal/lib/hcrypto/evp-hcrypto.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. aes_init
  2. aes_do_cipher
  3. aes_cleanup
  4. EVP_hcrypto_aes_128_cbc
  5. EVP_hcrypto_aes_192_cbc
  6. EVP_hcrypto_aes_256_cbc

   1 /*
   2  * Copyright (c) 2006 - 2008 Kungliga Tekniska Högskolan
   3  * (Royal Institute of Technology, Stockholm, Sweden).
   4  * All rights reserved.
   5  *
   6  * Redistribution and use in source and binary forms, with or without
   7  * modification, are permitted provided that the following conditions
   8  * are met:
   9  *
  10  * 1. Redistributions of source code must retain the above copyright
  11  *    notice, this list of conditions and the following disclaimer.
  12  *
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  *
  17  * 3. Neither the name of the Institute nor the names of its contributors
  18  *    may be used to endorse or promote products derived from this software
  19  *    without specific prior written permission.
  20  *
  21  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
  22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
  25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31  * SUCH DAMAGE.
  32  */
  33 
  34 #ifdef HAVE_CONFIG_H
  35 #include <config.h>
  36 #endif
  37 
  38 RCSID("$Id$");
  39 
  40 #define HC_DEPRECATED
  41 
  42 #include <sys/types.h>
  43 #include <stdio.h>
  44 #include <stdlib.h>
  45 #include <string.h>
  46 #include <assert.h>
  47 
  48 #include <evp.h>
  49 
  50 #include <krb5-types.h>
  51 
  52 #include <aes.h>
  53 
  54 /*
  55  *
  56  */
  57 
  58 static int
  59 aes_init(EVP_CIPHER_CTX *ctx,
     /* [<][>][^][v][top][bottom][index][help] */
  60          const unsigned char * key,
  61          const unsigned char * iv,
  62          int encp)
  63 {
  64     AES_KEY *k = ctx->cipher_data;
  65     if (ctx->encrypt)
  66         AES_set_encrypt_key(key, ctx->cipher->key_len * 8, k);
  67     else
  68         AES_set_decrypt_key(key, ctx->cipher->key_len * 8, k);
  69     return 1;
  70 }
  71 
  72 static int
  73 aes_do_cipher(EVP_CIPHER_CTX *ctx,
     /* [<][>][^][v][top][bottom][index][help] */
  74               unsigned char *out,
  75               const unsigned char *in,
  76               unsigned int size)
  77 {
  78     AES_KEY *k = ctx->cipher_data;
  79     AES_cbc_encrypt(in, out, size, k, ctx->iv, ctx->encrypt);
  80     return 1;
  81 }
  82 
  83 static int
  84 aes_cleanup(EVP_CIPHER_CTX *ctx)
     /* [<][>][^][v][top][bottom][index][help] */
  85 {
  86     memset(ctx->cipher_data, 0, sizeof(AES_KEY));
  87     return 1;
  88 }
  89 
  90 /**
  91  * The AES-128 cipher type (hcrypto)
  92  *
  93  * @return the AES-128 EVP_CIPHER pointer.
  94  *
  95  * @ingroup hcrypto_evp
  96  */
  97 
  98 const EVP_CIPHER *
  99 EVP_hcrypto_aes_128_cbc(void)
     /* [<][>][^][v][top][bottom][index][help] */
 100 {
 101     static const EVP_CIPHER aes_128_cbc = {
 102         0,
 103         16,
 104         16,
 105         16,
 106         EVP_CIPH_CBC_MODE,
 107         aes_init,
 108         aes_do_cipher,
 109         aes_cleanup,
 110         sizeof(AES_KEY),
 111         NULL,
 112         NULL,
 113         NULL,
 114         NULL
 115     };
 116 
 117     return &aes_128_cbc;
 118 }
 119 
 120 /**
 121  * The AES-192 cipher type (hcrypto)
 122  *
 123  * @return the AES-192 EVP_CIPHER pointer.
 124  *
 125  * @ingroup hcrypto_evp
 126  */
 127 
 128 const EVP_CIPHER *
 129 EVP_hcrypto_aes_192_cbc(void)
     /* [<][>][^][v][top][bottom][index][help] */
 130 {
 131     static const EVP_CIPHER aes_192_cbc = {
 132         0,
 133         16,
 134         24,
 135         16,
 136         EVP_CIPH_CBC_MODE,
 137         aes_init,
 138         aes_do_cipher,
 139         aes_cleanup,
 140         sizeof(AES_KEY),
 141         NULL,
 142         NULL,
 143         NULL,
 144         NULL
 145     };
 146     return &aes_192_cbc;
 147 }
 148 
 149 /**
 150  * The AES-256 cipher type (hcrypto)
 151  *
 152  * @return the AES-256 EVP_CIPHER pointer.
 153  *
 154  * @ingroup hcrypto_evp
 155  */
 156 
 157 const EVP_CIPHER *
 158 EVP_hcrypto_aes_256_cbc(void)
     /* [<][>][^][v][top][bottom][index][help] */
 159 {
 160     static const EVP_CIPHER aes_256_cbc = {
 161         0,
 162         16,
 163         32,
 164         16,
 165         EVP_CIPH_CBC_MODE,
 166         aes_init,
 167         aes_do_cipher,
 168         aes_cleanup,
 169         sizeof(AES_KEY),
 170         NULL,
 171         NULL,
 172         NULL,
 173         NULL
 174     };
 175     return &aes_256_cbc;
 176 }

/* [<][>][^][v][top][bottom][index][help] */