]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_comcryption/lib/comDebug.h
Security-57336.1.9.tar.gz
[apple/security.git] / OSX / libsecurity_comcryption / lib / comDebug.h
1 /* Copyright (c) 1997,2011,2014 Apple Inc.
2 *
3 * comDebug.h
4 */
5
6 #ifndef _COM_DEBUG_H_
7 #define _COM_DEBUG_H_
8
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 /*
14 * enable general debugging printfs and error checking.
15 */
16 #define COM_DEBUG 0
17 #if COM_DEBUG
18 #include <stdio.h>
19
20 #define ddprintf(x) printf x
21 #else
22 #define ddprintf(x)
23 #endif
24
25 /*
26 * block parsing debug
27 */
28 #define COM_SCAN_DEBUG 0
29 #if COM_SCAN_DEBUG
30 #define scprintf(x) printf x
31 #else
32 #define scprintf(x)
33 #endif
34
35 /*
36 * 2nd-level comcrypt debug
37 */
38 #define LEVEL2_DEBUG 0
39 #if LEVEL2_DEBUG
40 #include <stdio.h>
41
42 #define l2printf(x) printf x
43 #else
44 #define l2printf(x)
45 #endif
46
47 /*
48 * lookahead queue debug
49 */
50 #define COM_LA_DEBUG 0
51 #define COM_LA_PRINTF 0
52 #if COM_LA_PRINTF
53 #define laprintf(x) printf x
54 #else
55 #define laprintf(x)
56 #endif
57
58 /*
59 * Statistics measurements. This is a private API.
60 */
61 #if COM_DEBUG
62 #define COM_STATS 0
63 #else
64 #define COM_STATS 0
65 #endif
66
67 #if COM_STATS
68
69 /*
70 * Info obtained via a call to getComStats()
71 */
72 typedef struct {
73 unsigned level1blocks;
74 unsigned plaintextBytes;
75 unsigned ciphertextBytes;
76 unsigned oneByteFrags; // 1st level only
77 unsigned twoByteFrags; // ditto
78 unsigned level2oneByteFrags; // second level only
79 unsigned level2twoByteFrags; // ditto
80 unsigned level2byteCode; // bytes, pre-encrypted
81 unsigned level2cipherText; // bytes, post-encrypt
82 unsigned level2blocks; // 2nd-level blocks
83 unsigned level2jmatch; // total jmatch (at first level) of
84 // 2nd level blocks
85 } comStats;
86
87 extern comStats _comStats;
88 #define incrComStat(stat, num) _comStats.stat += num;
89
90 #define incr1byteFrags(recursLevel) { \
91 if(recursLevel == 1) { \
92 incrComStat(level2oneByteFrags, 1); \
93 } \
94 else { \
95 incrComStat(oneByteFrags, 1); \
96 } \
97 }
98 #define incr2byteFrags(recursLevel) { \
99 if(recursLevel == 1) { \
100 incrComStat(level2twoByteFrags, 1); \
101 } \
102 else { \
103 incrComStat(twoByteFrags, 1); \
104 } \
105 }
106
107 extern void resetComStats();
108 extern void getComStats(comStats *stats);
109
110 #else
111 #define incrComStat(stat, num)
112 #define incr1byteFrags(recursLevel)
113 #define incr2byteFrags(recursLevel)
114 #endif
115
116 /*
117 * Profiling measurement. A private API when enabled.
118 */
119 #if COM_DEBUG
120 #define COM_PROFILE 0
121 #else
122 #define COM_PROFILE 0
123 #endif
124
125 #if COM_PROFILE
126
127 #include <kern/time_stamp.h>
128
129 /*
130 * Global profiling enable. It turns out the the cost of doing the
131 * kern_timestamp() call twice per codeword is way more expensive
132 * than the actual comcryption code. Setting this variable to zero
133 * avoids the cost of all the timestamps for reference without
134 * rebuilding. Also, the cmcPerWordOhead calibrates the actual
135 * cost of the two kern_timestamp() calls per word.
136 */
137 extern unsigned comProfEnable;
138
139 /*
140 * Profiling accumulators.
141 */
142 typedef unsigned comprof_t;
143
144 extern comprof_t cmcTotal;
145 extern comprof_t cmcQueSearch;
146 extern comprof_t cmcQueMatchMove;
147 extern comprof_t cmcQueMissMove;
148 extern comprof_t cmcPerWordOhead;
149 extern comprof_t cmcLevel2;
150
151
152 /*
153 * Place one of these in the local variable declaration list of each routine
154 * which will do profiling.
155 */
156 #define COMPROF_LOCALS \
157 struct tsval _profStartTime; \
158 struct tsval _profEndTime;
159
160 /*
161 * Start the clock.
162 */
163 #define COMPROF_START \
164 if(comProfEnable) { \
165 kern_timestamp(&_profStartTime); \
166 }
167
168 /*
169 * Stop the clock and gather elapsed time to specified accumulator.
170 */
171 #define COMPROF_END(accum) \
172 if(comProfEnable) { \
173 kern_timestamp(&_profEndTime); \
174 accum += (_profEndTime.low_val - _profStartTime.low_val); \
175 }
176
177
178 #else
179
180 #define COMPROF_LOCALS
181 #define COMPROF_START
182 #define COMPROF_END(accum)
183
184 #endif /* COM_PROFILE */
185
186 /*
187 * Get/set parameter API, private, for debug only.
188 */
189 #if COM_DEBUG
190 #define COM_PARAM_ENABLE 1
191 #else
192 #define COM_PARAM_ENABLE 0
193 #endif /*COM_DEBUG*/
194
195 #if COM_PARAM_ENABLE
196
197 extern unsigned getF1(comcryptObj cobj);
198 extern void setF1(comcryptObj cobj, unsigned f1);
199 extern unsigned getF2(comcryptObj cobj);
200 extern void setF2(comcryptObj cobj, unsigned f2);
201 extern unsigned getJmatchThresh(comcryptObj cobj);
202 extern void setJmatchThresh(comcryptObj cobj, unsigned jmatchThresh);
203 extern unsigned getMinByteCode(comcryptObj cobj);
204 extern void setMinByteCode(comcryptObj cobj, unsigned minByteCode);
205
206 #endif /*COM_PARAM_ENABLE*/
207
208 #ifdef __cplusplus
209 }
210 #endif
211
212 #endif /*_COM_DEBUG_H_*/