summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2022-09-03 19:51:53 +0000
committerjsing <>2022-09-03 19:51:53 +0000
commit1a0097f1e7f4294b7579231ac737e00df427330f (patch)
treebc937cf5bcb20e3f484563b0c38a1302f011ccd4 /src/lib
parent57f270bb2fc6f47d34030e9b0909b06351dbcd5f (diff)
downloadopenbsd-1a0097f1e7f4294b7579231ac737e00df427330f.tar.gz
openbsd-1a0097f1e7f4294b7579231ac737e00df427330f.tar.bz2
openbsd-1a0097f1e7f4294b7579231ac737e00df427330f.zip
Mechanically expand IMPLEMENT_BLOCK_CIPHER macro.
No change to generated assembly.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/evp/e_cast.c168
1 files changed, 162 insertions, 6 deletions
diff --git a/src/lib/libcrypto/evp/e_cast.c b/src/lib/libcrypto/evp/e_cast.c
index 707daa9656..b23dfeef1c 100644
--- a/src/lib/libcrypto/evp/e_cast.c
+++ b/src/lib/libcrypto/evp/e_cast.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_cast.c,v 1.7 2014/07/11 08:44:48 jsing Exp $ */ 1/* $OpenBSD: e_cast.c,v 1.8 2022/09/03 19:51:53 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -75,12 +75,168 @@ typedef struct {
75 CAST_KEY ks; 75 CAST_KEY ks;
76} EVP_CAST_KEY; 76} EVP_CAST_KEY;
77 77
78#define data(ctx) EVP_C_DATA(EVP_CAST_KEY,ctx) 78#define data(ctx) ((EVP_CAST_KEY *)(ctx)->cipher_data)
79 79
80IMPLEMENT_BLOCK_CIPHER(cast5, ks, CAST, EVP_CAST_KEY, 80static int
81 NID_cast5, 8, CAST_KEY_LENGTH, 8, 64, 81cast5_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)
82 EVP_CIPH_VARIABLE_LENGTH, cast_init_key, NULL, 82{
83 EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL) 83 while (inl >= EVP_MAXCHUNK) {
84 CAST_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &((EVP_CAST_KEY *)ctx->cipher_data)->ks, ctx->iv, ctx->encrypt);
85 inl -= EVP_MAXCHUNK;
86 in += EVP_MAXCHUNK;
87 out += EVP_MAXCHUNK;
88 }
89
90 if (inl)
91 CAST_cbc_encrypt(in, out, (long)inl, &((EVP_CAST_KEY *)ctx->cipher_data)->ks, ctx->iv, ctx->encrypt);
92
93 return 1;
94}
95
96static int
97cast5_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)
98{
99 size_t chunk = EVP_MAXCHUNK;
100
101 if (64 == 1)
102 chunk >>= 3;
103
104 if (inl < chunk)
105 chunk = inl;
106
107 while (inl && inl >= chunk) {
108 CAST_cfb64_encrypt(in, out, (long)((64 == 1) && !(ctx->flags & EVP_CIPH_FLAG_LENGTH_BITS) ? inl * 8 : inl), &((EVP_CAST_KEY *)ctx->cipher_data)->ks, ctx->iv, &ctx->num, ctx->encrypt);
109 inl -= chunk;
110 in += chunk;
111 out += chunk;
112 if (inl < chunk)
113 chunk = inl;
114 }
115
116 return 1;
117}
118
119static int
120cast5_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)
121{
122 size_t i, bl;
123
124 bl = ctx->cipher->block_size;
125
126 if (inl < bl)
127 return 1;
128
129 inl -= bl;
130
131 for (i = 0; i <= inl; i += bl)
132 CAST_ecb_encrypt(in + i, out + i, &((EVP_CAST_KEY *)ctx->cipher_data)->ks, ctx->encrypt);
133
134 return 1;
135}
136
137static int
138cast5_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)
139{
140 while (inl >= EVP_MAXCHUNK) {
141 CAST_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, &((EVP_CAST_KEY *)ctx->cipher_data)->ks, ctx->iv, &ctx->num);
142 inl -= EVP_MAXCHUNK;
143 in += EVP_MAXCHUNK;
144 out += EVP_MAXCHUNK;
145 }
146
147 if (inl)
148 CAST_ofb64_encrypt(in, out, (long)inl, &((EVP_CAST_KEY *)ctx->cipher_data)->ks, ctx->iv, &ctx->num);
149
150 return 1;
151}
152
153static const EVP_CIPHER cast5_cbc = {
154 .nid = NID_cast5_cbc,
155 .block_size = 8,
156 .key_len = CAST_KEY_LENGTH,
157 .iv_len = 8,
158 .flags = EVP_CIPH_VARIABLE_LENGTH | EVP_CIPH_CBC_MODE,
159 .init = cast_init_key,
160 .do_cipher = cast5_cbc_cipher,
161 .cleanup = NULL,
162 .ctx_size = sizeof(EVP_CAST_KEY),
163 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
164 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
165 .ctrl = NULL,
166 .app_data = NULL,
167};
168
169const EVP_CIPHER *
170EVP_cast5_cbc(void)
171{
172 return &cast5_cbc;
173}
174
175static const EVP_CIPHER cast5_cfb64 = {
176 .nid = NID_cast5_cfb64,
177 .block_size = 1,
178 .key_len = CAST_KEY_LENGTH,
179 .iv_len = 8,
180 .flags = EVP_CIPH_VARIABLE_LENGTH | EVP_CIPH_CFB_MODE,
181 .init = cast_init_key,
182 .do_cipher = cast5_cfb64_cipher,
183 .cleanup = NULL,
184 .ctx_size = sizeof(EVP_CAST_KEY),
185 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
186 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
187 .ctrl = NULL,
188 .app_data = NULL,
189};
190
191const EVP_CIPHER *
192EVP_cast5_cfb64(void)
193{
194 return &cast5_cfb64;
195}
196
197static const EVP_CIPHER cast5_ofb = {
198 .nid = NID_cast5_ofb64,
199 .block_size = 1,
200 .key_len = CAST_KEY_LENGTH,
201 .iv_len = 8,
202 .flags = EVP_CIPH_VARIABLE_LENGTH | EVP_CIPH_OFB_MODE,
203 .init = cast_init_key,
204 .do_cipher = cast5_ofb_cipher,
205 .cleanup = NULL,
206 .ctx_size = sizeof(EVP_CAST_KEY),
207 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
208 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
209 .ctrl = NULL,
210 .app_data = NULL,
211};
212
213const EVP_CIPHER *
214EVP_cast5_ofb(void)
215{
216 return &cast5_ofb;
217}
218
219static const EVP_CIPHER cast5_ecb = {
220 .nid = NID_cast5_ecb,
221 .block_size = 8,
222 .key_len = CAST_KEY_LENGTH,
223 .iv_len = 0,
224 .flags = EVP_CIPH_VARIABLE_LENGTH | EVP_CIPH_ECB_MODE,
225 .init = cast_init_key,
226 .do_cipher = cast5_ecb_cipher,
227 .cleanup = NULL,
228 .ctx_size = sizeof(EVP_CAST_KEY),
229 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
230 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
231 .ctrl = NULL,
232 .app_data = NULL,
233};
234
235const EVP_CIPHER *
236EVP_cast5_ecb(void)
237{
238 return &cast5_ecb;
239}
84 240
85static int 241static int
86cast_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 242cast_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,