]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cryptkit/lib/feeCipherFile.h
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cryptkit / lib / feeCipherFile.h
diff --git a/Security/libsecurity_cryptkit/lib/feeCipherFile.h b/Security/libsecurity_cryptkit/lib/feeCipherFile.h
new file mode 100644 (file)
index 0000000..a46f3ba
--- /dev/null
@@ -0,0 +1,164 @@
+/* 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.
+ ***************************************************************************
+ *
+ * feeCipherFile.h
+ *
+ * Revision History
+ * ----------------
+ * 24 Oct 96 at NeXT
+ *     Created.
+ */
+
+#ifndef        _CK_FEECIPHERFILE_H_
+#define _CK_FEECIPHERFILE_H_
+
+#if    !defined(__MACH__)
+#include <ckconfig.h>
+#include <feeTypes.h>
+#include <feePublicKey.h>
+#include <CipherFileTypes.h>
+#else
+#include "ckconfig.h"
+#include "feeTypes.h"
+#include "feePublicKey.h"
+#include "CipherFileTypes.h"
+#endif
+
+#if    CRYPTKIT_CIPHERFILE_ENABLE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Opaque cipherfile object.
+ */
+typedef void *feeCipherFile;
+
+/*
+ * Alloc and return a new feeCipherFile object associated with the specified
+ * data.
+ */
+feeCipherFile feeCFileNewFromCipherText(cipherFileEncrType encrType,
+       const unsigned char *cipherText,
+       unsigned cipherTextLen,
+       const unsigned char *sendPubKeyData,
+       unsigned sendPubKeyDataLen,
+       const unsigned char *otherKeyData,
+       unsigned otherKeyDataDataLen,
+       const unsigned char *sigData,   // optional; NULL means no signature
+       unsigned sigDataLen,            // 0 if sigData is NULL
+       unsigned userData);             // for caller's convenience
+
+/*
+ * Obtain the contents of a feeCipherFile as a byte stream. Caller must free
+ * the returned data.
+ */
+feeReturn feeCFileDataRepresentation(feeCipherFile cipherFile,
+       const unsigned char **dataRep,  // RETURNED
+       unsigned *dataRepLen);          // RETURNED
+
+/*
+ * Alloc and return a new feeCipherFile object, given a byte stream (originally
+ * obtained from feeCFDataRepresentation()).
+ */
+feeReturn feeCFileNewFromDataRep(const unsigned char *dataRep,
+       unsigned dataRepLen,
+       feeCipherFile *cipherFile);     // RETURNED if sucessful
+
+/*
+ * Free a feeCipherFile object.
+ */
+void feeCFileFree(feeCipherFile cipherFile);
+
+/*
+ * Given a feeCipherFile object (typically obtained from
+ * feeCFileNewFromDataRep()), obtain its constituent parts.
+ *
+ * Data returned must be freed by caller.
+ * feeCFileSigData(), feeCFileSendPubKeyData, and feeCFileOtherKeyData()
+ * may return NULL, indicating component not present.
+ */
+cipherFileEncrType feeCFileEncrType(feeCipherFile cipherFile);
+unsigned char *feeCFileCipherText(feeCipherFile cipherFile,
+       unsigned *cipherTextLen);               // RETURNED
+unsigned char *feeCFileSendPubKeyData(feeCipherFile cipherFile,
+       unsigned *sendPubKeyDataLen);           // RETURNED
+unsigned char *feeCFileOtherKeyData(feeCipherFile cipherFile,
+       unsigned *otherKeyDataLen);             // RETURNED
+unsigned char *feeCFileSigData(feeCipherFile cipherFile,
+       unsigned *sigDataLen);                  // RETURNED
+unsigned feeCFileUserData(feeCipherFile cipherFile);
+
+/*
+ * High-level feeCipherFile support.
+ */
+
+/*
+ * Obtain the data representation of a feeCipherFile given the specified
+ * plainText and cipherFileEncrType.
+ * Receiver's public key is required for all encrTypes; sender's private
+ * key is required for signature generation and also for encrType
+ * CFE_PublicDES and CFE_FEED.
+ */
+feeReturn createCipherFile(feePubKey sendPrivKey,
+       feePubKey recvPubKey,
+       cipherFileEncrType encrType,
+       const unsigned char *plainText,
+       unsigned plainTextLen,
+       int genSig,                             // 1 ==> generate signature
+       int doEnc64,                            // 1 ==> perform enc64
+       unsigned userData,                      // for caller's convenience
+       unsigned char **cipherFileData,         // RETURNED
+       unsigned *cipherFileDataLen);           // RETURNED
+
+/*
+ * Parse and decrypt a cipherfile given its data representation.
+ *
+ * recvPrivKey is required in all cases. If sendPubKey is present,
+ * sendPubKey - rather than the embedded sender's public key - will be
+ * used for signature validation.
+ */
+feeReturn parseCipherFile(feePubKey recvPrivKey,       // required
+       feePubKey sendPubKey,                   // optional, for signature
+       const unsigned char *cipherFileData,
+       unsigned cipherFileDataLen,
+       int doDec64,                            // 1 ==> perform dec64
+       cipherFileEncrType *encrType,           // RETURNED
+       unsigned char **plainText,              // malloc'd & RETURNED
+       unsigned *plainTextLen,                 // RETURNED
+       feeSigStatus *sigStatus,                // RETURNED
+       unsigned *userData);                    // RETURNED
+
+/*
+ * Decrypt a feeCipherFile object obtained via feeCFileNewFromDataRep().
+ * recvPrivKey is required in all cases. If sendPubKey is present,
+ * sendPubKey - rather than the embedded sender's public key - will be
+ * used for signature validation.
+ *
+ * Note: this function is used (in conjunction with feeCFileNewFromDataRep())
+ * rather than the simpler parseCipherFile(), in case the caller needs
+ * access to CipherFile fields not returned in parseCipherFile(). For
+ * example, the caller might want to get the sender's public key data
+ * via feeCFileSendPubKeyData().
+ */
+feeReturn decryptCipherFile(feeCipherFile cipherFile,
+       feePubKey recvPrivKey,                  // required
+       feePubKey sendPubKey,                   // optional, for signature
+       unsigned char **plainText,              // malloc'd & RETURNED
+       unsigned *plainTextLen,                 // RETURNED
+       feeSigStatus *sigStatus);               // RETURNED
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CRYPTKIT_CIPHERFILE_ENABLE */
+#endif /*_CK_FEECIPHERFILE_H_*/