cyassl re-port with cellular comms, PSK test
Dependencies: VodafoneUSBModem_bleedingedge2 mbed-rtos mbed-src
cyassllib/cyassl/test.h@1:b211d97b0068, 2013-04-26 (annotated)
- Committer:
- ashleymills
- Date:
- Fri Apr 26 16:59:36 2013 +0000
- Revision:
- 1:b211d97b0068
- Parent:
- 0:e979170e02e7
nothing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ashleymills | 0:e979170e02e7 | 1 | /* test.h */ |
ashleymills | 0:e979170e02e7 | 2 | |
ashleymills | 0:e979170e02e7 | 3 | #ifndef CyaSSL_TEST_H |
ashleymills | 0:e979170e02e7 | 4 | #define CyaSSL_TEST_H |
ashleymills | 0:e979170e02e7 | 5 | |
ashleymills | 0:e979170e02e7 | 6 | #include <stdio.h> |
ashleymills | 0:e979170e02e7 | 7 | #include <stdlib.h> |
ashleymills | 0:e979170e02e7 | 8 | #include <assert.h> |
ashleymills | 0:e979170e02e7 | 9 | #include <ctype.h> |
ashleymills | 0:e979170e02e7 | 10 | #include <cyassl/ssl.h> |
ashleymills | 0:e979170e02e7 | 11 | #include <cyassl/ctaocrypt/types.h> |
ashleymills | 0:e979170e02e7 | 12 | |
ashleymills | 0:e979170e02e7 | 13 | #ifdef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 14 | #include <winsock2.h> |
ashleymills | 0:e979170e02e7 | 15 | #include <process.h> |
ashleymills | 0:e979170e02e7 | 16 | #ifdef TEST_IPV6 /* don't require newer SDK for IPV4 */ |
ashleymills | 0:e979170e02e7 | 17 | #include <ws2tcpip.h> |
ashleymills | 0:e979170e02e7 | 18 | #include <wspiapi.h> |
ashleymills | 0:e979170e02e7 | 19 | #endif |
ashleymills | 0:e979170e02e7 | 20 | #define SOCKET_T unsigned int |
ashleymills | 0:e979170e02e7 | 21 | #else |
ashleymills | 0:e979170e02e7 | 22 | #include <string.h> |
ashleymills | 0:e979170e02e7 | 23 | #include <unistd.h> |
ashleymills | 0:e979170e02e7 | 24 | #include <netdb.h> |
ashleymills | 0:e979170e02e7 | 25 | #include <netinet/in.h> |
ashleymills | 0:e979170e02e7 | 26 | #include <netinet/tcp.h> |
ashleymills | 0:e979170e02e7 | 27 | #include <arpa/inet.h> |
ashleymills | 0:e979170e02e7 | 28 | #include <sys/ioctl.h> |
ashleymills | 0:e979170e02e7 | 29 | #include <sys/time.h> |
ashleymills | 0:e979170e02e7 | 30 | #include <sys/types.h> |
ashleymills | 0:e979170e02e7 | 31 | #include <sys/socket.h> |
ashleymills | 0:e979170e02e7 | 32 | #include <pthread.h> |
ashleymills | 0:e979170e02e7 | 33 | #include <fcntl.h> |
ashleymills | 0:e979170e02e7 | 34 | #ifdef TEST_IPV6 |
ashleymills | 0:e979170e02e7 | 35 | #include <netdb.h> |
ashleymills | 0:e979170e02e7 | 36 | #endif |
ashleymills | 0:e979170e02e7 | 37 | #define SOCKET_T int |
ashleymills | 0:e979170e02e7 | 38 | #ifndef SO_NOSIGPIPE |
ashleymills | 0:e979170e02e7 | 39 | #include <signal.h> /* ignore SIGPIPE */ |
ashleymills | 0:e979170e02e7 | 40 | #endif |
ashleymills | 0:e979170e02e7 | 41 | #endif /* USE_WINDOWS_API */ |
ashleymills | 0:e979170e02e7 | 42 | |
ashleymills | 0:e979170e02e7 | 43 | #ifdef HAVE_CAVIUM |
ashleymills | 0:e979170e02e7 | 44 | #include "cavium_sysdep.h" |
ashleymills | 0:e979170e02e7 | 45 | #include "cavium_common.h" |
ashleymills | 0:e979170e02e7 | 46 | #include "cavium_ioctl.h" |
ashleymills | 0:e979170e02e7 | 47 | #endif |
ashleymills | 0:e979170e02e7 | 48 | |
ashleymills | 0:e979170e02e7 | 49 | #ifdef _MSC_VER |
ashleymills | 0:e979170e02e7 | 50 | /* disable conversion warning */ |
ashleymills | 0:e979170e02e7 | 51 | /* 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy */ |
ashleymills | 0:e979170e02e7 | 52 | #pragma warning(disable:4244 4996) |
ashleymills | 0:e979170e02e7 | 53 | #endif |
ashleymills | 0:e979170e02e7 | 54 | |
ashleymills | 0:e979170e02e7 | 55 | |
ashleymills | 0:e979170e02e7 | 56 | #if defined(__MACH__) || defined(USE_WINDOWS_API) |
ashleymills | 0:e979170e02e7 | 57 | #ifndef _SOCKLEN_T |
ashleymills | 0:e979170e02e7 | 58 | typedef int socklen_t; |
ashleymills | 0:e979170e02e7 | 59 | #endif |
ashleymills | 0:e979170e02e7 | 60 | #endif |
ashleymills | 0:e979170e02e7 | 61 | |
ashleymills | 0:e979170e02e7 | 62 | |
ashleymills | 0:e979170e02e7 | 63 | /* HPUX doesn't use socklent_t for third parameter to accept */ |
ashleymills | 0:e979170e02e7 | 64 | #if !defined(__hpux__) |
ashleymills | 0:e979170e02e7 | 65 | typedef socklen_t* ACCEPT_THIRD_T; |
ashleymills | 0:e979170e02e7 | 66 | #else |
ashleymills | 0:e979170e02e7 | 67 | typedef int* ACCEPT_THIRD_T; |
ashleymills | 0:e979170e02e7 | 68 | #endif |
ashleymills | 0:e979170e02e7 | 69 | |
ashleymills | 0:e979170e02e7 | 70 | |
ashleymills | 0:e979170e02e7 | 71 | #ifdef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 72 | #define CloseSocket(s) closesocket(s) |
ashleymills | 0:e979170e02e7 | 73 | #define StartTCP() { WSADATA wsd; WSAStartup(0x0002, &wsd); } |
ashleymills | 0:e979170e02e7 | 74 | #else |
ashleymills | 0:e979170e02e7 | 75 | #define CloseSocket(s) close(s) |
ashleymills | 0:e979170e02e7 | 76 | #define StartTCP() |
ashleymills | 0:e979170e02e7 | 77 | #endif |
ashleymills | 0:e979170e02e7 | 78 | |
ashleymills | 0:e979170e02e7 | 79 | |
ashleymills | 0:e979170e02e7 | 80 | #ifdef SINGLE_THREADED |
ashleymills | 0:e979170e02e7 | 81 | typedef unsigned int THREAD_RETURN; |
ashleymills | 0:e979170e02e7 | 82 | typedef void* THREAD_TYPE; |
ashleymills | 0:e979170e02e7 | 83 | #define CYASSL_THREAD |
ashleymills | 0:e979170e02e7 | 84 | #else |
ashleymills | 0:e979170e02e7 | 85 | #ifdef _POSIX_THREADS |
ashleymills | 0:e979170e02e7 | 86 | typedef void* THREAD_RETURN; |
ashleymills | 0:e979170e02e7 | 87 | typedef pthread_t THREAD_TYPE; |
ashleymills | 0:e979170e02e7 | 88 | #define CYASSL_THREAD |
ashleymills | 0:e979170e02e7 | 89 | #define INFINITE -1 |
ashleymills | 0:e979170e02e7 | 90 | #define WAIT_OBJECT_0 0L |
ashleymills | 0:e979170e02e7 | 91 | #else |
ashleymills | 0:e979170e02e7 | 92 | typedef unsigned int THREAD_RETURN; |
ashleymills | 0:e979170e02e7 | 93 | typedef HANDLE THREAD_TYPE; |
ashleymills | 0:e979170e02e7 | 94 | #define CYASSL_THREAD __stdcall |
ashleymills | 0:e979170e02e7 | 95 | #endif |
ashleymills | 0:e979170e02e7 | 96 | #endif |
ashleymills | 0:e979170e02e7 | 97 | |
ashleymills | 0:e979170e02e7 | 98 | |
ashleymills | 0:e979170e02e7 | 99 | #ifdef TEST_IPV6 |
ashleymills | 0:e979170e02e7 | 100 | typedef struct sockaddr_in6 SOCKADDR_IN_T; |
ashleymills | 0:e979170e02e7 | 101 | #define AF_INET_V AF_INET6 |
ashleymills | 0:e979170e02e7 | 102 | #else |
ashleymills | 0:e979170e02e7 | 103 | typedef struct sockaddr_in SOCKADDR_IN_T; |
ashleymills | 0:e979170e02e7 | 104 | #define AF_INET_V AF_INET |
ashleymills | 0:e979170e02e7 | 105 | #endif |
ashleymills | 0:e979170e02e7 | 106 | |
ashleymills | 0:e979170e02e7 | 107 | |
ashleymills | 0:e979170e02e7 | 108 | #define SERVER_DEFAULT_VERSION 3 |
ashleymills | 0:e979170e02e7 | 109 | #define CLIENT_DEFAULT_VERSION 3 |
ashleymills | 0:e979170e02e7 | 110 | |
ashleymills | 0:e979170e02e7 | 111 | /* all certs relative to CyaSSL home directory now */ |
ashleymills | 0:e979170e02e7 | 112 | #define caCert "./certs/ca-cert.pem" |
ashleymills | 0:e979170e02e7 | 113 | #define eccCert "./certs/server-ecc.pem" |
ashleymills | 0:e979170e02e7 | 114 | #define eccKey "./certs/ecc-key.pem" |
ashleymills | 0:e979170e02e7 | 115 | #define svrCert "./certs/server-cert.pem" |
ashleymills | 0:e979170e02e7 | 116 | #define svrKey "./certs/server-key.pem" |
ashleymills | 0:e979170e02e7 | 117 | #define cliCert "./certs/client-cert.pem" |
ashleymills | 0:e979170e02e7 | 118 | #define cliKey "./certs/client-key.pem" |
ashleymills | 0:e979170e02e7 | 119 | #define ntruCert "./certs/ntru-cert.pem" |
ashleymills | 0:e979170e02e7 | 120 | #define ntruKey "./certs/ntru-key.raw" |
ashleymills | 0:e979170e02e7 | 121 | #define dhParam "./certs/dh2048.pem" |
ashleymills | 0:e979170e02e7 | 122 | #define cliEccKey "./certs/ecc-client-key.pem" |
ashleymills | 0:e979170e02e7 | 123 | #define cliEccCert "./certs/client-ecc-cert.pem" |
ashleymills | 0:e979170e02e7 | 124 | #define crlPemDir "./certs/crl" |
ashleymills | 0:e979170e02e7 | 125 | |
ashleymills | 0:e979170e02e7 | 126 | typedef struct tcp_ready { |
ashleymills | 0:e979170e02e7 | 127 | int ready; /* predicate */ |
ashleymills | 0:e979170e02e7 | 128 | #ifdef _POSIX_THREADS |
ashleymills | 0:e979170e02e7 | 129 | pthread_mutex_t mutex; |
ashleymills | 0:e979170e02e7 | 130 | pthread_cond_t cond; |
ashleymills | 0:e979170e02e7 | 131 | #endif |
ashleymills | 0:e979170e02e7 | 132 | } tcp_ready; |
ashleymills | 0:e979170e02e7 | 133 | |
ashleymills | 0:e979170e02e7 | 134 | |
ashleymills | 0:e979170e02e7 | 135 | void InitTcpReady(tcp_ready*); |
ashleymills | 0:e979170e02e7 | 136 | void FreeTcpReady(tcp_ready*); |
ashleymills | 0:e979170e02e7 | 137 | |
ashleymills | 0:e979170e02e7 | 138 | |
ashleymills | 0:e979170e02e7 | 139 | typedef struct func_args { |
ashleymills | 0:e979170e02e7 | 140 | int argc; |
ashleymills | 0:e979170e02e7 | 141 | char** argv; |
ashleymills | 0:e979170e02e7 | 142 | int return_code; |
ashleymills | 0:e979170e02e7 | 143 | tcp_ready* signal; |
ashleymills | 0:e979170e02e7 | 144 | } func_args; |
ashleymills | 0:e979170e02e7 | 145 | |
ashleymills | 0:e979170e02e7 | 146 | void wait_tcp_ready(func_args*); |
ashleymills | 0:e979170e02e7 | 147 | |
ashleymills | 0:e979170e02e7 | 148 | typedef THREAD_RETURN CYASSL_THREAD THREAD_FUNC(void*); |
ashleymills | 0:e979170e02e7 | 149 | |
ashleymills | 0:e979170e02e7 | 150 | void start_thread(THREAD_FUNC, func_args*, THREAD_TYPE*); |
ashleymills | 0:e979170e02e7 | 151 | void join_thread(THREAD_TYPE); |
ashleymills | 0:e979170e02e7 | 152 | |
ashleymills | 0:e979170e02e7 | 153 | /* yaSSL */ |
ashleymills | 0:e979170e02e7 | 154 | static const char* const yasslIP = "127.0.0.1"; |
ashleymills | 0:e979170e02e7 | 155 | static const word16 yasslPort = 11111; |
ashleymills | 0:e979170e02e7 | 156 | |
ashleymills | 0:e979170e02e7 | 157 | |
ashleymills | 0:e979170e02e7 | 158 | static INLINE void err_sys(const char* msg) |
ashleymills | 0:e979170e02e7 | 159 | { |
ashleymills | 0:e979170e02e7 | 160 | printf("yassl error: %s\n", msg); |
ashleymills | 0:e979170e02e7 | 161 | if (msg) |
ashleymills | 0:e979170e02e7 | 162 | exit(EXIT_FAILURE); |
ashleymills | 0:e979170e02e7 | 163 | } |
ashleymills | 0:e979170e02e7 | 164 | |
ashleymills | 0:e979170e02e7 | 165 | |
ashleymills | 0:e979170e02e7 | 166 | #define MY_EX_USAGE 2 |
ashleymills | 0:e979170e02e7 | 167 | |
ashleymills | 0:e979170e02e7 | 168 | extern int myoptind; |
ashleymills | 0:e979170e02e7 | 169 | extern char* myoptarg; |
ashleymills | 0:e979170e02e7 | 170 | |
ashleymills | 0:e979170e02e7 | 171 | static INLINE int mygetopt(int argc, char** argv, const char* optstring) |
ashleymills | 0:e979170e02e7 | 172 | { |
ashleymills | 0:e979170e02e7 | 173 | static char* next = NULL; |
ashleymills | 0:e979170e02e7 | 174 | |
ashleymills | 0:e979170e02e7 | 175 | char c; |
ashleymills | 0:e979170e02e7 | 176 | char* cp; |
ashleymills | 0:e979170e02e7 | 177 | |
ashleymills | 0:e979170e02e7 | 178 | if (myoptind == 0) |
ashleymills | 0:e979170e02e7 | 179 | next = NULL; /* we're starting new/over */ |
ashleymills | 0:e979170e02e7 | 180 | |
ashleymills | 0:e979170e02e7 | 181 | if (next == NULL || *next == '\0') { |
ashleymills | 0:e979170e02e7 | 182 | if (myoptind == 0) |
ashleymills | 0:e979170e02e7 | 183 | myoptind++; |
ashleymills | 0:e979170e02e7 | 184 | |
ashleymills | 0:e979170e02e7 | 185 | if (myoptind >= argc || argv[myoptind][0] != '-' || |
ashleymills | 0:e979170e02e7 | 186 | argv[myoptind][1] == '\0') { |
ashleymills | 0:e979170e02e7 | 187 | myoptarg = NULL; |
ashleymills | 0:e979170e02e7 | 188 | if (myoptind < argc) |
ashleymills | 0:e979170e02e7 | 189 | myoptarg = argv[myoptind]; |
ashleymills | 0:e979170e02e7 | 190 | |
ashleymills | 0:e979170e02e7 | 191 | return -1; |
ashleymills | 0:e979170e02e7 | 192 | } |
ashleymills | 0:e979170e02e7 | 193 | |
ashleymills | 0:e979170e02e7 | 194 | if (strcmp(argv[myoptind], "--") == 0) { |
ashleymills | 0:e979170e02e7 | 195 | myoptind++; |
ashleymills | 0:e979170e02e7 | 196 | myoptarg = NULL; |
ashleymills | 0:e979170e02e7 | 197 | |
ashleymills | 0:e979170e02e7 | 198 | if (myoptind < argc) |
ashleymills | 0:e979170e02e7 | 199 | myoptarg = argv[myoptind]; |
ashleymills | 0:e979170e02e7 | 200 | |
ashleymills | 0:e979170e02e7 | 201 | return -1; |
ashleymills | 0:e979170e02e7 | 202 | } |
ashleymills | 0:e979170e02e7 | 203 | |
ashleymills | 0:e979170e02e7 | 204 | next = argv[myoptind]; |
ashleymills | 0:e979170e02e7 | 205 | next++; /* skip - */ |
ashleymills | 0:e979170e02e7 | 206 | myoptind++; |
ashleymills | 0:e979170e02e7 | 207 | } |
ashleymills | 0:e979170e02e7 | 208 | |
ashleymills | 0:e979170e02e7 | 209 | c = *next++; |
ashleymills | 0:e979170e02e7 | 210 | /* The C++ strchr can return a different value */ |
ashleymills | 0:e979170e02e7 | 211 | cp = (char*)strchr(optstring, c); |
ashleymills | 0:e979170e02e7 | 212 | |
ashleymills | 0:e979170e02e7 | 213 | if (cp == NULL || c == ':') |
ashleymills | 0:e979170e02e7 | 214 | return '?'; |
ashleymills | 0:e979170e02e7 | 215 | |
ashleymills | 0:e979170e02e7 | 216 | cp++; |
ashleymills | 0:e979170e02e7 | 217 | |
ashleymills | 0:e979170e02e7 | 218 | if (*cp == ':') { |
ashleymills | 0:e979170e02e7 | 219 | if (*next != '\0') { |
ashleymills | 0:e979170e02e7 | 220 | myoptarg = next; |
ashleymills | 0:e979170e02e7 | 221 | next = NULL; |
ashleymills | 0:e979170e02e7 | 222 | } |
ashleymills | 0:e979170e02e7 | 223 | else if (myoptind < argc) { |
ashleymills | 0:e979170e02e7 | 224 | myoptarg = argv[myoptind]; |
ashleymills | 0:e979170e02e7 | 225 | myoptind++; |
ashleymills | 0:e979170e02e7 | 226 | } |
ashleymills | 0:e979170e02e7 | 227 | else |
ashleymills | 0:e979170e02e7 | 228 | return '?'; |
ashleymills | 0:e979170e02e7 | 229 | } |
ashleymills | 0:e979170e02e7 | 230 | |
ashleymills | 0:e979170e02e7 | 231 | return c; |
ashleymills | 0:e979170e02e7 | 232 | } |
ashleymills | 0:e979170e02e7 | 233 | |
ashleymills | 0:e979170e02e7 | 234 | |
ashleymills | 0:e979170e02e7 | 235 | #ifdef OPENSSL_EXTRA |
ashleymills | 0:e979170e02e7 | 236 | |
ashleymills | 0:e979170e02e7 | 237 | static INLINE int PasswordCallBack(char* passwd, int sz, int rw, void* userdata) |
ashleymills | 0:e979170e02e7 | 238 | { |
ashleymills | 0:e979170e02e7 | 239 | (void)rw; |
ashleymills | 0:e979170e02e7 | 240 | (void)userdata; |
ashleymills | 0:e979170e02e7 | 241 | strncpy(passwd, "yassl123", sz); |
ashleymills | 0:e979170e02e7 | 242 | return 8; |
ashleymills | 0:e979170e02e7 | 243 | } |
ashleymills | 0:e979170e02e7 | 244 | |
ashleymills | 0:e979170e02e7 | 245 | #endif |
ashleymills | 0:e979170e02e7 | 246 | |
ashleymills | 0:e979170e02e7 | 247 | |
ashleymills | 0:e979170e02e7 | 248 | static INLINE void showPeer(CYASSL* ssl) |
ashleymills | 0:e979170e02e7 | 249 | { |
ashleymills | 0:e979170e02e7 | 250 | #ifdef OPENSSL_EXTRA |
ashleymills | 0:e979170e02e7 | 251 | |
ashleymills | 0:e979170e02e7 | 252 | CYASSL_CIPHER* cipher; |
ashleymills | 0:e979170e02e7 | 253 | CYASSL_X509* peer = CyaSSL_get_peer_certificate(ssl); |
ashleymills | 0:e979170e02e7 | 254 | if (peer) { |
ashleymills | 0:e979170e02e7 | 255 | char* altName; |
ashleymills | 0:e979170e02e7 | 256 | char* issuer = CyaSSL_X509_NAME_oneline( |
ashleymills | 0:e979170e02e7 | 257 | CyaSSL_X509_get_issuer_name(peer), 0, 0); |
ashleymills | 0:e979170e02e7 | 258 | char* subject = CyaSSL_X509_NAME_oneline( |
ashleymills | 0:e979170e02e7 | 259 | CyaSSL_X509_get_subject_name(peer), 0, 0); |
ashleymills | 0:e979170e02e7 | 260 | byte serial[32]; |
ashleymills | 0:e979170e02e7 | 261 | int ret; |
ashleymills | 0:e979170e02e7 | 262 | int sz = sizeof(serial); |
ashleymills | 0:e979170e02e7 | 263 | |
ashleymills | 0:e979170e02e7 | 264 | printf("peer's cert info:\n issuer : %s\n subject: %s\n", issuer, |
ashleymills | 0:e979170e02e7 | 265 | subject); |
ashleymills | 0:e979170e02e7 | 266 | |
ashleymills | 0:e979170e02e7 | 267 | while ( (altName = CyaSSL_X509_get_next_altname(peer)) ) |
ashleymills | 0:e979170e02e7 | 268 | printf(" altname = %s\n", altName); |
ashleymills | 0:e979170e02e7 | 269 | |
ashleymills | 0:e979170e02e7 | 270 | ret = CyaSSL_X509_get_serial_number(peer, serial, &sz); |
ashleymills | 0:e979170e02e7 | 271 | if (ret == 0) { |
ashleymills | 0:e979170e02e7 | 272 | int i; |
ashleymills | 0:e979170e02e7 | 273 | int strLen; |
ashleymills | 0:e979170e02e7 | 274 | char serialMsg[80]; |
ashleymills | 0:e979170e02e7 | 275 | |
ashleymills | 0:e979170e02e7 | 276 | /* testsuite has multiple threads writing to stdout, get output |
ashleymills | 0:e979170e02e7 | 277 | message ready to write once */ |
ashleymills | 0:e979170e02e7 | 278 | strLen = sprintf(serialMsg, " serial number"); |
ashleymills | 0:e979170e02e7 | 279 | for (i = 0; i < sz; i++) |
ashleymills | 0:e979170e02e7 | 280 | sprintf(serialMsg + strLen + (i*3), ":%02x ", serial[i]); |
ashleymills | 0:e979170e02e7 | 281 | printf("%s\n", serialMsg); |
ashleymills | 0:e979170e02e7 | 282 | } |
ashleymills | 0:e979170e02e7 | 283 | |
ashleymills | 0:e979170e02e7 | 284 | XFREE(subject, 0, DYNAMIC_TYPE_OPENSSL); |
ashleymills | 0:e979170e02e7 | 285 | XFREE(issuer, 0, DYNAMIC_TYPE_OPENSSL); |
ashleymills | 0:e979170e02e7 | 286 | } |
ashleymills | 0:e979170e02e7 | 287 | else |
ashleymills | 0:e979170e02e7 | 288 | printf("peer has no cert!\n"); |
ashleymills | 0:e979170e02e7 | 289 | printf("SSL version is %s\n", CyaSSL_get_version(ssl)); |
ashleymills | 0:e979170e02e7 | 290 | |
ashleymills | 0:e979170e02e7 | 291 | cipher = CyaSSL_get_current_cipher(ssl); |
ashleymills | 0:e979170e02e7 | 292 | printf("SSL cipher suite is %s\n", CyaSSL_CIPHER_get_name(cipher)); |
ashleymills | 0:e979170e02e7 | 293 | #endif |
ashleymills | 0:e979170e02e7 | 294 | |
ashleymills | 0:e979170e02e7 | 295 | #if defined(SESSION_CERTS) && defined(SHOW_CERTS) |
ashleymills | 0:e979170e02e7 | 296 | { |
ashleymills | 0:e979170e02e7 | 297 | CYASSL_X509_CHAIN* chain = CyaSSL_get_peer_chain(ssl); |
ashleymills | 0:e979170e02e7 | 298 | int count = CyaSSL_get_chain_count(chain); |
ashleymills | 0:e979170e02e7 | 299 | int i; |
ashleymills | 0:e979170e02e7 | 300 | |
ashleymills | 0:e979170e02e7 | 301 | for (i = 0; i < count; i++) { |
ashleymills | 0:e979170e02e7 | 302 | int length; |
ashleymills | 0:e979170e02e7 | 303 | unsigned char buffer[3072]; |
ashleymills | 0:e979170e02e7 | 304 | |
ashleymills | 0:e979170e02e7 | 305 | CyaSSL_get_chain_cert_pem(chain,i,buffer, sizeof(buffer), &length); |
ashleymills | 0:e979170e02e7 | 306 | buffer[length] = 0; |
ashleymills | 0:e979170e02e7 | 307 | printf("cert %d has length %d data = \n%s\n", i, length, buffer); |
ashleymills | 0:e979170e02e7 | 308 | } |
ashleymills | 0:e979170e02e7 | 309 | } |
ashleymills | 0:e979170e02e7 | 310 | #endif |
ashleymills | 0:e979170e02e7 | 311 | (void)ssl; |
ashleymills | 0:e979170e02e7 | 312 | } |
ashleymills | 0:e979170e02e7 | 313 | |
ashleymills | 0:e979170e02e7 | 314 | |
ashleymills | 0:e979170e02e7 | 315 | static INLINE void build_addr(SOCKADDR_IN_T* addr, |
ashleymills | 0:e979170e02e7 | 316 | const char* peer, word16 port) |
ashleymills | 0:e979170e02e7 | 317 | { |
ashleymills | 0:e979170e02e7 | 318 | #ifndef TEST_IPV6 |
ashleymills | 0:e979170e02e7 | 319 | const char* host = peer; |
ashleymills | 0:e979170e02e7 | 320 | |
ashleymills | 0:e979170e02e7 | 321 | /* peer could be in human readable form */ |
ashleymills | 0:e979170e02e7 | 322 | if (peer != INADDR_ANY && isalpha(peer[0])) { |
ashleymills | 0:e979170e02e7 | 323 | struct hostent* entry = gethostbyname(peer); |
ashleymills | 0:e979170e02e7 | 324 | |
ashleymills | 0:e979170e02e7 | 325 | if (entry) { |
ashleymills | 0:e979170e02e7 | 326 | struct sockaddr_in tmp; |
ashleymills | 0:e979170e02e7 | 327 | memset(&tmp, 0, sizeof(struct sockaddr_in)); |
ashleymills | 0:e979170e02e7 | 328 | memcpy(&tmp.sin_addr.s_addr, entry->h_addr_list[0], |
ashleymills | 0:e979170e02e7 | 329 | entry->h_length); |
ashleymills | 0:e979170e02e7 | 330 | host = inet_ntoa(tmp.sin_addr); |
ashleymills | 0:e979170e02e7 | 331 | } |
ashleymills | 0:e979170e02e7 | 332 | else |
ashleymills | 0:e979170e02e7 | 333 | err_sys("no entry for host"); |
ashleymills | 0:e979170e02e7 | 334 | } |
ashleymills | 0:e979170e02e7 | 335 | #endif |
ashleymills | 0:e979170e02e7 | 336 | |
ashleymills | 0:e979170e02e7 | 337 | memset(addr, 0, sizeof(SOCKADDR_IN_T)); |
ashleymills | 0:e979170e02e7 | 338 | |
ashleymills | 0:e979170e02e7 | 339 | #ifndef TEST_IPV6 |
ashleymills | 0:e979170e02e7 | 340 | addr->sin_family = AF_INET_V; |
ashleymills | 0:e979170e02e7 | 341 | addr->sin_port = htons(port); |
ashleymills | 0:e979170e02e7 | 342 | if (host == INADDR_ANY) |
ashleymills | 0:e979170e02e7 | 343 | addr->sin_addr.s_addr = INADDR_ANY; |
ashleymills | 0:e979170e02e7 | 344 | else |
ashleymills | 0:e979170e02e7 | 345 | addr->sin_addr.s_addr = inet_addr(host); |
ashleymills | 0:e979170e02e7 | 346 | #else |
ashleymills | 0:e979170e02e7 | 347 | (void)peer; |
ashleymills | 0:e979170e02e7 | 348 | addr->sin6_family = AF_INET_V; |
ashleymills | 0:e979170e02e7 | 349 | addr->sin6_port = htons(port); |
ashleymills | 0:e979170e02e7 | 350 | addr->sin6_addr = in6addr_loopback; |
ashleymills | 0:e979170e02e7 | 351 | #endif |
ashleymills | 0:e979170e02e7 | 352 | } |
ashleymills | 0:e979170e02e7 | 353 | |
ashleymills | 0:e979170e02e7 | 354 | |
ashleymills | 0:e979170e02e7 | 355 | static INLINE void tcp_socket(SOCKET_T* sockfd, int udp) |
ashleymills | 0:e979170e02e7 | 356 | { |
ashleymills | 0:e979170e02e7 | 357 | if (udp) |
ashleymills | 0:e979170e02e7 | 358 | *sockfd = socket(AF_INET_V, SOCK_DGRAM, 0); |
ashleymills | 0:e979170e02e7 | 359 | else |
ashleymills | 0:e979170e02e7 | 360 | *sockfd = socket(AF_INET_V, SOCK_STREAM, 0); |
ashleymills | 0:e979170e02e7 | 361 | |
ashleymills | 0:e979170e02e7 | 362 | #ifndef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 363 | #ifdef SO_NOSIGPIPE |
ashleymills | 0:e979170e02e7 | 364 | { |
ashleymills | 0:e979170e02e7 | 365 | int on = 1; |
ashleymills | 0:e979170e02e7 | 366 | socklen_t len = sizeof(on); |
ashleymills | 0:e979170e02e7 | 367 | int res = setsockopt(*sockfd, SOL_SOCKET, SO_NOSIGPIPE, &on, len); |
ashleymills | 0:e979170e02e7 | 368 | if (res < 0) |
ashleymills | 0:e979170e02e7 | 369 | err_sys("setsockopt SO_NOSIGPIPE failed\n"); |
ashleymills | 0:e979170e02e7 | 370 | } |
ashleymills | 0:e979170e02e7 | 371 | #else /* no S_NOSIGPIPE */ |
ashleymills | 0:e979170e02e7 | 372 | signal(SIGPIPE, SIG_IGN); |
ashleymills | 0:e979170e02e7 | 373 | #endif /* S_NOSIGPIPE */ |
ashleymills | 0:e979170e02e7 | 374 | |
ashleymills | 0:e979170e02e7 | 375 | #if defined(TCP_NODELAY) |
ashleymills | 0:e979170e02e7 | 376 | if (!udp) |
ashleymills | 0:e979170e02e7 | 377 | { |
ashleymills | 0:e979170e02e7 | 378 | int on = 1; |
ashleymills | 0:e979170e02e7 | 379 | socklen_t len = sizeof(on); |
ashleymills | 0:e979170e02e7 | 380 | int res = setsockopt(*sockfd, IPPROTO_TCP, TCP_NODELAY, &on, len); |
ashleymills | 0:e979170e02e7 | 381 | if (res < 0) |
ashleymills | 0:e979170e02e7 | 382 | err_sys("setsockopt TCP_NODELAY failed\n"); |
ashleymills | 0:e979170e02e7 | 383 | } |
ashleymills | 0:e979170e02e7 | 384 | #endif |
ashleymills | 0:e979170e02e7 | 385 | #endif /* USE_WINDOWS_API */ |
ashleymills | 0:e979170e02e7 | 386 | } |
ashleymills | 0:e979170e02e7 | 387 | |
ashleymills | 0:e979170e02e7 | 388 | |
ashleymills | 0:e979170e02e7 | 389 | static INLINE void tcp_connect(SOCKET_T* sockfd, const char* ip, word16 port, |
ashleymills | 0:e979170e02e7 | 390 | int udp) |
ashleymills | 0:e979170e02e7 | 391 | { |
ashleymills | 0:e979170e02e7 | 392 | SOCKADDR_IN_T addr; |
ashleymills | 0:e979170e02e7 | 393 | build_addr(&addr, ip, port); |
ashleymills | 0:e979170e02e7 | 394 | tcp_socket(sockfd, udp); |
ashleymills | 0:e979170e02e7 | 395 | |
ashleymills | 0:e979170e02e7 | 396 | if (!udp) { |
ashleymills | 0:e979170e02e7 | 397 | if (connect(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0) |
ashleymills | 0:e979170e02e7 | 398 | err_sys("tcp connect failed"); |
ashleymills | 0:e979170e02e7 | 399 | } |
ashleymills | 0:e979170e02e7 | 400 | } |
ashleymills | 0:e979170e02e7 | 401 | |
ashleymills | 0:e979170e02e7 | 402 | |
ashleymills | 0:e979170e02e7 | 403 | static INLINE void udp_connect(SOCKET_T* sockfd, void* addr, int addrSz) |
ashleymills | 0:e979170e02e7 | 404 | { |
ashleymills | 0:e979170e02e7 | 405 | if (connect(*sockfd, (const struct sockaddr*)addr, addrSz) != 0) |
ashleymills | 0:e979170e02e7 | 406 | err_sys("tcp connect failed"); |
ashleymills | 0:e979170e02e7 | 407 | } |
ashleymills | 0:e979170e02e7 | 408 | |
ashleymills | 0:e979170e02e7 | 409 | |
ashleymills | 0:e979170e02e7 | 410 | enum { |
ashleymills | 0:e979170e02e7 | 411 | TEST_SELECT_FAIL, |
ashleymills | 0:e979170e02e7 | 412 | TEST_TIMEOUT, |
ashleymills | 0:e979170e02e7 | 413 | TEST_RECV_READY, |
ashleymills | 0:e979170e02e7 | 414 | TEST_ERROR_READY |
ashleymills | 0:e979170e02e7 | 415 | }; |
ashleymills | 0:e979170e02e7 | 416 | |
ashleymills | 0:e979170e02e7 | 417 | static INLINE int tcp_select(SOCKET_T socketfd, unsigned int to_sec) |
ashleymills | 0:e979170e02e7 | 418 | { |
ashleymills | 0:e979170e02e7 | 419 | fd_set recvfds, errfds; |
ashleymills | 0:e979170e02e7 | 420 | SOCKET_T nfds = socketfd + 1; |
ashleymills | 0:e979170e02e7 | 421 | struct timeval timeout = {to_sec, 0}; |
ashleymills | 0:e979170e02e7 | 422 | int result; |
ashleymills | 0:e979170e02e7 | 423 | |
ashleymills | 0:e979170e02e7 | 424 | FD_ZERO(&recvfds); |
ashleymills | 0:e979170e02e7 | 425 | FD_SET(socketfd, &recvfds); |
ashleymills | 0:e979170e02e7 | 426 | FD_ZERO(&errfds); |
ashleymills | 0:e979170e02e7 | 427 | FD_SET(socketfd, &errfds); |
ashleymills | 0:e979170e02e7 | 428 | |
ashleymills | 0:e979170e02e7 | 429 | result = select(nfds, &recvfds, NULL, &errfds, &timeout); |
ashleymills | 0:e979170e02e7 | 430 | |
ashleymills | 0:e979170e02e7 | 431 | if (result == 0) |
ashleymills | 0:e979170e02e7 | 432 | return TEST_TIMEOUT; |
ashleymills | 0:e979170e02e7 | 433 | else if (result > 0) { |
ashleymills | 0:e979170e02e7 | 434 | if (FD_ISSET(socketfd, &recvfds)) |
ashleymills | 0:e979170e02e7 | 435 | return TEST_RECV_READY; |
ashleymills | 0:e979170e02e7 | 436 | else if(FD_ISSET(socketfd, &errfds)) |
ashleymills | 0:e979170e02e7 | 437 | return TEST_ERROR_READY; |
ashleymills | 0:e979170e02e7 | 438 | } |
ashleymills | 0:e979170e02e7 | 439 | |
ashleymills | 0:e979170e02e7 | 440 | return TEST_SELECT_FAIL; |
ashleymills | 0:e979170e02e7 | 441 | } |
ashleymills | 0:e979170e02e7 | 442 | |
ashleymills | 0:e979170e02e7 | 443 | |
ashleymills | 0:e979170e02e7 | 444 | static INLINE void tcp_listen(SOCKET_T* sockfd, int port, int useAnyAddr, |
ashleymills | 0:e979170e02e7 | 445 | int udp) |
ashleymills | 0:e979170e02e7 | 446 | { |
ashleymills | 0:e979170e02e7 | 447 | SOCKADDR_IN_T addr; |
ashleymills | 0:e979170e02e7 | 448 | |
ashleymills | 0:e979170e02e7 | 449 | /* don't use INADDR_ANY by default, firewall may block, make user switch |
ashleymills | 0:e979170e02e7 | 450 | on */ |
ashleymills | 0:e979170e02e7 | 451 | build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), port); |
ashleymills | 0:e979170e02e7 | 452 | tcp_socket(sockfd, udp); |
ashleymills | 0:e979170e02e7 | 453 | |
ashleymills | 0:e979170e02e7 | 454 | #ifndef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 455 | { |
ashleymills | 0:e979170e02e7 | 456 | int on = 1; |
ashleymills | 0:e979170e02e7 | 457 | socklen_t len = sizeof(on); |
ashleymills | 0:e979170e02e7 | 458 | setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &on, len); |
ashleymills | 0:e979170e02e7 | 459 | } |
ashleymills | 0:e979170e02e7 | 460 | #endif |
ashleymills | 0:e979170e02e7 | 461 | |
ashleymills | 0:e979170e02e7 | 462 | if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0) |
ashleymills | 0:e979170e02e7 | 463 | err_sys("tcp bind failed"); |
ashleymills | 0:e979170e02e7 | 464 | if (!udp) { |
ashleymills | 0:e979170e02e7 | 465 | if (listen(*sockfd, 5) != 0) |
ashleymills | 0:e979170e02e7 | 466 | err_sys("tcp listen failed"); |
ashleymills | 0:e979170e02e7 | 467 | } |
ashleymills | 0:e979170e02e7 | 468 | } |
ashleymills | 0:e979170e02e7 | 469 | |
ashleymills | 0:e979170e02e7 | 470 | |
ashleymills | 0:e979170e02e7 | 471 | static INLINE int udp_read_connect(SOCKET_T sockfd) |
ashleymills | 0:e979170e02e7 | 472 | { |
ashleymills | 0:e979170e02e7 | 473 | SOCKADDR_IN_T cliaddr; |
ashleymills | 0:e979170e02e7 | 474 | byte b[1500]; |
ashleymills | 0:e979170e02e7 | 475 | int n; |
ashleymills | 0:e979170e02e7 | 476 | socklen_t len = sizeof(cliaddr); |
ashleymills | 0:e979170e02e7 | 477 | |
ashleymills | 0:e979170e02e7 | 478 | n = (int)recvfrom(sockfd, (char*)b, sizeof(b), MSG_PEEK, |
ashleymills | 0:e979170e02e7 | 479 | (struct sockaddr*)&cliaddr, &len); |
ashleymills | 0:e979170e02e7 | 480 | if (n > 0) { |
ashleymills | 0:e979170e02e7 | 481 | if (connect(sockfd, (const struct sockaddr*)&cliaddr, |
ashleymills | 0:e979170e02e7 | 482 | sizeof(cliaddr)) != 0) |
ashleymills | 0:e979170e02e7 | 483 | err_sys("udp connect failed"); |
ashleymills | 0:e979170e02e7 | 484 | } |
ashleymills | 0:e979170e02e7 | 485 | else |
ashleymills | 0:e979170e02e7 | 486 | err_sys("recvfrom failed"); |
ashleymills | 0:e979170e02e7 | 487 | |
ashleymills | 0:e979170e02e7 | 488 | return sockfd; |
ashleymills | 0:e979170e02e7 | 489 | } |
ashleymills | 0:e979170e02e7 | 490 | |
ashleymills | 0:e979170e02e7 | 491 | static INLINE void udp_accept(SOCKET_T* sockfd, int* clientfd, int useAnyAddr, |
ashleymills | 0:e979170e02e7 | 492 | func_args* args) |
ashleymills | 0:e979170e02e7 | 493 | { |
ashleymills | 0:e979170e02e7 | 494 | SOCKADDR_IN_T addr; |
ashleymills | 0:e979170e02e7 | 495 | |
ashleymills | 0:e979170e02e7 | 496 | (void)args; |
ashleymills | 0:e979170e02e7 | 497 | build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), yasslPort); |
ashleymills | 0:e979170e02e7 | 498 | tcp_socket(sockfd, 1); |
ashleymills | 0:e979170e02e7 | 499 | |
ashleymills | 0:e979170e02e7 | 500 | |
ashleymills | 0:e979170e02e7 | 501 | #ifndef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 502 | { |
ashleymills | 0:e979170e02e7 | 503 | int on = 1; |
ashleymills | 0:e979170e02e7 | 504 | socklen_t len = sizeof(on); |
ashleymills | 0:e979170e02e7 | 505 | setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &on, len); |
ashleymills | 0:e979170e02e7 | 506 | } |
ashleymills | 0:e979170e02e7 | 507 | #endif |
ashleymills | 0:e979170e02e7 | 508 | |
ashleymills | 0:e979170e02e7 | 509 | if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0) |
ashleymills | 0:e979170e02e7 | 510 | err_sys("tcp bind failed"); |
ashleymills | 0:e979170e02e7 | 511 | |
ashleymills | 0:e979170e02e7 | 512 | #if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER) |
ashleymills | 0:e979170e02e7 | 513 | /* signal ready to accept data */ |
ashleymills | 0:e979170e02e7 | 514 | { |
ashleymills | 0:e979170e02e7 | 515 | tcp_ready* ready = args->signal; |
ashleymills | 0:e979170e02e7 | 516 | pthread_mutex_lock(&ready->mutex); |
ashleymills | 0:e979170e02e7 | 517 | ready->ready = 1; |
ashleymills | 0:e979170e02e7 | 518 | pthread_cond_signal(&ready->cond); |
ashleymills | 0:e979170e02e7 | 519 | pthread_mutex_unlock(&ready->mutex); |
ashleymills | 0:e979170e02e7 | 520 | } |
ashleymills | 0:e979170e02e7 | 521 | #endif |
ashleymills | 0:e979170e02e7 | 522 | |
ashleymills | 0:e979170e02e7 | 523 | *clientfd = udp_read_connect(*sockfd); |
ashleymills | 0:e979170e02e7 | 524 | } |
ashleymills | 0:e979170e02e7 | 525 | |
ashleymills | 0:e979170e02e7 | 526 | static INLINE void tcp_accept(SOCKET_T* sockfd, int* clientfd, func_args* args, |
ashleymills | 0:e979170e02e7 | 527 | int port, int useAnyAddr, int udp) |
ashleymills | 0:e979170e02e7 | 528 | { |
ashleymills | 0:e979170e02e7 | 529 | SOCKADDR_IN_T client; |
ashleymills | 0:e979170e02e7 | 530 | socklen_t client_len = sizeof(client); |
ashleymills | 0:e979170e02e7 | 531 | |
ashleymills | 0:e979170e02e7 | 532 | if (udp) { |
ashleymills | 0:e979170e02e7 | 533 | udp_accept(sockfd, clientfd, useAnyAddr, args); |
ashleymills | 0:e979170e02e7 | 534 | return; |
ashleymills | 0:e979170e02e7 | 535 | } |
ashleymills | 0:e979170e02e7 | 536 | |
ashleymills | 0:e979170e02e7 | 537 | tcp_listen(sockfd, port, useAnyAddr, udp); |
ashleymills | 0:e979170e02e7 | 538 | |
ashleymills | 0:e979170e02e7 | 539 | #if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER) |
ashleymills | 0:e979170e02e7 | 540 | /* signal ready to tcp_accept */ |
ashleymills | 0:e979170e02e7 | 541 | { |
ashleymills | 0:e979170e02e7 | 542 | tcp_ready* ready = args->signal; |
ashleymills | 0:e979170e02e7 | 543 | pthread_mutex_lock(&ready->mutex); |
ashleymills | 0:e979170e02e7 | 544 | ready->ready = 1; |
ashleymills | 0:e979170e02e7 | 545 | pthread_cond_signal(&ready->cond); |
ashleymills | 0:e979170e02e7 | 546 | pthread_mutex_unlock(&ready->mutex); |
ashleymills | 0:e979170e02e7 | 547 | } |
ashleymills | 0:e979170e02e7 | 548 | #endif |
ashleymills | 0:e979170e02e7 | 549 | |
ashleymills | 0:e979170e02e7 | 550 | *clientfd = accept(*sockfd, (struct sockaddr*)&client, |
ashleymills | 0:e979170e02e7 | 551 | (ACCEPT_THIRD_T)&client_len); |
ashleymills | 0:e979170e02e7 | 552 | if (*clientfd == -1) |
ashleymills | 0:e979170e02e7 | 553 | err_sys("tcp accept failed"); |
ashleymills | 0:e979170e02e7 | 554 | } |
ashleymills | 0:e979170e02e7 | 555 | |
ashleymills | 0:e979170e02e7 | 556 | |
ashleymills | 0:e979170e02e7 | 557 | static INLINE void tcp_set_nonblocking(SOCKET_T* sockfd) |
ashleymills | 0:e979170e02e7 | 558 | { |
ashleymills | 0:e979170e02e7 | 559 | #ifdef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 560 | unsigned long blocking = 1; |
ashleymills | 0:e979170e02e7 | 561 | int ret = ioctlsocket(*sockfd, FIONBIO, &blocking); |
ashleymills | 0:e979170e02e7 | 562 | #else |
ashleymills | 0:e979170e02e7 | 563 | int flags = fcntl(*sockfd, F_GETFL, 0); |
ashleymills | 0:e979170e02e7 | 564 | fcntl(*sockfd, F_SETFL, flags | O_NONBLOCK); |
ashleymills | 0:e979170e02e7 | 565 | #endif |
ashleymills | 0:e979170e02e7 | 566 | } |
ashleymills | 0:e979170e02e7 | 567 | |
ashleymills | 0:e979170e02e7 | 568 | |
ashleymills | 0:e979170e02e7 | 569 | #ifndef NO_PSK |
ashleymills | 0:e979170e02e7 | 570 | |
ashleymills | 0:e979170e02e7 | 571 | static INLINE unsigned int my_psk_client_cb(CYASSL* ssl, const char* hint, |
ashleymills | 0:e979170e02e7 | 572 | char* identity, unsigned int id_max_len, unsigned char* key, |
ashleymills | 0:e979170e02e7 | 573 | unsigned int key_max_len) |
ashleymills | 0:e979170e02e7 | 574 | { |
ashleymills | 0:e979170e02e7 | 575 | (void)ssl; |
ashleymills | 0:e979170e02e7 | 576 | (void)hint; |
ashleymills | 0:e979170e02e7 | 577 | (void)key_max_len; |
ashleymills | 0:e979170e02e7 | 578 | |
ashleymills | 0:e979170e02e7 | 579 | /* identity is OpenSSL testing default for openssl s_client, keep same */ |
ashleymills | 0:e979170e02e7 | 580 | strncpy(identity, "Client_identity", id_max_len); |
ashleymills | 0:e979170e02e7 | 581 | |
ashleymills | 0:e979170e02e7 | 582 | |
ashleymills | 0:e979170e02e7 | 583 | /* test key in hex is 0x1a2b3c4d , in decimal 439,041,101 , we're using |
ashleymills | 0:e979170e02e7 | 584 | unsigned binary */ |
ashleymills | 0:e979170e02e7 | 585 | key[0] = 26; |
ashleymills | 0:e979170e02e7 | 586 | key[1] = 43; |
ashleymills | 0:e979170e02e7 | 587 | key[2] = 60; |
ashleymills | 0:e979170e02e7 | 588 | key[3] = 77; |
ashleymills | 0:e979170e02e7 | 589 | |
ashleymills | 0:e979170e02e7 | 590 | return 4; /* length of key in octets or 0 for error */ |
ashleymills | 0:e979170e02e7 | 591 | } |
ashleymills | 0:e979170e02e7 | 592 | |
ashleymills | 0:e979170e02e7 | 593 | |
ashleymills | 0:e979170e02e7 | 594 | static INLINE unsigned int my_psk_server_cb(CYASSL* ssl, const char* identity, |
ashleymills | 0:e979170e02e7 | 595 | unsigned char* key, unsigned int key_max_len) |
ashleymills | 0:e979170e02e7 | 596 | { |
ashleymills | 0:e979170e02e7 | 597 | (void)ssl; |
ashleymills | 0:e979170e02e7 | 598 | (void)key_max_len; |
ashleymills | 0:e979170e02e7 | 599 | |
ashleymills | 0:e979170e02e7 | 600 | /* identity is OpenSSL testing default for openssl s_client, keep same */ |
ashleymills | 0:e979170e02e7 | 601 | if (strncmp(identity, "Client_identity", 15) != 0) |
ashleymills | 0:e979170e02e7 | 602 | return 0; |
ashleymills | 0:e979170e02e7 | 603 | |
ashleymills | 0:e979170e02e7 | 604 | /* test key in hex is 0x1a2b3c4d , in decimal 439,041,101 , we're using |
ashleymills | 0:e979170e02e7 | 605 | unsigned binary */ |
ashleymills | 0:e979170e02e7 | 606 | key[0] = 26; |
ashleymills | 0:e979170e02e7 | 607 | key[1] = 43; |
ashleymills | 0:e979170e02e7 | 608 | key[2] = 60; |
ashleymills | 0:e979170e02e7 | 609 | key[3] = 77; |
ashleymills | 0:e979170e02e7 | 610 | |
ashleymills | 0:e979170e02e7 | 611 | return 4; /* length of key in octets or 0 for error */ |
ashleymills | 0:e979170e02e7 | 612 | } |
ashleymills | 0:e979170e02e7 | 613 | |
ashleymills | 0:e979170e02e7 | 614 | #endif /* NO_PSK */ |
ashleymills | 0:e979170e02e7 | 615 | |
ashleymills | 0:e979170e02e7 | 616 | |
ashleymills | 0:e979170e02e7 | 617 | #ifdef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 618 | |
ashleymills | 0:e979170e02e7 | 619 | #define WIN32_LEAN_AND_MEAN |
ashleymills | 0:e979170e02e7 | 620 | #include <windows.h> |
ashleymills | 0:e979170e02e7 | 621 | |
ashleymills | 0:e979170e02e7 | 622 | static INLINE double current_time() |
ashleymills | 0:e979170e02e7 | 623 | { |
ashleymills | 0:e979170e02e7 | 624 | static int init = 0; |
ashleymills | 0:e979170e02e7 | 625 | static LARGE_INTEGER freq; |
ashleymills | 0:e979170e02e7 | 626 | |
ashleymills | 0:e979170e02e7 | 627 | LARGE_INTEGER count; |
ashleymills | 0:e979170e02e7 | 628 | |
ashleymills | 0:e979170e02e7 | 629 | if (!init) { |
ashleymills | 0:e979170e02e7 | 630 | QueryPerformanceFrequency(&freq); |
ashleymills | 0:e979170e02e7 | 631 | init = 1; |
ashleymills | 0:e979170e02e7 | 632 | } |
ashleymills | 0:e979170e02e7 | 633 | |
ashleymills | 0:e979170e02e7 | 634 | QueryPerformanceCounter(&count); |
ashleymills | 0:e979170e02e7 | 635 | |
ashleymills | 0:e979170e02e7 | 636 | return (double)count.QuadPart / freq.QuadPart; |
ashleymills | 0:e979170e02e7 | 637 | } |
ashleymills | 0:e979170e02e7 | 638 | |
ashleymills | 0:e979170e02e7 | 639 | #else |
ashleymills | 0:e979170e02e7 | 640 | |
ashleymills | 0:e979170e02e7 | 641 | #include <sys/time.h> |
ashleymills | 0:e979170e02e7 | 642 | |
ashleymills | 0:e979170e02e7 | 643 | static INLINE double current_time(void) |
ashleymills | 0:e979170e02e7 | 644 | { |
ashleymills | 0:e979170e02e7 | 645 | struct timeval tv; |
ashleymills | 0:e979170e02e7 | 646 | gettimeofday(&tv, 0); |
ashleymills | 0:e979170e02e7 | 647 | |
ashleymills | 0:e979170e02e7 | 648 | return (double)tv.tv_sec + (double)tv.tv_usec / 1000000; |
ashleymills | 0:e979170e02e7 | 649 | } |
ashleymills | 0:e979170e02e7 | 650 | |
ashleymills | 0:e979170e02e7 | 651 | #endif /* USE_WINDOWS_API */ |
ashleymills | 0:e979170e02e7 | 652 | |
ashleymills | 0:e979170e02e7 | 653 | |
ashleymills | 0:e979170e02e7 | 654 | #if defined(NO_FILESYSTEM) && !defined(NO_CERTS) |
ashleymills | 0:e979170e02e7 | 655 | |
ashleymills | 0:e979170e02e7 | 656 | enum { |
ashleymills | 0:e979170e02e7 | 657 | CYASSL_CA = 1, |
ashleymills | 0:e979170e02e7 | 658 | CYASSL_CERT = 2, |
ashleymills | 0:e979170e02e7 | 659 | CYASSL_KEY = 3 |
ashleymills | 0:e979170e02e7 | 660 | }; |
ashleymills | 0:e979170e02e7 | 661 | |
ashleymills | 0:e979170e02e7 | 662 | static INLINE void load_buffer(CYASSL_CTX* ctx, const char* fname, int type) |
ashleymills | 0:e979170e02e7 | 663 | { |
ashleymills | 0:e979170e02e7 | 664 | /* test buffer load */ |
ashleymills | 0:e979170e02e7 | 665 | long sz = 0; |
ashleymills | 0:e979170e02e7 | 666 | byte buff[10000]; |
ashleymills | 0:e979170e02e7 | 667 | FILE* file = fopen(fname, "rb"); |
ashleymills | 0:e979170e02e7 | 668 | |
ashleymills | 0:e979170e02e7 | 669 | if (!file) |
ashleymills | 0:e979170e02e7 | 670 | err_sys("can't open file for buffer load " |
ashleymills | 0:e979170e02e7 | 671 | "Please run from CyaSSL home directory if not"); |
ashleymills | 0:e979170e02e7 | 672 | fseek(file, 0, SEEK_END); |
ashleymills | 0:e979170e02e7 | 673 | sz = ftell(file); |
ashleymills | 0:e979170e02e7 | 674 | rewind(file); |
ashleymills | 0:e979170e02e7 | 675 | fread(buff, sizeof(buff), 1, file); |
ashleymills | 0:e979170e02e7 | 676 | |
ashleymills | 0:e979170e02e7 | 677 | if (type == CYASSL_CA) { |
ashleymills | 0:e979170e02e7 | 678 | if (CyaSSL_CTX_load_verify_buffer(ctx, buff, sz, SSL_FILETYPE_PEM) |
ashleymills | 0:e979170e02e7 | 679 | != SSL_SUCCESS) |
ashleymills | 0:e979170e02e7 | 680 | err_sys("can't load buffer ca file"); |
ashleymills | 0:e979170e02e7 | 681 | } |
ashleymills | 0:e979170e02e7 | 682 | else if (type == CYASSL_CERT) { |
ashleymills | 0:e979170e02e7 | 683 | if (CyaSSL_CTX_use_certificate_buffer(ctx, buff, sz, |
ashleymills | 0:e979170e02e7 | 684 | SSL_FILETYPE_PEM) != SSL_SUCCESS) |
ashleymills | 0:e979170e02e7 | 685 | err_sys("can't load buffer cert file"); |
ashleymills | 0:e979170e02e7 | 686 | } |
ashleymills | 0:e979170e02e7 | 687 | else if (type == CYASSL_KEY) { |
ashleymills | 0:e979170e02e7 | 688 | if (CyaSSL_CTX_use_PrivateKey_buffer(ctx, buff, sz, |
ashleymills | 0:e979170e02e7 | 689 | SSL_FILETYPE_PEM) != SSL_SUCCESS) |
ashleymills | 0:e979170e02e7 | 690 | err_sys("can't load buffer key file"); |
ashleymills | 0:e979170e02e7 | 691 | } |
ashleymills | 0:e979170e02e7 | 692 | } |
ashleymills | 0:e979170e02e7 | 693 | |
ashleymills | 0:e979170e02e7 | 694 | #endif /* NO_FILESYSTEM */ |
ashleymills | 0:e979170e02e7 | 695 | |
ashleymills | 0:e979170e02e7 | 696 | #ifdef VERIFY_CALLBACK |
ashleymills | 0:e979170e02e7 | 697 | |
ashleymills | 0:e979170e02e7 | 698 | static INLINE int myVerify(int preverify, CYASSL_X509_STORE_CTX* store) |
ashleymills | 0:e979170e02e7 | 699 | { |
ashleymills | 0:e979170e02e7 | 700 | char buffer[80]; |
ashleymills | 0:e979170e02e7 | 701 | |
ashleymills | 0:e979170e02e7 | 702 | #ifdef OPENSSL_EXTRA |
ashleymills | 0:e979170e02e7 | 703 | CYASSL_X509* peer; |
ashleymills | 0:e979170e02e7 | 704 | #endif |
ashleymills | 0:e979170e02e7 | 705 | |
ashleymills | 0:e979170e02e7 | 706 | printf("In verification callback, error = %d, %s\n", store->error, |
ashleymills | 0:e979170e02e7 | 707 | CyaSSL_ERR_error_string(store->error, buffer)); |
ashleymills | 0:e979170e02e7 | 708 | #ifdef OPENSSL_EXTRA |
ashleymills | 0:e979170e02e7 | 709 | peer = store->current_cert; |
ashleymills | 0:e979170e02e7 | 710 | if (peer) { |
ashleymills | 0:e979170e02e7 | 711 | char* issuer = CyaSSL_X509_NAME_oneline( |
ashleymills | 0:e979170e02e7 | 712 | CyaSSL_X509_get_issuer_name(peer), 0, 0); |
ashleymills | 0:e979170e02e7 | 713 | char* subject = CyaSSL_X509_NAME_oneline( |
ashleymills | 0:e979170e02e7 | 714 | CyaSSL_X509_get_subject_name(peer), 0, 0); |
ashleymills | 0:e979170e02e7 | 715 | printf("peer's cert info:\n issuer : %s\n subject: %s\n", issuer, |
ashleymills | 0:e979170e02e7 | 716 | subject); |
ashleymills | 0:e979170e02e7 | 717 | XFREE(subject, 0, DYNAMIC_TYPE_OPENSSL); |
ashleymills | 0:e979170e02e7 | 718 | XFREE(issuer, 0, DYNAMIC_TYPE_OPENSSL); |
ashleymills | 0:e979170e02e7 | 719 | } |
ashleymills | 0:e979170e02e7 | 720 | else |
ashleymills | 0:e979170e02e7 | 721 | printf("peer has no cert!\n"); |
ashleymills | 0:e979170e02e7 | 722 | #endif |
ashleymills | 0:e979170e02e7 | 723 | printf("Subject's domain name is %s\n", store->domain); |
ashleymills | 0:e979170e02e7 | 724 | |
ashleymills | 0:e979170e02e7 | 725 | printf("Allowing to continue anyway (shouldn't do this, EVER!!!)\n"); |
ashleymills | 0:e979170e02e7 | 726 | return 1; |
ashleymills | 0:e979170e02e7 | 727 | } |
ashleymills | 0:e979170e02e7 | 728 | |
ashleymills | 0:e979170e02e7 | 729 | #endif /* VERIFY_CALLBACK */ |
ashleymills | 0:e979170e02e7 | 730 | |
ashleymills | 0:e979170e02e7 | 731 | |
ashleymills | 0:e979170e02e7 | 732 | #ifdef HAVE_CRL |
ashleymills | 0:e979170e02e7 | 733 | |
ashleymills | 0:e979170e02e7 | 734 | static INLINE void CRL_CallBack(const char* url) |
ashleymills | 0:e979170e02e7 | 735 | { |
ashleymills | 0:e979170e02e7 | 736 | printf("CRL callback url = %s\n", url); |
ashleymills | 0:e979170e02e7 | 737 | } |
ashleymills | 0:e979170e02e7 | 738 | |
ashleymills | 0:e979170e02e7 | 739 | #endif |
ashleymills | 0:e979170e02e7 | 740 | |
ashleymills | 0:e979170e02e7 | 741 | |
ashleymills | 0:e979170e02e7 | 742 | #ifndef NO_CERTS |
ashleymills | 0:e979170e02e7 | 743 | |
ashleymills | 0:e979170e02e7 | 744 | static INLINE void CaCb(unsigned char* der, int sz, int type) |
ashleymills | 0:e979170e02e7 | 745 | { |
ashleymills | 0:e979170e02e7 | 746 | (void)der; |
ashleymills | 0:e979170e02e7 | 747 | printf("Got CA cache add callback, derSz = %d, type = %d\n", sz, type); |
ashleymills | 0:e979170e02e7 | 748 | } |
ashleymills | 0:e979170e02e7 | 749 | |
ashleymills | 0:e979170e02e7 | 750 | |
ashleymills | 0:e979170e02e7 | 751 | static INLINE void SetDH(CYASSL* ssl) |
ashleymills | 0:e979170e02e7 | 752 | { |
ashleymills | 0:e979170e02e7 | 753 | /* dh1024 p */ |
ashleymills | 0:e979170e02e7 | 754 | static unsigned char p[] = |
ashleymills | 0:e979170e02e7 | 755 | { |
ashleymills | 0:e979170e02e7 | 756 | 0xE6, 0x96, 0x9D, 0x3D, 0x49, 0x5B, 0xE3, 0x2C, 0x7C, 0xF1, 0x80, 0xC3, |
ashleymills | 0:e979170e02e7 | 757 | 0xBD, 0xD4, 0x79, 0x8E, 0x91, 0xB7, 0x81, 0x82, 0x51, 0xBB, 0x05, 0x5E, |
ashleymills | 0:e979170e02e7 | 758 | 0x2A, 0x20, 0x64, 0x90, 0x4A, 0x79, 0xA7, 0x70, 0xFA, 0x15, 0xA2, 0x59, |
ashleymills | 0:e979170e02e7 | 759 | 0xCB, 0xD5, 0x23, 0xA6, 0xA6, 0xEF, 0x09, 0xC4, 0x30, 0x48, 0xD5, 0xA2, |
ashleymills | 0:e979170e02e7 | 760 | 0x2F, 0x97, 0x1F, 0x3C, 0x20, 0x12, 0x9B, 0x48, 0x00, 0x0E, 0x6E, 0xDD, |
ashleymills | 0:e979170e02e7 | 761 | 0x06, 0x1C, 0xBC, 0x05, 0x3E, 0x37, 0x1D, 0x79, 0x4E, 0x53, 0x27, 0xDF, |
ashleymills | 0:e979170e02e7 | 762 | 0x61, 0x1E, 0xBB, 0xBE, 0x1B, 0xAC, 0x9B, 0x5C, 0x60, 0x44, 0xCF, 0x02, |
ashleymills | 0:e979170e02e7 | 763 | 0x3D, 0x76, 0xE0, 0x5E, 0xEA, 0x9B, 0xAD, 0x99, 0x1B, 0x13, 0xA6, 0x3C, |
ashleymills | 0:e979170e02e7 | 764 | 0x97, 0x4E, 0x9E, 0xF1, 0x83, 0x9E, 0xB5, 0xDB, 0x12, 0x51, 0x36, 0xF7, |
ashleymills | 0:e979170e02e7 | 765 | 0x26, 0x2E, 0x56, 0xA8, 0x87, 0x15, 0x38, 0xDF, 0xD8, 0x23, 0xC6, 0x50, |
ashleymills | 0:e979170e02e7 | 766 | 0x50, 0x85, 0xE2, 0x1F, 0x0D, 0xD5, 0xC8, 0x6B, |
ashleymills | 0:e979170e02e7 | 767 | }; |
ashleymills | 0:e979170e02e7 | 768 | |
ashleymills | 0:e979170e02e7 | 769 | /* dh1024 g */ |
ashleymills | 0:e979170e02e7 | 770 | static unsigned char g[] = |
ashleymills | 0:e979170e02e7 | 771 | { |
ashleymills | 0:e979170e02e7 | 772 | 0x02, |
ashleymills | 0:e979170e02e7 | 773 | }; |
ashleymills | 0:e979170e02e7 | 774 | |
ashleymills | 0:e979170e02e7 | 775 | CyaSSL_SetTmpDH(ssl, p, sizeof(p), g, sizeof(g)); |
ashleymills | 0:e979170e02e7 | 776 | } |
ashleymills | 0:e979170e02e7 | 777 | |
ashleymills | 0:e979170e02e7 | 778 | static INLINE void SetDHCtx(CYASSL_CTX* ctx) |
ashleymills | 0:e979170e02e7 | 779 | { |
ashleymills | 0:e979170e02e7 | 780 | /* dh1024 p */ |
ashleymills | 0:e979170e02e7 | 781 | static unsigned char p[] = |
ashleymills | 0:e979170e02e7 | 782 | { |
ashleymills | 0:e979170e02e7 | 783 | 0xE6, 0x96, 0x9D, 0x3D, 0x49, 0x5B, 0xE3, 0x2C, 0x7C, 0xF1, 0x80, 0xC3, |
ashleymills | 0:e979170e02e7 | 784 | 0xBD, 0xD4, 0x79, 0x8E, 0x91, 0xB7, 0x81, 0x82, 0x51, 0xBB, 0x05, 0x5E, |
ashleymills | 0:e979170e02e7 | 785 | 0x2A, 0x20, 0x64, 0x90, 0x4A, 0x79, 0xA7, 0x70, 0xFA, 0x15, 0xA2, 0x59, |
ashleymills | 0:e979170e02e7 | 786 | 0xCB, 0xD5, 0x23, 0xA6, 0xA6, 0xEF, 0x09, 0xC4, 0x30, 0x48, 0xD5, 0xA2, |
ashleymills | 0:e979170e02e7 | 787 | 0x2F, 0x97, 0x1F, 0x3C, 0x20, 0x12, 0x9B, 0x48, 0x00, 0x0E, 0x6E, 0xDD, |
ashleymills | 0:e979170e02e7 | 788 | 0x06, 0x1C, 0xBC, 0x05, 0x3E, 0x37, 0x1D, 0x79, 0x4E, 0x53, 0x27, 0xDF, |
ashleymills | 0:e979170e02e7 | 789 | 0x61, 0x1E, 0xBB, 0xBE, 0x1B, 0xAC, 0x9B, 0x5C, 0x60, 0x44, 0xCF, 0x02, |
ashleymills | 0:e979170e02e7 | 790 | 0x3D, 0x76, 0xE0, 0x5E, 0xEA, 0x9B, 0xAD, 0x99, 0x1B, 0x13, 0xA6, 0x3C, |
ashleymills | 0:e979170e02e7 | 791 | 0x97, 0x4E, 0x9E, 0xF1, 0x83, 0x9E, 0xB5, 0xDB, 0x12, 0x51, 0x36, 0xF7, |
ashleymills | 0:e979170e02e7 | 792 | 0x26, 0x2E, 0x56, 0xA8, 0x87, 0x15, 0x38, 0xDF, 0xD8, 0x23, 0xC6, 0x50, |
ashleymills | 0:e979170e02e7 | 793 | 0x50, 0x85, 0xE2, 0x1F, 0x0D, 0xD5, 0xC8, 0x6B, |
ashleymills | 0:e979170e02e7 | 794 | }; |
ashleymills | 0:e979170e02e7 | 795 | |
ashleymills | 0:e979170e02e7 | 796 | /* dh1024 g */ |
ashleymills | 0:e979170e02e7 | 797 | static unsigned char g[] = |
ashleymills | 0:e979170e02e7 | 798 | { |
ashleymills | 0:e979170e02e7 | 799 | 0x02, |
ashleymills | 0:e979170e02e7 | 800 | }; |
ashleymills | 0:e979170e02e7 | 801 | |
ashleymills | 0:e979170e02e7 | 802 | CyaSSL_CTX_SetTmpDH(ctx, p, sizeof(p), g, sizeof(g)); |
ashleymills | 0:e979170e02e7 | 803 | } |
ashleymills | 0:e979170e02e7 | 804 | |
ashleymills | 0:e979170e02e7 | 805 | #endif /* !NO_CERTS */ |
ashleymills | 0:e979170e02e7 | 806 | |
ashleymills | 0:e979170e02e7 | 807 | #ifdef HAVE_CAVIUM |
ashleymills | 0:e979170e02e7 | 808 | |
ashleymills | 0:e979170e02e7 | 809 | static INLINE int OpenNitroxDevice(int dma_mode,int dev_id) |
ashleymills | 0:e979170e02e7 | 810 | { |
ashleymills | 0:e979170e02e7 | 811 | Csp1CoreAssignment core_assign; |
ashleymills | 0:e979170e02e7 | 812 | Uint32 device; |
ashleymills | 0:e979170e02e7 | 813 | |
ashleymills | 0:e979170e02e7 | 814 | if (CspInitialize(CAVIUM_DIRECT,CAVIUM_DEV_ID)) |
ashleymills | 0:e979170e02e7 | 815 | return -1; |
ashleymills | 0:e979170e02e7 | 816 | if (Csp1GetDevType(&device)) |
ashleymills | 0:e979170e02e7 | 817 | return -1; |
ashleymills | 0:e979170e02e7 | 818 | if (device != NPX_DEVICE) { |
ashleymills | 0:e979170e02e7 | 819 | if (ioctl(gpkpdev_hdlr[CAVIUM_DEV_ID], IOCTL_CSP1_GET_CORE_ASSIGNMENT, |
ashleymills | 0:e979170e02e7 | 820 | (Uint32 *)&core_assign)!= 0) |
ashleymills | 0:e979170e02e7 | 821 | return -1; |
ashleymills | 0:e979170e02e7 | 822 | } |
ashleymills | 0:e979170e02e7 | 823 | CspShutdown(CAVIUM_DEV_ID); |
ashleymills | 0:e979170e02e7 | 824 | |
ashleymills | 0:e979170e02e7 | 825 | return CspInitialize(dma_mode, dev_id); |
ashleymills | 0:e979170e02e7 | 826 | } |
ashleymills | 0:e979170e02e7 | 827 | |
ashleymills | 0:e979170e02e7 | 828 | #endif /* HAVE_CAVIUM */ |
ashleymills | 0:e979170e02e7 | 829 | |
ashleymills | 0:e979170e02e7 | 830 | |
ashleymills | 0:e979170e02e7 | 831 | #ifdef USE_WINDOWS_API |
ashleymills | 0:e979170e02e7 | 832 | |
ashleymills | 0:e979170e02e7 | 833 | /* do back x number of directories */ |
ashleymills | 0:e979170e02e7 | 834 | static INLINE void ChangeDirBack(int x) |
ashleymills | 0:e979170e02e7 | 835 | { |
ashleymills | 0:e979170e02e7 | 836 | char path[MAX_PATH]; |
ashleymills | 0:e979170e02e7 | 837 | |
ashleymills | 0:e979170e02e7 | 838 | if (x == 1) |
ashleymills | 0:e979170e02e7 | 839 | strncpy(path, "..\\", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 840 | else if (x == 2) |
ashleymills | 0:e979170e02e7 | 841 | strncpy(path, "..\\..\\", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 842 | else if (x == 3) |
ashleymills | 0:e979170e02e7 | 843 | strncpy(path, "..\\..\\..\\", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 844 | else if (x == 4) |
ashleymills | 0:e979170e02e7 | 845 | strncpy(path, "..\\..\\..\\..\\", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 846 | else |
ashleymills | 0:e979170e02e7 | 847 | strncpy(path, ".\\", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 848 | |
ashleymills | 0:e979170e02e7 | 849 | SetCurrentDirectoryA(path); |
ashleymills | 0:e979170e02e7 | 850 | } |
ashleymills | 0:e979170e02e7 | 851 | |
ashleymills | 0:e979170e02e7 | 852 | /* does current dir contain str */ |
ashleymills | 0:e979170e02e7 | 853 | static INLINE int CurrentDir(const char* str) |
ashleymills | 0:e979170e02e7 | 854 | { |
ashleymills | 0:e979170e02e7 | 855 | char path[MAX_PATH]; |
ashleymills | 0:e979170e02e7 | 856 | char* baseName; |
ashleymills | 0:e979170e02e7 | 857 | |
ashleymills | 0:e979170e02e7 | 858 | GetCurrentDirectoryA(sizeof(path), path); |
ashleymills | 0:e979170e02e7 | 859 | |
ashleymills | 0:e979170e02e7 | 860 | baseName = strrchr(path, '\\'); |
ashleymills | 0:e979170e02e7 | 861 | if (baseName) |
ashleymills | 0:e979170e02e7 | 862 | baseName++; |
ashleymills | 0:e979170e02e7 | 863 | else |
ashleymills | 0:e979170e02e7 | 864 | baseName = path; |
ashleymills | 0:e979170e02e7 | 865 | |
ashleymills | 0:e979170e02e7 | 866 | if (strstr(baseName, str)) |
ashleymills | 0:e979170e02e7 | 867 | return 1; |
ashleymills | 0:e979170e02e7 | 868 | |
ashleymills | 0:e979170e02e7 | 869 | return 0; |
ashleymills | 0:e979170e02e7 | 870 | } |
ashleymills | 0:e979170e02e7 | 871 | |
ashleymills | 0:e979170e02e7 | 872 | #else |
ashleymills | 0:e979170e02e7 | 873 | |
ashleymills | 0:e979170e02e7 | 874 | #ifndef MAX_PATH |
ashleymills | 0:e979170e02e7 | 875 | #define MAX_PATH 256 |
ashleymills | 0:e979170e02e7 | 876 | #endif |
ashleymills | 0:e979170e02e7 | 877 | |
ashleymills | 0:e979170e02e7 | 878 | /* do back x number of directories */ |
ashleymills | 0:e979170e02e7 | 879 | static INLINE void ChangeDirBack(int x) |
ashleymills | 0:e979170e02e7 | 880 | { |
ashleymills | 0:e979170e02e7 | 881 | char path[MAX_PATH]; |
ashleymills | 0:e979170e02e7 | 882 | |
ashleymills | 0:e979170e02e7 | 883 | if (x == 1) |
ashleymills | 0:e979170e02e7 | 884 | strncpy(path, "../", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 885 | else if (x == 2) |
ashleymills | 0:e979170e02e7 | 886 | strncpy(path, "../../", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 887 | else if (x == 3) |
ashleymills | 0:e979170e02e7 | 888 | strncpy(path, "../../../", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 889 | else if (x == 4) |
ashleymills | 0:e979170e02e7 | 890 | strncpy(path, "../../../../", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 891 | else |
ashleymills | 0:e979170e02e7 | 892 | strncpy(path, "./", MAX_PATH); |
ashleymills | 0:e979170e02e7 | 893 | |
ashleymills | 0:e979170e02e7 | 894 | if (chdir(path) < 0) |
ashleymills | 0:e979170e02e7 | 895 | printf("chdir to %s failed\n", path); |
ashleymills | 0:e979170e02e7 | 896 | } |
ashleymills | 0:e979170e02e7 | 897 | |
ashleymills | 0:e979170e02e7 | 898 | /* does current dir contain str */ |
ashleymills | 0:e979170e02e7 | 899 | static INLINE int CurrentDir(const char* str) |
ashleymills | 0:e979170e02e7 | 900 | { |
ashleymills | 0:e979170e02e7 | 901 | char path[MAX_PATH]; |
ashleymills | 0:e979170e02e7 | 902 | char* baseName; |
ashleymills | 0:e979170e02e7 | 903 | |
ashleymills | 0:e979170e02e7 | 904 | if (getcwd(path, sizeof(path)) == NULL) { |
ashleymills | 0:e979170e02e7 | 905 | printf("no current dir?\n"); |
ashleymills | 0:e979170e02e7 | 906 | return 0; |
ashleymills | 0:e979170e02e7 | 907 | } |
ashleymills | 0:e979170e02e7 | 908 | |
ashleymills | 0:e979170e02e7 | 909 | baseName = strrchr(path, '/'); |
ashleymills | 0:e979170e02e7 | 910 | if (baseName) |
ashleymills | 0:e979170e02e7 | 911 | baseName++; |
ashleymills | 0:e979170e02e7 | 912 | else |
ashleymills | 0:e979170e02e7 | 913 | baseName = path; |
ashleymills | 0:e979170e02e7 | 914 | |
ashleymills | 0:e979170e02e7 | 915 | if (strstr(baseName, str)) |
ashleymills | 0:e979170e02e7 | 916 | return 1; |
ashleymills | 0:e979170e02e7 | 917 | |
ashleymills | 0:e979170e02e7 | 918 | return 0; |
ashleymills | 0:e979170e02e7 | 919 | } |
ashleymills | 0:e979170e02e7 | 920 | |
ashleymills | 0:e979170e02e7 | 921 | #endif /* USE_WINDOWS_API */ |
ashleymills | 0:e979170e02e7 | 922 | |
ashleymills | 0:e979170e02e7 | 923 | #endif /* CyaSSL_TEST_H */ |
ashleymills | 0:e979170e02e7 | 924 |