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