]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - CryptoPkg/Include/OpenSslSupport.h
CryptoPkg: Enable ssl build in OpensslLib directly
[mirror_edk2.git] / CryptoPkg / Include / OpenSslSupport.h
... / ...
CommitLineData
1/** @file\r
2 Root include file to support building OpenSSL Crypto Library.\r
3\r
4Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>\r
5This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#ifndef __OPEN_SSL_SUPPORT_H__\r
16#define __OPEN_SSL_SUPPORT_H__\r
17\r
18#include <Base.h>\r
19#include <Library/BaseLib.h>\r
20#include <Library/BaseMemoryLib.h>\r
21#include <Library/MemoryAllocationLib.h>\r
22#include <Library/DebugLib.h>\r
23\r
24#define MAX_STRING_SIZE 0x1000\r
25\r
26//\r
27// OpenSSL relies on explicit configuration for word size in crypto/bn,\r
28// but we want it to be automatically inferred from the target. So we\r
29// bypass what's in <openssl/opensslconf.h> for OPENSSL_SYS_UEFI, and\r
30// define our own here.\r
31//\r
32#ifdef CONFIG_HEADER_BN_H\r
33#error CONFIG_HEADER_BN_H already defined\r
34#endif\r
35\r
36#define CONFIG_HEADER_BN_H\r
37\r
38#if defined(MDE_CPU_X64) || defined(MDE_CPU_AARCH64) || defined(MDE_CPU_IA64)\r
39//\r
40// With GCC we would normally use SIXTY_FOUR_BIT_LONG, but MSVC needs\r
41// SIXTY_FOUR_BIT, because 'long' is 32-bit and only 'long long' is\r
42// 64-bit. Since using 'long long' works fine on GCC too, just do that.\r
43//\r
44#define SIXTY_FOUR_BIT\r
45#elif defined(MDE_CPU_IA32) || defined(MDE_CPU_ARM) || defined(MDE_CPU_EBC)\r
46#define THIRTY_TWO_BIT\r
47#else\r
48#error Unknown target architecture\r
49#endif\r
50\r
51//\r
52// File operations are not required for building Open SSL, \r
53// so FILE is mapped to VOID * to pass build\r
54//\r
55typedef VOID *FILE;\r
56\r
57//\r
58// Map all va_xxxx elements to VA_xxx defined in MdePkg/Include/Base.h\r
59//\r
60#if !defined(__CC_ARM) // if va_list is not already defined\r
61#define va_list VA_LIST\r
62#define va_arg VA_ARG\r
63#define va_start VA_START\r
64#define va_end VA_END\r
65#else // __CC_ARM\r
66#define va_start(Marker, Parameter) __va_start(Marker, Parameter)\r
67#define va_arg(Marker, TYPE) __va_arg(Marker, TYPE)\r
68#define va_end(Marker) ((void)0)\r
69#endif\r
70\r
71//\r
72// #defines from EFI Application Toolkit required to build Open SSL\r
73//\r
74#define ENOMEM 12 /* Cannot allocate memory */\r
75#define EINVAL 22 /* Invalid argument */\r
76#define BUFSIZ 1024 /* size of buffer used by setbuf */\r
77#define INT_MAX 2147483647 /* max value for an int */\r
78#define INT_MIN (-2147483647-1) /* min value for an int */\r
79#define LONG_MAX 2147483647L /* max value for a long */\r
80#define LONG_MIN (-2147483647-1) /* min value for a long */\r
81#define ULONG_MAX 0xffffffff /* max value for an unsigned long */\r
82#define LOG_DAEMON (3<<3) /* system daemons */\r
83#define LOG_EMERG 0 /* system is unusable */\r
84#define LOG_ALERT 1 /* action must be taken immediately */\r
85#define LOG_CRIT 2 /* critical conditions */\r
86#define LOG_ERR 3 /* error conditions */\r
87#define LOG_WARNING 4 /* warning conditions */\r
88#define LOG_NOTICE 5 /* normal but significant condition */\r
89#define LOG_INFO 6 /* informational */\r
90#define LOG_DEBUG 7 /* debug-level messages */\r
91#define LOG_PID 0x01 /* log the pid with each message */\r
92#define LOG_CONS 0x02 /* log on the console if errors in sending */\r
93\r
94//\r
95// Macros from EFI Application Toolkit required to build Open SSL\r
96//\r
97/* The offsetof() macro calculates the offset of a structure member\r
98 in its structure. Unfortunately this cannot be written down\r
99 portably, hence it is provided by a Standard C header file.\r
100 For pre-Standard C compilers, here is a version that usually works\r
101 (but watch out!): */\r
102#define offsetof(type, member) OFFSET_OF (type, member)\r
103\r
104//\r
105// Basic types from EFI Application Toolkit required to build Open SSL\r
106//\r
107typedef UINTN size_t;\r
108typedef INTN ssize_t;\r
109typedef INT64 off_t;\r
110typedef UINT16 mode_t;\r
111typedef long time_t;\r
112typedef unsigned long clock_t;\r
113typedef UINT32 uid_t;\r
114typedef UINT32 gid_t;\r
115typedef UINT32 ino_t;\r
116typedef UINT32 dev_t;\r
117typedef UINT16 nlink_t;\r
118typedef int pid_t;\r
119typedef void *DIR;\r
120typedef void __sighandler_t (int);\r
121typedef UINT8 __uint8_t;\r
122typedef UINT8 sa_family_t;\r
123\r
124//\r
125// Structures from EFI Application Toolkit required to build Open SSL\r
126//\r
127struct tm {\r
128 int tm_sec; /* seconds after the minute [0-60] */\r
129 int tm_min; /* minutes after the hour [0-59] */\r
130 int tm_hour; /* hours since midnight [0-23] */\r
131 int tm_mday; /* day of the month [1-31] */\r
132 int tm_mon; /* months since January [0-11] */\r
133 int tm_year; /* years since 1900 */\r
134 int tm_wday; /* days since Sunday [0-6] */\r
135 int tm_yday; /* days since January 1 [0-365] */\r
136 int tm_isdst; /* Daylight Savings Time flag */\r
137 long tm_gmtoff; /* offset from CUT in seconds */\r
138 char *tm_zone; /* timezone abbreviation */\r
139};\r
140\r
141struct timeval {\r
142 long tv_sec; /* time value, in seconds */\r
143 long tv_usec; /* time value, in microseconds */\r
144};\r
145\r
146struct dirent {\r
147 UINT32 d_fileno; /* file number of entry */\r
148 UINT16 d_reclen; /* length of this record */\r
149 UINT8 d_type; /* file type, see below */\r
150 UINT8 d_namlen; /* length of string in d_name */\r
151 char d_name[255 + 1]; /* name must be no longer than this */\r
152};\r
153\r
154struct stat {\r
155 dev_t st_dev; /* inode's device */\r
156 ino_t st_ino; /* inode's number */\r
157 mode_t st_mode; /* inode protection mode */\r
158 nlink_t st_nlink; /* number of hard links */\r
159 uid_t st_uid; /* user ID of the file's owner */\r
160 gid_t st_gid; /* group ID of the file's group */\r
161 dev_t st_rdev; /* device type */\r
162 time_t st_atime; /* time of last access */\r
163 long st_atimensec; /* nsec of last access */\r
164 time_t st_mtime; /* time of last data modification */\r
165 long st_mtimensec; /* nsec of last data modification */\r
166 time_t st_ctime; /* time of last file status change */\r
167 long st_ctimensec; /* nsec of last file status change */\r
168 off_t st_size; /* file size, in bytes */\r
169 INT64 st_blocks; /* blocks allocated for file */\r
170 UINT32 st_blksize; /* optimal blocksize for I/O */\r
171 UINT32 st_flags; /* user defined flags for file */\r
172 UINT32 st_gen; /* file generation number */\r
173 INT32 st_lspare;\r
174 INT64 st_qspare[2];\r
175};\r
176\r
177struct sockaddr {\r
178 __uint8_t sa_len; /* total length */\r
179 sa_family_t sa_family; /* address family */\r
180 char sa_data[14]; /* actually longer; address value */\r
181};\r
182\r
183//\r
184// Externs from EFI Application Toolkit required to build Open SSL\r
185//\r
186extern int errno;\r
187\r
188//\r
189// Function prototypes from EFI Application Toolkit required to build Open SSL\r
190//\r
191void *malloc (size_t);\r
192void *realloc (void *, size_t);\r
193void free (void *);\r
194int isdigit (int);\r
195int isspace (int);\r
196int tolower (int);\r
197int isupper (int);\r
198int isxdigit (int);\r
199int isalnum (int);\r
200void *memcpy (void *, const void *, size_t);\r
201void *memset (void *, int, size_t);\r
202void *memchr (const void *, int, size_t);\r
203int memcmp (const void *, const void *, size_t);\r
204void *memmove (void *, const void *, size_t);\r
205int strcmp (const char *, const char *);\r
206int strncmp (const char *, const char *, size_t);\r
207char *strcpy (char *, const char *);\r
208char *strncpy (char *, const char *, size_t);\r
209size_t strlen (const char *);\r
210char *strcat (char *, const char *);\r
211char *strchr (const char *, int);\r
212int strcasecmp (const char *, const char *);\r
213int strncasecmp (const char *, const char *, size_t);\r
214char *strncpy (char *, const char *, size_t);\r
215int strncmp (const char *, const char *, size_t);\r
216char *strrchr (const char *, int);\r
217unsigned long strtoul (const char *, char **, int);\r
218long strtol (const char *, char **, int);\r
219int printf (const char *, ...);\r
220int sscanf (const char *, const char *, ...);\r
221int open (const char *, int, ...);\r
222int chmod (const char *, mode_t);\r
223int stat (const char *, struct stat *);\r
224off_t lseek (int, off_t, int);\r
225ssize_t read (int, void *, size_t);\r
226ssize_t write (int, const void *, size_t);\r
227int close (int);\r
228FILE *fopen (const char *, const char *);\r
229size_t fread (void *, size_t, size_t, FILE *);\r
230size_t fwrite (const void *, size_t, size_t, FILE *);\r
231char *fgets (char *, int, FILE *);\r
232int fputs (const char *, FILE *);\r
233int fprintf (FILE *, const char *, ...);\r
234int vfprintf (FILE *, const char *, VA_LIST);\r
235int fflush (FILE *);\r
236int fclose (FILE *);\r
237DIR *opendir (const char *);\r
238struct dirent *readdir (DIR *);\r
239int closedir (DIR *);\r
240void openlog (const char *, int, int);\r
241void closelog (void);\r
242void syslog (int, const char *, ...);\r
243time_t time (time_t *);\r
244struct tm *localtime (const time_t *);\r
245struct tm *gmtime (const time_t *);\r
246struct tm *gmtime_r (const time_t *, struct tm *);\r
247uid_t getuid (void);\r
248uid_t geteuid (void);\r
249gid_t getgid (void);\r
250gid_t getegid (void);\r
251void qsort (void *, size_t, size_t, int (*)(const void *, const void *));\r
252char *getenv (const char *);\r
253void exit (int);\r
254void abort (void);\r
255__sighandler_t *signal (int, __sighandler_t *);\r
256\r
257//\r
258// Global variables from EFI Application Toolkit required to build Open SSL\r
259//\r
260extern FILE *stderr;\r
261extern FILE *stdin;\r
262extern FILE *stdout;\r
263\r
264//\r
265// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions\r
266//\r
267#define memcpy(dest,source,count) CopyMem(dest,source,(UINTN)(count))\r
268#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch))\r
269#define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)\r
270#define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))\r
271#define memmove(dest,source,count) CopyMem(dest,source,(UINTN)(count))\r
272#define strcmp AsciiStrCmp\r
273#define strncmp(string1,string2,count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count)))\r
274#define strcpy(strDest,strSource) AsciiStrCpyS(strDest,MAX_STRING_SIZE,strSource)\r
275#define strncpy(strDest,strSource,count) AsciiStrnCpyS(strDest,MAX_STRING_SIZE,strSource,(UINTN)count)\r
276#define strlen(str) (size_t)(AsciiStrnLenS(str,MAX_STRING_SIZE))\r
277#define strcat(strDest,strSource) AsciiStrCatS(strDest,MAX_STRING_SIZE,strSource)\r
278#define strchr(str,ch) ScanMem8((VOID *)(str),AsciiStrSize(str),(UINT8)ch)\r
279#define abort() ASSERT (FALSE)\r
280#define assert(expression)\r
281#define localtime(timer) NULL\r
282#define gmtime_r(timer,result) (result = NULL)\r
283#define atoi(nptr) AsciiStrDecimalToUintn(nptr)\r
284#define gettimeofday(tvp,tz) do { (tvp)->tv_sec = time(NULL); (tvp)->tv_usec = 0; } while (0)\r
285\r
286#endif\r