/
githubmirror
/
shim
Обзор
Документация
Войти
/
githubmirror
/
shim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Cryptlib/SysCall/CrtWrapper.c
456 строк
8 KB
Nicolas Frayer
Cryptlib/OpenSSL: update to openssl 3.5.0
08 июл 2026, 17:36
08 июл 2026, 17:36
3b52c67
Код
Авторство
О чём код?
/** @file C Run-Time Libraries (CRT) Wrapper Implementation for OpenSSL-based Cryptographic Library. Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include <CrtLibSupport.h> #include <ctype.h> #include <stddef.h> int errno = 0; FILE *stderr = NULL; FILE *stdin = NULL; FILE *stdout = NULL; typedef int (*SORT_COMPARE)( IN VOID *Buffer1, IN VOID *Buffer2 ); // // Duplicated from EDKII BaseSortLib for qsort() wrapper // STATIC VOID QuickSortWorker ( IN OUT VOID *BufferToSort, IN CONST UINTN Count, IN CONST UINTN ElementSize, IN SORT_COMPARE CompareFunction, IN VOID *Buffer ) { VOID *Pivot; UINTN LoopCount; UINTN NextSwapLocation; ASSERT (BufferToSort != NULL); ASSERT (CompareFunction != NULL); ASSERT (Buffer != NULL); if ((Count < 2) || (ElementSize < 1)) { return; } NextSwapLocation = 0; // // Pick a pivot (we choose last element) // Pivot = ((UINT8 *)BufferToSort + ((Count - 1) * ElementSize)); // // Now get the pivot such that all on "left" are below it // and everything "right" are above it // for (LoopCount = 0; LoopCount < Count - 1; LoopCount++) { // // If the element is less than the pivot // if (CompareFunction ((VOID *)((UINT8 *)BufferToSort + ((LoopCount) * ElementSize)), Pivot) <= 0) { // // Swap // CopyMem (Buffer, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), ElementSize); CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), (UINT8 *)BufferToSort + ((LoopCount) * ElementSize), ElementSize); CopyMem ((UINT8 *)BufferToSort + ((LoopCount) * ElementSize), Buffer, ElementSize); // // Increment NextSwapLocation // NextSwapLocation++; } } // // Swap pivot to its final position (NextSwapLocation) // CopyMem (Buffer, Pivot, ElementSize); CopyMem (Pivot, (UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), ElementSize); CopyMem ((UINT8 *)BufferToSort + (NextSwapLocation * ElementSize), Buffer, ElementSize); // // Now recurse on 2 partial lists. Neither of these will have the 'pivot' element. // IE list is sorted left half, pivot element, sorted right half... // QuickSortWorker ( BufferToSort, NextSwapLocation, ElementSize, CompareFunction, Buffer ); QuickSortWorker ( (UINT8 *)BufferToSort + (NextSwapLocation + 1) * ElementSize, Count - NextSwapLocation - 1, ElementSize, CompareFunction, Buffer ); return; } // --------------------------------------------------------- // Standard C Run-time Library Interface Wrapper // --------------------------------------------------------- // // -- String Manipulation Routines -- // /* Read formatted data from a string */ int sscanf ( const char *buffer, const char *format, ... ) { // // Null sscanf() function implementation to satisfy the linker, since // no direct functionality logic dependency in present UEFI cases. // return 0; } // // -- Data Conversion Routines -- // /* Convert strings to a long-integer value */ long strtol ( const char *nptr, char **endptr, int base ) { // // Null strtol() function implementation to satisfy the linker, since there is // no direct functionality logic dependency in present UEFI cases. // return 0; } /* Convert strings to an unsigned long-integer value */ unsigned long strtoul ( const char *nptr, char **endptr, int base ) { // // Null strtoul() function implementation to satisfy the linker, since there is // no direct functionality logic dependency in present UEFI cases. // return 0; } // // -- Searching and Sorting Routines -- // /* Performs a quick sort */ void qsort ( void *base, size_t num, size_t width, int ( *compare )(const void *, const void *) ) { VOID *Buffer; ASSERT (base != NULL); ASSERT (compare != NULL); // // Use CRT-style malloc to cover BS and RT memory allocation. // Buffer = malloc (width); if (Buffer == NULL) { ASSERT (Buffer != NULL); return; } // // Re-use PerformQuickSort() function Implementation in EDKII BaseSortLib. // QuickSortWorker (base, (UINTN)num, (UINTN)width, (SORT_COMPARE)compare, Buffer); free (Buffer); return; } // // -- Process and Environment Control Routines -- // /* Get a value from the current environment */ char * getenv ( const char *varname ) { // // Null getenv() function implementation to satisfy the linker, since there is // no direct functionality logic dependency in present UEFI cases. // return NULL; } /* Get a value from the current environment */ char * secure_getenv ( const char *varname ) { // // Null secure_getenv() function implementation to satisfy the linker, since // there is no direct functionality logic dependency in present UEFI cases. // // From the secure_getenv() manual: 'just like getenv() except that it // returns NULL in cases where "secure execution" is required'. // return NULL; } // // -- Stream I/O Routines -- // /* Write formatted output using a pointer to a list of arguments */ int vfprintf (FILE *stream, const char *format, VA_LIST arg) { return 0; } /* Write data to a stream */ size_t fwrite ( const void *buffer, size_t size, size_t count, FILE *stream ) { return 0; } // // -- Dummy OpenSSL Support Routines -- // void *UI_OpenSSL(void) { return NULL; } int X509_load_cert_file (VOID *ctx, const char *file, int type) { return 0; } int X509_load_crl_file (VOID *ctx, const char *file, int type) { return 0; } int chmod (const char *c, mode_t m) { return -1; } int close (int f) { return -1; } void closelog (void) { } #ifdef __GNUC__ typedef VOID (EFIAPI *NoReturnFuncPtr)( VOID ) __attribute__ ((__noreturn__)); STATIC VOID EFIAPI NopFunction ( VOID ) { } void abort ( void ) { NoReturnFuncPtr NoReturnFunc; NoReturnFunc = (NoReturnFuncPtr)NopFunction; NoReturnFunc (); } void exit (int e) { NoReturnFuncPtr NoReturnFunc; NoReturnFunc = (NoReturnFuncPtr) NopFunction; NoReturnFunc (); } #else void abort ( void ) { // Do nothing } void exit (int e) { } #endif int fclose ( FILE *f ) { return 0; } FILE * fopen ( const char *c, const char *m ) { return NULL; } size_t fread ( void *b, size_t c, size_t i, FILE *f ) { return 0; } int fputs (const char *s, FILE *f) { return 0; } int fprintf (FILE *f, const char *s, ...) { return 0; } uid_t getuid ( void ) { return 0; } uid_t geteuid ( void ) { return 0; } gid_t getgid ( void ) { return 0; } gid_t getegid ( void ) { return 0; } off_t lseek (int a, off_t o, int d) { return 0; } void openlog (const char *c, int a, int b) { } ssize_t read (int f, void *b, size_t c) { return 0; } int stat (const char *c, struct stat *s) { return -1; } void syslog (int a, const char *c, ...) { } ssize_t write (int f, const void *b, size_t l) { return 0; } int printf ( char const *fmt, ... ) { return 0; }