summaryrefslogtreecommitdiff
path: root/include/my_aes.h
blob: e7376a6b08e9701df3230c41e37ef468b6727484 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* Copyright (c) 2002, 2006 MySQL AB, 2009 Sun Microsystems, Inc.
   Copyright (c) 2014, 2015 MariaDB Corporation
   Use is subject to license terms.

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; version 2 of the License.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA */


/* Header file for my_aes.c */
/* Wrapper to give simple interface for MySQL to AES standard encryption */

#ifndef MY_AES_INCLUDED
#define MY_AES_INCLUDED

typedef int Crypt_result;

#define AES_OK 0
#define AES_BAD_DATA  -1
#define AES_BAD_IV -2
#define AES_INVALID -3
#define AES_OPENSSL_ERROR -4
#define AES_BAD_KEYSIZE -5
#define AES_KEY_CREATION_FAILED -10

#define CRYPT_KEY_OK 0
#define CRYPT_BUFFER_TO_SMALL -11
#define CRYPT_KEY_UNKNOWN -48

/* The block size for all supported algorithms */
#define MY_AES_BLOCK_SIZE 16

/* The max key length of all supported algorithms */
#define MY_AES_MAX_KEY_LENGTH 32


#include "rijndael.h"

C_MODE_START

/**
  Crypt buffer with AES dynamic (defined at startup) encryption algorithm.

  SYNOPSIS
     my_aes_encrypt_dynamic()
     @param source         [in]  Pointer to data for encryption
     @param source_length  [in]  Size of encryption data
     @param dest           [out] Buffer to place encrypted data (must be large enough)
     @param dest_length    [out] Pointer to size of encrypted data
     @param key            [in]  Key to be used for encryption
     @param key_length     [in]  Length of the key. 16, 24 or 32
     @param iv             [in]  Iv to be used for encryption
     @param iv_length      [in]  Length of the iv. should be 16.
     @param noPadding	   [in]  if set, algorithm specific padding behaviour is used

  Method used defined by calling my_aes_init_dynamic_encrypt() at startup.

  @return
    != 0           error
    0             no error
*/

typedef int (*my_aes_encrypt_dynamic_type)(const uchar* source, uint32 source_length,
				           uchar* dest, uint32* dest_length,
                                           const uchar* key, uint8 key_length,
                                           const uchar* iv, uint8 iv_length,
                                           uint noPadding);

extern MYSQL_PLUGIN_IMPORT my_aes_encrypt_dynamic_type my_aes_encrypt_dynamic;

/**
  AES decryption AES dynamic (defined at startup) encryption algorithm.

  SYNOPSIS
     my_aes_decrypt_dynamic()
     @param source         [in]  Pointer to data to decrypt
     @param source_length  [in]  Size of data
     @param dest           [out] Buffer to place decrypted data (must be large enough)
     @param dest_length    [out] Pointer to size of decrypted data
     @param key            [in]  Key to be used for decryption
     @param key_length     [in]  Length of the key. 16, 24 or 32
     @param iv             [in]  Iv to be used for encryption
     @param iv_length      [in]  Length of the iv. should be 16.
     @param noPadding	   [in]  if set, algorithm specific padding behaviour is used

  @return
    != 0           error
    0             no error

  Method used defined by calling my_aes_init_dynamic_encrypt() at startup.
*/

typedef int (*my_aes_decrypt_dynamic_type)(const uchar *source,
                                           uint32 source_length,
					   uchar *dest, uint32 *dest_length,
                                           const uchar *key, uint8 key_length,
                                           const uchar *iv, uint8 iv_length,
                                           uint noPadding);
extern MYSQL_PLUGIN_IMPORT my_aes_decrypt_dynamic_type my_aes_decrypt_dynamic;

/**
   Initialize dynamic crypt functions
*/

enum enum_my_aes_encryption_algorithm
{
  MY_AES_ALGORITHM_NONE, MY_AES_ALGORITHM_ECB, MY_AES_ALGORITHM_CBC,
  MY_AES_ALGORITHM_CTR
};

my_aes_decrypt_dynamic_type get_aes_decrypt_func(enum enum_my_aes_encryption_algorithm method);
my_aes_encrypt_dynamic_type get_aes_encrypt_func(enum enum_my_aes_encryption_algorithm method);


my_bool my_aes_init_dynamic_encrypt(enum enum_my_aes_encryption_algorithm method);

extern MYSQL_PLUGIN_IMPORT enum enum_my_aes_encryption_algorithm current_aes_dynamic_method;

int my_aes_get_size(int source_length);

C_MODE_END

#endif /* MY_AES_INCLUDED */