1 #ifndef MYSQL_SERVICE_MY_CRYPT_INCLUDED 2 #define MYSQL_SERVICE_MY_CRYPT_INCLUDED 3 4 /* 5 Copyright (c) 2014 Google Inc. 6 Copyright (c) 2014, 2015 MariaDB Corporation 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; version 2 of the License. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ 20 21 /** 22 @file 23 my crypt service 24 25 AES encryption functions, and a function to generate random bytes. 26 27 Include my_config.h before this file to use CTR and GCM modes 28 (they only work if server was compiled with openssl). 29 */ 30 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /* return values from my_aes_encrypt/my_aes_decrypt functions */ 37 #define MY_AES_OK 0 38 #define MY_AES_BAD_DATA -100 39 #define MY_AES_OPENSSL_ERROR -101 40 #define MY_AES_BAD_KEYSIZE -102 41 42 /* The block size for all supported algorithms */ 43 #define MY_AES_BLOCK_SIZE 16 44 45 /* The max key length of all supported algorithms */ 46 #define MY_AES_MAX_KEY_LENGTH 32 47 48 #define MY_AES_CTX_SIZE 656 49 50 enum my_aes_mode { 51 MY_AES_ECB, MY_AES_CBC 52 #ifdef HAVE_EncryptAes128Ctr 53 , MY_AES_CTR 54 #endif 55 #ifdef HAVE_EncryptAes128Gcm 56 , MY_AES_GCM 57 #endif 58 }; 59 60 extern struct my_crypt_service_st { 61 int (*my_aes_crypt_init)(void *ctx, enum my_aes_mode mode, int flags, 62 const unsigned char* key, unsigned int klen, 63 const unsigned char* iv, unsigned int ivlen); 64 int (*my_aes_crypt_update)(void *ctx, const unsigned char *src, unsigned int slen, 65 unsigned char *dst, unsigned int *dlen); 66 int (*my_aes_crypt_finish)(void *ctx, unsigned char *dst, unsigned int *dlen); 67 int (*my_aes_crypt)(enum my_aes_mode mode, int flags, 68 const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen, 69 const unsigned char *key, unsigned int klen, const unsigned char *iv, unsigned int ivlen); 70 unsigned int (*my_aes_get_size)(enum my_aes_mode mode, unsigned int source_length); 71 unsigned int (*my_aes_ctx_size)(enum my_aes_mode mode); 72 int (*my_random_bytes)(unsigned char* buf, int num); 73 } *my_crypt_service; 74 75 #ifdef MYSQL_DYNAMIC_PLUGIN 76 77 #define my_aes_crypt_init(A,B,C,D,E,F,G) \ 78 my_crypt_service->my_aes_crypt_init(A,B,C,D,E,F,G) 79 80 #define my_aes_crypt_update(A,B,C,D,E) \ 81 my_crypt_service->my_aes_crypt_update(A,B,C,D,E) 82 83 #define my_aes_crypt_finish(A,B,C) \ 84 my_crypt_service->my_aes_crypt_finish(A,B,C) 85 86 #define my_aes_crypt(A,B,C,D,E,F,G,H,I,J) \ 87 my_crypt_service->my_aes_crypt(A,B,C,D,E,F,G,H,I,J) 88 89 #define my_aes_get_size(A,B)\ 90 my_crypt_service->my_aes_get_size(A,B) 91 92 #define my_aes_ctx_size(A)\ 93 my_crypt_service->my_aes_ctx_size(A) 94 95 #define my_random_bytes(A,B)\ 96 my_crypt_service->my_random_bytes(A,B) 97 98 #else 99 100 int my_aes_crypt_init(void *ctx, enum my_aes_mode mode, int flags, 101 const unsigned char* key, unsigned int klen, 102 const unsigned char* iv, unsigned int ivlen); 103 int my_aes_crypt_update(void *ctx, const unsigned char *src, unsigned int slen, 104 unsigned char *dst, unsigned int *dlen); 105 int my_aes_crypt_finish(void *ctx, unsigned char *dst, unsigned int *dlen); 106 int my_aes_crypt(enum my_aes_mode mode, int flags, 107 const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen, 108 const unsigned char *key, unsigned int klen, const unsigned char *iv, unsigned int ivlen); 109 110 int my_random_bytes(unsigned char* buf, int num); 111 unsigned int my_aes_get_size(enum my_aes_mode mode, unsigned int source_length); 112 unsigned int my_aes_ctx_size(enum my_aes_mode mode); 113 #endif 114 115 116 #ifdef __cplusplus 117 } 118 #endif 119 120 #endif /* MYSQL_SERVICE_MY_CRYPT_INCLUDED */ 121