]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_cryptkit/lib/giantPort_PPC.h
Security-57740.1.18.tar.gz
[apple/security.git] / OSX / libsecurity_cryptkit / lib / giantPort_PPC.h
1 /* Copyright (c) 1998,2011,2014 Apple Inc. All Rights Reserved.
2 *
3 * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
4 * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
5 * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
6 * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
7 * INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
8 * EXPOSE YOU TO LIABILITY.
9 ***************************************************************************
10 *
11 * giantPort_PPC.h - PPC-dependent giant definitions.
12 *
13 * Revision History
14 * ----------------
15 * 10/06/98 ap
16 * Changed to compile with C++.
17 * 06 Apr 1998 at Apple
18 * Created.
19 */
20
21 #ifndef _CK_NSGIANT_PORT_PPC_H_
22 #define _CK_NSGIANT_PORT_PPC_H_
23
24 #include "feeDebug.h"
25 #include "platform.h"
26 #include "giantIntegers.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 /**** FIXME - implement asm giant digits! ****/
33 /*
34 * 0 ==> use function declarations from this file and implementation
35 * in giantPort_PPC.c
36 * 1 ==> use static inline C function in giantPort_Generic.h
37 */
38 /*@@@ HACK @@@
39 #if defined NeXT
40 #define PPC_GIANT_PORT_INLINE 1
41 #else
42 #define PPC_GIANT_PORT_INLINE 0
43 #endif
44 */
45 #define PPC_GIANT_PORT_INLINE 1
46
47 #if PPC_GIANT_PORT_INLINE
48
49 #include "giantPort_Generic.h"
50
51 #else // PPC_GIANT_PORT_INLINE
52
53 /*
54 * We'll be using the compiler's 64-bit long long for these routines.
55 *
56 * Mask for upper word.
57 */
58 #define GIANT_UPPER_DIGIT_MASK (~(unsigned long long(GIANT_DIGIT_MASK)))
59
60 /*
61 * Multiple-precision arithmetic routines/macros. C for now, eventually
62 * they'll be in assembly.
63 */
64
65 /*
66 * Add two digits, return sum. Carry bit returned as an out parameter.
67 * This should work any size giantDigits up to unsigned int.
68 */
69 extern giantDigit giantAddDigits(
70 giantDigit dig1,
71 giantDigit dig2,
72 giantDigit *carry); /* RETURNED, 0 or 1 */
73
74 /*
75 * Add a single digit value to a double digit accumulator in place.
76 * Carry out of the MSD of the accumulator is not handled.
77 */
78 void giantAddDouble(
79 giantDigit *accLow, /* IN/OUT */
80 giantDigit *accHigh, /* IN/OUT */
81 giantDigit val);
82
83
84 /*
85 * Subtract a - b, return difference. Borrow bit returned as an out parameter.
86 */
87 giantDigit giantSubDigits(
88 giantDigit a,
89 giantDigit b,
90 giantDigit *borrow); /* RETURNED, 0 or 1 */
91
92
93 /*
94 * Multiply two digits, return two digits.
95 */
96 void giantMulDigits(
97 giantDigit dig1,
98 giantDigit dig2,
99 giantDigit *lowProduct, /* RETURNED, low digit */
100 giantDigit *hiProduct); /* RETURNED, high digit */
101
102 /*
103 * Multiply a vector of giantDigits, candVector, by a single giantDigit,
104 * plierDigit, adding results into prodVector. Returns m.s. digit from
105 * final multiply; only candLength digits of *prodVector will be written.
106 */
107 giantDigit VectorMultiply(
108 giantDigit plierDigit,
109 giantDigit *candVector,
110 unsigned candLength,
111 giantDigit *prodVector);
112
113 #ifdef __cplusplus
114 }
115 #endif
116
117 #endif /* !PPC_GIANT_PORT_INLINE */
118
119 #endif /*_CK_NSGIANT_PORT_PPC_H_*/