1/*
2	File:		feeDebug.h
3
4	Contains:	Debug macros.
5
6
7	Copyright:	Copyright (c) 1998,2011,2014 Apple Inc.
8                All rights reserved.
9
10	Change History (most recent first):
11
12	<9>	10/06/98	ap		Changed to compile with C++.
13
14	To Do:
15*/
16
17/* Copyright (c) 1998,2011,2014 Apple Inc.  All Rights Reserved.
18 *
19 * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
20 * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
21 * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
22 * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
23 * INC.  ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
24 * EXPOSE YOU TO LIABILITY.
25 ***************************************************************************
26 */
27
28#ifndef	_CK_FEEDEBUG_H_
29#define _CK_FEEDEBUG_H_
30
31#include "giantIntegers.h"
32#include "elliptic.h"
33#include "curveParams.h"
34#include <stdio.h>
35
36#ifdef	__cplusplus
37extern "C" {
38#endif
39
40#ifdef	NDEBUG
41#define FEE_DEBUG	0
42#else
43#define FEE_DEBUG	1
44#endif
45
46/*
47 * In utilities.c...
48 */
49extern void printGiant(const giant x);
50extern void printGiantHex(const giant x);
51extern void printGiantExp(const giant x);
52extern void printKey(const key k);
53extern void printCurveParams(const curveParams *p);
54
55#if	FEE_DEBUG
56
57#define dbgLog(x)	printf x
58
59
60#else	/* FEE_DEBUG */
61
62#define dbgLog(x)
63
64#endif	/* FEE_DEBUG */
65
66/*
67 * Profiling.
68 */
69#define FEE_PROFILE	0		/* general purpose profile */
70#define ELL_PROFILE	0		/* ell_even/ell_odd only */
71
72#if	(FEE_PROFILE || ELL_PROFILE)
73#include <kern/time_stamp.h>
74#endif	/* (FEE_PROFILE || ELL_PROFILE) */
75
76/*
77 * Place this macro after the last local and before any code in a routine
78 * to profile.
79 */
80#define CPROF_START 				\
81	struct tsval _profStartTime;		\
82	struct tsval _profEndTime;		\
83	kern_timestamp(&_profStartTime);
84
85/*
86 * This one goes at the end of the routine, just before the (only) return.
87 * There must be a static accumulator (an unsigned int) on a per-routine basis.
88 */
89#define CPROF_END(accum)						\
90	kern_timestamp(&_profEndTime);					\
91	accum += (_profEndTime.low_val - _profStartTime.low_val);
92
93/*
94 * Increment a profiling counter.
95 */
96#define CPROF_INCR(ctr)		ctr++
97
98#if	FEE_PROFILE
99
100#define PROF_START	CPROF_START
101#define PROF_END(a)	CPROF_END(a)
102#define PROF_INCR(ctr)	CPROF_INCR(ctr)
103
104/*
105 * As of 14 Apr 1998, we no longer time mulg or gsquare calls with this
106 * mechanism; the time overhead is the same magnitude as the mulg. Instead
107 * we'll just count the mulgs and gsquares.
108 */
109#define PROF_TIME_MULGS		0
110
111
112/*
113 * Fundamental ops
114 */
115extern unsigned ellAddTime;
116extern unsigned whichCurveTime;
117extern unsigned ellipticTime;
118extern unsigned sigCompTime;
119
120/*
121 * low-level primitives
122 */
123extern unsigned numerDoubleTime;
124extern unsigned numerPlusTime;
125extern unsigned numerTimesTime;
126extern unsigned denomDoubleTime;
127extern unsigned denomTimesTime;
128extern unsigned powerModTime;
129extern unsigned modgTime;
130extern unsigned binvauxTime;
131
132/*
133 * Counters for calculating microseconds per {mulg, feemod, ...}
134 */
135extern unsigned numMulg;
136extern unsigned numFeemod;
137extern unsigned numGsquare;
138extern unsigned numBorrows;
139
140extern void clearProfile();
141
142#else	/* FEE_PROFILE */
143#define PROF_START
144#define PROF_END(a)
145#define PROF_INCR(ctr)
146#endif	/* FEE_PROFILE */
147
148#if	ELL_PROFILE
149extern unsigned	ellOddTime;
150extern unsigned ellEvenTime;
151extern unsigned numEllOdds;
152extern unsigned numEllEvens;
153extern void clearEllProfile();
154
155#define EPROF_START	CPROF_START
156#define EPROF_END(a)	CPROF_END(a)
157#define EPROF_INCR(ctr)	CPROF_INCR(ctr)
158
159#else	/* ELL_PROFILE */
160#define EPROF_START
161#define EPROF_END(a)
162#define EPROF_INCR(ctr)
163#endif	/* ELL_PROFILE */
164
165/*
166 * NULL gets defined externally if FEE_DEBUG is true..
167 */
168#if	!FEE_DEBUG
169#ifndef	NULL
170#define NULL ((void *)0)
171#endif	/* NULL */
172#endif	/* !FEE_DEBUG */
173
174#if	FEE_DEBUG
175
176#include "platform.h"
177
178#define CKASSERT(expression) 				\
179  ((expression) ? (void)0 : 				\
180   (printf ("Assertion failed: " #expression 		\
181      ", file " __FILE__ ", line %d.\n", __LINE__), 	\
182    CKRaise("Assertion Failure")))
183
184#else	/* FEE_DEBUG */
185
186#define CKASSERT(expression)
187
188#endif	/* FEE_DEBUG */
189
190#ifdef	__cplusplus
191}
192#endif
193
194#endif	/* _CK_FEEDEBUG_H_ */
195