1 /* 2 * COPYRIGHT (c) International Business Machines Corp. 2015-2017 3 * 4 * This program is provided under the terms of the Common Public License, 5 * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this 6 * software constitutes recipient's acceptance of CPL-1.0 terms which can be 7 * found in the file LICENSE file or at 8 * https://opensource.org/licenses/cpl1.0.php 9 */ 10 11 #ifndef _TRACE_H 12 #define _TRACE_H 13 14 #include "defs.h" 15 #include "host_defs.h" 16 17 /* pkcs11 error messages */ 18 19 enum errmsg { 20 ERR_HOST_MEMORY = 0, 21 ERR_SLOT_ID_INVALID, 22 ERR_GENERAL_ERROR, 23 ERR_FUNCTION_FAILED, 24 ERR_ARGUMENTS_BAD, 25 ERR_NO_EVENT, 26 ERR_ATTRIBUTE_READ_ONLY, 27 ERR_ATTRIBUTE_SENSITIVE, 28 ERR_ATTRIBUTE_TYPE_INVALID, 29 ERR_ATTRIBUTE_VALUE_INVALID, 30 ERR_DATA_INVALID, 31 ERR_DATA_LEN_RANGE, 32 ERR_DEVICE_ERROR, 33 ERR_DEVICE_MEMORY, 34 ERR_DEVICE_REMOVED, 35 ERR_ENCRYPTED_DATA_INVALID, 36 ERR_ENCRYPTED_DATA_LEN_RANGE, 37 ERR_FUNCTION_CANCELED, 38 ERR_FUNCTION_NOT_PARALLEL, 39 ERR_FUNCTION_NOT_SUPPORTED, 40 ERR_KEY_CHANGED, 41 ERR_KEY_FUNCTION_NOT_PERMITTED, 42 ERR_KEY_HANDLE_INVALID, 43 ERR_KEY_INDIGESTIBLE, 44 ERR_KEY_NEEDED, 45 ERR_KEY_NOT_NEEDED, 46 ERR_KEY_NOT_WRAPPABLE, 47 ERR_KEY_SIZE_RANGE, 48 ERR_KEY_TYPE_INCONSISTENT, 49 ERR_KEY_UNEXTRACTABLE, 50 ERR_MECHANISM_INVALID, 51 ERR_MECHANISM_PARAM_INVALID, 52 ERR_OBJECT_HANDLE_INVALID, 53 ERR_OPERATION_ACTIVE, 54 ERR_OPERATION_NOT_INITIALIZED, 55 ERR_PIN_INCORRECT, 56 ERR_PIN_INVALID, 57 ERR_PIN_LEN_RANGE, 58 ERR_PIN_EXPIRED, 59 ERR_PIN_LOCKED, 60 ERR_SESSION_CLOSED, 61 ERR_SESSION_COUNT, 62 ERR_SESSION_HANDLE_INVALID, 63 ERR_SESSION_PARALLEL_NOT_SUPPORTED, 64 ERR_SESSION_READ_ONLY, 65 ERR_SESSION_EXISTS, 66 ERR_SESSION_READ_ONLY_EXISTS, 67 ERR_SESSION_READ_WRITE_SO_EXISTS, 68 ERR_SIGNATURE_INVALID, 69 ERR_SIGNATURE_LEN_RANGE, 70 ERR_TEMPLATE_INCOMPLETE, 71 ERR_TEMPLATE_INCONSISTENT, 72 ERR_TOKEN_NOT_PRESENT, 73 ERR_TOKEN_NOT_RECOGNIZED, 74 ERR_TOKEN_WRITE_PROTECTED, 75 ERR_UNWRAPPING_KEY_HANDLE_INVALID, 76 ERR_UNWRAPPING_KEY_SIZE_RANGE, 77 ERR_UNWRAPPING_KEY_TYPE_INCONSISTENT, 78 ERR_USER_ALREADY_LOGGED_IN, 79 ERR_USER_NOT_LOGGED_IN, 80 ERR_USER_PIN_NOT_INITIALIZED, 81 ERR_USER_TYPE_INVALID, 82 ERR_USER_ANOTHER_ALREADY_LOGGED_IN, 83 ERR_USER_TOO_MANY_TYPES, 84 ERR_WRAPPED_KEY_INVALID, 85 ERR_WRAPPED_KEY_LEN_RANGE, 86 ERR_WRAPPING_KEY_HANDLE_INVALID, 87 ERR_WRAPPING_KEY_SIZE_RANGE, 88 ERR_WRAPPING_KEY_TYPE_INCONSISTENT, 89 ERR_RANDOM_SEED_NOT_SUPPORTED, 90 ERR_DOMAIN_PARAMS_INVALID, 91 ERR_BUFFER_TOO_SMALL, 92 ERR_SAVED_STATE_INVALID, 93 ERR_INFORMATION_SENSITIVE, 94 ERR_STATE_UNSAVEABLE, 95 ERR_CRYPTOKI_NOT_INITIALIZED, 96 ERR_CRYPTOKI_ALREADY_INITIALIZED, 97 ERR_MUTEX_BAD, 98 ERR_MUTEX_NOT_LOCKED, 99 ERR_MAX, 100 }; 101 102 /* Log levels */ 103 typedef enum { 104 TRACE_LEVEL_NONE = 0, 105 TRACE_LEVEL_ERROR, 106 TRACE_LEVEL_WARNING, 107 TRACE_LEVEL_INFO, 108 TRACE_LEVEL_DEVEL, 109 TRACE_LEVEL_DEBUG 110 } trace_level_t; 111 112 113 /* Encapsulate all trace variables */ 114 struct trace_handle_t { 115 int fd; /* file descriptor for filename */ 116 trace_level_t level; /* trace level */ 117 }; 118 119 extern struct trace_handle_t trace; 120 121 void set_trace(struct trace_handle_t t); 122 CK_RV trace_initialize(); 123 void trace_finalize(); 124 void ock_traceit(trace_level_t level, const char *file, int line, 125 const char *stdll_name, const char *fmt, ...) 126 __attribute__ ((format(printf, 5, 6))); 127 const char *ock_err(int num); 128 129 130 #define TRACE_ERROR(...) \ 131 ock_traceit(TRACE_LEVEL_ERROR, __FILE__, __LINE__, STDLL_NAME, __VA_ARGS__) 132 133 #define TRACE_WARNING(...) \ 134 ock_traceit(TRACE_LEVEL_WARNING, __FILE__, __LINE__, STDLL_NAME, \ 135 __VA_ARGS__) 136 137 #define TRACE_INFO(...) \ 138 ock_traceit(TRACE_LEVEL_INFO, __FILE__, __LINE__, STDLL_NAME, __VA_ARGS__) 139 140 #define TRACE_DEVEL(...) \ 141 ock_traceit(TRACE_LEVEL_DEVEL, __FILE__, __LINE__, STDLL_NAME, __VA_ARGS__) 142 143 #ifdef DEBUG 144 #define TRACE_DEBUG(...) \ 145 ock_traceit(TRACE_LEVEL_DEBUG, __FILE__, __LINE__, STDLL_NAME, __VA_ARGS__) 146 147 void dump_shm(LW_SHM_TYPE *, const char *); 148 #define DUMP_SHM(x,y) dump_shm(x,y) 149 #else 150 #define TRACE_DEBUG(...) 151 #define DUMP_SHM(x,y) 152 #endif 153 154 #endif 155