/[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.18 - (hide annotations)
Sun Sep 2 20:11:45 2001 UTC (22 years, 7 months ago) by nmav
Branch: MAIN
Changes since 1.17: +9 -20 lines
File MIME type: text/plain
added option to include modules into the library

1 nmav 1.1 /*
2     * Copyright (C) 1998,1999,2000 Nikos Mavroyanopoulos
3     *
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.18 static lt_ptr search_symlist_lib(const char* name) {
37 nmav 1.17 int i=0;
38    
39 nmav 1.18 while( mps[i].name!=0 || mps[i].address!=0) {
40     if (mps[i].name!=NULL && mps[i].address==NULL) {
41     if (strcmp(name, mps[i].name)==0) {
42 nmav 1.17 return (void*) -1;
43     }
44     }
45     i++;
46     }
47     return NULL;
48     }
49    
50     static lt_ptr search_symlist_sym(mcrypt_dlhandle handle, const char* _name) {
51     int i=0;
52     char name[MAX_MOD_SIZE];
53    
54     strcpy(name, handle.name);
55    
56     strcat( name, "_LTX_");
57     strcat( name, _name);
58    
59 nmav 1.18 while( mps[i].name!=0 || mps[i].address!=0) {
60     if (mps[i].name!=NULL) {
61     if (strcmp(name, mps[i].name)==0) {
62     return mps[i].address;
63 nmav 1.17 }
64     }
65     i++;
66     }
67     return NULL;
68     }
69    
70     void mcrypt_dlclose( mcrypt_dlhandle handle) {
71     void* mod = handle.handle;
72    
73     if (mod!=MCRYPT_INTERNAL_HANDLER && mod!=NULL)
74     lt_dlclose(mod);
75     handle.handle = NULL;
76     }
77    
78     lt_ptr mcrypt_dlsym( mcrypt_dlhandle handle, char* str) {
79     void* mod;
80    
81     mod = handle.handle;
82    
83     if (mod!=MCRYPT_INTERNAL_HANDLER)
84     return lt_dlsym(mod, str);
85     else
86     return search_symlist_sym(handle, str);
87    
88     }
89    
90 nmav 1.5 WIN32DLL_DEFINE
91 nmav 1.1 int mcrypt_module_close(MCRYPT td)
92     {
93 nmav 1.17 mcrypt_dlclose(td->algorithm_handle);
94     mcrypt_dlclose(td->mode_handle);
95 nmav 1.15 if (lt_dlexit() != 0) {
96     return MCRYPT_UNKNOWN_ERROR;
97     }
98 nmav 1.1
99     td->m_encrypt = NULL;
100     td->a_encrypt = NULL;
101     td->a_decrypt = NULL;
102     td->m_decrypt = NULL;
103    
104 nmav 1.13 free(td);
105    
106 nmav 1.1 return 0;
107     }
108    
109 nmav 1.17
110 nmav 1.5 WIN32DLL_DEFINE
111 nmav 1.17 void* mcrypt_dlopen ( mcrypt_dlhandle* handle, const char* a_directory, const char *m_directory, const char *filename) {
112    
113     char paths[1526];
114 nmav 1.2
115 nmav 1.17 if (strlen(filename) > sizeof( handle->name))
116     return MCRYPT_FAILED;
117     else
118     strcpy( handle->name, filename);
119    
120     if (search_symlist_lib(filename)!=NULL) {
121     handle->handle = MCRYPT_INTERNAL_HANDLER;
122     return handle->handle;
123 nmav 1.2 }
124    
125 nmav 1.3 memset( paths, 0, 1024);
126     if (a_directory != NULL) {
127     strncat( paths, a_directory, 512);
128     strcat( paths, ":");
129     }
130     if (m_directory != NULL) {
131     strncat( paths, m_directory, 512);
132     strcat( paths, ":");
133     }
134     strncat( paths, LIBDIR, 512);
135    
136     lt_dlsetsearchpath(paths);
137 nmav 1.2
138 nmav 1.17 handle->handle = lt_dlopenext(filename);
139 nmav 1.3
140 nmav 1.17 return handle->handle;
141 nmav 1.2
142     }
143    
144 nmav 1.5 WIN32DLL_DEFINE
145 nmav 1.1 MCRYPT mcrypt_module_open(char *algorithm,
146     char *a_directory, char *mode, char *m_directory)
147     {
148     MCRYPT td;
149 nmav 1.8 const char* err;
150 nmav 1.17 void *ret;
151 nmav 1.2
152 nmav 1.1 td = calloc(1, sizeof(CRYPT_STREAM));
153 nmav 1.10 if (td==NULL) return MCRYPT_FAILED;
154 nmav 1.1
155     if (lt_dlinit() != 0) {
156     return MCRYPT_FAILED;
157     }
158    
159 nmav 1.17 ret = mcrypt_dlopen( &td->algorithm_handle, a_directory, m_directory, algorithm);
160     if (ret == NULL) {
161 nmav 1.4 err=lt_dlerror();
162     if (err!=NULL) fputs( err, stderr);
163 nmav 1.1 fputs("\n", stderr);
164 nmav 1.17 free(td);
165 nmav 1.1 return MCRYPT_FAILED;
166     }
167    
168 nmav 1.17 ret = mcrypt_dlopen( &td->mode_handle, a_directory, m_directory, mode);
169 nmav 1.1
170 nmav 1.17 if (ret == NULL) {
171 nmav 1.4 err=lt_dlerror();
172     if (err!=NULL) fputs( err, stderr);
173 nmav 1.17 mcrypt_dlclose(td->algorithm_handle);
174     free(td);
175 nmav 1.1 return MCRYPT_FAILED;
176     }
177    
178 nmav 1.17 td->a_encrypt = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_encrypt");
179     td->a_decrypt = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_decrypt");
180     td->m_encrypt = mcrypt_dlsym(td->mode_handle, "_mcrypt");
181     td->m_decrypt = mcrypt_dlsym(td->mode_handle, "_mdecrypt");
182 nmav 1.1 td->a_block_size =
183 nmav 1.17 mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_block_size");
184 nmav 1.1
185     if (mcrypt_enc_is_block_algorithm_mode(td) !=
186     mcrypt_enc_is_block_algorithm(td)) {
187     mcrypt_module_close(td);
188     return MCRYPT_FAILED;
189     }
190    
191     return td;
192     }
193    
194    
195    
196     /* Modules' frontends */
197    
198 nmav 1.5 WIN32DLL_DEFINE
199 nmav 1.1 int mcrypt_get_size(MCRYPT td)
200     {
201     int (*_mcrypt_get_size) (void);
202    
203     const char *error;
204    
205 nmav 1.17 _mcrypt_get_size = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_size");
206 nmav 1.15 if (_mcrypt_get_size == NULL) {
207     error = lt_dlerror();
208 nmav 1.4 if (error!=NULL) fputs(error, stderr);
209 nmav 1.1 fputs("\n", stderr);
210     return MCRYPT_UNKNOWN_ERROR;
211     }
212     return _mcrypt_get_size();
213     }
214    
215 nmav 1.5 WIN32DLL_DEFINE
216 nmav 1.1 int mcrypt_mode_get_size(MCRYPT td)
217     {
218     int (*_mcrypt_get_size) (void);
219    
220     const char *error;
221    
222 nmav 1.17 _mcrypt_get_size = mcrypt_dlsym(td->mode_handle, "_mcrypt_mode_get_size");
223 nmav 1.15 if (_mcrypt_get_size == NULL) {
224     error = lt_dlerror();
225 nmav 1.4 if (error!=NULL) fputs(error, stderr);
226 nmav 1.1 fputs("\n", stderr);
227     return MCRYPT_UNKNOWN_ERROR;
228     }
229     return _mcrypt_get_size();
230     }
231    
232 nmav 1.5 WIN32DLL_DEFINE
233 nmav 1.9 int mcrypt_set_key(MCRYPT td, void *a, void *b, int c, void *d, int e)
234 nmav 1.1 {
235 nmav 1.9 int (*__mcrypt_set_key_stream) (void *, void *, int, void *, int);
236     int (*__mcrypt_set_key_block) (void *, void *, int);
237 nmav 1.1 const char *error;
238    
239     if (mcrypt_enc_is_block_algorithm(td) == 0) {
240     /* stream */
241 nmav 1.17 __mcrypt_set_key_stream = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_set_key");
242 nmav 1.15 if (__mcrypt_set_key_stream == NULL) {
243     error = lt_dlerror();
244 nmav 1.4 if (error!=NULL) fputs(error, stderr);
245 nmav 1.1 fputs("\n", stderr);
246 nmav 1.9 return -2;
247 nmav 1.1 }
248 nmav 1.9 return __mcrypt_set_key_stream(a, b, c, d, e);
249 nmav 1.1 } else {
250 nmav 1.17 __mcrypt_set_key_block = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_set_key");
251 nmav 1.15 if (__mcrypt_set_key_block == NULL) {
252     error = lt_dlerror();
253 nmav 1.4 if (error!=NULL) fputs(error, stderr);
254 nmav 1.1 fputs("\n", stderr);
255 nmav 1.9 return -2;
256 nmav 1.1 }
257 nmav 1.9 return __mcrypt_set_key_block(a, b, c);
258 nmav 1.1 }
259     }
260    
261 nmav 1.5 WIN32DLL_DEFINE
262 nmav 1.2 int mcrypt_enc_set_state(MCRYPT td, void *iv, int size)
263     {
264     int (*__mcrypt_set_state) (void *, void *, int);
265     const char *error;
266    
267 nmav 1.17 __mcrypt_set_state = mcrypt_dlsym(td->mode_handle, "_mcrypt_set_state");
268 nmav 1.15 if (__mcrypt_set_state==NULL) {
269     error = lt_dlerror();
270 nmav 1.4 if (error!=NULL) fputs(error, stderr);
271 nmav 1.2 fputs("\n", stderr);
272     return MCRYPT_UNKNOWN_ERROR;
273     }
274     return __mcrypt_set_state(td->abuf, iv, size);
275     }
276    
277 nmav 1.5 WIN32DLL_DEFINE
278 nmav 1.1 int mcrypt_enc_get_block_size(MCRYPT td)
279     {
280     int (*_mcrypt_get_block_size) (void);
281    
282     _mcrypt_get_block_size = td->a_block_size;
283     return _mcrypt_get_block_size();
284     }
285    
286 nmav 1.5 WIN32DLL_DEFINE
287 nmav 1.1 int mcrypt_get_algo_iv_size(MCRYPT td)
288     {
289     int (*_mcrypt_get_algo_iv_size) (void);
290    
291 nmav 1.17 _mcrypt_get_algo_iv_size = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_algo_iv_size");
292 nmav 1.1 return _mcrypt_get_algo_iv_size();
293     }
294    
295 nmav 1.5 WIN32DLL_DEFINE
296 nmav 1.1 int mcrypt_enc_get_iv_size(MCRYPT td)
297     {
298     if (mcrypt_enc_is_block_algorithm_mode(td) == 1) {
299     return mcrypt_enc_get_block_size(td);
300     } else {
301     return mcrypt_get_algo_iv_size(td);
302     }
303     }
304    
305 nmav 1.5 WIN32DLL_DEFINE
306 nmav 1.1 int mcrypt_enc_get_key_size(MCRYPT td)
307     {
308     int (*_mcrypt_get_key_size) (void);
309    
310 nmav 1.17 _mcrypt_get_key_size = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_key_size");
311 nmav 1.1 return _mcrypt_get_key_size();
312     }
313    
314 nmav 1.5 WIN32DLL_DEFINE
315 nmav 1.1 int *mcrypt_enc_get_supported_key_sizes(MCRYPT td, int *len)
316     {
317     int *(*_mcrypt_get_key_sizes) (int *);
318     int *size;
319    
320     _mcrypt_get_key_sizes =
321 nmav 1.17 mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_supported_key_sizes");
322 nmav 1.1 size = _mcrypt_get_key_sizes(len);
323    
324     return size;
325     }
326    
327 nmav 1.5 WIN32DLL_DEFINE
328 nmav 1.1 int mcrypt_enc_is_block_algorithm(MCRYPT td)
329     {
330     int (*_is_block_algorithm) (void);
331    
332 nmav 1.17 _is_block_algorithm = mcrypt_dlsym(td->algorithm_handle, "_is_block_algorithm");
333 nmav 1.1 return _is_block_algorithm();
334     }
335    
336 nmav 1.5 WIN32DLL_DEFINE
337 nmav 1.1 char *mcrypt_enc_get_algorithms_name(MCRYPT td)
338     {
339     char *(*_mcrypt_get_algorithms_name) (void);
340    
341     _mcrypt_get_algorithms_name =
342 nmav 1.17 mcrypt_dlsym(td->algorithm_handle, "_mcrypt_get_algorithms_name");
343 nmav 1.1 return _mcrypt_get_algorithms_name();
344     }
345    
346 nmav 1.5 WIN32DLL_DEFINE
347 nmav 1.1 int init_mcrypt(MCRYPT td, void *buf, void *a, int b, void *c)
348     {
349     int (*_init_mcrypt) (void *, void *, int, void *, int);
350    
351 nmav 1.17 _init_mcrypt = mcrypt_dlsym(td->mode_handle, "_init_mcrypt");
352 nmav 1.1 return _init_mcrypt(buf, a, b, c, mcrypt_enc_get_block_size(td));
353     }
354    
355 nmav 1.5 WIN32DLL_DEFINE
356 nmav 1.1 int end_mcrypt(MCRYPT td, void *buf)
357     {
358     int (*_end_mcrypt) (void *);
359    
360 nmav 1.17 _end_mcrypt = mcrypt_dlsym(td->mode_handle, "_end_mcrypt");
361 nmav 1.1 return _end_mcrypt(buf);
362     }
363    
364 nmav 1.5 WIN32DLL_DEFINE
365 nmav 1.1 int mcrypt(MCRYPT td, void *buf, void *a, int b)
366     {
367     int (*_mcrypt) (void *, void *, int, int, void *, void *, void*);
368     _mcrypt = td->m_encrypt;
369    
370     return _mcrypt(buf, a, b, mcrypt_enc_get_block_size(td), td->akey,
371     td->a_encrypt, td->a_decrypt);
372     }
373    
374 nmav 1.5 WIN32DLL_DEFINE
375 nmav 1.1 int mdecrypt(MCRYPT td, void *buf, void *a, int b)
376     {
377     int (*_mdecrypt) (void *, void *, int, int, void *, void *, void*);
378    
379     _mdecrypt = td->m_decrypt;
380     return _mdecrypt(buf, a, b, mcrypt_enc_get_block_size(td),
381     td->akey, td->a_encrypt, td->a_decrypt);
382     }
383    
384 nmav 1.5 WIN32DLL_DEFINE
385 nmav 1.1 char *mcrypt_enc_get_modes_name(MCRYPT td)
386     {
387     char *(*_mcrypt_get_modes_name) (void);
388    
389 nmav 1.17 _mcrypt_get_modes_name = mcrypt_dlsym(td->mode_handle, "_mcrypt_get_modes_name");
390 nmav 1.1 return _mcrypt_get_modes_name();
391     }
392    
393 nmav 1.5 WIN32DLL_DEFINE
394 nmav 1.1 int mcrypt_enc_is_block_mode(MCRYPT td)
395     {
396     int (*_is_block_mode) (void);
397    
398 nmav 1.17 _is_block_mode = mcrypt_dlsym(td->mode_handle, "_is_block_mode");
399 nmav 1.1 return _is_block_mode();
400     }
401    
402 nmav 1.5 WIN32DLL_DEFINE
403 nmav 1.1 int mcrypt_enc_mode_has_iv(MCRYPT td)
404     {
405     int (*_has_iv) (void);
406    
407 nmav 1.17 _has_iv = mcrypt_dlsym(td->mode_handle, "_has_iv");
408 nmav 1.1 return _has_iv();
409     }
410    
411 nmav 1.5 WIN32DLL_DEFINE
412 nmav 1.1 int mcrypt_enc_is_block_algorithm_mode(MCRYPT td)
413     {
414     int (*_is_a_block_mode) (void);
415    
416 nmav 1.17 _is_a_block_mode = mcrypt_dlsym(td->mode_handle, "_is_block_algorithm_mode");
417 nmav 1.1 return _is_a_block_mode();
418     }
419    
420 nmav 1.5 WIN32DLL_DEFINE
421 nmav 1.1 int mcrypt_enc_self_test(MCRYPT td)
422     {
423     int (*_self_test) (void);
424    
425 nmav 1.17 _self_test = mcrypt_dlsym(td->algorithm_handle, "_mcrypt_self_test");
426 nmav 1.1
427     return _self_test();
428     }
429    
430 nmav 1.5 WIN32DLL_DEFINE
431 nmav 1.1 int mcrypt_module_self_test(char *algorithm, char *a_directory)
432     {
433     int i;
434 nmav 1.17 void* rr;
435     mcrypt_dlhandle _handle;
436 nmav 1.1 int (*_self_test) (void);
437 nmav 1.8 const char* error;
438 nmav 1.1
439     if (lt_dlinit() != 0) {
440     return MCRYPT_UNKNOWN_ERROR;
441     }
442    
443 nmav 1.17 rr = mcrypt_dlopen(&_handle, a_directory, NULL, algorithm);
444 nmav 1.1
445 nmav 1.17 if (!rr) {
446 nmav 1.4 error=lt_dlerror();
447     if (error!=NULL) fputs( error, stderr);
448 nmav 1.1 fputs("\n", stderr);
449 nmav 1.15 lt_dlexit();
450 nmav 1.1 return MCRYPT_UNKNOWN_ERROR;
451     }
452    
453 nmav 1.17 _self_test = mcrypt_dlsym(_handle, "_mcrypt_self_test");
454 nmav 1.1
455     i = _self_test();
456    
457 nmav 1.17 mcrypt_dlclose(_handle);
458 nmav 1.15 if (lt_dlexit() != 0) {
459     return MCRYPT_UNKNOWN_ERROR;
460     }
461    
462 nmav 1.1 return i;
463     }
464    
465 nmav 1.5 WIN32DLL_DEFINE
466 nmav 1.1 int mcrypt_module_algorithm_version(char *algorithm, char *a_directory)
467     {
468     int i;
469 nmav 1.17 mcrypt_dlhandle _handle;
470 nmav 1.1 int (*_version) (void);
471 nmav 1.8 const char* error;
472 nmav 1.17 void* rr;
473    
474 nmav 1.1 if (lt_dlinit() != 0) {
475     return MCRYPT_UNKNOWN_ERROR;
476     }
477    
478 nmav 1.17 rr = mcrypt_dlopen(&_handle, a_directory, NULL, algorithm);
479     if (!rr) {
480 nmav 1.4 error=lt_dlerror();
481     if (error!=NULL) fputs( error, stderr);
482 nmav 1.1 fputs("\n", stderr);
483     return MCRYPT_UNKNOWN_ERROR;
484     }
485    
486 nmav 1.17 _version = mcrypt_dlsym(_handle, "_mcrypt_algorithm_version");
487 nmav 1.1
488     i = _version();
489    
490 nmav 1.17 mcrypt_dlclose(_handle);
491 nmav 1.15 if (lt_dlexit() != 0) {
492     return MCRYPT_UNKNOWN_ERROR;
493     }
494 nmav 1.1
495     return i;
496     }
497    
498 nmav 1.5 WIN32DLL_DEFINE
499 nmav 1.1 int mcrypt_module_mode_version(char *mode, char *m_directory)
500     {
501     int i;
502 nmav 1.17 mcrypt_dlhandle _handle;
503 nmav 1.1 int (*_version) (void);
504 nmav 1.8 const char* error;
505 nmav 1.17 void * rr;
506 nmav 1.1
507     if (lt_dlinit() != 0) {
508     return MCRYPT_UNKNOWN_ERROR;
509     }
510    
511 nmav 1.17 rr = mcrypt_dlopen( &_handle, m_directory, NULL, mode);
512     if (!rr) {
513 nmav 1.4 error=lt_dlerror();
514     if(error!=NULL) fputs(error, stderr);
515 nmav 1.1 fputs("\n", stderr);
516     return MCRYPT_UNKNOWN_ERROR;
517     }
518    
519 nmav 1.17 _version = mcrypt_dlsym( _handle, "_mcrypt_mode_version");
520 nmav 1.1
521     i = _version();
522    
523 nmav 1.17 mcrypt_dlclose(_handle);
524 nmav 1.15 if (lt_dlexit() != 0) {
525     return MCRYPT_UNKNOWN_ERROR;
526     }
527 nmav 1.1
528     return i;
529     }
530    
531 nmav 1.5 WIN32DLL_DEFINE
532 nmav 1.1 int mcrypt_module_is_block_algorithm(char *algorithm, char *a_directory)
533     {
534     int i;
535 nmav 1.17 mcrypt_dlhandle _handle;
536 nmav 1.1 int (*_is_block_algorithm) (void);
537 nmav 1.8 const char* error;
538 nmav 1.17 void * rr;
539 nmav 1.4
540 nmav 1.1 if (lt_dlinit() != 0) {
541     return MCRYPT_UNKNOWN_ERROR;
542     }
543    
544 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
545     if (!rr) {
546 nmav 1.4 error=lt_dlerror();
547     if(error!=NULL) fputs( error, stderr);
548 nmav 1.1 fputs("\n", stderr);
549     return MCRYPT_UNKNOWN_ERROR;
550     }
551    
552 nmav 1.17 _is_block_algorithm = mcrypt_dlsym(_handle, "_is_block_algorithm");
553 nmav 1.1
554     i = _is_block_algorithm();
555    
556 nmav 1.17 mcrypt_dlclose(_handle);
557 nmav 1.15 if (lt_dlexit() != 0) {
558     return MCRYPT_UNKNOWN_ERROR;
559     }
560 nmav 1.1
561     return i;
562     }
563    
564 nmav 1.5 WIN32DLL_DEFINE
565 nmav 1.1 int mcrypt_module_is_block_algorithm_mode(char *mode, char *m_directory)
566     {
567     int i;
568 nmav 1.17 mcrypt_dlhandle _handle;
569 nmav 1.1 int (*_is_a_block_mode) (void);
570 nmav 1.8 const char* error;
571 nmav 1.17 void * rr;
572 nmav 1.1
573     if (lt_dlinit() != 0) {
574     return MCRYPT_UNKNOWN_ERROR;
575     }
576    
577 nmav 1.17 rr = mcrypt_dlopen( &_handle, m_directory, NULL, mode);
578     if (!rr) {
579 nmav 1.4 error=lt_dlerror();
580     if(error!=NULL) fputs( error, stderr);
581 nmav 1.1 fputs("\n", stderr);
582     return MCRYPT_UNKNOWN_ERROR;
583     }
584    
585 nmav 1.17 _is_a_block_mode = mcrypt_dlsym(_handle, "_is_block_algorithm_mode");
586 nmav 1.1
587     i = _is_a_block_mode();
588    
589 nmav 1.17 mcrypt_dlclose(_handle);
590 nmav 1.15 if (lt_dlexit() != 0) {
591     return MCRYPT_UNKNOWN_ERROR;
592     }
593 nmav 1.1
594     return i;
595     }
596    
597 nmav 1.5 WIN32DLL_DEFINE
598 nmav 1.1 int mcrypt_module_is_block_mode(char *mode, char *m_directory)
599     {
600 nmav 1.17 void * rr;
601 nmav 1.1 int i;
602 nmav 1.17 mcrypt_dlhandle _handle;
603 nmav 1.1 int (*_is_block_mode) (void);
604 nmav 1.8 const char* error;
605 nmav 1.1
606     if (lt_dlinit() != 0) {
607     return MCRYPT_UNKNOWN_ERROR;
608     }
609    
610 nmav 1.17 rr = mcrypt_dlopen( &_handle, m_directory, NULL, mode);
611     if (!rr) {
612 nmav 1.4 error=lt_dlerror();
613     if(error!=NULL) fputs( error, stderr);
614 nmav 1.1 fputs("\n", stderr);
615     return MCRYPT_UNKNOWN_ERROR;
616     }
617    
618 nmav 1.17 _is_block_mode = mcrypt_dlsym(_handle, "_is_block_mode");
619 nmav 1.1
620     i = _is_block_mode();
621    
622 nmav 1.17 mcrypt_dlclose(_handle);
623 nmav 1.15 if (lt_dlexit() != 0) {
624     return MCRYPT_UNKNOWN_ERROR;
625     }
626 nmav 1.1
627     return i;
628     }
629    
630 nmav 1.5 WIN32DLL_DEFINE
631 nmav 1.1 int mcrypt_module_get_algo_block_size(char *algorithm, char *a_directory)
632     {
633     int i;
634 nmav 1.17 mcrypt_dlhandle _handle;
635 nmav 1.1 int (*_get_block_size) (void);
636 nmav 1.8 const char* error;
637 nmav 1.17 void * rr;
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     if (!rr) {
645 nmav 1.4 error=lt_dlerror();
646     if(error!=NULL) fputs( error, stderr);
647 nmav 1.1 fputs("\n", stderr);
648     return MCRYPT_UNKNOWN_ERROR;
649     }
650    
651 nmav 1.17 _get_block_size = mcrypt_dlsym(_handle, "_mcrypt_get_block_size");
652 nmav 1.1
653     i = _get_block_size();
654    
655 nmav 1.17 mcrypt_dlclose(_handle);
656 nmav 1.15 if (lt_dlexit() != 0) {
657     return MCRYPT_UNKNOWN_ERROR;
658     }
659 nmav 1.1
660     return i;
661     }
662    
663 nmav 1.5 WIN32DLL_DEFINE
664 nmav 1.1 int mcrypt_module_get_algo_key_size(char *algorithm, char *a_directory)
665     {
666     int i;
667 nmav 1.17 mcrypt_dlhandle _handle;
668 nmav 1.1 int (*_get_key_size) (void);
669 nmav 1.8 const char* error;
670 nmav 1.17 void * rr;
671 nmav 1.1
672     if (lt_dlinit() != 0) {
673     return MCRYPT_UNKNOWN_ERROR;
674     }
675    
676 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
677     if (!rr) {
678 nmav 1.4 error=lt_dlerror();
679     if(error!=NULL) fputs( error, stderr);
680 nmav 1.1 fputs("\n", stderr);
681     return MCRYPT_UNKNOWN_ERROR;
682     }
683    
684 nmav 1.17 _get_key_size = mcrypt_dlsym(_handle, "_mcrypt_get_key_size");
685 nmav 1.1
686     i = _get_key_size();
687    
688 nmav 1.17 mcrypt_dlclose(_handle);
689 nmav 1.15 if (lt_dlexit() != 0) {
690     return MCRYPT_UNKNOWN_ERROR;
691     }
692 nmav 1.1
693     return i;
694     }
695    
696 nmav 1.5 WIN32DLL_DEFINE
697 nmav 1.1 int *mcrypt_module_get_algo_supported_key_sizes(char *algorithm,
698     char *a_directory,
699     int *len)
700     {
701 nmav 1.17 mcrypt_dlhandle _handle;
702 nmav 1.1 int *(*_mcrypt_get_key_sizes) (int *);
703     int *size;
704 nmav 1.8 const char* error;
705 nmav 1.17 void * rr;
706    
707 nmav 1.1 if (lt_dlinit() != 0) {
708     *len = 0;
709     return NULL;
710     }
711    
712 nmav 1.17 rr = mcrypt_dlopen( &_handle, a_directory, NULL, algorithm);
713     if (!rr) {
714 nmav 1.4 error=lt_dlerror();
715     if(error!=NULL) fputs( error, stderr);
716 nmav 1.1 fputs("\n", stderr);
717     *len = 0;
718     return NULL;
719     }
720    
721     _mcrypt_get_key_sizes =
722 nmav 1.17 mcrypt_dlsym(_handle, "_mcrypt_get_supported_key_sizes");
723 nmav 1.1
724     size = _mcrypt_get_key_sizes(len);
725    
726 nmav 1.17 mcrypt_dlclose(_handle);
727 nmav 1.15 if (lt_dlexit() != 0) {
728     return NULL;
729     }
730 nmav 1.1
731     return size;
732     }

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26