aes-cfb.h
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:4k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /**
  2.  * AES library with built-in CFB support.
  3.  *
  4.  * Copyright (c) 2006, Hongli Lai
  5.  * All rights reserved.
  6.  *
  7.  * Parts of this software are based on AESCrypt
  8.  * http://aescrypt.sourceforge.net/
  9.  * Copyright 1999,2000 Enhanced Software Technologies Inc.
  10.  *
  11.  * Redistribution and use in source and binary forms, with or without
  12.  * modification, are permitted provided that the following conditions are met:
  13.  *
  14.  * - Redistributions of source code must retain the above copyright notice,
  15.  *   this list of conditions and the following disclaimer.
  16.  * - Redistributions in binary form must reproduce the above copyright notice,
  17.  *   this list of conditions and the following disclaimer in the documentation
  18.  *   and/or other materials provided with the distribution.
  19.  * - Neither the name of copyright holders nor the names of its contributors
  20.  *   may be used to endorse or promote products derived from this software
  21.  *   without specific prior written permission.
  22.  *
  23.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  24.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  27.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  28.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  29.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  30.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  31.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  32.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  33.  * POSSIBILITY OF SUCH DAMAGE.
  34.  */
  35. #ifndef _AES_CFB_H_
  36. #define _AES_CFB_H_
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40. typedef struct AES_Struct AES_Struct;
  41. /** The size, if bytes, of a CFB salt. */
  42. #define AES_SALT_SIZE 16
  43. /**
  44.  * Create a new AES_Struct handle. You need this handle to use the rest of
  45.  * the AES functions.
  46.  *
  47.  * @return A new AES_Struct handle, or NULL if unable to allocate memory.
  48.  */
  49. AES_Struct *AES_Create();
  50. /**
  51.  * Set the AES key, which is used for both encryption and decryption.
  52.  *
  53.  * @param aes      An AES_Struct handle, as returned by AES_Create()
  54.  * @param key      The key to use.
  55.  * @param key_len  The length of the key, in bytes.
  56.  * @require The key must be exactly 128, 192 or 256 bits. That is, 16, 24 or
  57.  *          32 bytes.
  58.  */
  59. void AES_SetKey(AES_Struct *aes,
  60.                 const unsigned char *key,
  61.                 unsigned int key_len);
  62. /**
  63.  * Set the CFB salt.
  64.  *
  65.  * @param aes   An AES_Struct handle, as returned by AES_Create()
  66.  * @param salt  The salt to use.
  67.  * @require The salt must be exactly AES_SALT_SIZE bytes.
  68.  */
  69. void AES_SetSalt(AES_Struct *aes, const unsigned char *salt);
  70. /**
  71.  * Encrypt data in CFB mode. Before calling this function, you should set the
  72.  * key and the CFB salt.
  73.  *
  74.  * You may call this function more than once. You can decrypt the results
  75.  * in the same order.
  76.  *
  77.  * @param aes     An AES_Struct handle, as returned by AES_Create()
  78.  * @param data    The data to encrypt.
  79.  * @param len     The size of the given data.
  80.  * @param result  A buffer in which to put the encrypted result.
  81.  * @require _result_ must be at least _len_ bytes big.
  82.  * @ensure  The encrypted result is exactly _len_ bytes big.
  83.  */
  84. void AES_Encrypt(AES_Struct *aes,
  85.                  const unsigned char *data,
  86.                  unsigned int len,
  87.                  unsigned char *result);
  88. /**
  89.  * Decrypt encrypted data in CFB mode. Before calling this function, you must
  90.  * set the key and the CFB salt to be the same as the ones used for encryption.
  91.  *
  92.  * @param aes     An AES_Struct handle, as returned by AES_Create()
  93.  * @param data    The data to decrypt.
  94.  * @param len     The size of the given data.
  95.  * @param result  A buffer in which to put the decrypted result.
  96.  * @require _result_ must be at least _len_ bytes big.
  97.  * @ensure  The decrypted result is exactly _len_ bytes big.
  98.  */
  99. void AES_Decrypt(AES_Struct *aes,
  100.                  const unsigned char *data,
  101.                  unsigned int len,
  102.                  unsigned char *result);
  103. /**
  104.  * Free an AES_Struct handle.
  105.  *
  106.  * @param aes     An AES_Struct handle, as returned by AES_Create()
  107.  */
  108. void AES_Free(AES_Struct *aes);
  109. #ifdef __cplusplus
  110. }
  111. #endif
  112. #endif