Remove /* foo.c */ comments
[openssl.git] / crypto / evp / cmeth_lib.c
1 /*
2  * Written by Richard Levitte (levitte@openssl.org) for the OpenSSL project
3  * 2015.
4  */
5 /* ====================================================================
6  * Copyright (c) 2015 The OpenSSL Project.  All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in
17  *    the documentation and/or other materials provided with the
18  *    distribution.
19  *
20  * 3. All advertising materials mentioning features or use of this
21  *    software must display the following acknowledgment:
22  *    "This product includes software developed by the OpenSSL Project
23  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24  *
25  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26  *    endorse or promote products derived from this software without
27  *    prior written permission. For written permission, please contact
28  *    licensing@OpenSSL.org.
29  *
30  * 5. Products derived from this software may not be called "OpenSSL"
31  *    nor may "OpenSSL" appear in their names without prior written
32  *    permission of the OpenSSL Project.
33  *
34  * 6. Redistributions of any form whatsoever must retain the following
35  *    acknowledgment:
36  *    "This product includes software developed by the OpenSSL Project
37  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38  *
39  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50  * OF THE POSSIBILITY OF SUCH DAMAGE.
51  * ====================================================================
52  *
53  * This product includes cryptographic software written by Eric Young
54  * (eay@cryptsoft.com).  This product includes software written by Tim
55  * Hudson (tjh@cryptsoft.com).
56  *
57  */
58
59 #include <string.h>
60
61 #include <openssl/evp.h>
62 #include "internal/evp_int.h"
63 #include "evp_locl.h"
64
65 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len)
66 {
67     EVP_CIPHER *cipher = (EVP_CIPHER *)OPENSSL_zalloc(sizeof(EVP_CIPHER));
68     if (cipher != NULL) {
69         cipher->nid = cipher_type;
70         cipher->block_size = block_size;
71         cipher->key_len = key_len;
72     }
73     return cipher;
74 }
75
76 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher)
77 {
78     EVP_CIPHER *to = EVP_CIPHER_meth_new(cipher->nid, cipher->block_size,
79                                          cipher->key_len);
80     if (cipher != NULL)
81         memcpy(to, cipher, sizeof(*to));
82     return to;
83 }
84
85 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher)
86 {
87     OPENSSL_free(cipher);
88 }
89
90 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len)
91 {
92     cipher->iv_len = iv_len;
93     return 1;
94 }
95
96 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags)
97 {
98     cipher->flags = flags;
99     return 1;
100 }
101
102 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size)
103 {
104     cipher->ctx_size = ctx_size;
105     return 1;
106 }
107
108 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher,
109                              int (*init) (EVP_CIPHER_CTX *ctx,
110                                           const unsigned char *key,
111                                           const unsigned char *iv,
112                                           int enc))
113 {
114     cipher->init = init;
115     return 1;
116 }
117
118 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher,
119                                   int (*do_cipher) (EVP_CIPHER_CTX *ctx,
120                                                     unsigned char *out,
121                                                     const unsigned char *in,
122                                                     size_t inl))
123 {
124     cipher->do_cipher = do_cipher;
125     return 1;
126 }
127
128 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher,
129                                 int (*cleanup) (EVP_CIPHER_CTX *))
130 {
131     cipher->cleanup = cleanup;
132     return 1;
133 }
134
135 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher,
136                                         int (*set_asn1_parameters) (EVP_CIPHER_CTX *,
137                                                                     ASN1_TYPE *))
138 {
139     cipher->set_asn1_parameters = set_asn1_parameters;
140     return 1;
141 }
142
143 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher,
144                                         int (*get_asn1_parameters) (EVP_CIPHER_CTX *,
145                                                                     ASN1_TYPE *))
146 {
147     cipher->get_asn1_parameters = get_asn1_parameters;
148     return 1;
149 }
150
151 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher,
152                              int (*ctrl) (EVP_CIPHER_CTX *, int type,
153                                           int arg, void *ptr))
154 {
155     cipher->ctrl = ctrl;
156     return 1;
157 }
158
159
160 int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
161                                                           const unsigned char *key,
162                                                           const unsigned char *iv,
163                                                           int enc)
164 {
165     return cipher->init;
166 }
167 int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
168                                                                unsigned char *out,
169                                                                const unsigned char *in,
170                                                                size_t inl)
171 {
172     return cipher->do_cipher;
173 }
174
175 int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *)
176 {
177     return cipher->cleanup;
178 }
179
180 int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
181                                                                      ASN1_TYPE *)
182 {
183     return cipher->set_asn1_parameters;
184 }
185
186 int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
187                                                                ASN1_TYPE *)
188 {
189     return cipher->get_asn1_parameters;
190 }
191
192 int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
193                                                           int type, int arg,
194                                                           void *ptr)
195 {
196     return cipher->ctrl;
197 }
198