"Fossies" - the Fresh Open Source Software Archive

Member "openssl-1.0.2q/crypto/aes/aes.h" (20 Nov 2018, 6146 Bytes) of package /linux/misc/openssl-1.0.2q.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "aes.h" see the Fossies "Dox" file reference documentation.

    1 /* crypto/aes/aes.h */
    2 /* ====================================================================
    3  * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  *
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in
   14  *    the documentation and/or other materials provided with the
   15  *    distribution.
   16  *
   17  * 3. All advertising materials mentioning features or use of this
   18  *    software must display the following acknowledgment:
   19  *    "This product includes software developed by the OpenSSL Project
   20  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
   21  *
   22  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
   23  *    endorse or promote products derived from this software without
   24  *    prior written permission. For written permission, please contact
   25  *    openssl-core@openssl.org.
   26  *
   27  * 5. Products derived from this software may not be called "OpenSSL"
   28  *    nor may "OpenSSL" appear in their names without prior written
   29  *    permission of the OpenSSL Project.
   30  *
   31  * 6. Redistributions of any form whatsoever must retain the following
   32  *    acknowledgment:
   33  *    "This product includes software developed by the OpenSSL Project
   34  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
   35  *
   36  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
   37  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   38  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   39  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
   40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   42  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   43  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   44  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   45  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   46  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   47  * OF THE POSSIBILITY OF SUCH DAMAGE.
   48  * ====================================================================
   49  *
   50  */
   51 
   52 #ifndef HEADER_AES_H
   53 # define HEADER_AES_H
   54 
   55 # include <openssl/opensslconf.h>
   56 
   57 # ifdef OPENSSL_NO_AES
   58 #  error AES is disabled.
   59 # endif
   60 
   61 # include <stddef.h>
   62 
   63 # define AES_ENCRYPT     1
   64 # define AES_DECRYPT     0
   65 
   66 /*
   67  * Because array size can't be a const in C, the following two are macros.
   68  * Both sizes are in bytes.
   69  */
   70 # define AES_MAXNR 14
   71 # define AES_BLOCK_SIZE 16
   72 
   73 #ifdef  __cplusplus
   74 extern "C" {
   75 #endif
   76 
   77 /* This should be a hidden type, but EVP requires that the size be known */
   78 struct aes_key_st {
   79 # ifdef AES_LONG
   80     unsigned long rd_key[4 * (AES_MAXNR + 1)];
   81 # else
   82     unsigned int rd_key[4 * (AES_MAXNR + 1)];
   83 # endif
   84     int rounds;
   85 };
   86 typedef struct aes_key_st AES_KEY;
   87 
   88 const char *AES_options(void);
   89 
   90 int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
   91                         AES_KEY *key);
   92 int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
   93                         AES_KEY *key);
   94 
   95 int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
   96                                 AES_KEY *key);
   97 int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits,
   98                                 AES_KEY *key);
   99 
  100 void AES_encrypt(const unsigned char *in, unsigned char *out,
  101                  const AES_KEY *key);
  102 void AES_decrypt(const unsigned char *in, unsigned char *out,
  103                  const AES_KEY *key);
  104 
  105 void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,
  106                      const AES_KEY *key, const int enc);
  107 void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
  108                      size_t length, const AES_KEY *key,
  109                      unsigned char *ivec, const int enc);
  110 void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
  111                         size_t length, const AES_KEY *key,
  112                         unsigned char *ivec, int *num, const int enc);
  113 void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
  114                       size_t length, const AES_KEY *key,
  115                       unsigned char *ivec, int *num, const int enc);
  116 void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
  117                       size_t length, const AES_KEY *key,
  118                       unsigned char *ivec, int *num, const int enc);
  119 void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
  120                         size_t length, const AES_KEY *key,
  121                         unsigned char *ivec, int *num);
  122 void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
  123                         size_t length, const AES_KEY *key,
  124                         unsigned char ivec[AES_BLOCK_SIZE],
  125                         unsigned char ecount_buf[AES_BLOCK_SIZE],
  126                         unsigned int *num);
  127 /* NB: the IV is _two_ blocks long */
  128 void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
  129                      size_t length, const AES_KEY *key,
  130                      unsigned char *ivec, const int enc);
  131 /* NB: the IV is _four_ blocks long */
  132 void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
  133                         size_t length, const AES_KEY *key,
  134                         const AES_KEY *key2, const unsigned char *ivec,
  135                         const int enc);
  136 
  137 int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
  138                  unsigned char *out,
  139                  const unsigned char *in, unsigned int inlen);
  140 int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
  141                    unsigned char *out,
  142                    const unsigned char *in, unsigned int inlen);
  143 
  144 
  145 #ifdef  __cplusplus
  146 }
  147 #endif
  148 
  149 #endif                          /* !HEADER_AES_H */