|
37 | 37 | #include <openssl/blowfish.h>
|
38 | 38 | #include <openssl/cast.h>
|
39 | 39 | #include <openssl/des.h>
|
| 40 | +#include <openssl/aes.h> |
40 | 41 | #include <openssl/rand.h>
|
41 | 42 | #include <openssl/err.h>
|
42 | 43 |
|
|
46 | 47 | #define MAX_KEY (512/8)
|
47 | 48 | #define MAX_IV (128/8)
|
48 | 49 |
|
49 |
| -/* |
50 |
| - * Compatibility with OpenSSL 0.9.6 |
51 |
| - * |
52 |
| - * It needs AES and newer DES and digest API. |
53 |
| - */ |
54 |
| -#if OPENSSL_VERSION_NUMBER >= 0x00907000L |
55 |
| - |
56 |
| -/* |
57 |
| - * Nothing needed for OpenSSL 0.9.7+ |
58 |
| - */ |
59 |
| - |
60 |
| -#include <openssl/aes.h> |
61 |
| -#else /* old OPENSSL */ |
62 |
| - |
63 |
| -/* |
64 |
| - * Emulate OpenSSL AES. |
65 |
| - */ |
66 |
| - |
67 |
| -#include "rijndael.c" |
68 |
| - |
69 |
| -#define AES_ENCRYPT 1 |
70 |
| -#define AES_DECRYPT 0 |
71 |
| -#define AES_KEY rijndael_ctx |
72 |
| - |
73 |
| -static int |
74 |
| -AES_set_encrypt_key(const uint8 *key, int kbits, AES_KEY *ctx) |
75 |
| -{ |
76 |
| - aes_set_key(ctx, key, kbits, 1); |
77 |
| - return 0; |
78 |
| -} |
79 |
| - |
80 |
| -static int |
81 |
| -AES_set_decrypt_key(const uint8 *key, int kbits, AES_KEY *ctx) |
82 |
| -{ |
83 |
| - aes_set_key(ctx, key, kbits, 0); |
84 |
| - return 0; |
85 |
| -} |
86 |
| - |
87 |
| -static void |
88 |
| -AES_ecb_encrypt(const uint8 *src, uint8 *dst, AES_KEY *ctx, int enc) |
89 |
| -{ |
90 |
| - memcpy(dst, src, 16); |
91 |
| - if (enc) |
92 |
| - aes_ecb_encrypt(ctx, dst, 16); |
93 |
| - else |
94 |
| - aes_ecb_decrypt(ctx, dst, 16); |
95 |
| -} |
96 |
| - |
97 |
| -static void |
98 |
| -AES_cbc_encrypt(const uint8 *src, uint8 *dst, int len, AES_KEY *ctx, uint8 *iv, int enc) |
99 |
| -{ |
100 |
| - memcpy(dst, src, len); |
101 |
| - if (enc) |
102 |
| - { |
103 |
| - aes_cbc_encrypt(ctx, iv, dst, len); |
104 |
| - memcpy(iv, dst + len - 16, 16); |
105 |
| - } |
106 |
| - else |
107 |
| - { |
108 |
| - aes_cbc_decrypt(ctx, iv, dst, len); |
109 |
| - memcpy(iv, src + len - 16, 16); |
110 |
| - } |
111 |
| -} |
112 |
| - |
113 |
| -/* |
114 |
| - * Emulate DES_* API |
115 |
| - */ |
116 |
| - |
117 |
| -#define DES_key_schedule des_key_schedule |
118 |
| -#define DES_cblock des_cblock |
119 |
| -#define DES_set_key(k, ks) \ |
120 |
| - des_set_key((k), *(ks)) |
121 |
| -#define DES_ecb_encrypt(i, o, k, e) \ |
122 |
| - des_ecb_encrypt((i), (o), *(k), (e)) |
123 |
| -#define DES_ncbc_encrypt(i, o, l, k, iv, e) \ |
124 |
| - des_ncbc_encrypt((i), (o), (l), *(k), (iv), (e)) |
125 |
| -#define DES_ecb3_encrypt(i, o, k1, k2, k3, e) \ |
126 |
| - des_ecb3_encrypt((des_cblock *)(i), (des_cblock *)(o), \ |
127 |
| - *(k1), *(k2), *(k3), (e)) |
128 |
| -#define DES_ede3_cbc_encrypt(i, o, l, k1, k2, k3, iv, e) \ |
129 |
| - des_ede3_cbc_encrypt((i), (o), \ |
130 |
| - (l), *(k1), *(k2), *(k3), (iv), (e)) |
131 |
| - |
132 |
| -/* |
133 |
| - * Emulate newer digest API. |
134 |
| - */ |
135 |
| - |
136 |
| -static void |
137 |
| -EVP_MD_CTX_init(EVP_MD_CTX *ctx) |
138 |
| -{ |
139 |
| - memset(ctx, 0, sizeof(*ctx)); |
140 |
| -} |
141 |
| - |
142 |
| -static int |
143 |
| -EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) |
144 |
| -{ |
145 |
| - px_memset(ctx, 0, sizeof(*ctx)); |
146 |
| - return 1; |
147 |
| -} |
148 |
| - |
149 |
| -static int |
150 |
| -EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *md, void *engine) |
151 |
| -{ |
152 |
| - EVP_DigestInit(ctx, md); |
153 |
| - return 1; |
154 |
| -} |
155 |
| - |
156 |
| -static int |
157 |
| -EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *res, unsigned int *len) |
158 |
| -{ |
159 |
| - EVP_DigestFinal(ctx, res, len); |
160 |
| - return 1; |
161 |
| -} |
162 |
| -#endif /* old OpenSSL */ |
163 |
| - |
164 |
| -/* |
165 |
| - * Provide SHA2 for older OpenSSL < 0.9.8 |
166 |
| - */ |
167 |
| -#if OPENSSL_VERSION_NUMBER < 0x00908000L |
168 |
| - |
169 |
| -#include "sha2.c" |
170 |
| -#include "internal-sha2.c" |
171 |
| - |
172 |
| -typedef void (*init_f) (PX_MD *md); |
173 |
| - |
174 |
| -static int |
175 |
| -compat_find_digest(const char *name, PX_MD **res) |
176 |
| -{ |
177 |
| - init_f init = NULL; |
178 |
| - |
179 |
| - if (pg_strcasecmp(name, "sha224") == 0) |
180 |
| - init = init_sha224; |
181 |
| - else if (pg_strcasecmp(name, "sha256") == 0) |
182 |
| - init = init_sha256; |
183 |
| - else if (pg_strcasecmp(name, "sha384") == 0) |
184 |
| - init = init_sha384; |
185 |
| - else if (pg_strcasecmp(name, "sha512") == 0) |
186 |
| - init = init_sha512; |
187 |
| - else |
188 |
| - return PXE_NO_HASH; |
189 |
| - |
190 |
| - *res = px_alloc(sizeof(PX_MD)); |
191 |
| - init(*res); |
192 |
| - return 0; |
193 |
| -} |
194 |
| -#else |
195 |
| -#define compat_find_digest(name, res) (PXE_NO_HASH) |
196 |
| -#endif |
197 |
| - |
198 | 50 | /*
|
199 | 51 | * Hashes
|
200 | 52 | */
|
@@ -275,7 +127,7 @@ px_find_digest(const char *name, PX_MD **res)
|
275 | 127 |
|
276 | 128 | md = EVP_get_digestbyname(name);
|
277 | 129 | if (md == NULL)
|
278 |
| - return compat_find_digest(name, res); |
| 130 | + return PXE_NO_HASH; |
279 | 131 |
|
280 | 132 | digest = px_alloc(sizeof(*digest));
|
281 | 133 | digest->algo = md;
|
|
0 commit comments