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 * FeeDES.h - generic, portable DES encryption object 12 * 13 * Revision History 14 * ---------------- 15 * 26 Aug 96 at NeXT 16 * Created. 17 */ 18 19#ifndef _CK_FEEDES_H_ 20#define _CK_FEEDES_H_ 21 22#if !defined(__MACH__) 23#include <ckconfig.h> 24#include <feeTypes.h> 25#else 26#include <security_cryptkit/ckconfig.h> 27#include <security_cryptkit/feeTypes.h> 28#endif 29 30#if CRYPTKIT_SYMMETRIC_ENABLE 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36#define FEE_DES_MIN_STATE_SIZE 8 37 38/* 39 * Opaque object handle. 40 */ 41typedef void *feeDES; 42 43/* 44 * Alloc and init a feeDES object with specified initial state. 45 * State must be at least 8 bytes; only 8 bytes are used, ignoring 46 * MSB of each bytes. 47 */ 48feeDES feeDESNewWithState(const unsigned char *state, 49 unsigned stateLen); 50 51void feeDESFree(feeDES des); 52 53/* 54 * Set new initial state. 55 */ 56feeReturn feeDESSetState(feeDES des, 57 const unsigned char *state, 58 unsigned stateLen); 59 60/* 61 * Set block or chain (CBC) mode. CBC is default. 62 */ 63void feeDESSetBlockMode(feeDES des); 64void feeDESSetChainMode(feeDES des); 65 66/* 67 * Plaintext block size. 68 */ 69unsigned feeDESPlainBlockSize(feeDES des); 70 71/* 72 * Ciphertext block size used for decryption. 73 */ 74unsigned feeDESCipherBlockSize(feeDES des); 75 76/* 77 * Required size of buffer for ciphertext, upon encrypting one 78 * block of plaintext. 79 */ 80unsigned feeDESCipherBufSize(feeDES des); 81 82/* 83 84 * Return the size of ciphertext to hold specified size of plaintext. 85 86 */ 87 88unsigned feeDESCipherTextSize(feeDES des, unsigned plainTextSize); 89 90 91/* 92 * Key size in bits. 93 */ 94unsigned feeDESKeySize(feeDES des); 95 96/* 97 * Encrypt a block or less of data. Caller malloc's cipherText. Generates 98 * up to (2 * feeDESBlockSize) bytes of cipherText. If plainTextLen is 99 * less than feeDESBlockSize, finalBlock must be true. 100 */ 101feeReturn feeDESEncryptBlock(feeDES des, 102 const unsigned char *plainText, 103 unsigned plainTextLen, 104 unsigned char *cipherText, 105 unsigned *cipherTextLen, // RETURNED 106 int finalBlock); 107 108/* 109 * Decrypt (exactly) a block of data. Caller malloc's plainText. Always 110 * generates feeDESBlockSize bytes of plainText, unless 'finalBlock' is 111 * non-zero (in which case feeDESBlockSize or less bytes of plainText are 112 * generated). 113 */ 114feeReturn feeDESDecryptBlock(feeDES des, 115 const unsigned char *cipherText, 116 unsigned cipherTextLen, 117 unsigned char *plainText, 118 unsigned *plainTextLen, // RETURNED 119 int finalBlock); 120 121/* 122 * Convenience routines to encrypt & decrypt multi-block data. 123 */ 124feeReturn feeDESEncrypt(feeDES des, 125 const unsigned char *plainText, 126 unsigned plainTextLen, 127 unsigned char **cipherText, // malloc'd and RETURNED 128 unsigned *cipherTextLen); // RETURNED 129 130feeReturn feeDESDecrypt(feeDES des, 131 const unsigned char *cipherText, 132 unsigned cipherTextLen, 133 unsigned char **plainText, // malloc'd and RETURNED 134 unsigned *plainTextLen); // RETURNED 135 136#ifdef __cplusplus 137} 138#endif 139 140#endif /* CRYPTKIT_SYMMETRIC_ENABLE */ 141#endif /*_CK_FEEDES_H_*/ 142