/* Copyright (c) 1998 Apple Computer, 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 COMPUTER, INC. AND THE * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE COMPUTER, * INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL * EXPOSE YOU TO LIABILITY. *************************************************************************** * * feeCipherFile.h * * Revision History * ---------------- * 24 Oct 96 Doug Mitchell 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_*/