123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /* wolf_main.c
- *
- * Copyright (C) 2006-2022 wolfSSL Inc.
- *
- * This file is part of wolfSSL.
- *
- * wolfSSL is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * wolfSSL is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
- */
- #include <wolfssl/wolfcrypt/settings.h>
- #include <wolfssl/wolfcrypt/random.h> /* for CUSTOM_RAND_TYPE */
- #include <stdint.h>
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
- /* TIME CODE */
- /* TODO: Implement real RTC */
- /* Optionally you can define NO_ASN_TIME to disable all cert time checks */
- static int gTimeMs;
- static int hw_get_time_sec(void)
- {
- #warning Must implement your own time source if validating certificates
- return ++gTimeMs;
- }
- /* This is used by wolfCrypt asn.c for cert time checking */
- unsigned long my_time(unsigned long* timer)
- {
- (void)timer;
- return hw_get_time_sec();
- }
- #ifndef WOLFCRYPT_ONLY
- /* This is used by TLS only */
- unsigned int LowResTimer(void)
- {
- return hw_get_time_sec();
- }
- #endif
- #ifndef NO_CRYPT_BENCHMARK
- /* This is used by wolfCrypt benchmark tool only */
- double current_time(int reset)
- {
- double timeNow;
- int timeMs = gTimeMs;
- (void)reset;
- timeNow = (timeMs / 1000); // sec
- timeNow += (double)(timeMs % 1000) / 1000; // ms
- return timeNow;
- }
- #endif
- /* RNG CODE */
- /* TODO: Implement real RNG */
- static unsigned int gCounter;
- unsigned int hw_rand(void)
- {
- #warning Must implement your own random source
- return ++gCounter;
- }
- unsigned int my_rng_seed_gen(void)
- {
- return hw_rand();
- }
- int my_rng_gen_block(unsigned char* output, unsigned int sz)
- {
- uint32_t i = 0;
- while (i < sz)
- {
- /* If not aligned or there is odd/remainder */
- if( (i + sizeof(CUSTOM_RAND_TYPE)) > sz ||
- ((uint32_t)&output[i] % sizeof(CUSTOM_RAND_TYPE)) != 0
- ) {
- /* Single byte at a time */
- output[i++] = (unsigned char)my_rng_seed_gen();
- }
- else {
- /* Use native 8, 16, 32 or 64 copy instruction */
- *((CUSTOM_RAND_TYPE*)&output[i]) = my_rng_seed_gen();
- i += sizeof(CUSTOM_RAND_TYPE);
- }
- }
- return 0;
- }
- #ifdef XMALLOC_OVERRIDE
- void *myMalloc(size_t n, void* heap, int type)
- {
- (void)n;
- (void)heap;
- (void)type;
- #warning Must implement your own malloc
- return NULL;
- }
- void myFree(void *p, void* heap, int type)
- {
- (void)p;
- (void)heap;
- (void)type;
- #warning Must implement your own free
- }
- /* Required for normal math (!USE_FAST_MATH) */
- void *myRealloc(void *p, size_t n, void* heap, int type)
- {
- (void)p;
- (void)n;
- (void)heap;
- (void)type;
- #warning Must implement your own realloc
- return NULL;
- }
- #endif /* XMALLOC_OVERRIDE */
|