- Timestamp:
- Jun 22, 2021, 9:00:19 PM (3 years ago)
- Location:
- azure_iot_hub_f767zi/trunk/wolfssl-4.7.0
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfcrypt/src/wc_port.c
r457 r464 47 47 #endif 48 48 49 #if defined(WOLFSSL_ATMEL) || defined(WOLFSSL_ATECC508A) 49 #ifdef WOLFSSL_PSOC6_CRYPTO 50 #include <wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h> 51 #endif 52 53 #if defined(WOLFSSL_ATMEL) || defined(WOLFSSL_ATECC508A) || \ 54 defined(WOLFSSL_ATECC608A) 50 55 #include <wolfssl/wolfcrypt/port/atmel/atmel.h> 51 56 #endif … … 69 74 defined(WOLFSSL_IMX6_CAAM_BLOB) 70 75 #include <wolfssl/wolfcrypt/port/caam/wolfcaam.h> 76 #endif 77 78 #ifdef WOLFSSL_IMXRT_DCP 79 #include <wolfssl/wolfcrypt/port/nxp/dcp_port.h> 71 80 #endif 72 81 … … 105 114 { 106 115 int ret = 0; 107 108 116 if (initRefCount == 0) { 109 117 WOLFSSL_ENTER("wolfCrypt_Init"); … … 181 189 #endif 182 190 183 #if defined(WOLFSSL_ATMEL) || defined(WOLFSSL_ATECC508A) 191 #if defined(WOLFSSL_ATMEL) || defined(WOLFSSL_ATECC508A) || \ 192 defined(WOLFSSL_ATECC608A) 184 193 ret = atmel_init(); 185 194 if (ret != 0) { … … 200 209 #endif 201 210 211 #if defined(WOLFSSL_PSOC6_CRYPTO) 212 ret = psoc6_crypto_port_init(); 213 if (ret != 0) { 214 WOLFSSL_MSG("PSoC6 crypto engine init failed"); 215 return ret; 216 } 217 #endif 218 219 #ifdef WOLFSSL_SILABS_SE_ACCEL 220 /* init handles if it is already initialized */ 221 ret = sl_se_init(); 222 #endif 223 202 224 #ifdef WOLFSSL_ARMASM 203 225 WOLFSSL_MSG("Using ARM hardware acceleration"); … … 220 242 221 243 #ifdef HAVE_ECC 244 #ifdef FP_ECC 245 wc_ecc_fp_init(); 246 #endif 222 247 #ifdef ECC_CACHE_CURVE 223 248 if ((ret = wc_ecc_curve_cache_init()) != 0) { … … 248 273 #endif 249 274 275 #ifdef WOLFSSL_IMXRT_DCP 276 if ((ret = wc_dcp_init()) != 0) { 277 return ret; 278 } 279 #endif 280 250 281 #if defined(WOLFSSL_DSP) && !defined(WOLFSSL_DSP_BUILD) 251 282 if ((ret = wolfSSL_InitHandle()) != 0) { … … 260 291 } 261 292 293 #ifdef WOLFSSL_TRACK_MEMORY_VERBOSE 294 long wolfCrypt_heap_peakAllocs_checkpoint(void) { 295 long ret = ourMemStats.peakAllocsTripOdometer; 296 ourMemStats.peakAllocsTripOdometer = ourMemStats.totalAllocs - 297 ourMemStats.totalDeallocs; 298 return ret; 299 } 300 long wolfCrypt_heap_peakBytes_checkpoint(void) { 301 long ret = ourMemStats.peakBytesTripOdometer; 302 ourMemStats.peakBytesTripOdometer = ourMemStats.currentBytes; 303 return ret; 304 } 305 #endif 262 306 263 307 /* return success value is the same as wolfCrypt_Init */ … … 303 347 cc310_Free(); 304 348 #endif 349 #ifdef WOLFSSL_SILABS_SE_ACCEL 350 ret = sl_se_deinit(); 351 #endif 305 352 #if defined(WOLFSSL_RENESAS_TSIP_CRYPT) 306 353 tsip_Close(); … … 315 362 } 316 363 317 #if !defined(NO_FILESYSTEM) && !defined(NO_WOLFSSL_DIR) && \ 318 !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2) 364 #ifndef NO_FILESYSTEM 365 366 /* Helpful function to load file into allocated buffer */ 367 int wc_FileLoad(const char* fname, unsigned char** buf, size_t* bufLen, 368 void* heap) 369 { 370 int ret; 371 size_t fileSz; 372 XFILE f; 373 374 if (fname == NULL || buf == NULL || bufLen == NULL) { 375 return BAD_FUNC_ARG; 376 } 377 378 /* set defaults */ 379 *buf = NULL; 380 *bufLen = 0; 381 382 /* open file (read-only binary) */ 383 f = XFOPEN(fname, "rb"); 384 if (!f) { 385 WOLFSSL_MSG("wc_LoadFile file load error"); 386 return BAD_PATH_ERROR; 387 } 388 389 XFSEEK(f, 0, XSEEK_END); 390 fileSz = XFTELL(f); 391 XREWIND(f); 392 if (fileSz > 0) { 393 *bufLen = fileSz; 394 *buf = (byte*)XMALLOC(*bufLen, heap, DYNAMIC_TYPE_TMP_BUFFER); 395 if (*buf == NULL) { 396 WOLFSSL_MSG("wc_LoadFile memory error"); 397 ret = MEMORY_E; 398 } 399 else { 400 size_t readLen = XFREAD(*buf, 1, *bufLen, f); 401 402 /* check response code */ 403 ret = (readLen == *bufLen) ? 0 : -1; 404 } 405 } 406 else { 407 ret = BUFFER_E; 408 } 409 XFCLOSE(f); 410 411 (void)heap; 412 413 return ret; 414 } 415 416 #if !defined(NO_WOLFSSL_DIR) && \ 417 !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2) 319 418 320 419 /* File Handling Helpers */ … … 615 714 } 616 715 617 #endif /* !NO_FILESYSTEM && !NO_WOLFSSL_DIR */ 716 #endif /* !NO_WOLFSSL_DIR */ 717 #endif /* !NO_FILESYSTEM */ 618 718 619 719 #if !defined(NO_FILESYSTEM) && defined(WOLFSSL_ZEPHYR) … … 622 722 XFILE file; 623 723 624 file = XMALLOC(sizeof(*file), NULL, DYNAMIC_TYPE_FILE);724 file = (XFILE)XMALLOC(sizeof(*file), NULL, DYNAMIC_TYPE_FILE); 625 725 if (file != NULL) { 626 726 if (fs_open(file, filename) != 0) { … … 648 748 #endif /* !NO_FILESYSTEM && !WOLFSSL_ZEPHYR */ 649 749 650 750 #if !defined(WOLFSSL_USER_MUTEX) 651 751 wolfSSL_Mutex* wc_InitAndAllocMutex(void) 652 752 { … … 666 766 return m; 667 767 } 768 #endif 668 769 669 770 #ifdef USE_WOLF_STRTOK … … 753 854 static int wcCryptHwMutexInit = 0; 754 855 755 int wolfSSL_CryptHwMutexInit(void) { 856 int wolfSSL_CryptHwMutexInit(void) 857 { 756 858 int ret = 0; 757 if (wcCryptHwMutexInit == 0) {859 if (wcCryptHwMutexInit == 0) { 758 860 ret = wc_InitMutex(&wcCryptHwMutex); 759 if (ret == 0) {861 if (ret == 0) { 760 862 wcCryptHwMutexInit = 1; 761 863 } … … 763 865 return ret; 764 866 } 765 766 int wolfSSL_CryptHwMutexLock(void){867 int wolfSSL_CryptHwMutexLock(void) 868 { 767 869 int ret = BAD_MUTEX_E; 768 769 870 /* Make sure HW Mutex has been initialized */ 770 wolfSSL_CryptHwMutexInit(); 771 772 if(wcCryptHwMutexInit) { 871 ret = wolfSSL_CryptHwMutexInit(); 872 if (ret == 0) { 773 873 ret = wc_LockMutex(&wcCryptHwMutex); 774 874 } 775 875 return ret; 776 876 } 777 778 int wolfSSL_CryptHwMutexUnLock(void){877 int wolfSSL_CryptHwMutexUnLock(void) 878 { 779 879 int ret = BAD_MUTEX_E; 780 781 if(wcCryptHwMutexInit) { 880 if (wcCryptHwMutexInit) { 782 881 ret = wc_UnLockMutex(&wcCryptHwMutex); 783 882 } … … 886 985 } 887 986 987 #elif defined(RTTHREAD) 988 989 int wc_InitMutex(wolfSSL_Mutex* m) 990 { 991 int iReturn; 992 993 *m = ( wolfSSL_Mutex ) rt_mutex_create("mutex",RT_IPC_FLAG_FIFO); 994 if( *m != NULL ) 995 iReturn = 0; 996 else 997 iReturn = BAD_MUTEX_E; 998 999 1000 return iReturn; 1001 } 1002 1003 int wc_FreeMutex(wolfSSL_Mutex* m) 1004 { 1005 rt_mutex_delete( *m ); 1006 return 0; 1007 } 1008 1009 1010 int wc_LockMutex(wolfSSL_Mutex* m) 1011 { 1012 /* Assume an infinite block, or should there be zero block? */ 1013 return rt_mutex_take( *m, RT_WAITING_FOREVER ); 1014 } 1015 1016 int wc_UnLockMutex(wolfSSL_Mutex* m) 1017 { 1018 return rt_mutex_release( *m ); 1019 } 1020 888 1021 #elif defined(WOLFSSL_SAFERTOS) 889 1022 … … 980 1113 else 981 1114 return BAD_MUTEX_E; 1115 } 1116 1117 #elif defined(WOLFSSL_KTHREADS) 1118 1119 /* Linux kernel mutex routines are voids, alas. */ 1120 1121 int wc_InitMutex(wolfSSL_Mutex* m) 1122 { 1123 mutex_init(m); 1124 return 0; 1125 } 1126 1127 int wc_FreeMutex(wolfSSL_Mutex* m) 1128 { 1129 mutex_destroy(m); 1130 return 0; 1131 } 1132 1133 int wc_LockMutex(wolfSSL_Mutex* m) 1134 { 1135 mutex_lock(m); 1136 return 0; 1137 } 1138 1139 1140 int wc_UnLockMutex(wolfSSL_Mutex* m) 1141 { 1142 mutex_unlock(m); 1143 return 0; 982 1144 } 983 1145 … … 1126 1288 1127 1289 #elif defined(MICRIUM) 1290 #if (OS_VERSION < 50000) 1291 #define MICRIUM_ERR_TYPE OS_ERR 1292 #define MICRIUM_ERR_NONE OS_ERR_NONE 1293 #define MICRIUM_ERR_CODE(err) err 1294 #else 1295 #define MICRIUM_ERR_TYPE RTOS_ERR 1296 #define MICRIUM_ERR_NONE RTOS_ERR_NONE 1297 #define MICRIUM_ERR_CODE(err) RTOS_ERR_CODE_GET(err) 1298 #endif 1128 1299 1129 1300 int wc_InitMutex(wolfSSL_Mutex* m) 1130 1301 { 1131 OS_ERRerr;1302 MICRIUM_ERR_TYPE err; 1132 1303 1133 1304 OSMutexCreate(m, "wolfSSL Mutex", &err); 1134 1305 1135 if ( err == OS_ERR_NONE)1306 if (MICRIUM_ERR_CODE(err) == MICRIUM_ERR_NONE) 1136 1307 return 0; 1137 1308 else … … 1142 1313 { 1143 1314 #if (OS_CFG_MUTEX_DEL_EN == DEF_ENABLED) 1144 OS_ERRerr;1315 MICRIUM_ERR_TYPE err; 1145 1316 1146 1317 OSMutexDel(m, OS_OPT_DEL_ALWAYS, &err); 1147 1318 1148 if ( err == OS_ERR_NONE)1319 if (MICRIUM_ERR_CODE(err) == MICRIUM_ERR_NONE) 1149 1320 return 0; 1150 1321 else 1151 1322 return BAD_MUTEX_E; 1152 1323 #else 1324 (void)m; 1153 1325 return 0; 1154 1326 #endif … … 1157 1329 int wc_LockMutex(wolfSSL_Mutex* m) 1158 1330 { 1159 OS_ERRerr;1331 MICRIUM_ERR_TYPE err; 1160 1332 1161 1333 OSMutexPend(m, 0, OS_OPT_PEND_BLOCKING, NULL, &err); 1162 1334 1163 if ( err == OS_ERR_NONE)1335 if (MICRIUM_ERR_CODE(err) == MICRIUM_ERR_NONE) 1164 1336 return 0; 1165 1337 else … … 1169 1341 int wc_UnLockMutex(wolfSSL_Mutex* m) 1170 1342 { 1171 OS_ERRerr;1343 MICRIUM_ERR_TYPE err; 1172 1344 1173 1345 OSMutexPost(m, OS_OPT_POST_NONE, &err); 1174 1346 1175 if ( err == OS_ERR_NONE)1347 if (MICRIUM_ERR_CODE(err) == MICRIUM_ERR_NONE) 1176 1348 return 0; 1177 1349 else … … 1846 2018 } 1847 2019 2020 #elif defined(WOLFSSL_USER_MUTEX) 2021 2022 /* Use user own mutex */ 2023 2024 /* 2025 int wc_InitMutex(wolfSSL_Mutex* m) { ... } 2026 int wc_FreeMutex(wolfSSL_Mutex *m) { ... } 2027 int wc_LockMutex(wolfSSL_Mutex *m) { ... } 2028 int wc_UnLockMutex(wolfSSL_Mutex *m) { ... } 2029 */ 2030 1848 2031 #else 1849 2032 #warning No mutex handling defined … … 1937 2120 1938 2121 ret->tm_mday = (int)++dayno; 2122 #ifndef WOLFSSL_LINUXKM 1939 2123 ret->tm_isdst = 0; 2124 #endif 1940 2125 1941 2126 return ret; … … 1979 2164 DWORD sec = 0; 1980 2165 #else 1981 uint32_tsec = 0;2166 word32 sec = 0; 1982 2167 #endif 1983 2168 time_t localTime; … … 2002 2187 time_t deos_time(time_t* timer) 2003 2188 { 2004 const uint32_tsystemTickTimeInHz = 1000000 / systemTickInMicroseconds();2005 uint32_t*systemTickPtr = systemTickPointer();2189 const word32 systemTickTimeInHz = 1000000 / systemTickInMicroseconds(); 2190 word32 *systemTickPtr = systemTickPointer(); 2006 2191 2007 2192 if (timer != NULL) … … 2071 2256 #include "xrtcpsu.h" 2072 2257 2073 time_t XTIME(time_t * timer)2258 time_t xilinx_time(time_t * timer) 2074 2259 { 2075 2260 time_t sec = 0; … … 2180 2365 #endif /* !NO_CRYPT_BENCHMARK */ 2181 2366 #endif /* WOLFSSL_TELIT_M2MB */ 2367 2368 2369 #if defined(WOLFSSL_LINUXKM) 2370 time_t time(time_t * timer) 2371 { 2372 time_t ret; 2373 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0) 2374 struct timespec ts; 2375 getnstimeofday(&ts); 2376 ret = ts.tv_sec * 1000000000LL + ts.tv_nsec; 2377 #else 2378 ret = ktime_get_real_seconds(); 2379 #endif 2380 if (timer) 2381 *timer = ret; 2382 return ret; 2383 } 2384 #endif /* WOLFSSL_LINUXKM */ 2182 2385 2183 2386 #endif /* !NO_ASN_TIME */ … … 2262 2465 #endif /* WOLFSSL_NUCLEUS_1_2 */ 2263 2466 2467 #ifdef WOLFSSL_LINUXKM 2468 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) 2469 /* adapted from kvrealloc() draft by Changli Gao, 2010-05-13 */ 2470 void *lkm_realloc(void *ptr, size_t newsize) { 2471 void *nptr; 2472 size_t oldsize; 2473 2474 if (unlikely(newsize == 0)) { 2475 kvfree(ptr); 2476 return ZERO_SIZE_PTR; 2477 } 2478 2479 if (unlikely(ptr == NULL)) 2480 return kvmalloc(newsize, GFP_KERNEL); 2481 2482 if (is_vmalloc_addr(ptr)) { 2483 /* no way to discern the size of the old allocation, 2484 * because the kernel doesn't export find_vm_area(). if 2485 * it did, we could then call get_vm_area_size() on the 2486 * returned struct vm_struct. 2487 */ 2488 return NULL; 2489 } else { 2490 struct page *page; 2491 2492 page = virt_to_head_page(ptr); 2493 if (PageSlab(page) || PageCompound(page)) { 2494 if (newsize < PAGE_SIZE) 2495 return krealloc(ptr, newsize, GFP_KERNEL); 2496 oldsize = ksize(ptr); 2497 } else { 2498 oldsize = page->private; 2499 if (newsize <= oldsize) 2500 return ptr; 2501 } 2502 } 2503 2504 nptr = kvmalloc(newsize, GFP_KERNEL); 2505 if (nptr != NULL) { 2506 memcpy(nptr, ptr, oldsize); 2507 kvfree(ptr); 2508 } 2509 2510 return nptr; 2511 } 2512 #endif /* >= 4.12 */ 2513 #endif /* WOLFSSL_LINUXKM */ 2514 2264 2515 #if defined(WOLFSSL_TI_CRYPT) || defined(WOLFSSL_TI_HASH) 2265 2516 #include <wolfcrypt/src/port/ti/ti-ccm.c> /* initialize and Mutex for TI Crypt Engine */
Note:
See TracChangeset
for help on using the changeset viewer.