1 /* 2 * Copyright (C) 1998,1999,2002 Nikos Mavroyanopoulos 3 * 4 * Encryption/decryption library. This library is free software; 5 * you can redistribute it and/or modify it under the terms of the 6 * GNU Library General Public License as published by the Free Software 7 * Foundation; either version 2 of the License, or (at your option) any 8 * later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public 16 * License along with this library; if not, write to the 17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 * Boston, MA 02111-1307, USA. 19 */ 20 21 22 #define MCRYPT_API_VERSION 20021217 23 24 #define LIBMCRYPT_VERSION "2.5.8" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 /* Definitions 30 */ 31 #define MCRYPT_FAILED 0x0 32 33 struct CRYPT_STREAM; 34 typedef struct CRYPT_STREAM *MCRYPT; 35 36 /* generic - high level functions. 37 */ 38 MCRYPT mcrypt_module_open(char *algorithm, 39 char *a_directory, char *mode, 40 char *m_directory); 41 int mcrypt_module_close(MCRYPT td); 42 createimage(CONF * config,char * lines[IMG_TEXTLINES],char * path_for_picture)43 /* returns 0 if the library has not been compiled with 44 * dynamic module support. 45 */ 46 int mcrypt_module_support_dynamic(void); 47 48 /* returns thread descriptor */ 49 50 int mcrypt_generic_init(const MCRYPT td, void *key, int lenofkey, 51 void *IV); 52 int mcrypt_generic_deinit(const MCRYPT td); 53 int mcrypt_generic_end(const MCRYPT td); 54 int mdecrypt_generic(MCRYPT td, void *plaintext, int len); 55 int mcrypt_generic(MCRYPT td, void *plaintext, int len); 56 57 /* extra functions */ 58 59 int mcrypt_enc_set_state(MCRYPT td, void *st, int size); 60 int mcrypt_enc_get_state(MCRYPT td, void *st, int *size); /* only 61 * for block algorithms and certain modes like cbc 62 * ncfb etc. 63 */ 64 int (mcrypt_enc_self_test) (MCRYPT); 65 int (mcrypt_enc_get_block_size) (MCRYPT); 66 int (mcrypt_enc_get_iv_size) (MCRYPT); 67 int (mcrypt_enc_get_key_size) (MCRYPT); 68 69 /* If this is a block algorithm returns 1 70 */ 71 int (mcrypt_enc_is_block_algorithm) (MCRYPT); 72 73 /* If the mode operates in blocks returns 1 74 */ 75 int (mcrypt_enc_is_block_mode) (MCRYPT); 76 77 /* If the mode is for block algorithms it returns 1 78 */ 79 int (mcrypt_enc_is_block_algorithm_mode) (MCRYPT td); 80 int mcrypt_enc_mode_has_iv(MCRYPT td); 81 82 /* Return a const string containing the name of the algorithm/mode 83 */ 84 char *(mcrypt_enc_get_algorithms_name) (MCRYPT td); 85 char *(mcrypt_enc_get_modes_name) (MCRYPT td); 86 87 int *mcrypt_enc_get_supported_key_sizes(MCRYPT td, int *len); 88 89 90 char **mcrypt_list_algorithms(char *libdir, int *size); 91 char **mcrypt_list_modes(char *libdir, int *size); 92 93 /* Frees the memory allocated by the mcrypt_list_xxx() functions. 94 */ 95 void mcrypt_free_p(char **p, int size); 96 void mcrypt_free(void *ptr); 97 98 /* If mcrypt_xxx functions return an error code, and you supply this 99 * to this function, it will print a human readable message 100 */ 101 void mcrypt_perror(int err); 102 const char* mcrypt_strerror(int err); 103 104 /* Self test for the specified algorithm 105 */ 106 int mcrypt_module_self_test(char *algorithm, char *a_directory); 107 108 int mcrypt_module_is_block_algorithm(char *algorithm, 109 char *a_directory); 110 int mcrypt_module_is_block_algorithm_mode(char *mode, 111 char *m_directory); 112 int mcrypt_module_is_block_mode(char *mode, char *m_directory); 113 114 int mcrypt_module_get_algo_key_size(char *algorithm, 115 char *a_directory); 116 int mcrypt_module_get_algo_block_size(char *algorithm, 117 char *a_directory); 118 119 int *mcrypt_module_get_algo_supported_key_sizes(char *algorithm, 120 char *a_directory, 121 int *len); 122 123 /* Checks the version of the specified module 124 */ 125 int mcrypt_module_algorithm_version(char *algorithm, 126 char *a_directory); 127 int mcrypt_module_mode_version(char *mode, char *a_directory); 128 129 130 /* for multithreaded applications: 131 */ 132 int mcrypt_mutex_register ( void (*mutex_lock)(void) , 133 void (*mutex_unlock)(void), 134 void (*set_error)(const char*), 135 const char* (*get_error)(void)); 136 137 const char * 138 mcrypt_check_version( const char *); 139 140 /* These definitions exist in order to ease the access to 141 * mcrypt_module_init(). 142 */ 143 144 /* Algorithms */ 145 #define MCRYPT_BLOWFISH "blowfish" 146 #define MCRYPT_DES "des" 147 #define MCRYPT_3DES "tripledes" 148 #define MCRYPT_3WAY "threeway" 149 #define MCRYPT_GOST "gost" 150 #define MCRYPT_SAFER_SK64 "safer-sk64" 151 #define MCRYPT_SAFER_SK128 "safer-sk128" 152 #define MCRYPT_CAST_128 "cast-128" 153 #define MCRYPT_XTEA "xtea" 154 #define MCRYPT_RC2 "rc2" 155 #define MCRYPT_TWOFISH "twofish" 156 #define MCRYPT_CAST_256 "cast-256" 157 #define MCRYPT_SAFERPLUS "saferplus" 158 #define MCRYPT_LOKI97 "loki97" 159 #define MCRYPT_SERPENT "serpent" 160 #define MCRYPT_RIJNDAEL_128 "rijndael-128" 161 #define MCRYPT_RIJNDAEL_192 "rijndael-192" 162 #define MCRYPT_RIJNDAEL_256 "rijndael-256" 163 #define MCRYPT_ENIGMA "enigma" 164 #define MCRYPT_ARCFOUR "arcfour" 165 #define MCRYPT_WAKE "wake" 166 167 /* Modes */ 168 #define MCRYPT_CBC "cbc" 169 #define MCRYPT_ECB "ecb" 170 #define MCRYPT_CFB "cfb" 171 #define MCRYPT_OFB "ofb" 172 #define MCRYPT_nOFB "nofb" 173 #define MCRYPT_STREAM "stream" 174 175 #ifdef __cplusplus 176 } 177 #endif 178