wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Thu Apr 28 00:57:21 2016 +0000
Revision:
4:1b0d80432c79
wolfSSL 3.9.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 4:1b0d80432c79 1 /* logging.c
wolfSSL 4:1b0d80432c79 2 *
wolfSSL 4:1b0d80432c79 3 * Copyright (C) 2006-2016 wolfSSL Inc.
wolfSSL 4:1b0d80432c79 4 *
wolfSSL 4:1b0d80432c79 5 * This file is part of wolfSSL.
wolfSSL 4:1b0d80432c79 6 *
wolfSSL 4:1b0d80432c79 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 4:1b0d80432c79 8 * it under the terms of the GNU General Public License as published by
wolfSSL 4:1b0d80432c79 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 4:1b0d80432c79 10 * (at your option) any later version.
wolfSSL 4:1b0d80432c79 11 *
wolfSSL 4:1b0d80432c79 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 4:1b0d80432c79 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 4:1b0d80432c79 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 4:1b0d80432c79 15 * GNU General Public License for more details.
wolfSSL 4:1b0d80432c79 16 *
wolfSSL 4:1b0d80432c79 17 * You should have received a copy of the GNU General Public License
wolfSSL 4:1b0d80432c79 18 * along with this program; if not, write to the Free Software
wolfSSL 4:1b0d80432c79 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 4:1b0d80432c79 20 */
wolfSSL 4:1b0d80432c79 21
wolfSSL 4:1b0d80432c79 22
wolfSSL 4:1b0d80432c79 23 #ifdef HAVE_CONFIG_H
wolfSSL 4:1b0d80432c79 24 #include <config.h>
wolfSSL 4:1b0d80432c79 25 #endif
wolfSSL 4:1b0d80432c79 26
wolfSSL 4:1b0d80432c79 27 #include <wolfssl/wolfcrypt/settings.h>
wolfSSL 4:1b0d80432c79 28
wolfSSL 4:1b0d80432c79 29 /* submitted by eof */
wolfSSL 4:1b0d80432c79 30
wolfSSL 4:1b0d80432c79 31 #include <wolfssl/wolfcrypt/logging.h>
wolfSSL 4:1b0d80432c79 32 #include <wolfssl/wolfcrypt/error-crypt.h>
wolfSSL 4:1b0d80432c79 33
wolfSSL 4:1b0d80432c79 34
wolfSSL 4:1b0d80432c79 35 #ifdef __cplusplus
wolfSSL 4:1b0d80432c79 36 extern "C" {
wolfSSL 4:1b0d80432c79 37 #endif
wolfSSL 4:1b0d80432c79 38 WOLFSSL_API int wolfSSL_Debugging_ON(void);
wolfSSL 4:1b0d80432c79 39 WOLFSSL_API void wolfSSL_Debugging_OFF(void);
wolfSSL 4:1b0d80432c79 40 #ifdef __cplusplus
wolfSSL 4:1b0d80432c79 41 }
wolfSSL 4:1b0d80432c79 42 #endif
wolfSSL 4:1b0d80432c79 43
wolfSSL 4:1b0d80432c79 44
wolfSSL 4:1b0d80432c79 45 #ifdef DEBUG_WOLFSSL
wolfSSL 4:1b0d80432c79 46
wolfSSL 4:1b0d80432c79 47 /* Set these to default values initially. */
wolfSSL 4:1b0d80432c79 48 static wolfSSL_Logging_cb log_function = 0;
wolfSSL 4:1b0d80432c79 49 static int loggingEnabled = 0;
wolfSSL 4:1b0d80432c79 50
wolfSSL 4:1b0d80432c79 51 #endif /* DEBUG_WOLFSSL */
wolfSSL 4:1b0d80432c79 52
wolfSSL 4:1b0d80432c79 53
wolfSSL 4:1b0d80432c79 54 int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb f)
wolfSSL 4:1b0d80432c79 55 {
wolfSSL 4:1b0d80432c79 56 #ifdef DEBUG_WOLFSSL
wolfSSL 4:1b0d80432c79 57 int res = 0;
wolfSSL 4:1b0d80432c79 58
wolfSSL 4:1b0d80432c79 59 if (f)
wolfSSL 4:1b0d80432c79 60 log_function = f;
wolfSSL 4:1b0d80432c79 61 else
wolfSSL 4:1b0d80432c79 62 res = BAD_FUNC_ARG;
wolfSSL 4:1b0d80432c79 63
wolfSSL 4:1b0d80432c79 64 return res;
wolfSSL 4:1b0d80432c79 65 #else
wolfSSL 4:1b0d80432c79 66 (void)f;
wolfSSL 4:1b0d80432c79 67 return NOT_COMPILED_IN;
wolfSSL 4:1b0d80432c79 68 #endif
wolfSSL 4:1b0d80432c79 69 }
wolfSSL 4:1b0d80432c79 70
wolfSSL 4:1b0d80432c79 71
wolfSSL 4:1b0d80432c79 72 int wolfSSL_Debugging_ON(void)
wolfSSL 4:1b0d80432c79 73 {
wolfSSL 4:1b0d80432c79 74 #ifdef DEBUG_WOLFSSL
wolfSSL 4:1b0d80432c79 75 loggingEnabled = 1;
wolfSSL 4:1b0d80432c79 76 return 0;
wolfSSL 4:1b0d80432c79 77 #else
wolfSSL 4:1b0d80432c79 78 return NOT_COMPILED_IN;
wolfSSL 4:1b0d80432c79 79 #endif
wolfSSL 4:1b0d80432c79 80 }
wolfSSL 4:1b0d80432c79 81
wolfSSL 4:1b0d80432c79 82
wolfSSL 4:1b0d80432c79 83 void wolfSSL_Debugging_OFF(void)
wolfSSL 4:1b0d80432c79 84 {
wolfSSL 4:1b0d80432c79 85 #ifdef DEBUG_WOLFSSL
wolfSSL 4:1b0d80432c79 86 loggingEnabled = 0;
wolfSSL 4:1b0d80432c79 87 #endif
wolfSSL 4:1b0d80432c79 88 }
wolfSSL 4:1b0d80432c79 89
wolfSSL 4:1b0d80432c79 90
wolfSSL 4:1b0d80432c79 91 #ifdef DEBUG_WOLFSSL
wolfSSL 4:1b0d80432c79 92
wolfSSL 4:1b0d80432c79 93 #if defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
wolfSSL 4:1b0d80432c79 94 #if MQX_USE_IO_OLD
wolfSSL 4:1b0d80432c79 95 #include <fio.h>
wolfSSL 4:1b0d80432c79 96 #else
wolfSSL 4:1b0d80432c79 97 #include <nio.h>
wolfSSL 4:1b0d80432c79 98 #endif
wolfSSL 4:1b0d80432c79 99 #else
wolfSSL 4:1b0d80432c79 100 #include <stdio.h> /* for default printf stuff */
wolfSSL 4:1b0d80432c79 101 #endif
wolfSSL 4:1b0d80432c79 102
wolfSSL 4:1b0d80432c79 103 #ifdef THREADX
wolfSSL 4:1b0d80432c79 104 int dc_log_printf(char*, ...);
wolfSSL 4:1b0d80432c79 105 #endif
wolfSSL 4:1b0d80432c79 106
wolfSSL 4:1b0d80432c79 107 static void wolfssl_log(const int logLevel, const char *const logMessage)
wolfSSL 4:1b0d80432c79 108 {
wolfSSL 4:1b0d80432c79 109 if (log_function)
wolfSSL 4:1b0d80432c79 110 log_function(logLevel, logMessage);
wolfSSL 4:1b0d80432c79 111 else {
wolfSSL 4:1b0d80432c79 112 if (loggingEnabled) {
wolfSSL 4:1b0d80432c79 113 #ifdef THREADX
wolfSSL 4:1b0d80432c79 114 dc_log_printf("%s\n", logMessage);
wolfSSL 4:1b0d80432c79 115 #elif defined(MICRIUM)
wolfSSL 4:1b0d80432c79 116 #if (NET_SECURE_MGR_CFG_EN == DEF_ENABLED)
wolfSSL 4:1b0d80432c79 117 NetSecure_TraceOut((CPU_CHAR *)logMessage);
wolfSSL 4:1b0d80432c79 118 #endif
wolfSSL 4:1b0d80432c79 119 #elif defined(WOLFSSL_MDK_ARM)
wolfSSL 4:1b0d80432c79 120 fflush(stdout) ;
wolfSSL 4:1b0d80432c79 121 printf("%s\n", logMessage);
wolfSSL 4:1b0d80432c79 122 fflush(stdout) ;
wolfSSL 4:1b0d80432c79 123 #elif defined(WOLFSSL_LOG_PRINTF)
wolfSSL 4:1b0d80432c79 124 printf("%s\n", logMessage);
wolfSSL 4:1b0d80432c79 125 #else
wolfSSL 4:1b0d80432c79 126 fprintf(stderr, "%s\n", logMessage);
wolfSSL 4:1b0d80432c79 127 #endif
wolfSSL 4:1b0d80432c79 128 }
wolfSSL 4:1b0d80432c79 129 }
wolfSSL 4:1b0d80432c79 130 }
wolfSSL 4:1b0d80432c79 131
wolfSSL 4:1b0d80432c79 132
wolfSSL 4:1b0d80432c79 133 void WOLFSSL_MSG(const char* msg)
wolfSSL 4:1b0d80432c79 134 {
wolfSSL 4:1b0d80432c79 135 if (loggingEnabled)
wolfSSL 4:1b0d80432c79 136 wolfssl_log(INFO_LOG , msg);
wolfSSL 4:1b0d80432c79 137 }
wolfSSL 4:1b0d80432c79 138
wolfSSL 4:1b0d80432c79 139
wolfSSL 4:1b0d80432c79 140 void WOLFSSL_BUFFER(byte* buffer, word32 length)
wolfSSL 4:1b0d80432c79 141 {
wolfSSL 4:1b0d80432c79 142 #define LINE_LEN 16
wolfSSL 4:1b0d80432c79 143
wolfSSL 4:1b0d80432c79 144 if (loggingEnabled) {
wolfSSL 4:1b0d80432c79 145 word32 i;
wolfSSL 4:1b0d80432c79 146 char line[80];
wolfSSL 4:1b0d80432c79 147
wolfSSL 4:1b0d80432c79 148 if (!buffer) {
wolfSSL 4:1b0d80432c79 149 wolfssl_log(INFO_LOG, "\tNULL");
wolfSSL 4:1b0d80432c79 150
wolfSSL 4:1b0d80432c79 151 return;
wolfSSL 4:1b0d80432c79 152 }
wolfSSL 4:1b0d80432c79 153
wolfSSL 4:1b0d80432c79 154 sprintf(line, "\t");
wolfSSL 4:1b0d80432c79 155
wolfSSL 4:1b0d80432c79 156 for (i = 0; i < LINE_LEN; i++) {
wolfSSL 4:1b0d80432c79 157 if (i < length)
wolfSSL 4:1b0d80432c79 158 sprintf(line + 1 + i * 3,"%02x ", buffer[i]);
wolfSSL 4:1b0d80432c79 159 else
wolfSSL 4:1b0d80432c79 160 sprintf(line + 1 + i * 3, " ");
wolfSSL 4:1b0d80432c79 161 }
wolfSSL 4:1b0d80432c79 162
wolfSSL 4:1b0d80432c79 163 sprintf(line + 1 + LINE_LEN * 3, "| ");
wolfSSL 4:1b0d80432c79 164
wolfSSL 4:1b0d80432c79 165 for (i = 0; i < LINE_LEN; i++)
wolfSSL 4:1b0d80432c79 166 if (i < length)
wolfSSL 4:1b0d80432c79 167 sprintf(line + 3 + LINE_LEN * 3 + i,
wolfSSL 4:1b0d80432c79 168 "%c", 31 < buffer[i] && buffer[i] < 127 ? buffer[i] : '.');
wolfSSL 4:1b0d80432c79 169
wolfSSL 4:1b0d80432c79 170 wolfssl_log(INFO_LOG, line);
wolfSSL 4:1b0d80432c79 171
wolfSSL 4:1b0d80432c79 172 if (length > LINE_LEN)
wolfSSL 4:1b0d80432c79 173 WOLFSSL_BUFFER(buffer + LINE_LEN, length - LINE_LEN);
wolfSSL 4:1b0d80432c79 174 }
wolfSSL 4:1b0d80432c79 175 }
wolfSSL 4:1b0d80432c79 176
wolfSSL 4:1b0d80432c79 177
wolfSSL 4:1b0d80432c79 178 void WOLFSSL_ENTER(const char* msg)
wolfSSL 4:1b0d80432c79 179 {
wolfSSL 4:1b0d80432c79 180 if (loggingEnabled) {
wolfSSL 4:1b0d80432c79 181 char buffer[80];
wolfSSL 4:1b0d80432c79 182 sprintf(buffer, "wolfSSL Entering %s", msg);
wolfSSL 4:1b0d80432c79 183 wolfssl_log(ENTER_LOG , buffer);
wolfSSL 4:1b0d80432c79 184 }
wolfSSL 4:1b0d80432c79 185 }
wolfSSL 4:1b0d80432c79 186
wolfSSL 4:1b0d80432c79 187
wolfSSL 4:1b0d80432c79 188 void WOLFSSL_LEAVE(const char* msg, int ret)
wolfSSL 4:1b0d80432c79 189 {
wolfSSL 4:1b0d80432c79 190 if (loggingEnabled) {
wolfSSL 4:1b0d80432c79 191 char buffer[80];
wolfSSL 4:1b0d80432c79 192 sprintf(buffer, "wolfSSL Leaving %s, return %d", msg, ret);
wolfSSL 4:1b0d80432c79 193 wolfssl_log(LEAVE_LOG , buffer);
wolfSSL 4:1b0d80432c79 194 }
wolfSSL 4:1b0d80432c79 195 }
wolfSSL 4:1b0d80432c79 196
wolfSSL 4:1b0d80432c79 197
wolfSSL 4:1b0d80432c79 198 void WOLFSSL_ERROR(int error)
wolfSSL 4:1b0d80432c79 199 {
wolfSSL 4:1b0d80432c79 200 if (loggingEnabled) {
wolfSSL 4:1b0d80432c79 201 char buffer[80];
wolfSSL 4:1b0d80432c79 202 sprintf(buffer, "wolfSSL error occurred, error = %d", error);
wolfSSL 4:1b0d80432c79 203 wolfssl_log(ERROR_LOG , buffer);
wolfSSL 4:1b0d80432c79 204 }
wolfSSL 4:1b0d80432c79 205 }
wolfSSL 4:1b0d80432c79 206
wolfSSL 4:1b0d80432c79 207 #endif /* DEBUG_WOLFSSL */
wolfSSL 4:1b0d80432c79 208