|
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