feeFEEDExp.h   [plain text]


/* 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.
 ***************************************************************************
 *
 * feeFEEDExp.h - generic FEED encryption object using 2:1 expansion
 *
 * Revision History
 * ----------------
 * 28 Aug 96	Doug Mitchell at NeXT
 *	Created.
 */

#ifndef	_CK_FEEFEEDEXP_H_
#define _CK_FEEFEEDEXP_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 *feeFEEDExp;

/*
 * Alloc and init a feeFEEDExp object associated with specified feePubKey.
 */
feeFEEDExp feeFEEDExpNewWithPubKey(
	feePubKey pubKey,
	feeRandFcn randFcn,		// optional 
	void *randRef);

void feeFEEDExpFree(feeFEEDExp feed);

/*
 * Plaintext block size.
 */
unsigned feeFEEDExpPlainBlockSize(feeFEEDExp feed);

/*
 * Ciphertext block size used for decryption.
 */
unsigned feeFEEDExpCipherBlockSize(feeFEEDExp feed);

/*
 * Required size of buffer for ciphertext, upon encrypting one
 * block of plaintext.
 */
unsigned feeFEEDExpCipherBufSize(feeFEEDExp feed);

/*
 * Return the size of ciphertext to hold specified size of encrypted plaintext.
 */
unsigned feeFEEDExpCipherTextSize(feeFEEDExp feed, unsigned plainTextSize);

/*
 * Return the size of plaintext to hold specified size of decrypted ciphertext.
 */
unsigned feeFEEDExpPlainTextSize(feeFEEDExp feed, unsigned cipherTextSize);

/*
 * Encrypt a block or less of data. Caller malloc's cipherText. Generates
 * feeFEEDExpCipherBlockSize() bytes of cipherText if finalBlock is false;
 * if finalBlock is true it could produce twice as much ciphertext. 
 * If plainTextLen is less than feeFEEDExpPlainBlockSize(), finalBlock must be true.
 */
feeReturn feeFEEDExpEncryptBlock(feeFEEDExp 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 feeFEEDExpBlockSize bytes of plainText, unless 'finalBlock' is
 * non-zero (in which case feeFEEDExpBlockSize or less bytes of plainText are
 * generated).
 */
feeReturn feeFEEDExpDecryptBlock(feeFEEDExp feed,
	const unsigned char *cipherText,
	unsigned cipherTextLen,
	unsigned char *plainText,
	unsigned *plainTextLen,			// RETURNED
	int finalBlock);

/*
 * Convenience routines to encrypt & decrypt multi-block data.
 */
feeReturn feeFEEDExpEncrypt(feeFEEDExp feed,
	const unsigned char *plainText,
	unsigned plainTextLen,
	unsigned char **cipherText,		// malloc'd and RETURNED
	unsigned *cipherTextLen);		// RETURNED

feeReturn feeFEEDExpDecrypt(feeFEEDExp 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_FEEFEEDEXP_H_*/