Add BN_native2bn and BN_bn2nativepad, for native BIGNUM import/export
[openssl.git] / include / openssl / camellia.h
1 /*
2  * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (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