diff options
Diffstat (limited to 'src/lib/libcrypto/crypto.h')
-rw-r--r-- | src/lib/libcrypto/crypto.h | 204 |
1 files changed, 121 insertions, 83 deletions
diff --git a/src/lib/libcrypto/crypto.h b/src/lib/libcrypto/crypto.h index 8ad8c25e5a..41c937966e 100644 --- a/src/lib/libcrypto/crypto.h +++ b/src/lib/libcrypto/crypto.h | |||
@@ -63,17 +63,25 @@ | |||
63 | extern "C" { | 63 | extern "C" { |
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | #include <stdlib.h> | ||
67 | |||
66 | #ifndef NO_FP_API | 68 | #ifndef NO_FP_API |
67 | #include <stdio.h> | 69 | #include <stdio.h> |
68 | #endif | 70 | #endif |
69 | 71 | ||
70 | #include <openssl/stack.h> | 72 | #include <openssl/stack.h> |
73 | #include <openssl/safestack.h> | ||
71 | #include <openssl/opensslv.h> | 74 | #include <openssl/opensslv.h> |
72 | 75 | ||
73 | #ifdef CHARSET_EBCDIC | 76 | #ifdef CHARSET_EBCDIC |
74 | #include <openssl/ebcdic.h> | 77 | #include <openssl/ebcdic.h> |
75 | #endif | 78 | #endif |
76 | 79 | ||
80 | #if defined(VMS) || defined(__VMS) | ||
81 | #include "vms_idhacks.h" | ||
82 | #endif | ||
83 | |||
84 | |||
77 | /* Backward compatibility to SSLeay */ | 85 | /* Backward compatibility to SSLeay */ |
78 | /* This is more to be used to check the correct DLL is being used | 86 | /* This is more to be used to check the correct DLL is being used |
79 | * in the MS world. */ | 87 | * in the MS world. */ |
@@ -111,7 +119,9 @@ extern "C" { | |||
111 | #define CRYPTO_LOCK_GETSERVBYNAME 21 | 119 | #define CRYPTO_LOCK_GETSERVBYNAME 21 |
112 | #define CRYPTO_LOCK_READDIR 22 | 120 | #define CRYPTO_LOCK_READDIR 22 |
113 | #define CRYPTO_LOCK_RSA_BLINDING 23 | 121 | #define CRYPTO_LOCK_RSA_BLINDING 23 |
114 | #define CRYPTO_NUM_LOCKS 24 | 122 | #define CRYPTO_LOCK_DH 24 |
123 | #define CRYPTO_LOCK_MALLOC2 25 | ||
124 | #define CRYPTO_NUM_LOCKS 26 | ||
115 | 125 | ||
116 | #define CRYPTO_LOCK 1 | 126 | #define CRYPTO_LOCK 1 |
117 | #define CRYPTO_UNLOCK 2 | 127 | #define CRYPTO_UNLOCK 2 |
@@ -147,14 +157,16 @@ extern "C" { | |||
147 | #define CRYPTO_MEM_CHECK_ENABLE 0x2 /* a bit */ | 157 | #define CRYPTO_MEM_CHECK_ENABLE 0x2 /* a bit */ |
148 | #define CRYPTO_MEM_CHECK_DISABLE 0x3 /* an enume */ | 158 | #define CRYPTO_MEM_CHECK_DISABLE 0x3 /* an enume */ |
149 | 159 | ||
150 | /* | 160 | /* The following are bit values to turn on or off options connected to the |
151 | typedef struct crypto_mem_st | 161 | * malloc checking functionality */ |
152 | { | 162 | |
153 | char *(*malloc_func)(); | 163 | /* Adds time to the memory checking information */ |
154 | char *(*realloc_func)(); | 164 | #define V_CRYPTO_MDEBUG_TIME 0x1 /* a bit */ |
155 | void (*free_func)(); | 165 | /* Adds thread number to the memory checking information */ |
156 | } CRYPTO_MEM_FUNC; | 166 | #define V_CRYPTO_MDEBUG_THREAD 0x2 /* a bit */ |
157 | */ | 167 | |
168 | #define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) | ||
169 | |||
158 | 170 | ||
159 | /* predec of the BIO type */ | 171 | /* predec of the BIO type */ |
160 | typedef struct bio_st BIO_dummy; | 172 | typedef struct bio_st BIO_dummy; |
@@ -165,24 +177,30 @@ typedef struct crypto_ex_data_st | |||
165 | int dummy; /* gcc is screwing up this data structure :-( */ | 177 | int dummy; /* gcc is screwing up this data structure :-( */ |
166 | } CRYPTO_EX_DATA; | 178 | } CRYPTO_EX_DATA; |
167 | 179 | ||
180 | /* Called when a new object is created */ | ||
181 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | ||
182 | int idx, long argl, void *argp); | ||
183 | /* Called when an object is free()ed */ | ||
184 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | ||
185 | int idx, long argl, void *argp); | ||
186 | /* Called when we need to dup an object */ | ||
187 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, | ||
188 | int idx, long argl, void *argp); | ||
189 | |||
168 | /* This stuff is basically class callback functions | 190 | /* This stuff is basically class callback functions |
169 | * The current classes are SSL_CTX, SSL, SSL_SESION, and a few more */ | 191 | * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ |
192 | |||
170 | typedef struct crypto_ex_data_func_st | 193 | typedef struct crypto_ex_data_func_st |
171 | { | 194 | { |
172 | long argl; /* Arbitary long */ | 195 | long argl; /* Arbitary long */ |
173 | char *argp; /* Arbitary char * */ | 196 | void *argp; /* Arbitary void * */ |
174 | /* Called when a new object is created */ | 197 | CRYPTO_EX_new *new_func; |
175 | int (*new_func)(/*char *obj, | 198 | CRYPTO_EX_free *free_func; |
176 | char *item,int index,long argl,char *argp*/); | 199 | CRYPTO_EX_dup *dup_func; |
177 | /* Called when this object is free()ed */ | ||
178 | void (*free_func)(/*char *obj, | ||
179 | char *item,int index,long argl,char *argp*/); | ||
180 | |||
181 | /* Called when we need to dup this one */ | ||
182 | int (*dup_func)(/*char *obj_to,char *obj_from, | ||
183 | char **new,int index,long argl,char *argp*/); | ||
184 | } CRYPTO_EX_DATA_FUNCS; | 200 | } CRYPTO_EX_DATA_FUNCS; |
185 | 201 | ||
202 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) | ||
203 | |||
186 | /* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA | 204 | /* Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA |
187 | * entry. | 205 | * entry. |
188 | */ | 206 | */ |
@@ -194,63 +212,54 @@ typedef struct crypto_ex_data_func_st | |||
194 | #define CRYPTO_EX_INDEX_X509_STORE 4 | 212 | #define CRYPTO_EX_INDEX_X509_STORE 4 |
195 | #define CRYPTO_EX_INDEX_X509_STORE_CTX 5 | 213 | #define CRYPTO_EX_INDEX_X509_STORE_CTX 5 |
196 | 214 | ||
197 | /* Use this for win32 DLL's */ | ||
198 | #define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ | ||
199 | (char *(*)())malloc,\ | ||
200 | (char *(*)())realloc,\ | ||
201 | (void (*)())free) | ||
202 | 215 | ||
203 | #ifdef CRYPTO_MDEBUG_ALL | 216 | /* This is the default callbacks, but we can have others as well: |
204 | # ifndef CRYPTO_MDEBUG_TIME | 217 | * this is needed in Win32 where the application malloc and the |
205 | # define CRYPTO_MDEBUG_TIME | 218 | * library malloc may not be the same. |
206 | # endif | 219 | */ |
207 | # ifndef CRYPTO_MDEBUG_THREAD | 220 | #define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ |
208 | # define CRYPTO_MDEBUG_THREAD | 221 | malloc, realloc, free) |
209 | # endif | ||
210 | #endif | ||
211 | 222 | ||
212 | #if defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD | 223 | #if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD |
213 | # ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ | 224 | # ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ |
214 | # define CRYPTO_MDEBUG | 225 | # define CRYPTO_MDEBUG |
215 | # endif | 226 | # endif |
216 | #endif | 227 | #endif |
217 | 228 | ||
218 | #ifdef CRYPTO_MDEBUG | 229 | /* Set standard debugging functions (not done by default |
230 | * unless CRYPTO_MDEBUG is defined) */ | ||
231 | #define CRYPTO_malloc_debug_init() do {\ | ||
232 | CRYPTO_set_mem_debug_functions(\ | ||
233 | (void (*)())CRYPTO_dbg_malloc,\ | ||
234 | (void (*)())CRYPTO_dbg_realloc,\ | ||
235 | (void (*)())CRYPTO_dbg_free,\ | ||
236 | (void (*)())CRYPTO_dbg_set_options,\ | ||
237 | (long (*)())CRYPTO_dbg_get_options);\ | ||
238 | } while(0) | ||
239 | |||
240 | int CRYPTO_mem_ctrl(int mode); | ||
241 | int CRYPTO_is_mem_check_on(void); | ||
242 | |||
243 | /* for applications */ | ||
219 | #define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) | 244 | #define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) |
220 | #define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) | 245 | #define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) |
246 | |||
247 | /* for library-internal use */ | ||
221 | #define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) | 248 | #define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) |
222 | #define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) | 249 | #define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) |
223 | #define Malloc(num) CRYPTO_dbg_malloc((int)num,__FILE__,__LINE__) | 250 | #define is_MemCheck_on() CRYPTO_is_mem_check_on() |
251 | |||
252 | #define Malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) | ||
224 | #define Realloc(addr,num) \ | 253 | #define Realloc(addr,num) \ |
225 | CRYPTO_dbg_realloc((char *)addr,(int)num,__FILE__,__LINE__) | 254 | CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) |
226 | #define Remalloc(addr,num) \ | 255 | #define Remalloc(addr,num) \ |
227 | CRYPTO_dbg_remalloc((char **)addr,(int)num,__FILE__,__LINE__) | 256 | CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) |
228 | #define FreeFunc CRYPTO_dbg_free | ||
229 | #define Free(addr) CRYPTO_dbg_free(addr) | ||
230 | #define Malloc_locked(num) CRYPTO_malloc_locked((int)num) | ||
231 | #define Free_locked(addr) CRYPTO_free_locked(addr) | ||
232 | #else | ||
233 | #define MemCheck_start() | ||
234 | #define MemCheck_stop() | ||
235 | #define MemCheck_on() | ||
236 | #define MemCheck_off() | ||
237 | #define Remalloc CRYPTO_remalloc | ||
238 | #if defined(WIN32) || defined(MFUNC) | ||
239 | #define Malloc CRYPTO_malloc | ||
240 | #define Realloc(a,n) CRYPTO_realloc(a,(n)) | ||
241 | #define FreeFunc CRYPTO_free | 257 | #define FreeFunc CRYPTO_free |
242 | #define Free(addr) CRYPTO_free(addr) | 258 | #define Free(addr) CRYPTO_free(addr) |
243 | #define Malloc_locked CRYPTO_malloc_locked | 259 | |
260 | #define Malloc_locked(num) CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) | ||
244 | #define Free_locked(addr) CRYPTO_free_locked(addr) | 261 | #define Free_locked(addr) CRYPTO_free_locked(addr) |
245 | #else | 262 | |
246 | #define Malloc malloc | ||
247 | #define Realloc realloc | ||
248 | #define FreeFunc free | ||
249 | #define Free(addr) free(addr) | ||
250 | #define Malloc_locked malloc | ||
251 | #define Free_locked(addr) free(addr) | ||
252 | #endif /* WIN32 || MFUNC */ | ||
253 | #endif /* MDEBUG */ | ||
254 | 263 | ||
255 | /* Case insensiteve linking causes problems.... */ | 264 | /* Case insensiteve linking causes problems.... */ |
256 | #if defined(WIN16) || defined(VMS) | 265 | #if defined(WIN16) || defined(VMS) |
@@ -261,15 +270,15 @@ typedef struct crypto_ex_data_func_st | |||
261 | const char *SSLeay_version(int type); | 270 | const char *SSLeay_version(int type); |
262 | unsigned long SSLeay(void); | 271 | unsigned long SSLeay(void); |
263 | 272 | ||
264 | int CRYPTO_get_ex_new_index(int idx,STACK **sk,long argl,char *argp, | 273 | int CRYPTO_get_ex_new_index(int idx, STACK_OF(CRYPTO_EX_DATA_FUNCS) **skp, long argl, void *argp, |
265 | int (*new_func)(),int (*dup_func)(),void (*free_func)()); | 274 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); |
266 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad,int idx,char *val); | 275 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); |
267 | char *CRYPTO_get_ex_data(CRYPTO_EX_DATA *ad,int idx); | 276 | void *CRYPTO_get_ex_data(CRYPTO_EX_DATA *ad,int idx); |
268 | int CRYPTO_dup_ex_data(STACK *meth,CRYPTO_EX_DATA *from,CRYPTO_EX_DATA *to); | 277 | int CRYPTO_dup_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, CRYPTO_EX_DATA *to, |
269 | void CRYPTO_free_ex_data(STACK *meth,char *obj,CRYPTO_EX_DATA *ad); | 278 | CRYPTO_EX_DATA *from); |
270 | void CRYPTO_new_ex_data(STACK *meth, char *obj, CRYPTO_EX_DATA *ad); | 279 | void CRYPTO_free_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, CRYPTO_EX_DATA *ad); |
280 | void CRYPTO_new_ex_data(STACK_OF(CRYPTO_EX_DATA_FUNCS) *meth, void *obj, CRYPTO_EX_DATA *ad); | ||
271 | 281 | ||
272 | int CRYPTO_mem_ctrl(int mode); | ||
273 | int CRYPTO_get_new_lockid(char *name); | 282 | int CRYPTO_get_new_lockid(char *name); |
274 | 283 | ||
275 | int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ | 284 | int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ |
@@ -289,22 +298,51 @@ const char *CRYPTO_get_lock_name(int type); | |||
289 | int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file, | 298 | int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file, |
290 | int line); | 299 | int line); |
291 | 300 | ||
292 | void CRYPTO_set_mem_functions(char *(*m)(),char *(*r)(), void (*free_func)()); | 301 | /* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- |
293 | void CRYPTO_get_mem_functions(char *(**m)(),char *(**r)(), void (**f)()); | 302 | * call the latter last if you need different functions */ |
294 | void CRYPTO_set_locked_mem_functions(char *(*m)(), void (*free_func)()); | 303 | int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *)); |
295 | void CRYPTO_get_locked_mem_functions(char *(**m)(), void (**f)()); | 304 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *)); |
305 | int CRYPTO_set_mem_debug_functions(void (*m)(),void (*r)(),void (*f)(),void (*so)(),long (*go)()); | ||
306 | void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *)); | ||
307 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)); | ||
308 | void CRYPTO_get_mem_debug_functions(void (**m)(),void (**r)(),void (**f)(),void (**so)(),long (**go)()); | ||
296 | 309 | ||
297 | void *CRYPTO_malloc_locked(int num); | 310 | void *CRYPTO_malloc_locked(int num, const char *file, int line); |
298 | void CRYPTO_free_locked(void *); | 311 | void CRYPTO_free_locked(void *); |
299 | void *CRYPTO_malloc(int num); | 312 | void *CRYPTO_malloc(int num, const char *file, int line); |
300 | void CRYPTO_free(void *); | 313 | void CRYPTO_free(void *); |
301 | void *CRYPTO_realloc(void *addr,int num); | 314 | void *CRYPTO_realloc(void *addr,int num, const char *file, int line); |
302 | void *CRYPTO_remalloc(void *addr,int num); | 315 | void *CRYPTO_remalloc(void *addr,int num, const char *file, int line); |
316 | |||
317 | void CRYPTO_set_mem_debug_options(long bits); | ||
318 | long CRYPTO_get_mem_debug_options(void); | ||
319 | |||
320 | #define CRYPTO_push_info(info) \ | ||
321 | CRYPTO_push_info_(info, __FILE__, __LINE__); | ||
322 | int CRYPTO_push_info_(const char *info, const char *file, int line); | ||
323 | int CRYPTO_pop_info(void); | ||
324 | int CRYPTO_remove_all_info(void); | ||
325 | |||
326 | /* The last argument has the following significance: | ||
327 | * | ||
328 | * 0: called before the actual memory allocation has taken place | ||
329 | * 1: called after the actual memory allocation has taken place | ||
330 | */ | ||
331 | void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p); | ||
332 | void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p); | ||
333 | void CRYPTO_dbg_free(void *addr,int before_p); | ||
334 | |||
335 | /* Tell the debugging code about options. By default, the following values | ||
336 | * apply: | ||
337 | * | ||
338 | * 0: Clear all options. | ||
339 | * 1: Set the "Show Time" option. | ||
340 | * 2: Set the "Show Thread Number" option. | ||
341 | * 3: 1 + 2 | ||
342 | */ | ||
343 | void CRYPTO_dbg_set_options(long bits); | ||
344 | long CRYPTO_dbg_get_options(void); | ||
303 | 345 | ||
304 | void *CRYPTO_dbg_malloc(int num,const char *file,int line); | ||
305 | void *CRYPTO_dbg_realloc(void *addr,int num,const char *file,int line); | ||
306 | void CRYPTO_dbg_free(void *); | ||
307 | void *CRYPTO_dbg_remalloc(void *addr,int num,const char *file,int line); | ||
308 | #ifndef NO_FP_API | 346 | #ifndef NO_FP_API |
309 | void CRYPTO_mem_leaks_fp(FILE *); | 347 | void CRYPTO_mem_leaks_fp(FILE *); |
310 | #endif | 348 | #endif |
@@ -312,7 +350,7 @@ void CRYPTO_mem_leaks(struct bio_st *bio); | |||
312 | /* unsigned long order, char *file, int line, int num_bytes, char *addr */ | 350 | /* unsigned long order, char *file, int line, int num_bytes, char *addr */ |
313 | void CRYPTO_mem_leaks_cb(void (*cb)()); | 351 | void CRYPTO_mem_leaks_cb(void (*cb)()); |
314 | 352 | ||
315 | void ERR_load_CRYPTO_strings(void ); | 353 | void ERR_load_CRYPTO_strings(void); |
316 | 354 | ||
317 | /* BEGIN ERROR CODES */ | 355 | /* BEGIN ERROR CODES */ |
318 | /* The following lines are auto generated by the script mkerr.pl. Any changes | 356 | /* The following lines are auto generated by the script mkerr.pl. Any changes |