1 #ifndef MYSQL_SERVICE_SHA2_INCLUDED 2 /* Copyright (c) 2017, MariaDB 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; version 2 of the License. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License 14 along with this program; if not, write to the Free Software 15 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ 16 17 /** 18 @file 19 my sha2 service 20 21 Functions to calculate SHA2 hash from a memory buffer 22 */ 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 #ifndef MYSQL_ABI_CHECK 29 #include <stdlib.h> 30 #endif 31 32 extern struct my_sha2_service_st { 33 void (*my_sha224_type)(unsigned char*, const char*, size_t); 34 void (*my_sha224_multi_type)(unsigned char*, ...); 35 size_t (*my_sha224_context_size_type)(); 36 void (*my_sha224_init_type)(void *); 37 void (*my_sha224_input_type)(void *, const unsigned char *, size_t); 38 void (*my_sha224_result_type)(void *, unsigned char *); 39 40 void (*my_sha256_type)(unsigned char*, const char*, size_t); 41 void (*my_sha256_multi_type)(unsigned char*, ...); 42 size_t (*my_sha256_context_size_type)(); 43 void (*my_sha256_init_type)(void *); 44 void (*my_sha256_input_type)(void *, const unsigned char *, size_t); 45 void (*my_sha256_result_type)(void *, unsigned char *); 46 47 void (*my_sha384_type)(unsigned char*, const char*, size_t); 48 void (*my_sha384_multi_type)(unsigned char*, ...); 49 size_t (*my_sha384_context_size_type)(); 50 void (*my_sha384_init_type)(void *); 51 void (*my_sha384_input_type)(void *, const unsigned char *, size_t); 52 void (*my_sha384_result_type)(void *, unsigned char *); 53 54 void (*my_sha512_type)(unsigned char*, const char*, size_t); 55 void (*my_sha512_multi_type)(unsigned char*, ...); 56 size_t (*my_sha512_context_size_type)(); 57 void (*my_sha512_init_type)(void *); 58 void (*my_sha512_input_type)(void *, const unsigned char *, size_t); 59 void (*my_sha512_result_type)(void *, unsigned char *); 60 } *my_sha2_service; 61 62 #ifdef MYSQL_DYNAMIC_PLUGIN 63 64 #define my_sha224(A,B,C) my_sha2_service->my_sha224_type(A,B,C) 65 #define my_sha224_multi my_sha2_service->my_sha224_multi_type 66 #define my_sha224_context_size() my_sha2_service->my_sha224_context_size_type() 67 #define my_sha224_init(A) my_sha2_service->my_sha224_init_type(A) 68 #define my_sha224_input(A,B,C) my_sha2_service->my_sha224_input_type(A,B,C) 69 #define my_sha224_result(A,B) my_sha2_service->my_sha224_result_type(A,B) 70 71 #define my_sha256(A,B,C) my_sha2_service->my_sha256_type(A,B,C) 72 #define my_sha256_multi my_sha2_service->my_sha256_multi_type 73 #define my_sha256_context_size() my_sha2_service->my_sha256_context_size_type() 74 #define my_sha256_init(A) my_sha2_service->my_sha256_init_type(A) 75 #define my_sha256_input(A,B,C) my_sha2_service->my_sha256_input_type(A,B,C) 76 #define my_sha256_result(A,B) my_sha2_service->my_sha256_result_type(A,B) 77 78 #define my_sha384(A,B,C) my_sha2_service->my_sha384_type(A,B,C) 79 #define my_sha384_multi my_sha2_service->my_sha384_multi_type 80 #define my_sha384_context_size() my_sha2_service->my_sha384_context_size_type() 81 #define my_sha384_init(A) my_sha2_service->my_sha384_init_type(A) 82 #define my_sha384_input(A,B,C) my_sha2_service->my_sha384_input_type(A,B,C) 83 #define my_sha384_result(A,B) my_sha2_service->my_sha384_result_type(A,B) 84 85 #define my_sha512(A,B,C) my_sha2_service->my_sha512_type(A,B,C) 86 #define my_sha512_multi my_sha2_service->my_sha512_multi_type 87 #define my_sha512_context_size() my_sha2_service->my_sha512_context_size_type() 88 #define my_sha512_init(A) my_sha2_service->my_sha512_init_type(A) 89 #define my_sha512_input(A,B,C) my_sha2_service->my_sha512_input_type(A,B,C) 90 #define my_sha512_result(A,B) my_sha2_service->my_sha512_result_type(A,B) 91 92 #else 93 94 void my_sha224(unsigned char*, const char*, size_t); 95 void my_sha224_multi(unsigned char*, ...); 96 size_t my_sha224_context_size(); 97 void my_sha224_init(void *context); 98 void my_sha224_input(void *context, const unsigned char *buf, size_t len); 99 void my_sha224_result(void *context, unsigned char *digest); 100 101 void my_sha256(unsigned char*, const char*, size_t); 102 void my_sha256_multi(unsigned char*, ...); 103 size_t my_sha256_context_size(); 104 void my_sha256_init(void *context); 105 void my_sha256_input(void *context, const unsigned char *buf, size_t len); 106 void my_sha256_result(void *context, unsigned char *digest); 107 108 void my_sha384(unsigned char*, const char*, size_t); 109 void my_sha384_multi(unsigned char*, ...); 110 size_t my_sha384_context_size(); 111 void my_sha384_init(void *context); 112 void my_sha384_input(void *context, const unsigned char *buf, size_t len); 113 void my_sha384_result(void *context, unsigned char *digest); 114 115 void my_sha512(unsigned char*, const char*, size_t); 116 void my_sha512_multi(unsigned char*, ...); 117 size_t my_sha512_context_size(); 118 void my_sha512_init(void *context); 119 void my_sha512_input(void *context, const unsigned char *buf, size_t len); 120 void my_sha512_result(void *context, unsigned char *digest); 121 122 #endif 123 124 #ifdef __cplusplus 125 } 126 #endif 127 128 #define MYSQL_SERVICE_SHA2_INCLUDED 129 #endif 130 131