]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cryptkit/lib/feeDebug.h
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cryptkit / lib / feeDebug.h
diff --git a/Security/libsecurity_cryptkit/lib/feeDebug.h b/Security/libsecurity_cryptkit/lib/feeDebug.h
new file mode 100644 (file)
index 0000000..878e3c7
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+       File:           feeDebug.h
+
+       Contains:       Debug macros.
+
+
+       Copyright:      Copyright (c) 1998,2011,2014 Apple Inc.
+                All rights reserved.
+
+       Change History (most recent first):
+
+       <9>     10/06/98        ap              Changed to compile with C++.
+
+       To Do:
+*/
+
+/* Copyright (c) 1998,2011,2014 Apple Inc.  All Rights Reserved.
+ *
+ * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
+ * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
+ * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
+ * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
+ * INC.  ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
+ * EXPOSE YOU TO LIABILITY.
+ ***************************************************************************
+ */
+
+#ifndef        _CK_FEEDEBUG_H_
+#define _CK_FEEDEBUG_H_
+
+#include "giantIntegers.h"
+#include "elliptic.h"
+#include "curveParams.h"
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef NDEBUG
+#define FEE_DEBUG      0
+#else
+#define FEE_DEBUG      1
+#endif
+
+/*
+ * In utilities.c...
+ */
+extern void printGiant(const giant x);
+extern void printGiantHex(const giant x);
+extern void printGiantExp(const giant x);
+extern void printKey(const key k);
+extern void printCurveParams(const curveParams *p);
+
+#if    FEE_DEBUG
+
+#define dbgLog(x)      printf x
+
+
+#else  /* FEE_DEBUG */
+
+#define dbgLog(x)
+
+#endif /* FEE_DEBUG */
+
+/*
+ * Profiling.
+ */
+#define FEE_PROFILE    0               /* general purpose profile */
+#define ELL_PROFILE    0               /* ell_even/ell_odd only */
+
+#if    (FEE_PROFILE || ELL_PROFILE)
+#include <kern/time_stamp.h>
+#endif /* (FEE_PROFILE || ELL_PROFILE) */
+
+/*
+ * Place this macro after the last local and before any code in a routine
+ * to profile.
+ */
+#define CPROF_START                            \
+       struct tsval _profStartTime;            \
+       struct tsval _profEndTime;              \
+       kern_timestamp(&_profStartTime);
+
+/*
+ * This one goes at the end of the routine, just before the (only) return.
+ * There must be a static accumulator (an unsigned int) on a per-routine basis.
+ */
+#define CPROF_END(accum)                                               \
+       kern_timestamp(&_profEndTime);                                  \
+       accum += (_profEndTime.low_val - _profStartTime.low_val);
+
+/*
+ * Increment a profiling counter.
+ */
+#define CPROF_INCR(ctr)                ctr++
+
+#if    FEE_PROFILE
+
+#define PROF_START     CPROF_START
+#define PROF_END(a)    CPROF_END(a)
+#define PROF_INCR(ctr) CPROF_INCR(ctr)
+
+/*
+ * As of 14 Apr 1998, we no longer time mulg or gsquare calls with this
+ * mechanism; the time overhead is the same magnitude as the mulg. Instead
+ * we'll just count the mulgs and gsquares.
+ */
+#define PROF_TIME_MULGS                0
+
+
+/*
+ * Fundamental ops
+ */
+extern unsigned ellAddTime;
+extern unsigned whichCurveTime;
+extern unsigned ellipticTime;
+extern unsigned sigCompTime;
+
+/*
+ * low-level primitives
+ */
+extern unsigned numerDoubleTime;
+extern unsigned numerPlusTime;
+extern unsigned numerTimesTime;
+extern unsigned denomDoubleTime;
+extern unsigned denomTimesTime;
+extern unsigned powerModTime;
+extern unsigned modgTime;
+extern unsigned binvauxTime;
+
+/*
+ * Counters for calculating microseconds per {mulg, feemod, ...}
+ */
+extern unsigned numMulg;
+extern unsigned numFeemod;
+extern unsigned numGsquare;
+extern unsigned numBorrows;
+
+extern void clearProfile();
+
+#else  /* FEE_PROFILE */
+#define PROF_START
+#define PROF_END(a)
+#define PROF_INCR(ctr)
+#endif /* FEE_PROFILE */
+
+#if    ELL_PROFILE
+extern unsigned        ellOddTime;
+extern unsigned ellEvenTime;
+extern unsigned numEllOdds;
+extern unsigned numEllEvens;
+extern void clearEllProfile();
+
+#define EPROF_START    CPROF_START
+#define EPROF_END(a)   CPROF_END(a)
+#define EPROF_INCR(ctr)        CPROF_INCR(ctr)
+
+#else  /* ELL_PROFILE */
+#define EPROF_START
+#define EPROF_END(a)
+#define EPROF_INCR(ctr)
+#endif /* ELL_PROFILE */
+
+/*
+ * NULL gets defined externally if FEE_DEBUG is true..
+ */
+#if    !FEE_DEBUG
+#ifndef        NULL
+#define NULL ((void *)0)
+#endif /* NULL */
+#endif /* !FEE_DEBUG */
+
+#if    FEE_DEBUG
+
+#include "platform.h"
+
+#define CKASSERT(expression)                           \
+  ((expression) ? (void)0 :                            \
+   (printf ("Assertion failed: " #expression           \
+      ", file " __FILE__ ", line %d.\n", __LINE__),    \
+    CKRaise("Assertion Failure")))
+
+#else  /* FEE_DEBUG */
+
+#define CKASSERT(expression)
+
+#endif /* FEE_DEBUG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CK_FEEDEBUG_H_ */