]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_cryptkit/lib/feeFEED.h
Security-57337.20.44.tar.gz
[apple/security.git] / OSX / libsecurity_cryptkit / lib / feeFEED.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 * FeeFEED.h - generic, portable FEED encryption object
12 *
13 * Revision History
14 * ----------------
15 * 28 Aug 96 at NeXT
16 * Created.
17 */
18
19 #ifndef _CK_FEEFEED_H_
20 #define _CK_FEEFEED_H_
21
22 #if !defined(__MACH__)
23 #include <ckconfig.h>
24 #include <feeTypes.h>
25 #include <feePublicKey.h>
26 #else
27 #include <security_cryptkit/ckconfig.h>
28 #include <security_cryptkit/feeTypes.h>
29 #include <security_cryptkit/feePublicKey.h>
30 #endif
31
32 #if CRYPTKIT_ASYMMETRIC_ENABLE
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 /*
39 * Opaque object handle.
40 */
41 typedef void *feeFEED;
42
43 /*
44 * forEncrypt argument values.
45 */
46 #define FF_DECRYPT 0
47 #define FF_ENCRYPT 1
48
49 /*
50 * Alloc and init a feeFEED object associated with specified feePubKey
51 * objects.
52 */
53 feeFEED feeFEEDNewWithPubKey(feePubKey myPrivKey,
54 feePubKey theirPubKey,
55 int forEncrypt, // FF_DECRYPT, FF_ENCRYPT
56 feeRandFcn randFcn, // optional
57 void *randRef);
58
59 void feeFEEDFree(feeFEED feed);
60
61 /*
62 * Plaintext block size.
63 */
64 unsigned feeFEEDPlainBlockSize(feeFEED feed);
65
66 /*
67 * Ciphertext block size used for decryption.
68 */
69 unsigned feeFEEDCipherBlockSize(feeFEED feed);
70
71 /*
72 * Calculate size of buffer currently needed to encrypt one block of
73 * plaintext.
74 */
75 unsigned feeFEEDCipherBufSize(feeFEED feed,
76 int finalBlock);
77
78 /*
79 * Return the size of ciphertext currently needed to encrypt specified
80 * size of plaintext. Also can be used to calculate size of ciphertext
81 * which can be decrypted into specified size of plaintext.
82 */
83 unsigned feeFEEDCipherTextSize(feeFEED feed,
84 unsigned plainTextSize,
85 int finalBlock);
86
87 /*
88 * Return the size of plaintext currently needed to decrypt specified size
89 * of ciphertext. Also can be used to calculate size of plaintext
90 * which can be encrypted into specified size of ciphertext.
91 */
92 unsigned feeFEEDPlainTextSize(feeFEED feed,
93 unsigned cipherTextSize,
94 int finalBlock); // ignored if decrypting
95
96 /*
97 * Encrypt a block or less of data. Caller malloc's cipherText.
98 */
99 feeReturn feeFEEDEncryptBlock(feeFEED feed,
100 const unsigned char *plainText,
101 unsigned plainTextLen,
102 unsigned char *cipherText,
103 unsigned *cipherTextLen, // RETURNED
104 int finalBlock);
105
106 /*
107 * Decrypt (exactly) a block of data. Caller malloc's plainText. Always
108 * generates feeFEEDBlockSize bytes of plainText, unless 'finalBlock' is
109 * non-zero (in which case feeFEEDBlockSize or less bytes of plainText are
110 * generated).
111 */
112 feeReturn feeFEEDDecryptBlock(feeFEED feed,
113 const unsigned char *cipherText,
114 unsigned cipherTextLen,
115 unsigned char *plainText,
116 unsigned *plainTextLen, // RETURNED
117 int finalBlock);
118
119 /*
120 * Convenience routines to encrypt & decrypt multi-block data.
121 */
122 feeReturn feeFEEDEncrypt(feeFEED feed,
123 const unsigned char *plainText,
124 unsigned plainTextLen,
125 unsigned char **cipherText, // malloc'd and RETURNED
126 unsigned *cipherTextLen); // RETURNED
127
128 feeReturn feeFEEDDecrypt(feeFEED feed,
129 const unsigned char *cipherText,
130 unsigned cipherTextLen,
131 unsigned char **plainText, // malloc'd and RETURNED
132 unsigned *plainTextLen); // RETURNED
133
134 #ifdef __cplusplus
135 }
136 #endif
137
138 #endif /* CRYPTKIT_ASYMMETRIC_ENABLE */
139
140 #endif /*_CK_FEEFEED_H_*/