X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/Security/libsecurity_cryptkit/lib/feeFEEDExp.h diff --git a/Security/libsecurity_cryptkit/lib/feeFEEDExp.h b/Security/libsecurity_cryptkit/lib/feeFEEDExp.h new file mode 100644 index 00000000..aa190379 --- /dev/null +++ b/Security/libsecurity_cryptkit/lib/feeFEEDExp.h @@ -0,0 +1,126 @@ +/* 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. + *************************************************************************** + * + * feeFEEDExp.h - generic FEED encryption object using 2:1 expansion + * + * Revision History + * ---------------- + * 28 Aug 96 at NeXT + * Created. + */ + +#ifndef _CK_FEEFEEDEXP_H_ +#define _CK_FEEFEEDEXP_H_ + +#if !defined(__MACH__) +#include +#include +#include +#else +#include +#include +#include +#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_*/