]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cryptkit/lib/feeFEED.h
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cryptkit / lib / feeFEED.h
diff --git a/Security/libsecurity_cryptkit/lib/feeFEED.h b/Security/libsecurity_cryptkit/lib/feeFEED.h
new file mode 100644 (file)
index 0000000..ce84de8
--- /dev/null
@@ -0,0 +1,140 @@
+/* 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.
+ ***************************************************************************
+ *
+ * FeeFEED.h - generic, portable FEED encryption object
+ *
+ * Revision History
+ * ----------------
+ * 28 Aug 96 at NeXT
+ *     Created.
+ */
+
+#ifndef        _CK_FEEFEED_H_
+#define _CK_FEEFEED_H_
+
+#if    !defined(__MACH__)
+#include <ckconfig.h>
+#include <feeTypes.h>
+#include <feePublicKey.h>
+#else
+#include <security_cryptkit/ckconfig.h>
+#include <security_cryptkit/feeTypes.h>
+#include <security_cryptkit/feePublicKey.h>
+#endif
+
+#if    CRYPTKIT_ASYMMETRIC_ENABLE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Opaque object handle.
+ */
+typedef void *feeFEED;
+
+/*
+ * forEncrypt argument values.
+ */
+#define FF_DECRYPT     0
+#define FF_ENCRYPT     1
+
+/*
+ * Alloc and init a feeFEED object associated with specified feePubKey
+ * objects.
+ */
+feeFEED feeFEEDNewWithPubKey(feePubKey myPrivKey,
+       feePubKey theirPubKey,
+       int forEncrypt,                 // FF_DECRYPT, FF_ENCRYPT
+       feeRandFcn randFcn,             // optional 
+       void *randRef);
+
+void feeFEEDFree(feeFEED feed);
+
+/*
+ * Plaintext block size.
+ */
+unsigned feeFEEDPlainBlockSize(feeFEED feed);
+
+/*
+ * Ciphertext block size used for decryption.
+ */
+unsigned feeFEEDCipherBlockSize(feeFEED feed);
+
+/*
+ * Calculate size of buffer currently needed to encrypt one block of
+ * plaintext.
+ */
+unsigned feeFEEDCipherBufSize(feeFEED feed,
+        int finalBlock);
+
+/*
+ * Return the size of ciphertext currently needed to encrypt specified 
+ * size of plaintext. Also can be used to calculate size of ciphertext 
+ * which can be decrypted into specified size of plaintext. 
+ */
+unsigned feeFEEDCipherTextSize(feeFEED feed, 
+       unsigned plainTextSize,
+       int finalBlock);
+
+/*
+ * Return the size of plaintext currently needed to decrypt specified size 
+ * of ciphertext. Also can be used to calculate size of plaintext 
+ * which can be encrypted into specified size of ciphertext.
+ */
+unsigned feeFEEDPlainTextSize(feeFEED feed, 
+       unsigned        cipherTextSize,
+       int             finalBlock);                    // ignored if decrypting
+
+/*
+ * Encrypt a block or less of data. Caller malloc's cipherText.
+ */
+feeReturn feeFEEDEncryptBlock(feeFEED feed,
+       const unsigned char *plainText,
+       unsigned plainTextLen,
+       unsigned char *cipherText,
+       unsigned *cipherTextLen,                // RETURNED
+       int finalBlock);
+
+/*
+ * Decrypt (exactly) a block of data. Caller malloc's plainText. Always
+ * generates feeFEEDBlockSize bytes of plainText, unless 'finalBlock' is
+ * non-zero (in which case feeFEEDBlockSize or less bytes of plainText are
+ * generated).
+ */
+feeReturn feeFEEDDecryptBlock(feeFEED feed,
+       const unsigned char *cipherText,
+       unsigned cipherTextLen,
+       unsigned char *plainText,
+       unsigned *plainTextLen,                 // RETURNED
+       int finalBlock);
+
+/*
+ * Convenience routines to encrypt & decrypt multi-block data.
+ */
+feeReturn feeFEEDEncrypt(feeFEED feed,
+       const unsigned char *plainText,
+       unsigned plainTextLen,
+       unsigned char **cipherText,             // malloc'd and RETURNED
+       unsigned *cipherTextLen);               // RETURNED
+
+feeReturn feeFEEDDecrypt(feeFEED feed,
+       const unsigned char *cipherText,
+       unsigned cipherTextLen,
+       unsigned char **plainText,              // malloc'd and RETURNED
+       unsigned *plainTextLen);                // RETURNED
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CRYPTKIT_ASYMMETRIC_ENABLE */
+
+#endif /*_CK_FEEFEED_H_*/