]> git.ipfire.org Git - thirdparty/openssl.git/blame - e_os.h
Use curve_id not the nid
[thirdparty/openssl.git] / e_os.h
CommitLineData
b6cff313 1/*
b99fe5f4 2 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
0f113f3e 3 *
b6cff313
RS
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
d02b48c6
RE
8 */
9
10#ifndef HEADER_E_OS_H
0f113f3e 11# define HEADER_E_OS_H
d02b48c6 12
07016a8a 13# include <limits.h>
0f113f3e 14# include <openssl/opensslconf.h>
06018c46 15
0f113f3e 16# include <openssl/e_os2.h>
98d132cf 17# include <openssl/crypto.h>
176db6dc 18# include "internal/nelem.h"
b99fe5f4 19
0f113f3e
MC
20/*
21 * <openssl/e_os2.h> contains what we can justify to make visible to the
22 * outside; this file e_os.h is not part of the exported interface.
23 */
fa470a84 24
d02b48c6
RE
25#ifdef __cplusplus
26extern "C" {
27#endif
28
43708c15 29/*
5f584013
AP
30 * Format specifier for printing size_t. Original conundrum was to
31 * get it working with -Wformat [-Werror], which can be considered
a303e9a6 32 * overzealous, especially in multi-platform context, but it's
5f584013 33 * conscious choice...
43708c15 34 */
5f584013
AP
35# if defined(_WIN64)
36# define OSSLzu "I64u" /* One would expect _WIN{64|32} cases after
37 * __STDC_VERSION__, but there are corner
38 * cases of MinGW compilers that link with
39 * non-compliant MSVCRT.DLL... */
40# elif defined(_WIN32)
41# define OSSLzu "u"
42# elif defined(__VMS)
43# define OSSLzu "u" /* VMS suffers from similar problem as MinGW,
44 * i.e. C RTL falling behind compiler. Recall
45 * that sizeof(size_t)==4 even in LP64 case. */
46# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
43708c15 47# define OSSLzu "zu"
5f584013
AP
48# elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__==4
49# define OSSLzu "u" /* 'lu' should have worked, but when generating
50 * 32-bit code gcc still complains :-( */
43708c15 51# else
5f584013
AP
52# define OSSLzu "lu" /* To see that is works recall what does L
53 * stand for in ILP32 and LP64 */
43708c15
RS
54# endif
55
0f113f3e
MC
56# ifndef DEVRANDOM
57/*
f367ac2b 58 * set this to a comma-separated list of 'random' device files to try out. By
0f113f3e
MC
59 * default, we will try to read at least one of these files
60 */
61# define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
62# endif
0423f812 63# if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD)
0f113f3e
MC
64/*
65 * set this to a comma-separated list of 'egd' sockets to try out. These
66 * sockets will be tried in the order listed in case accessing the device
f367ac2b 67 * files listed in DEVRANDOM did not return enough randomness.
0f113f3e
MC
68 */
69# define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
70# endif
d02b48c6 71
cff55b90 72# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)
3e83e686
RL
73# define NO_CHMOD
74# define NO_SYSLOG
0f113f3e
MC
75# endif
76
0e97f1e1
RS
77# define get_last_sys_error() errno
78# define clear_sys_error() errno=0
79
d02b48c6
RE
80/********************************************************************
81 The Microsoft section
82 ********************************************************************/
0f113f3e 83# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32)
b8384651 84# define WIN32
0f113f3e
MC
85# endif
86# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS)
cf1b7d96 87# define WINDOWS
0f113f3e
MC
88# endif
89# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS)
cf1b7d96 90# define MSDOS
0f113f3e 91# endif
d02b48c6 92
0f113f3e 93# ifdef WIN32
0e97f1e1
RS
94# undef get_last_sys_error
95# undef clear_sys_error
0f113f3e
MC
96# define get_last_sys_error() GetLastError()
97# define clear_sys_error() SetLastError(0)
98# if !defined(WINNT)
99# define WIN_CONSOLE_BUG
100# endif
101# else
0f113f3e 102# endif
58964a49 103
0f113f3e 104# if (defined(WINDOWS) || defined(MSDOS))
d02b48c6 105
f642ebc1 106# ifdef __DJGPP__
0f113f3e
MC
107# include <unistd.h>
108# include <sys/stat.h>
0f113f3e
MC
109# define _setmode setmode
110# define _O_TEXT O_TEXT
111# define _O_BINARY O_BINARY
2c25ebd1
RL
112# define HAS_LFN_SUPPORT(name) (pathconf((name), _PC_NAME_MAX) > 12)
113# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */
0f113f3e
MC
114# undef DEVRANDOM
115# define DEVRANDOM "/dev/urandom\x24"
116# endif /* __DJGPP__ */
f642ebc1 117
0056ef5d 118# ifndef S_IFDIR
0f113f3e 119# define S_IFDIR _S_IFDIR
0056ef5d 120# endif
6e064240 121
0056ef5d 122# ifndef S_IFMT
0f113f3e 123# define S_IFMT _S_IFMT
0056ef5d 124# endif
6e064240 125
f642ebc1 126# if !defined(WINNT) && !defined(__DJGPP__)
0f113f3e 127# define NO_SYSLOG
0056ef5d 128# endif
d02b48c6 129
d02b48c6 130# ifdef WINDOWS
0f113f3e 131# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT)
e476f942 132 /*
0f113f3e
MC
133 * Defining _WIN32_WINNT here in e_os.h implies certain "discipline."
134 * Most notably we ought to check for availability of each specific
0ee05b73
AP
135 * routine that was introduced after denoted _WIN32_WINNT with
136 * GetProcAddress(). Normally newer functions are masked with higher
137 * _WIN32_WINNT in SDK headers. So that if you wish to use them in
138 * some module, you'd need to override _WIN32_WINNT definition in
139 * the target module in order to "reach for" prototypes, but replace
140 * calls to new functions with indirect calls. Alternatively it
141 * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs
142 * and check for current OS version instead.
0f113f3e 143 */
0ee05b73 144# define _WIN32_WINNT 0x0501
0f113f3e 145# endif
2469e76b 146# if defined(_WIN32_WINNT) || defined(_WIN32_WCE)
61aa2134
AP
147 /*
148 * Just like defining _WIN32_WINNT including winsock2.h implies
8711efb4 149 * certain "discipline" for maintaining [broad] binary compatibility.
61aa2134
AP
150 * As long as structures are invariant among Winsock versions,
151 * it's sufficient to check for specific Winsock2 API availability
152 * at run-time [DSO_global_lookup is recommended]...
153 */
0f113f3e
MC
154# include <winsock2.h>
155# include <ws2tcpip.h>
8711efb4 156 /* yes, they have to be #included prior to <windows.h> */
0f113f3e
MC
157# endif
158# include <windows.h>
159# include <stdio.h>
160# include <stddef.h>
161# include <errno.h>
162# if defined(_WIN32_WCE) && !defined(EACCES)
163# define EACCES 13
164# endif
165# include <string.h>
166# ifdef _WIN64
167# define strlen(s) _strlen31(s)
1875e6db 168/* cut strings to 2GB */
55c7a4cf 169static __inline unsigned int _strlen31(const char *str)
0f113f3e
MC
170{
171 unsigned int len = 0;
172 while (*str && len < 0x80000000U)
173 str++, len++;
174 return len & 0x7FFFFFFF;
175}
176# endif
177# include <malloc.h>
0f113f3e
MC
178# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin)
179# if _MSC_VER>=1300 && _MSC_VER<1600
180# undef stdin
181# undef stdout
182# undef stderr
183FILE *__iob_func();
184# define stdin (&__iob_func()[0])
185# define stdout (&__iob_func()[1])
186# define stderr (&__iob_func()[2])
187# elif _MSC_VER<1300 && defined(I_CAN_LIVE_WITH_LNK4049)
188# undef stdin
189# undef stdout
190# undef stderr
191 /*
192 * pre-1300 has __p__iob(), but it's available only in msvcrt.lib,
193 * or in other words with /MD. Declaring implicit import, i.e. with
194 * _imp_ prefix, works correctly with all compiler options, but
195 * without /MD results in LINK warning LNK4049: 'locally defined
196 * symbol "__iob" imported'.
e527201f 197 */
0f113f3e
MC
198extern FILE *_imp___iob;
199# define stdin (&_imp___iob[0])
200# define stdout (&_imp___iob[1])
201# define stderr (&_imp___iob[2])
e527201f 202# endif
0f113f3e 203# endif
d02b48c6 204# endif
0f113f3e
MC
205# include <io.h>
206# include <fcntl.h>
d02b48c6 207
0bf23d9b 208# ifdef OPENSSL_SYS_WINCE
0f113f3e 209# define OPENSSL_NO_POSIX_IO
0bf23d9b
RL
210# endif
211
be7b4458 212# define EXIT(n) exit(n)
d02b48c6 213# define LIST_SEPARATOR_CHAR ';'
0056ef5d 214# ifndef W_OK
0f113f3e 215# define W_OK 2
0056ef5d
RL
216# endif
217# ifndef R_OK
0f113f3e 218# define R_OK 4
0056ef5d 219# endif
0bf23d9b 220# ifdef OPENSSL_SYS_WINCE
0f113f3e 221# define DEFAULT_HOME ""
0bf23d9b 222# else
0f113f3e 223# define DEFAULT_HOME "C:"
0bf23d9b 224# endif
d02b48c6 225
86d21d0b 226/* Avoid Visual Studio 13 GetVersion deprecated problems */
0f113f3e
MC
227# if defined(_MSC_VER) && _MSC_VER>=1800
228# define check_winnt() (1)
229# define check_win_minplat(x) (1)
230# else
231# define check_winnt() (GetVersion() < 0x80000000)
232# define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x))
233# endif
f511b25a 234
0f113f3e 235# else /* The non-microsoft world */
d02b48c6 236
4cff10dc
P
237# if defined(OPENSSL_SYS_VXWORKS)
238# include <sys/times.h>
239# else
240# include <sys/time.h>
241# endif
242
cf1b7d96 243# ifdef OPENSSL_SYS_VMS
0f113f3e
MC
244# define VMS 1
245 /*
246 * some programs don't include stdlib, so exit() and others give implicit
247 * function warnings
248 */
249# include <stdlib.h>
250# if defined(__DECC)
251# include <unistd.h>
252# else
253# include <unixlib.h>
254# endif
0f113f3e 255# define LIST_SEPARATOR_CHAR ','
0c61e299 256 /* We don't have any well-defined random devices on VMS, yet... */
0f113f3e 257# undef DEVRANDOM
1d97c843
TH
258 /*-
259 We need to do this since VMS has the following coding on status codes:
511e596b
RL
260
261 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
262 The important thing to know is that odd numbers are considered
0f113f3e 263 good, while even ones are considered errors.
511e596b
RL
264 Bits 3-15: actual status number
265 Bits 16-27: facility number. 0 is considered "unknown"
266 Bits 28-31: control bits. If bit 28 is set, the shell won't try to
267 output the message (which, for random codes, just looks ugly)
268
269 So, what we do here is to change 0 to 1 to get the default success status,
270 and everything else is shifted up to fit into the status number field, and
f625d383 271 the status is tagged as an error, which is what is wanted here.
c3944a99
RL
272
273 Finally, we add the VMS C facility code 0x35a000, because there are some
274 programs, such as Perl, that will reinterpret the code back to something
275 POSIXly. 'man perlvms' explains it further.
f625d383 276
c3944a99
RL
277 NOTE: the perlvms manual wants to turn all codes 2 to 255 into success
278 codes (status type = 1). I couldn't disagree more. Fortunately, the
279 status type doesn't seem to bother Perl.
511e596b
RL
280 -- Richard Levitte
281 */
f625d383
RL
282# define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1)
283
b8f304f7
RL
284# define DEFAULT_HOME "SYS$LOGIN:"
285
d02b48c6 286# else
06018c46 287 /* !defined VMS */
0f113f3e
MC
288# ifdef OPENSSL_UNISTD
289# include OPENSSL_UNISTD
290# else
291# include <unistd.h>
292# endif
b379fe6c 293# include <sys/types.h>
0f113f3e
MC
294# ifdef OPENSSL_SYS_WIN32_CYGWIN
295# include <io.h>
296# include <fcntl.h>
297# endif
298
0f113f3e 299# define LIST_SEPARATOR_CHAR ':'
0f113f3e 300# define EXIT(n) exit(n)
d02b48c6 301# endif
d02b48c6 302
0f113f3e 303# endif
7d7d2cbc 304
d02b48c6
RE
305/***********************************************/
306
0f113f3e 307# if defined(OPENSSL_SYS_WINDOWS)
e6fa67fa
RL
308# define strcasecmp _stricmp
309# define strncasecmp _strnicmp
dc6b5c7b
RL
310# if (_MSC_VER >= 1310)
311# define open _open
312# define fdopen _fdopen
313# define close _close
8d95ca36
M
314# ifndef strdup
315# define strdup _strdup
316# endif
dc6b5c7b 317# define unlink _unlink
2e38091c 318# define fileno _fileno
dc6b5c7b 319# endif
7233bea2
RL
320# else
321# include <strings.h>
0f113f3e 322# endif
3bfd99bf 323
6a89a25c 324/* vxworks */
0f113f3e
MC
325# if defined(OPENSSL_SYS_VXWORKS)
326# include <ioLib.h>
327# include <tickLib.h>
328# include <sysLib.h>
0f113f3e
MC
329# include <vxWorks.h>
330# include <sockLib.h>
331# include <taskLib.h>
6a89a25c 332
0e97f1e1
RS
333# define TTY_STRUCT int
334# define sleep(a) taskDelay((a) * sysClkRateGet())
6a89a25c 335
0f113f3e
MC
336/*
337 * NOTE: these are implemented by helpers in database app! if the database is
a303e9a6 338 * not linked, we need to implement them elsewhere
0f113f3e 339 */
6a89a25c
RL
340struct hostent *gethostbyname(const char *name);
341struct hostent *gethostbyaddr(const char *addr, int length, int type);
342struct servent *getservbyname(const char *name, const char *proto);
343
0f113f3e 344# endif
6a89a25c
RL
345/* end vxworks */
346
43c56417
KR
347#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
348# define CRYPTO_memcmp memcmp
349#endif
350
d02b48c6
RE
351#ifdef __cplusplus
352}
353#endif
354
355#endif