Make string_to_hex/hex_to_string public
[openssl.git] / doc / crypto / OPENSSL_malloc.pod
1 =pod
2
3 =head1 NAME
4
5 OPENSSL_malloc_init,
6 OPENSSL_malloc, OPENSSL_zalloc, OPENSSL_realloc, OPENSSL_free,
7 OPENSSL_clear_realloc, OPENSSL_clear_free, OPENSSL_cleanse
8 CRYPTO_malloc, CRYPTO_zalloc, CRYPTO_realloc, CRYPTO_free,
9 OPENSSL_strdup, OPENSSL_strndup,
10 OPENSSL_memdup, OPENSSL_strlcpy, OPENSSL_strlcat,
11 OPENSSL_hexstr2buf, OPENSSL_buf2hexstr, OPENSSL_hexchar2int,
12 CRYPTO_clear_realloc, CRYPTO_clear_free,
13 CRYPTO_get_mem_functions, CRYPTO_set_mem_functions,
14 CRYPTO_set_mem_debug, CRYPTO_mem_ctrl,
15 OPENSSL_mem_debug_push, OPENSSL_mem_debug_pop,
16 CRYPTO_mem_debug_push, CRYPTO_mem_debug_pop,
17 CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp - Memory allocation functions
18
19 =head1 SYNOPSIS
20
21  #include <openssl/crypto.h>
22
23  int OPENSSL_malloc_init(void)
24
25  void *OPENSSL_malloc(size_t num)
26  void *OPENSSL_zalloc(size_t num)
27  void *OPENSSL_realloc(void *addr, size_t num)
28  void OPENSSL_free(void *addr)
29  char *OPENSSL_strdup(const char *str)
30  char *OPENSSL_strndup(const char *str, size_t s)
31  void *OPENSSL_clear_realloc(void *p, size_t old_len, size_t num)
32  void OPENSSL_clear_free(void *str, size_t num)
33  void OPENSSL_cleanse(void *ptr, size_t len);
34
35  unsigned char *OPENSSL_hexstr2buf(const char *str, long *len);
36  char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len);
37  int OPENSSL_hexchar2int(unsigned char c);
38
39  void *CRYPTO_malloc(size_t num, const char *file, int line)
40  void *CRYPTO_zalloc(size_t num, const char *file, int line)
41  void *CRYPTO_realloc(void *p, size_t num, const char *file, int line)
42  void CRYPTO_free(void *str, const char *, int)
43  char *CRYPTO_strdup(const char *p, const char *file, int line)
44  char *CRYPTO_strndup(const char *p, size_t num, const char *file, int line)
45  void *CRYPTO_clear_realloc(void *p, size_t old_len, size_t num, const char *file, int line)
46  void CRYPTO_clear_free(void *str, size_t num, const char *, int)
47
48  void CRYPTO_get_mem_functions(
49          void *(**m)(size_t, const char *, int),
50          void *(**r)(void *, size_t, const char *, int),
51          void (**f)(void *, const char *, int))
52  int CRYPTO_set_mem_functions(
53          void *(*m)(size_t, const char *, int),
54          void *(*r)(void *, size_t, const char *, int),
55          void (*f)(void *, const char *, int))
56
57  int CRYPTO_set_mem_debug(int onoff)
58
59  #define CRYPTO_MEM_CHECK_OFF
60  #define CRYPTO_MEM_CHECK_ON
61  #define CRYPTO_MEM_CHECK_DISABLE
62  #define CRYPTO_MEM_CHECK_ENABLE
63
64  int CRYPTO_mem_ctrl(int mode);
65
66  int OPENSSL_mem_debug_push(const char *info)
67  int OPENSLS_mem_debug_pop)(void)
68
69  int CRYPTO_mem_debug_push(const char *info, const char *file, int line);
70
71  void CRYPTO_mem_leaks(BIO *b);
72  void CRYPTO_mem_leaks(FILE *fp);
73
74 =head1 DESCRIPTION
75
76 OpenSSL memory allocation is handled by the B<OPENSSL_xxx> API. These are
77 generally macro's that add the standard C B<__FILE__> and B<__LINE__>
78 parameters and call a lower-level B<CRYPTO_xxx> API.
79 Some functions do not add those parameters, but exist for consistency.
80
81 OPENSSL_malloc_init() sets the lower-level memory allocation functions
82 to their default implementation.
83 It is generally not necessary to call this, except perhaps in certain
84 shared-library situations.
85
86 OPENSSL_malloc(), OPENSSL_realloc(), and OPENSSL_free() are like the
87 C malloc(), realloc(), and free() functions.
88 OPENSSL_zalloc() calls memset() to zero the memory before returning.
89
90 OPENSSL_clear_realloc() and OPENSSL_clear_free() should be used
91 when the buffer at B<addr> holds sensitive information.
92 The old buffer is filled with zero's by calling OPENSSL_cleanse()
93 before ultimately calling OPENSSL_free().
94
95 OPENSSL_cleanse() fills B<ptr> of size B<len> with a string of 0's.
96 Use OPENSSL_cleanse() with care if the memory is a mapping of a file.
97 If the storage controller uses write compression, then its possible 
98 that sensitive tail bytes will survive zeroization because the block of 
99 zeros will be compressed. If the storage controller uses wear leveling, 
100 then the old sensitive data will not be overwritten; rather, a block of 
101 0's will be written at a new physical location.
102
103 OPENSSL_strdup(), OPENSSL_strndup() and OPENSSL_memdup() are like the
104 equivalent C functions, except that memory is allocated by calling the
105 OPENSSL_malloc() and should be releaed by calling OPENSSL_free().
106
107 OPENSSL_strlcpy(),
108 OPENSSL_strlcat() and OPENSSL_strnlen() are equivalents of the common C
109 library functions and are provided for portability.
110
111 OPENSSL_hexstr2buf() parses B<str> as a hex string and returns a
112 pointer to the parsed value. The memory is allocated by calling
113 OPENSSL_malloc() and should be released by calling OPENSSL_free().
114 If B<len> is not NULL, it is filled in with the output length.
115 Colons between two-character hex "bytes" are ignored.
116 An odd number of hex digits is an error.
117
118 OPENSSL_buf2hexstr() takes the specified buffer and length, and returns
119 a hex string for value, or NULL on error.
120 B<Buffer> cannot be NULL; if B<len> is NULL an empty string is returned.
121
122 OPENSSL_hexchar2int() converts a character to the hexadecimal equivalent,
123 or returns -1 on error.
124
125 If no allocations have been done, it is possible to "swap out" the default
126 implementations for OPENSSL_malloc(), OPENSSL_realloc and OPENSSL_free()
127 and replace them with alternate versions (hooks).
128 CRYPTO_get_mem_functions() function fills in the given arguments with the
129 function pointers for the current implementations.
130 With CRYPTO_set_mem_functions(), you can specify a different set of functions.
131 If any of B<m>, B<r>, or B<f> are NULL, then the function is not changed.
132
133 The default implementation can include some debugging capability (if enabled
134 at build-time).
135 This adds some overhead by keeping a list of all memory allocations, and
136 removes items from the list when they are free'd.
137 This is most useful for identifying memory leaks.
138 CRYPTO_set_mem_debug() turns this tracking on and off.  It is normally
139 called at startup, but can be called at any time.
140
141 CRYPTO_mem_ctrl() provides fine-grained control of memory leak tracking.
142 To enable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
143 the B<CRYPTO_MEM_CHECK_ON>.
144 To disable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
145 the B<CRYPTO_MEM_CHECK_OFF>.
146 The B<CRYPTO_MEM_CHECK_DISABLE> and B<CRYPTO_MEM_CHECK_ENABLE> modes
147 are used internally within OpenSSL to temporarily suspend and resume
148 tracking.
149
150 While checking memory, it can be useful to store additional context
151 about what is being done.
152 For example, identifying the field names when parsing a complicated
153 data structure.
154 OPENSSL_mem_debug_push() (which calls CRYPTO_mem_debug_push())
155 attachs an identifying string to the allocation stack.
156 This must be a global or other static string; it is not copied.
157 OPENSSL_mem_debug_pop() removes identifying state from the stack.
158
159 At the end of the program, calling CRYPTO_mem_leaks() or
160 CRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it
161 to the specified BIO B<b> or FILE B<fp>. These functions return 1 if
162 there are no leaks, 0 if there are leaks and -1 if an error occurred.
163
164 =head1 RETURN VALUES
165
166 OPENSSL_malloc_init(), OPENSSL_free(), OPENSSL_clear_free()
167 CRYPTO_free(), CRYPTO_clear_free() and CRYPTO_get_mem_functions()
168 return no value.
169
170 CRYPTO_mem_leaks() and CRYPTO_mem_leaks_fp() return 1 if there
171 are no leaks, 0 if there are leaks and -1 if an error occurred.
172
173 OPENSSL_malloc(), OPENSSL_zalloc(), OPENSSL_realloc(),
174 OPENSSL_clear_realloc(),
175 CRYPTO_malloc(), CRYPTO_zalloc(), CRYPTO_realloc(),
176 CRYPTO_clear_realloc(),
177 OPENSSL_buf2hexstr(), OPENSSL_hexstr2buf(),
178 OPENSSL_strdup(), and OPENSSL_strndup()
179 return a pointer to allocated memory or NULL on error.
180
181 CRYPTO_set_mem_functions() and CRYPTO_set_mem_debug()
182 return 1 on success or 0 on failure (almost
183 always because allocations have already happened).
184
185 CRYPTO_mem_ctrl() returns the previous value of the mode.
186
187 OPENSSL_mem_debug_push() and OPENSSL_mem_debug_pop()
188 return 1 on success or 0 on failure.
189
190 =head1 NOTES
191
192 While it's permitted to swap out only a few and not all the functions
193 with CRYPTO_set_mem_functions(), it's recommended to swap them all out
194 at once.  I<This applies specially if OpenSSL was built with the
195 configuration option> C<crypto-mdebug> I<enabled.  In case, swapping out
196 only, say, the malloc() implementation is outright dangerous.>
197
198 =cut