Home | History | Annotate | Line # | Download | only in openssl
      1 /*
      2  * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the OpenSSL license (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #ifndef HEADER_CAMELLIA_H
     11 # define HEADER_CAMELLIA_H
     12 
     13 # include <openssl/opensslconf.h>
     14 
     15 # ifndef OPENSSL_NO_CAMELLIA
     16 # include <stddef.h>
     17 #ifdef  __cplusplus
     18 extern "C" {
     19 #endif
     20 
     21 # define CAMELLIA_ENCRYPT        1
     22 # define CAMELLIA_DECRYPT        0
     23 
     24 /*
     25  * Because array size can't be a const in C, the following two are macros.
     26  * Both sizes are in bytes.
     27  */
     28 
     29 /* This should be a hidden type, but EVP requires that the size be known */
     30 
     31 # define CAMELLIA_BLOCK_SIZE 16
     32 # define CAMELLIA_TABLE_BYTE_LEN 272
     33 # define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4)
     34 
     35 typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match
     36                                                                * with WORD */
     37 
     38 struct camellia_key_st {
     39     union {
     40         double d;               /* ensures 64-bit align */
     41         KEY_TABLE_TYPE rd_key;
     42     } u;
     43     int grand_rounds;
     44 };
     45 typedef struct camellia_key_st CAMELLIA_KEY;
     46 
     47 int Camellia_set_key(const unsigned char *userKey, const int bits,
     48                      CAMELLIA_KEY *key);
     49 
     50 void Camellia_encrypt(const unsigned char *in, unsigned char *out,
     51                       const CAMELLIA_KEY *key);
     52 void Camellia_decrypt(const unsigned char *in, unsigned char *out,
     53                       const CAMELLIA_KEY *key);
     54 
     55 void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out,
     56                           const CAMELLIA_KEY *key, const int enc);
     57 void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out,
     58                           size_t length, const CAMELLIA_KEY *key,
     59                           unsigned char *ivec, const int enc);
     60 void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out,
     61                              size_t length, const CAMELLIA_KEY *key,
     62                              unsigned char *ivec, int *num, const int enc);
     63 void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out,
     64                            size_t length, const CAMELLIA_KEY *key,
     65                            unsigned char *ivec, int *num, const int enc);
     66 void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out,
     67                            size_t length, const CAMELLIA_KEY *key,
     68                            unsigned char *ivec, int *num, const int enc);
     69 void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out,
     70                              size_t length, const CAMELLIA_KEY *key,
     71                              unsigned char *ivec, int *num);
     72 void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out,
     73                              size_t length, const CAMELLIA_KEY *key,
     74                              unsigned char ivec[CAMELLIA_BLOCK_SIZE],
     75                              unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE],
     76                              unsigned int *num);
     77 
     78 # ifdef  __cplusplus
     79 }
     80 # endif
     81 # endif
     82 
     83 #endif
     84