• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/samba-3.5.8/source4/heimdal/lib/hcrypto/
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#include <config.h>
35
36#define HC_DEPRECATED
37
38#include <sys/types.h>
39#include <stdio.h>
40#include <stdlib.h>
41#include <string.h>
42#include <assert.h>
43
44#include <evp.h>
45
46#include <krb5-types.h>
47
48#include <aes.h>
49
50/*
51 *
52 */
53
54static int
55aes_init(EVP_CIPHER_CTX *ctx,
56	 const unsigned char * key,
57	 const unsigned char * iv,
58	 int encp)
59{
60    AES_KEY *k = ctx->cipher_data;
61    if (ctx->encrypt)
62	AES_set_encrypt_key(key, ctx->cipher->key_len * 8, k);
63    else
64	AES_set_decrypt_key(key, ctx->cipher->key_len * 8, k);
65    return 1;
66}
67
68static int
69aes_do_cipher(EVP_CIPHER_CTX *ctx,
70	      unsigned char *out,
71	      const unsigned char *in,
72	      unsigned int size)
73{
74    AES_KEY *k = ctx->cipher_data;
75    AES_cbc_encrypt(in, out, size, k, ctx->iv, ctx->encrypt);
76    return 1;
77}
78
79static int
80aes_cleanup(EVP_CIPHER_CTX *ctx)
81{
82    memset(ctx->cipher_data, 0, sizeof(AES_KEY));
83    return 1;
84}
85
86/**
87 * The AES-128 cipher type (hcrypto)
88 *
89 * @return the AES-128 EVP_CIPHER pointer.
90 *
91 * @ingroup hcrypto_evp
92 */
93
94const EVP_CIPHER *
95EVP_hcrypto_aes_128_cbc(void)
96{
97    static const EVP_CIPHER aes_128_cbc = {
98	0,
99	16,
100	16,
101	16,
102	EVP_CIPH_CBC_MODE,
103	aes_init,
104	aes_do_cipher,
105	aes_cleanup,
106	sizeof(AES_KEY),
107	NULL,
108	NULL,
109	NULL,
110	NULL
111    };
112
113    return &aes_128_cbc;
114}
115
116/**
117 * The AES-192 cipher type (hcrypto)
118 *
119 * @return the AES-192 EVP_CIPHER pointer.
120 *
121 * @ingroup hcrypto_evp
122 */
123
124const EVP_CIPHER *
125EVP_hcrypto_aes_192_cbc(void)
126{
127    static const EVP_CIPHER aes_192_cbc = {
128	0,
129	16,
130	24,
131	16,
132	EVP_CIPH_CBC_MODE,
133	aes_init,
134	aes_do_cipher,
135	aes_cleanup,
136	sizeof(AES_KEY),
137	NULL,
138	NULL,
139	NULL,
140	NULL
141    };
142    return &aes_192_cbc;
143}
144
145/**
146 * The AES-256 cipher type (hcrypto)
147 *
148 * @return the AES-256 EVP_CIPHER pointer.
149 *
150 * @ingroup hcrypto_evp
151 */
152
153const EVP_CIPHER *
154EVP_hcrypto_aes_256_cbc(void)
155{
156    static const EVP_CIPHER aes_256_cbc = {
157	0,
158	16,
159	32,
160	16,
161	EVP_CIPH_CBC_MODE,
162	aes_init,
163	aes_do_cipher,
164	aes_cleanup,
165	sizeof(AES_KEY),
166	NULL,
167	NULL,
168	NULL,
169	NULL
170    };
171    return &aes_256_cbc;
172}
173