CyaSSL changed for NucleoF401RE board: implemented random and time functions for build. (Has trouble with wildcard domains like *.google.com, *.yahoo.com)

Fork of CyaSSL by wolf SSL

Committer:
Vanger
Date:
Wed Jan 14 22:07:14 2015 +0000
Revision:
4:e505054279ed
Parent:
0:1239e9b70ca2
Implemented some platform specific functions in the Cyassl library code: time functions, seed random functions, and also changed the settings.h file to define settings specific to the platform being used

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:1239e9b70ca2 1 /* random.h
wolfSSL 0:1239e9b70ca2 2 *
wolfSSL 0:1239e9b70ca2 3 * Copyright (C) 2006-2014 wolfSSL Inc.
wolfSSL 0:1239e9b70ca2 4 *
wolfSSL 0:1239e9b70ca2 5 * This file is part of CyaSSL.
wolfSSL 0:1239e9b70ca2 6 *
wolfSSL 0:1239e9b70ca2 7 * CyaSSL is free software; you can redistribute it and/or modify
wolfSSL 0:1239e9b70ca2 8 * it under the terms of the GNU General Public License as published by
wolfSSL 0:1239e9b70ca2 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 0:1239e9b70ca2 10 * (at your option) any later version.
wolfSSL 0:1239e9b70ca2 11 *
wolfSSL 0:1239e9b70ca2 12 * CyaSSL is distributed in the hope that it will be useful,
wolfSSL 0:1239e9b70ca2 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 0:1239e9b70ca2 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 0:1239e9b70ca2 15 * GNU General Public License for more details.
wolfSSL 0:1239e9b70ca2 16 *
wolfSSL 0:1239e9b70ca2 17 * You should have received a copy of the GNU General Public License
wolfSSL 0:1239e9b70ca2 18 * along with this program; if not, write to the Free Software
wolfSSL 0:1239e9b70ca2 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
wolfSSL 0:1239e9b70ca2 20 */
wolfSSL 0:1239e9b70ca2 21
wolfSSL 0:1239e9b70ca2 22
wolfSSL 0:1239e9b70ca2 23 #ifndef CTAO_CRYPT_RANDOM_H
wolfSSL 0:1239e9b70ca2 24 #define CTAO_CRYPT_RANDOM_H
wolfSSL 0:1239e9b70ca2 25
wolfSSL 0:1239e9b70ca2 26 #include <cyassl/ctaocrypt/types.h>
wolfSSL 0:1239e9b70ca2 27
wolfSSL 0:1239e9b70ca2 28 #ifndef NO_RC4
wolfSSL 0:1239e9b70ca2 29 #include <cyassl/ctaocrypt/arc4.h>
wolfSSL 0:1239e9b70ca2 30 #else
wolfSSL 0:1239e9b70ca2 31 #include <cyassl/ctaocrypt/sha256.h>
wolfSSL 0:1239e9b70ca2 32 #endif
wolfSSL 0:1239e9b70ca2 33
wolfSSL 0:1239e9b70ca2 34 #ifdef __cplusplus
wolfSSL 0:1239e9b70ca2 35 extern "C" {
wolfSSL 0:1239e9b70ca2 36 #endif
wolfSSL 0:1239e9b70ca2 37
wolfSSL 0:1239e9b70ca2 38
wolfSSL 0:1239e9b70ca2 39 #if defined(USE_WINDOWS_API)
wolfSSL 0:1239e9b70ca2 40 #if defined(_WIN64)
wolfSSL 0:1239e9b70ca2 41 typedef unsigned __int64 ProviderHandle;
wolfSSL 0:1239e9b70ca2 42 /* type HCRYPTPROV, avoid #include <windows.h> */
wolfSSL 0:1239e9b70ca2 43 #else
wolfSSL 0:1239e9b70ca2 44 typedef unsigned long ProviderHandle;
wolfSSL 0:1239e9b70ca2 45 #endif
wolfSSL 0:1239e9b70ca2 46 #endif
wolfSSL 0:1239e9b70ca2 47
wolfSSL 0:1239e9b70ca2 48
wolfSSL 0:1239e9b70ca2 49 /* OS specific seeder */
wolfSSL 0:1239e9b70ca2 50 typedef struct OS_Seed {
wolfSSL 0:1239e9b70ca2 51 #if defined(USE_WINDOWS_API)
wolfSSL 0:1239e9b70ca2 52 ProviderHandle handle;
wolfSSL 0:1239e9b70ca2 53 #else
wolfSSL 0:1239e9b70ca2 54 int fd;
wolfSSL 0:1239e9b70ca2 55 #endif
wolfSSL 0:1239e9b70ca2 56 } OS_Seed;
wolfSSL 0:1239e9b70ca2 57
wolfSSL 0:1239e9b70ca2 58
wolfSSL 0:1239e9b70ca2 59 CYASSL_LOCAL
wolfSSL 0:1239e9b70ca2 60 int GenerateSeed(OS_Seed* os, byte* seed, word32 sz);
wolfSSL 0:1239e9b70ca2 61
wolfSSL 0:1239e9b70ca2 62 #if defined(CYASSL_MDK_ARM)
wolfSSL 0:1239e9b70ca2 63 #undef RNG
wolfSSL 0:1239e9b70ca2 64 #define RNG CyaSSL_RNG /* for avoiding name conflict in "stm32f2xx.h" */
wolfSSL 0:1239e9b70ca2 65 #endif
wolfSSL 0:1239e9b70ca2 66
wolfSSL 0:1239e9b70ca2 67 #ifndef NO_RC4
wolfSSL 0:1239e9b70ca2 68
wolfSSL 0:1239e9b70ca2 69 #define CYASSL_RNG_CAVIUM_MAGIC 0xBEEF0004
wolfSSL 0:1239e9b70ca2 70
wolfSSL 0:1239e9b70ca2 71 /* secure Random Nnumber Generator */
wolfSSL 0:1239e9b70ca2 72
wolfSSL 0:1239e9b70ca2 73
wolfSSL 0:1239e9b70ca2 74 typedef struct RNG {
wolfSSL 0:1239e9b70ca2 75 OS_Seed seed;
wolfSSL 0:1239e9b70ca2 76 Arc4 cipher;
wolfSSL 0:1239e9b70ca2 77 #ifdef HAVE_CAVIUM
wolfSSL 0:1239e9b70ca2 78 int devId; /* nitrox device id */
wolfSSL 0:1239e9b70ca2 79 word32 magic; /* using cavium magic */
wolfSSL 0:1239e9b70ca2 80 #endif
wolfSSL 0:1239e9b70ca2 81 } RNG;
wolfSSL 0:1239e9b70ca2 82
wolfSSL 0:1239e9b70ca2 83
wolfSSL 0:1239e9b70ca2 84 #ifdef HAVE_CAVIUM
wolfSSL 0:1239e9b70ca2 85 CYASSL_API int InitRngCavium(RNG*, int);
wolfSSL 0:1239e9b70ca2 86 #endif
wolfSSL 0:1239e9b70ca2 87
wolfSSL 0:1239e9b70ca2 88 #else /* NO_RC4 */
wolfSSL 0:1239e9b70ca2 89
wolfSSL 0:1239e9b70ca2 90 #define DBRG_SEED_LEN (440/8)
wolfSSL 0:1239e9b70ca2 91
wolfSSL 0:1239e9b70ca2 92
wolfSSL 0:1239e9b70ca2 93 /* secure Random Nnumber Generator */
wolfSSL 0:1239e9b70ca2 94 typedef struct RNG {
wolfSSL 0:1239e9b70ca2 95 OS_Seed seed;
wolfSSL 0:1239e9b70ca2 96
wolfSSL 0:1239e9b70ca2 97 Sha256 sha;
wolfSSL 0:1239e9b70ca2 98 byte digest[SHA256_DIGEST_SIZE];
wolfSSL 0:1239e9b70ca2 99 byte V[DBRG_SEED_LEN];
wolfSSL 0:1239e9b70ca2 100 byte C[DBRG_SEED_LEN];
wolfSSL 0:1239e9b70ca2 101 word64 reseed_ctr;
wolfSSL 0:1239e9b70ca2 102 } RNG;
wolfSSL 0:1239e9b70ca2 103
wolfSSL 0:1239e9b70ca2 104 #endif
wolfSSL 0:1239e9b70ca2 105
wolfSSL 0:1239e9b70ca2 106 CYASSL_API int InitRng(RNG*);
wolfSSL 0:1239e9b70ca2 107 CYASSL_API int RNG_GenerateBlock(RNG*, byte*, word32 sz);
wolfSSL 0:1239e9b70ca2 108 CYASSL_API int RNG_GenerateByte(RNG*, byte*);
wolfSSL 0:1239e9b70ca2 109
wolfSSL 0:1239e9b70ca2 110 #ifdef NO_RC4
wolfSSL 0:1239e9b70ca2 111 CYASSL_API void FreeRng(RNG*);
wolfSSL 0:1239e9b70ca2 112 #endif
wolfSSL 0:1239e9b70ca2 113
wolfSSL 0:1239e9b70ca2 114 #ifdef __cplusplus
wolfSSL 0:1239e9b70ca2 115 } /* extern "C" */
wolfSSL 0:1239e9b70ca2 116 #endif
wolfSSL 0:1239e9b70ca2 117
wolfSSL 0:1239e9b70ca2 118 #endif /* CTAO_CRYPT_RANDOM_H */
wolfSSL 0:1239e9b70ca2 119
wolfSSL 0:1239e9b70ca2 120