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 * feeFEEDExp.h - generic FEED encryption object using 2:1 expansion 12 * 13 * Revision History 14 * ---------------- 15 * 28 Aug 96 at NeXT 16 * Created. 17 */ 18 19#ifndef _CK_FEEFEEDEXP_H_ 20#define _CK_FEEFEEDEXP_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 35extern "C" { 36#endif 37 38/* 39 * Opaque object handle. 40 */ 41typedef void *feeFEEDExp; 42 43/* 44 * Alloc and init a feeFEEDExp object associated with specified feePubKey. 45 */ 46feeFEEDExp feeFEEDExpNewWithPubKey( 47 feePubKey pubKey, 48 feeRandFcn randFcn, // optional 49 void *randRef); 50 51void feeFEEDExpFree(feeFEEDExp feed); 52 53/* 54 * Plaintext block size. 55 */ 56unsigned feeFEEDExpPlainBlockSize(feeFEEDExp feed); 57 58/* 59 * Ciphertext block size used for decryption. 60 */ 61unsigned feeFEEDExpCipherBlockSize(feeFEEDExp feed); 62 63/* 64 * Required size of buffer for ciphertext, upon encrypting one 65 * block of plaintext. 66 */ 67unsigned feeFEEDExpCipherBufSize(feeFEEDExp feed); 68 69/* 70 * Return the size of ciphertext to hold specified size of encrypted plaintext. 71 */ 72unsigned feeFEEDExpCipherTextSize(feeFEEDExp feed, unsigned plainTextSize); 73 74/* 75 * Return the size of plaintext to hold specified size of decrypted ciphertext. 76 */ 77unsigned feeFEEDExpPlainTextSize(feeFEEDExp feed, unsigned cipherTextSize); 78 79/* 80 * Encrypt a block or less of data. Caller malloc's cipherText. Generates 81 * feeFEEDExpCipherBlockSize() bytes of cipherText if finalBlock is false; 82 * if finalBlock is true it could produce twice as much ciphertext. 83 * If plainTextLen is less than feeFEEDExpPlainBlockSize(), finalBlock must be true. 84 */ 85feeReturn feeFEEDExpEncryptBlock(feeFEEDExp feed, 86 const unsigned char *plainText, 87 unsigned plainTextLen, 88 unsigned char *cipherText, 89 unsigned *cipherTextLen, // RETURNED 90 int finalBlock); 91 92/* 93 * Decrypt (exactly) a block of data. Caller malloc's plainText. Always 94 * generates feeFEEDExpBlockSize bytes of plainText, unless 'finalBlock' is 95 * non-zero (in which case feeFEEDExpBlockSize or less bytes of plainText are 96 * generated). 97 */ 98feeReturn feeFEEDExpDecryptBlock(feeFEEDExp feed, 99 const unsigned char *cipherText, 100 unsigned cipherTextLen, 101 unsigned char *plainText, 102 unsigned *plainTextLen, // RETURNED 103 int finalBlock); 104 105/* 106 * Convenience routines to encrypt & decrypt multi-block data. 107 */ 108feeReturn feeFEEDExpEncrypt(feeFEEDExp feed, 109 const unsigned char *plainText, 110 unsigned plainTextLen, 111 unsigned char **cipherText, // malloc'd and RETURNED 112 unsigned *cipherTextLen); // RETURNED 113 114feeReturn feeFEEDExpDecrypt(feeFEEDExp feed, 115 const unsigned char *cipherText, 116 unsigned cipherTextLen, 117 unsigned char **plainText, // malloc'd and RETURNED 118 unsigned *plainTextLen); // RETURNED 119 120#ifdef __cplusplus 121} 122#endif 123 124#endif /* CRYPTKIT_ASYMMETRIC_ENABLE */ 125 126#endif /*_CK_FEEFEEDEXP_H_*/ 127