/[mcrypt]/libmcrypt/lib/mcrypt_modules.c
ViewVC logotype

Annotation of /libmcrypt/lib/mcrypt_modules.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.34 - (hide annotations)
Mon Dec 16 09:52:51 2002 UTC (21 years, 4 months ago) by nmav
Branch: MAIN
Changes since 1.33: +5 -0 lines
File MIME type: text/plain
More checks on input. Suggested by Ilia A.

1 nmav 1.1 /*
2 nmav 1.20 * Copyright (C) 1998,1999,2000,2001 Nikos Mavroyanopoulos
3 nmav 1.1 *
4     * This library is free software; you can redistribute it and/or modify it
5     * under the terms of the GNU Library General Public License as published
6     * by the Free Software Foundation; either version 2 of the License, or
7     * (at your option) any later version.
8     *
9     * This library is distributed in the hope that it will be useful,
10     * but WITHOUT ANY WARRANTY; without even the implied warranty of
11     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12     * Library General Public License for more details.
13     *
14     * You should have received a copy of the GNU Library General Public
15     * License along with this library; if not, write to the
16     * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17     * Boston, MA 02111-1307, USA.
18     */
19    
20     #ifndef LIBDEFS_H
21     #define LIBDEFS_H
22     #include <libdefs.h>
23     #endif
24     #include <bzero.h>
25     #include <mcrypt_internal.h>
26     #include <xmemory.h>
27    
28 nmav 1.16 #ifndef DEBUG
29 nmav 1.17 # define fputs(x, y)
30 nmav 1.1 #endif
31    
32 nmav 1.18 extern const mcrypt_preloaded mps[];
33 nmav 1.17
34     #define MAX_MOD_SIZE 1024
35    
36 nmav 1.19 static int mcrypt_strcmp( const char* str1, const char* str2) {
37     int i;
38     int len;
39     if (strlen(str1)!=strlen(str2)) return -1;
40     len = strlen(str1);
41    
42     for (i=0;i<len;i++) {
43     if (str1[i]=='_' && str2[i]=='-') continue;
44     if (str2[i]=='_' && str1[i]=='-') continue;
45     if (str1[i]!=str2[i]) return -1;
46     }
47    
48     return 0;
49     }
50    
51 nmav 1.20 lt_ptr _mcrypt_search_symlist_lib(const char* name) {
52 nmav 1.17 int i=0;
53    
54 nmav 1.18 while( mps[i].name!=0 || mps[i].address!=0) {
55     if (mps[i].name!=NULL && mps[i].address==NULL) {
56 nmav 1.19 if (mcrypt_strcmp(name, mps[i].name)==0) {
57 nmav 1.17 return (void*) -1;
58     }
59     }
60     i++;
61     }
62     return NULL;
63     }
64    
65 nmav 1.20 lt_ptr _mcrypt_search_symlist_sym(mcrypt_dlhandle handle, const char* _name) {
66 nmav 1.17 int i=0;
67     char name[MAX_MOD_SIZE];
68    
69     strcpy(name, handle.name);
70    
71     strcat( name, "_LTX_");
72     strcat( name, _name);
73    
74 nmav 1.18 while( mps[i].name!=0 || mps[i].address!=0) {
75     if (mps[i].name!=NULL) {
76 nmav 1.19 if (mcrypt_strcmp(name, mps[i].name)==0) {
77 nmav 1.18 return mps[i].address;
78 nmav 1.17 }
79     }
80     i++;
81     }
82     return NULL;
83     }
84    
85     void mcrypt_dlclose( mcrypt_dlhandle handle) {
86     void* mod = handle.handle;
87    
88     if (mod!=MCRYPT_INTERNAL_HANDLER && mod!=NULL)
89     lt_dlclose(mod);
90     handle.handle = NULL;
91     }
92    
93     lt_ptr mcrypt_dlsym( mcrypt_dlhandle handle, char* str) {
94     void* mod;
95    
96     mod = handle.handle;
97    
98     if (mod!=MCRYPT_INTERNAL_HANDLER)
99     return lt_dlsym(mod, str);
100     else
101 nmav 1.20 return _mcrypt_search_symlist_sym(handle, str);
102 nmav 1.17
103     }
104    
105 nmav 1.5 WIN32DLL_DEFINE
106 nmav 1.1 int mcrypt_module_close(MCRYPT td)
107     {
108 nmav 1.22 if (td==NULL) return MCRYPT_UNKNOWN_ERROR;
109    
110 nmav 1.17 mcrypt_dlclose(td->algorithm_handle);
111     mcrypt_dlclose(td->mode_handle);
112 nmav 1.15 if (lt_dlexit() != 0) {
113     return MCRYPT_UNKNOWN_ERROR;
114     }
115 nmav 1.1
116     td->m_encrypt = NULL;
117     td->a_encrypt = NULL;
118     td->a_decrypt = NULL;
119     td->m_decrypt = NULL;
120    
121 nmav 1.13 free(td);
122    
123 nmav 1.1 return 0;
124     }
125    
126 nmav 1.17
127 nmav 1.5 WIN32DLL_DEFINE
128 nmav 1.17 void* mcrypt_dlopen ( mcrypt_dlhandle* handle, const char* a_directory, const char *m_directory, const char *filename) {
129    
130 nmav 1.33 char paths[1539];
131    
132     if (!filename || !(*filename)) {
133     return MCRYPT_FAILED;
134     }
135 nmav 1.2
136 nmav 1.31 if (strlen(filename) >= sizeof( handle->name))
137 nmav 1.17 return MCRYPT_FAILED;
138     else
139     strcpy( handle->name, filename);
140    
141 nmav 1.20 if (_mcrypt_search_symlist_lib(filename)!=NULL) {
142 nmav 1.17 handle->handle = MCRYPT_INTERNAL_HANDLER;
143     return handle->handle;
144 nmav 1.2 }
145 nmav 1.32
146 nmav 1.33 *paths = '\0';
147 nmav 1.3 if (a_directory != NULL) {
148     strncat( paths, a_directory, 512);
149     strcat( paths, ":");
150     }
151     if (m_directory != NULL) {
152     strncat( paths, m_directory, 512);
153     strcat( paths, ":");
154     }
155     strncat( paths, LIBDIR, 512);
156    
157     lt_dlsetsearchpath(paths);
158 nmav 1.2
159 nmav 1.17 handle->handle = lt_dlopenext(filename);
160 nmav 1.3
161 nmav 1.17 return handle->handle;
162 nmav 1.2
163     }
164    
165 nmav 1.5 WIN32DLL_DEFINE
166 nmav 1.30 MCRYPT mcrypt_module_open(const char *algorithm,
167     const char *a_directory, const char *mode,
168     const char *m_directory)
169 nmav 1.1 {
170     MCRYPT td;
171 nmav 1.8 const char* err;
172 nmav 1.17 void *ret;
173 nmav 1.2
174 nmav 1.1 td = calloc(1, sizeof(CRYPT_STREAM));
175 nmav 1.10 if (td==NULL) return MCRYPT_FAILED;
176 nmav 1.1
177     if (lt_dlinit() != 0) {
178     return MCRYPT_FAILED;
179     }
180    
181 nmav 1.17 ret = mcrypt_dlopen( &td->algorithm_handle, a_directory, m_directory, algorithm);
182     if (ret == NULL) {
183 nmav 1.4 err=lt_dlerror();
184 nmav 1.25 if (err!=NULL) {
185     fputs( err, stderr);
186     fputs("\n", stderr);
187     }
188 nmav 1.17 free(td);
189 nmav 1.27 lt_dlexit();
190 nmav 1.1 return MCRYPT_FAILED;
191     }
192    
193 nmav 1.17 ret = mcrypt_dlopen( &td->mode_handle, a_directory, m_directory, mode);
194 nmav 1.1
195 nmav 1.17 if (ret == NULL) {
196 nmav 1.4 err=lt_dlerror();
197 nmav 1.25 if (err!=NULL) {
198     fputs( err, stderr);
199     fputs( "\n", stderr);
200     }
201 nmav 1.17 mcrypt_dlclose(td->algorithm_handle);
202     free(td);
203 nmav 1.27 lt_dlexit();
204 nmav 1.1 return MCRYPT_FAILED;
205     }
206    
207 nmav 1.17 td->a_encrypt = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_encrypt");
208     td->a_decrypt = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_decrypt");
209     td->m_encrypt = mcrypt_dlsym(td->mode_handle, "_mcrypt");
210     td->m_decrypt = mcrypt_dlsym(td->mode_handle, "_mdecrypt");
211 nmav 1.1 td->a_block_size =
212 nmav 1.17 mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_block_size");
213 nmav 1.1
214 nmav 1.25 if (td->a_encrypt == NULL || td->a_decrypt == NULL|| td->m_encrypt == NULL||
215     td->m_decrypt == NULL|| td->a_block_size == NULL) {
216     err=lt_dlerror();
217     if (err!=NULL) {
218     fputs( err, stderr);
219     fputs( "\n", stderr);
220     }
221     mcrypt_dlclose(td->algorithm_handle);
222     free(td);
223 nmav 1.27 lt_dlexit();
224 nmav 1.25 return MCRYPT_FAILED;
225     }
226    
227 nmav 1.1 if (mcrypt_enc_is_block_algorithm_mode(td) !=
228     mcrypt_enc_is_block_algorithm(td)) {
229     mcrypt_module_close(td);
230     return MCRYPT_FAILED;
231     }
232    
233     return td;
234     }
235    
236    
237    
238     /* Modules' frontends */
239    
240 nmav 1.5 WIN32DLL_DEFINE
241 nmav 1.1 int mcrypt_get_size(MCRYPT td)
242     {
243     int (*_mcrypt_get_size) (void);
244    
245     const char *error;
246    
247 nmav 1.17 _mcrypt_get_size = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_size");
248 nmav 1.15 if (_mcrypt_get_size == NULL) {
249     error = lt_dlerror();
250 nmav 1.25 if (error!=NULL) {
251     fputs(error, stderr);
252     fputs("\n", stderr);
253     }
254 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
255     }
256     return _mcrypt_get_size();
257     }
258    
259 nmav 1.5 WIN32DLL_DEFINE
260 nmav 1.1 int mcrypt_mode_get_size(MCRYPT td)
261     {
262     int (*_mcrypt_get_size) (void);
263    
264     const char *error;
265    
266 nmav 1.17 _mcrypt_get_size = mcrypt_dlsym(td->mode_handle, "_mcrypt_mode_get_size");
267 nmav 1.15 if (_mcrypt_get_size == NULL) {
268     error = lt_dlerror();
269 nmav 1.25 if (error!=NULL) {
270     fputs(error, stderr);
271     fputs("\n", stderr);
272     }
273 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
274     }
275     return _mcrypt_get_size();
276     }
277    
278 nmav 1.5 WIN32DLL_DEFINE
279 nmav 1.30 int mcrypt_set_key(MCRYPT td, void *a, const void *key, int keysize, const void *iv, int e)
280 nmav 1.1 {
281 nmav 1.30 int (*__mcrypt_set_key_stream) (void *, const void *, int, const void *, int);
282     int (*__mcrypt_set_key_block) (void *, const void *, int);
283 nmav 1.1 const char *error;
284    
285     if (mcrypt_enc_is_block_algorithm(td) == 0) {
286     /* stream */
287 nmav 1.17 __mcrypt_set_key_stream = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_set_key");
288 nmav 1.15 if (__mcrypt_set_key_stream == NULL) {
289     error = lt_dlerror();
290 nmav 1.25 if (error!=NULL) {
291     fputs(error, stderr);
292     fputs("\n", stderr);
293     }
294 nmav 1.9 return -2;
295 nmav 1.1 }
296 nmav 1.30 return __mcrypt_set_key_stream(a, key, keysize, iv, e);
297 nmav 1.1 } else {
298 nmav 1.17 __mcrypt_set_key_block = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_set_key");
299 nmav 1.15 if (__mcrypt_set_key_block == NULL) {
300     error = lt_dlerror();
301 nmav 1.25 if (error!=NULL) {
302     fputs(error, stderr);
303     fputs("\n", stderr);
304     }
305 nmav 1.9 return -2;
306 nmav 1.1 }
307 nmav 1.30 return __mcrypt_set_key_block(a, key, keysize);
308 nmav 1.1 }
309     }
310    
311 nmav 1.5 WIN32DLL_DEFINE
312 nmav 1.30 int mcrypt_enc_set_state(MCRYPT td, const void *iv, int size)
313 nmav 1.2 {
314 nmav 1.30 int (*__mcrypt_set_state) (void *, const void *, int);
315 nmav 1.2 const char *error;
316    
317 nmav 1.17 __mcrypt_set_state = mcrypt_dlsym(td->mode_handle, "_mcrypt_set_state");
318 nmav 1.15 if (__mcrypt_set_state==NULL) {
319     error = lt_dlerror();
320 nmav 1.25 if (error!=NULL) {
321     fputs(error, stderr);
322     fputs("\n", stderr);
323     }
324 nmav 1.2 return MCRYPT_UNKNOWN_ERROR;
325     }
326     return __mcrypt_set_state(td->abuf, iv, size);
327     }
328    
329 nmav 1.5 WIN32DLL_DEFINE
330 nmav 1.29 int mcrypt_enc_get_state(MCRYPT td, void *iv, int *size)
331     {
332     int (*__mcrypt_get_state) (void *, void *, int*);
333     const char *error;
334    
335     __mcrypt_get_state = mcrypt_dlsym(td->mode_handle, "_mcrypt_get_state");
336     if (__mcrypt_get_state==NULL) {
337     error = lt_dlerror();
338     if (error!=NULL) {
339     fputs(error, stderr);
340     fputs("\n", stderr);
341     }
342     return MCRYPT_UNKNOWN_ERROR;
343     }
344     return __mcrypt_get_state(td->abuf, iv, size);
345     }
346    
347    
348     WIN32DLL_DEFINE
349 nmav 1.1 int mcrypt_enc_get_block_size(MCRYPT td)
350     {
351     int (*_mcrypt_get_block_size) (void);
352    
353     _mcrypt_get_block_size = td->a_block_size;
354     return _mcrypt_get_block_size();
355     }
356    
357 nmav 1.5 WIN32DLL_DEFINE
358 nmav 1.1 int mcrypt_get_algo_iv_size(MCRYPT td)
359     {
360 nmav 1.25 const char* error;
361 nmav 1.1 int (*_mcrypt_get_algo_iv_size) (void);
362    
363 nmav 1.17 _mcrypt_get_algo_iv_size = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_algo_iv_size");
364 nmav 1.25 if (_mcrypt_get_algo_iv_size == NULL) {
365     error = lt_dlerror();
366     if (error!=NULL) {
367     fputs(error, stderr);
368     fputs("\n", stderr);
369     }
370     return MCRYPT_UNKNOWN_ERROR;
371     }
372 nmav 1.1 return _mcrypt_get_algo_iv_size();
373     }
374    
375 nmav 1.5 WIN32DLL_DEFINE
376 nmav 1.1 int mcrypt_enc_get_iv_size(MCRYPT td)
377     {
378     if (mcrypt_enc_is_block_algorithm_mode(td) == 1) {
379     return mcrypt_enc_get_block_size(td);
380     } else {
381     return mcrypt_get_algo_iv_size(td);
382     }
383     }
384    
385 nmav 1.5 WIN32DLL_DEFINE
386 nmav 1.1 int mcrypt_enc_get_key_size(MCRYPT td)
387     {
388 nmav 1.25 const char* error;
389 nmav 1.1 int (*_mcrypt_get_key_size) (void);
390    
391 nmav 1.17 _mcrypt_get_key_size = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_key_size");
392 nmav 1.25 if (_mcrypt_get_key_size == NULL) {
393     error = lt_dlerror();
394     if (error!=NULL) {
395     fputs(error, stderr);
396     fputs("\n", stderr);
397     }
398     return MCRYPT_UNKNOWN_ERROR;
399     }
400 nmav 1.1 return _mcrypt_get_key_size();
401     }
402    
403 nmav 1.5 WIN32DLL_DEFINE
404 nmav 1.23 int *mcrypt_enc_get_supported_key_sizes(MCRYPT td, int *len)
405 nmav 1.1 {
406     int *(*_mcrypt_get_key_sizes) (int *);
407 nmav 1.23 int *size, *ret;
408 nmav 1.25 const char* error;
409 nmav 1.1
410     _mcrypt_get_key_sizes =
411 nmav 1.17 mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_supported_key_sizes");
412 nmav 1.25 if (_mcrypt_get_key_sizes == NULL) {
413     error = lt_dlerror();
414     if (error!=NULL) {
415     fputs(error, stderr);
416     fputs("\n", stderr);
417     }
418     *len = 0;
419     return NULL;
420     }
421    
422 nmav 1.1 size = _mcrypt_get_key_sizes(len);
423 nmav 1.23
424     ret = NULL;
425 nmav 1.24 if (size!=NULL && (*len) != 0) {
426 nmav 1.23 ret = malloc( sizeof(int)*(*len));
427     if (ret==NULL) return NULL;
428     memcpy( ret, size, sizeof(int)*(*len));
429     }
430     return ret;
431 nmav 1.1 }
432    
433 nmav 1.5 WIN32DLL_DEFINE
434 nmav 1.1 int mcrypt_enc_is_block_algorithm(MCRYPT td)
435     {
436     int (*_is_block_algorithm) (void);
437 nmav 1.25 const char* error;
438 nmav 1.1
439 nmav 1.17 _is_block_algorithm = mcrypt_dlsym(td->algorithm_handle, "_is_block_algorithm");
440 nmav 1.25 if (_is_block_algorithm == NULL) {
441     error = lt_dlerror();
442     if (error!=NULL) {
443     fputs(error, stderr);
444     fputs("\n", stderr);
445     }
446     return MCRYPT_UNKNOWN_ERROR;
447     }
448    
449 nmav 1.1 return _is_block_algorithm();
450     }
451    
452 nmav 1.5 WIN32DLL_DEFINE
453 nmav 1.23 char *mcrypt_enc_get_algorithms_name(MCRYPT td)
454 nmav 1.1 {
455 nmav 1.20 const char *(*_mcrypt_get_algorithms_name) (void);
456 nmav 1.25 const char* error;
457 nmav 1.1
458     _mcrypt_get_algorithms_name =
459 nmav 1.17 mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_algorithms_name");
460 nmav 1.25 if (_mcrypt_get_algorithms_name == NULL) {
461     error = lt_dlerror();
462     if (error!=NULL) {
463     fputs(error, stderr);
464     fputs("\n", stderr);
465     }
466     return NULL;
467     }
468    
469 nmav 1.29 return strdup(_mcrypt_get_algorithms_name());
470 nmav 1.1 }
471    
472 nmav 1.5 WIN32DLL_DEFINE
473 nmav 1.30 int init_mcrypt(MCRYPT td, void *buf, const void *key, int keysize, const void *iv)
474 nmav 1.1 {
475 nmav 1.30 int (*_init_mcrypt) (void *, const void *, int, const void *, int);
476 nmav 1.25 const char* error;
477 nmav 1.1
478 nmav 1.17 _init_mcrypt = mcrypt_dlsym(td->mode_handle, "_init_mcrypt");
479 nmav 1.25 if (_init_mcrypt == NULL) {
480     error = lt_dlerror();
481     if (error!=NULL) {
482     fputs(error, stderr);
483     fputs("\n", stderr);
484     }
485     return MCRYPT_UNKNOWN_ERROR;
486     }
487    
488 nmav 1.30 return _init_mcrypt(buf, key, keysize, iv, mcrypt_enc_get_block_size(td));
489 nmav 1.1 }
490    
491 nmav 1.5 WIN32DLL_DEFINE
492 nmav 1.1 int end_mcrypt(MCRYPT td, void *buf)
493     {
494     int (*_end_mcrypt) (void *);
495 nmav 1.25 const char* error;
496 nmav 1.1
497 nmav 1.17 _end_mcrypt = mcrypt_dlsym(td->mode_handle, "_end_mcrypt");
498 nmav 1.25 if (_end_mcrypt == NULL) {
499     error = lt_dlerror();
500     if (error!=NULL) {
501     fputs(error, stderr);
502     fputs("\n", stderr);
503     }
504     return MCRYPT_UNKNOWN_ERROR;
505     }
506    
507 nmav 1.1 return _end_mcrypt(buf);
508     }
509    
510 nmav 1.5 WIN32DLL_DEFINE
511 nmav 1.1 int mcrypt(MCRYPT td, void *buf, void *a, int b)
512     {
513     int (*_mcrypt) (void *, void *, int, int, void *, void *, void*);
514 nmav 1.34
515     if (!buf) return -1;
516    
517 nmav 1.1 _mcrypt = td->m_encrypt;
518    
519     return _mcrypt(buf, a, b, mcrypt_enc_get_block_size(td), td->akey,
520     td->a_encrypt, td->a_decrypt);
521     }
522    
523 nmav 1.5 WIN32DLL_DEFINE
524 nmav 1.1 int mdecrypt(MCRYPT td, void *buf, void *a, int b)
525     {
526     int (*_mdecrypt) (void *, void *, int, int, void *, void *, void*);
527 nmav 1.34
528     if (!buf) return -1;
529 nmav 1.1
530     _mdecrypt = td->m_decrypt;
531     return _mdecrypt(buf, a, b, mcrypt_enc_get_block_size(td),
532     td->akey, td->a_encrypt, td->a_decrypt);
533     }
534    
535 nmav 1.5 WIN32DLL_DEFINE
536 nmav 1.23 char *mcrypt_enc_get_modes_name(MCRYPT td)
537 nmav 1.1 {
538 nmav 1.20 const char *(*_mcrypt_get_modes_name) (void);
539 nmav 1.25 const char* error;
540 nmav 1.1
541 nmav 1.17 _mcrypt_get_modes_name = mcrypt_dlsym(td->mode_handle, "_mcrypt_get_modes_name");
542 nmav 1.25 if (_mcrypt_get_modes_name == NULL) {
543     error = lt_dlerror();
544     if (error!=NULL) {
545     fputs(error, stderr);
546     fputs("\n", stderr);
547     }
548     return NULL;
549     }
550    
551 nmav 1.29 return strdup(_mcrypt_get_modes_name());
552 nmav 1.1 }
553    
554 nmav 1.5 WIN32DLL_DEFINE
555 nmav 1.1 int mcrypt_enc_is_block_mode(MCRYPT td)
556     {
557     int (*_is_block_mode) (void);
558 nmav 1.25 const char* error;
559    
560     _is_block_mode = mcrypt_dlsym(td->mode_handle, "_is_block_mode");
561     if (_is_block_mode == NULL) {
562     error = lt_dlerror();
563     if (error!=NULL) {
564     fputs(error, stderr);
565     fputs("\n", stderr);
566     }
567     return MCRYPT_UNKNOWN_ERROR;
568     }
569 nmav 1.1
570     return _is_block_mode();
571     }
572    
573 nmav 1.5 WIN32DLL_DEFINE
574 nmav 1.1 int mcrypt_enc_mode_has_iv(MCRYPT td)
575     {
576     int (*_has_iv) (void);
577 nmav 1.25 const char* error;
578 nmav 1.1
579 nmav 1.17 _has_iv = mcrypt_dlsym(td->mode_handle, "_has_iv");
580 nmav 1.25 if (_has_iv == NULL) {
581     error = lt_dlerror();
582     if (error!=NULL) {
583     fputs(error, stderr);
584     fputs("\n", stderr);
585     }
586     return MCRYPT_UNKNOWN_ERROR;
587     }
588    
589 nmav 1.1 return _has_iv();
590     }
591    
592 nmav 1.5 WIN32DLL_DEFINE
593 nmav 1.1 int mcrypt_enc_is_block_algorithm_mode(MCRYPT td)
594     {
595     int (*_is_a_block_mode) (void);
596 nmav 1.25 const char* error;
597 nmav 1.1
598 nmav 1.17 _is_a_block_mode = mcrypt_dlsym(td->mode_handle, "_is_block_algorithm_mode");
599 nmav 1.25 if (_is_a_block_mode == NULL) {
600     error = lt_dlerror();
601     if (error!=NULL) {
602     fputs(error, stderr);
603     fputs("\n", stderr);
604     }
605     return MCRYPT_UNKNOWN_ERROR;
606     }
607    
608 nmav 1.1 return _is_a_block_mode();
609     }
610    
611 nmav 1.5 WIN32DLL_DEFINE
612 nmav 1.1 int mcrypt_enc_self_test(MCRYPT td)
613     {
614     int (*_self_test) (void);
615 nmav 1.25 const char* error;
616 nmav 1.1
617 nmav 1.17 _self_test = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_self_test");
618 nmav 1.25 if (_self_test == NULL) {
619     error = lt_dlerror();
620     if (error!=NULL) {
621     fputs(error, stderr);
622     fputs("\n", stderr);
623     }
624     return MCRYPT_UNKNOWN_ERROR;
625     }
626 nmav 1.1
627     return _self_test();
628     }
629    
630 nmav 1.5 WIN32DLL_DEFINE
631 nmav 1.30 int mcrypt_module_self_test(const char *algorithm, const char *a_directory)
632 nmav 1.1 {
633     int i;
634 nmav 1.17 void* rr;
635     mcrypt_dlhandle _handle;
636 nmav 1.1 int (*_self_test) (void);
637 nmav 1.8 const char* error;
638 nmav 1.1
639     if (lt_dlinit() != 0) {
640     return MCRYPT_UNKNOWN_ERROR;
641     }
642    
643 nmav 1.17 rr = mcrypt_dlopen(&_handle, a_directory, NULL, algorithm);
644 nmav 1.1
645 nmav 1.17 if (!rr) {
646 nmav 1.4 error=lt_dlerror();
647 nmav 1.25 if (error!=NULL) {
648     fputs( error, stderr);
649     fputs("\n", stderr);
650     }
651 nmav 1.15 lt_dlexit();
652 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
653     }
654    
655 nmav 1.17 _self_test = mcrypt_dlsym(_handle, "_mcrypt_self_test");
656 nmav 1.25 if (_self_test == NULL) {
657     mcrypt_dlclose(_handle);
658     lt_dlexit();
659     return MCRYPT_UNKNOWN_ERROR;
660     }
661    
662 nmav 1.1 i = _self_test();
663    
664 nmav 1.17 mcrypt_dlclose(_handle);
665 nmav 1.15 if (lt_dlexit() != 0) {
666     return MCRYPT_UNKNOWN_ERROR;
667     }
668    
669 nmav 1.1 return i;
670     }
671    
672 nmav 1.5 WIN32DLL_DEFINE
673 nmav 1.30 int mcrypt_module_algorithm_version(const char *algorithm, const char *a_directory)
674 nmav 1.1 {
675     int i;
676 nmav 1.17 mcrypt_dlhandle _handle;
677 nmav 1.1 int (*_version) (void);
678 nmav 1.8 const char* error;
679 nmav 1.17 void* rr;
680    
681 nmav 1.1 if (lt_dlinit() != 0) {
682     return MCRYPT_UNKNOWN_ERROR;
683     }
684    
685 nmav 1.17 rr = mcrypt_dlopen(&_handle, a_directory, NULL, algorithm);
686     if (!rr) {
687 nmav 1.4 error=lt_dlerror();
688 nmav 1.25 if (error!=NULL) {
689     fputs( error, stderr);
690     fputs("\n", stderr);
691     }
692     lt_dlexit();
693 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
694     }
695    
696 nmav 1.17 _version = mcrypt_dlsym(_handle, "_mcrypt_algorithm_version");
697 nmav 1.25 if (_version==NULL) {
698     mcrypt_dlclose(_handle);
699     lt_dlexit();
700     return MCRYPT_UNKNOWN_ERROR;
701     }
702 nmav 1.1
703     i = _version();
704    
705 nmav 1.17 mcrypt_dlclose(_handle);
706 nmav 1.15 if (lt_dlexit() != 0) {
707     return MCRYPT_UNKNOWN_ERROR;
708     }
709 nmav 1.1
710     return i;
711     }
712    
713 nmav 1.5 WIN32DLL_DEFINE
714 nmav 1.30 int mcrypt_module_mode_version(const char *mode, const char *m_directory)
715 nmav 1.1 {
716     int i;
717 nmav 1.17 mcrypt_dlhandle _handle;
718 nmav 1.1 int (*_version) (void);
719 nmav 1.8 const char* error;
720 nmav 1.17 void * rr;
721 nmav 1.1
722     if (lt_dlinit() != 0) {
723     return MCRYPT_UNKNOWN_ERROR;
724     }
725    
726 nmav 1.17 rr = mcrypt_dlopen( &_handle, m_directory, NULL, mode);
727     if (!rr) {
728 nmav 1.4 error=lt_dlerror();
729 nmav 1.25 if(error!=NULL) {
730     fputs(error, stderr);
731     fputs("\n", stderr);
732     }
733 nmav 1.27 lt_dlexit();
734 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
735     }
736    
737 nmav 1.17 _version = mcrypt_dlsym( _handle, "_mcrypt_mode_version");
738 nmav 1.25 if (_version==NULL) {
739     mcrypt_dlclose(_handle);
740     lt_dlexit();
741     return MCRYPT_UNKNOWN_ERROR;
742     }
743 nmav 1.1
744     i = _version();
745    
746 nmav 1.17 mcrypt_dlclose(_handle);
747 nmav 1.15 if (lt_dlexit() != 0) {
748     return MCRYPT_UNKNOWN_ERROR;
749     }
750 nmav 1.1
751     return i;
752     }
753    
754 nmav 1.5 WIN32DLL_DEFINE
755 nmav 1.30 int mcrypt_module_is_block_algorithm(const char *algorithm, const char *a_directory)
756 nmav 1.1 {
757     int i;
758 nmav 1.17 mcrypt_dlhandle _handle;
759 nmav 1.1 int (*_is_block_algorithm) (void);
760 nmav 1.8 const char* error;
761 nmav 1.17 void * rr;
762 nmav 1.4
763 nmav 1.1 if (lt_dlinit() != 0) {
764     return MCRYPT_UNKNOWN_ERROR;
765     }
766    
767 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
768     if (!rr) {
769 nmav 1.4 error=lt_dlerror();
770 nmav 1.25 if(error!=NULL) {
771     fputs( error, stderr);
772     fputs("\n", stderr);
773     }
774 nmav 1.27 lt_dlexit();
775 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
776     }
777    
778 nmav 1.17 _is_block_algorithm = mcrypt_dlsym(_handle, "_is_block_algorithm");
779 nmav 1.25 if (_is_block_algorithm==NULL) {
780     mcrypt_dlclose(_handle);
781     lt_dlexit();
782     return MCRYPT_UNKNOWN_ERROR;
783     }
784 nmav 1.1
785     i = _is_block_algorithm();
786    
787 nmav 1.17 mcrypt_dlclose(_handle);
788 nmav 1.15 if (lt_dlexit() != 0) {
789     return MCRYPT_UNKNOWN_ERROR;
790     }
791 nmav 1.1
792     return i;
793     }
794    
795 nmav 1.5 WIN32DLL_DEFINE
796 nmav 1.30 int mcrypt_module_is_block_algorithm_mode(const char *mode, const char *m_directory)
797 nmav 1.1 {
798     int i;
799 nmav 1.17 mcrypt_dlhandle _handle;
800 nmav 1.1 int (*_is_a_block_mode) (void);
801 nmav 1.8 const char* error;
802 nmav 1.17 void * rr;
803 nmav 1.1
804     if (lt_dlinit() != 0) {
805     return MCRYPT_UNKNOWN_ERROR;
806     }
807    
808 nmav 1.17 rr = mcrypt_dlopen( &_handle, m_directory, NULL, mode);
809     if (!rr) {
810 nmav 1.4 error=lt_dlerror();
811 nmav 1.25 if(error!=NULL) {
812     fputs( error, stderr);
813     fputs("\n", stderr);
814     }
815 nmav 1.27 lt_dlexit();
816 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
817     }
818    
819 nmav 1.17 _is_a_block_mode = mcrypt_dlsym(_handle, "_is_block_algorithm_mode");
820 nmav 1.25 if (_is_a_block_mode==NULL) {
821     mcrypt_dlclose(_handle);
822     lt_dlexit();
823     return MCRYPT_UNKNOWN_ERROR;
824     }
825 nmav 1.1
826     i = _is_a_block_mode();
827    
828 nmav 1.17 mcrypt_dlclose(_handle);
829 nmav 1.15 if (lt_dlexit() != 0) {
830     return MCRYPT_UNKNOWN_ERROR;
831     }
832 nmav 1.1
833     return i;
834     }
835    
836 nmav 1.5 WIN32DLL_DEFINE
837 nmav 1.30 int mcrypt_module_is_block_mode(const char *mode, const char *m_directory)
838 nmav 1.1 {
839 nmav 1.17 void * rr;
840 nmav 1.1 int i;
841 nmav 1.17 mcrypt_dlhandle _handle;
842 nmav 1.1 int (*_is_block_mode) (void);
843 nmav 1.8 const char* error;
844 nmav 1.1
845     if (lt_dlinit() != 0) {
846     return MCRYPT_UNKNOWN_ERROR;
847     }
848    
849 nmav 1.17 rr = mcrypt_dlopen( &_handle, m_directory, NULL, mode);
850     if (!rr) {
851 nmav 1.4 error=lt_dlerror();
852 nmav 1.25 if(error!=NULL) {
853     fputs( error, stderr);
854     fputs("\n", stderr);
855     }
856 nmav 1.27 lt_dlexit();
857 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
858     }
859    
860 nmav 1.17 _is_block_mode = mcrypt_dlsym(_handle, "_is_block_mode");
861 nmav 1.25 if (_is_block_mode==NULL) {
862     mcrypt_dlclose(_handle);
863     lt_dlexit();
864     return MCRYPT_UNKNOWN_ERROR;
865     }
866 nmav 1.1
867     i = _is_block_mode();
868    
869 nmav 1.17 mcrypt_dlclose(_handle);
870 nmav 1.15 if (lt_dlexit() != 0) {
871     return MCRYPT_UNKNOWN_ERROR;
872     }
873 nmav 1.1
874     return i;
875     }
876    
877 nmav 1.5 WIN32DLL_DEFINE
878 nmav 1.30 int mcrypt_module_get_algo_block_size(const char *algorithm, const char *a_directory)
879 nmav 1.1 {
880     int i;
881 nmav 1.17 mcrypt_dlhandle _handle;
882 nmav 1.1 int (*_get_block_size) (void);
883 nmav 1.8 const char* error;
884 nmav 1.17 void * rr;
885 nmav 1.1
886     if (lt_dlinit() != 0) {
887     return MCRYPT_UNKNOWN_ERROR;
888     }
889    
890 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
891     if (!rr) {
892 nmav 1.4 error=lt_dlerror();
893 nmav 1.25 if(error!=NULL) {
894     fputs( error, stderr);
895     fputs("\n", stderr);
896     }
897 nmav 1.27 lt_dlexit();
898 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
899     }
900    
901 nmav 1.17 _get_block_size = mcrypt_dlsym(_handle, "_mcrypt_get_block_size");
902 nmav 1.25 if (_get_block_size==NULL) {
903     mcrypt_dlclose(_handle);
904     lt_dlexit();
905     return MCRYPT_UNKNOWN_ERROR;
906     }
907 nmav 1.1
908     i = _get_block_size();
909    
910 nmav 1.17 mcrypt_dlclose(_handle);
911 nmav 1.15 if (lt_dlexit() != 0) {
912     return MCRYPT_UNKNOWN_ERROR;
913     }
914 nmav 1.1
915     return i;
916     }
917    
918 nmav 1.5 WIN32DLL_DEFINE
919 nmav 1.30 int mcrypt_module_get_algo_key_size(const char *algorithm, const char *a_directory)
920 nmav 1.1 {
921     int i;
922 nmav 1.17 mcrypt_dlhandle _handle;
923 nmav 1.1 int (*_get_key_size) (void);
924 nmav 1.8 const char* error;
925 nmav 1.17 void * rr;
926 nmav 1.1
927     if (lt_dlinit() != 0) {
928     return MCRYPT_UNKNOWN_ERROR;
929     }
930    
931 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
932     if (!rr) {
933 nmav 1.4 error=lt_dlerror();
934 nmav 1.25 if(error!=NULL) {
935     fputs( error, stderr);
936     fputs("\n", stderr);
937     }
938 nmav 1.27 lt_dlexit();
939 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
940     }
941    
942 nmav 1.17 _get_key_size = mcrypt_dlsym(_handle, "_mcrypt_get_key_size");
943 nmav 1.25 if (_get_key_size==NULL) {
944     mcrypt_dlclose(_handle);
945     lt_dlexit();
946     return MCRYPT_UNKNOWN_ERROR;
947     }
948 nmav 1.1
949     i = _get_key_size();
950    
951 nmav 1.17 mcrypt_dlclose(_handle);
952 nmav 1.15 if (lt_dlexit() != 0) {
953     return MCRYPT_UNKNOWN_ERROR;
954     }
955 nmav 1.1
956     return i;
957     }
958    
959 nmav 1.5 WIN32DLL_DEFINE
960 nmav 1.30 int *mcrypt_module_get_algo_supported_key_sizes(const char *algorithm,
961     const char *a_directory,
962 nmav 1.1 int *len)
963     {
964 nmav 1.17 mcrypt_dlhandle _handle;
965 nmav 1.25 int *(*_mcrypt_get_key_sizes) (int *);
966 nmav 1.1 int *size;
967 nmav 1.21 int * ret_size;
968 nmav 1.8 const char* error;
969 nmav 1.17 void * rr;
970 nmav 1.28
971 nmav 1.17
972 nmav 1.1 if (lt_dlinit() != 0) {
973     *len = 0;
974     return NULL;
975     }
976    
977 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
978     if (!rr) {
979 nmav 1.4 error=lt_dlerror();
980 nmav 1.25 if(error!=NULL) {
981     fputs( error, stderr);
982     fputs("\n", stderr);
983     }
984 nmav 1.28 lt_dlexit();
985 nmav 1.1 *len = 0;
986     return NULL;
987     }
988    
989     _mcrypt_get_key_sizes =
990 nmav 1.17 mcrypt_dlsym(_handle, "_mcrypt_get_supported_key_sizes");
991 nmav 1.25 if (_mcrypt_get_key_sizes==NULL) {
992     mcrypt_dlclose(_handle);
993     lt_dlexit();
994 nmav 1.28 *len = 0;
995 nmav 1.25 return NULL;
996     }
997 nmav 1.1
998 nmav 1.24 ret_size = NULL;
999 nmav 1.1 size = _mcrypt_get_key_sizes(len);
1000 nmav 1.24 if (*len!=0 && size!=NULL) {
1001 nmav 1.21 ret_size = malloc( (*len)*sizeof(int));
1002     if (ret_size!=NULL) {
1003     memcpy( ret_size, size, (*len)*sizeof(int));
1004     }
1005 nmav 1.28 } else *len = 0;
1006 nmav 1.21
1007 nmav 1.17 mcrypt_dlclose(_handle);
1008 nmav 1.15 if (lt_dlexit() != 0) {
1009     return NULL;
1010     }
1011 nmav 1.1
1012 nmav 1.21 return ret_size;
1013 nmav 1.1 }

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26