mirror of
https://github.com/MariaDB/server.git
synced 2026-04-20 23:35:32 +02:00
optimize encryption api
only one encryption key lookup in most cases instead of three (has_key, get_key_size, get_key).
This commit is contained in:
parent
c91e3260e2
commit
ef5b4889c2
17 changed files with 89 additions and 144 deletions
|
|
@ -28,6 +28,8 @@
|
|||
#include <string.h>
|
||||
#include <myisampack.h>
|
||||
|
||||
#define KEY_SIZE 16
|
||||
|
||||
static uint key_version;
|
||||
|
||||
static MYSQL_SYSVAR_UINT(version, key_version, PLUGIN_VAR_RQCMDARG,
|
||||
|
|
@ -43,30 +45,25 @@ static unsigned int get_latest_key_version()
|
|||
return key_version;
|
||||
}
|
||||
|
||||
static int get_key(unsigned int version, unsigned char* dstbuf, unsigned buflen)
|
||||
static unsigned int get_key(unsigned int version, unsigned char* dstbuf, unsigned *buflen)
|
||||
{
|
||||
if (buflen < 4)
|
||||
return 1;
|
||||
memset(dstbuf, 0, buflen);
|
||||
if (*buflen < KEY_SIZE)
|
||||
{
|
||||
*buflen= KEY_SIZE;
|
||||
return KEY_BUFFER_TOO_SMALL;
|
||||
}
|
||||
*buflen= KEY_SIZE;
|
||||
if (!dstbuf)
|
||||
return 0;
|
||||
|
||||
memset(dstbuf, 0, KEY_SIZE);
|
||||
mi_int4store(dstbuf, version);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int has_key(unsigned int ver)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static unsigned int get_key_size(unsigned int ver)
|
||||
{
|
||||
return 16;
|
||||
}
|
||||
|
||||
struct st_mariadb_encryption_key_management debug_key_management_plugin= {
|
||||
MariaDB_ENCRYPTION_KEY_MANAGEMENT_INTERFACE_VERSION,
|
||||
get_latest_key_version,
|
||||
has_key,
|
||||
get_key_size,
|
||||
get_key
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -58,34 +58,23 @@ get_latest_key_version()
|
|||
return key_version;
|
||||
}
|
||||
|
||||
static int
|
||||
get_key(unsigned int version, unsigned char* dstbuf, unsigned buflen)
|
||||
static unsigned int
|
||||
get_key(unsigned int version, unsigned char* dstbuf, unsigned *buflen)
|
||||
{
|
||||
unsigned char *dst = dstbuf;
|
||||
unsigned len = 0;
|
||||
for (; len + MD5_HASH_SIZE <= buflen; len += MD5_HASH_SIZE)
|
||||
if (*buflen < MD5_HASH_SIZE)
|
||||
{
|
||||
compute_md5_hash(dst, (const char*)&version, sizeof(version));
|
||||
dst += MD5_HASH_SIZE;
|
||||
version++;
|
||||
}
|
||||
if (len < buflen)
|
||||
{
|
||||
memset(dst, 0, buflen - len);
|
||||
*buflen= MD5_HASH_SIZE;
|
||||
return KEY_BUFFER_TOO_SMALL;
|
||||
}
|
||||
*buflen= MD5_HASH_SIZE;
|
||||
if (!dstbuf)
|
||||
return 0;
|
||||
|
||||
my_md5(dstbuf, (const char*)&version, sizeof(version));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int has_key_func(unsigned int keyID)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static unsigned int get_key_size(unsigned int keyID)
|
||||
{
|
||||
return 16;
|
||||
}
|
||||
|
||||
static int example_key_management_plugin_init(void *p)
|
||||
{
|
||||
/* init */
|
||||
|
|
@ -115,8 +104,6 @@ static int example_key_management_plugin_deinit(void *p)
|
|||
struct st_mariadb_encryption_key_management example_key_management_plugin= {
|
||||
MariaDB_ENCRYPTION_KEY_MANAGEMENT_INTERFACE_VERSION,
|
||||
get_latest_key_version,
|
||||
has_key_func,
|
||||
get_key_size,
|
||||
get_key
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -67,36 +67,25 @@ static unsigned int get_highest_key_used_in_key_file()
|
|||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int has_key_from_key_file(unsigned int key_id)
|
||||
static unsigned int get_key_from_key_file(unsigned int key_id,
|
||||
unsigned char* dstbuf, unsigned *buflen)
|
||||
{
|
||||
keyentry* entry = get_key(key_id);
|
||||
|
||||
return entry != NULL;
|
||||
}
|
||||
if (entry == NULL)
|
||||
return BAD_ENCRYPTION_KEY_VERSION;
|
||||
|
||||
static unsigned int get_key_size_from_key_file(unsigned int key_id)
|
||||
{
|
||||
keyentry* entry = get_key(key_id);
|
||||
|
||||
return entry ? entry->length : CRYPT_KEY_UNKNOWN;
|
||||
}
|
||||
|
||||
static int get_key_from_key_file(unsigned int key_id, unsigned char* dstbuf,
|
||||
unsigned buflen)
|
||||
{
|
||||
keyentry* entry = get_key(key_id);
|
||||
|
||||
if (entry != NULL)
|
||||
if (*buflen < entry->length)
|
||||
{
|
||||
if (buflen < entry->length)
|
||||
return CRYPT_BUFFER_TO_SMALL;
|
||||
*buflen= entry->length;
|
||||
return KEY_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
*buflen= entry->length;
|
||||
if (dstbuf)
|
||||
memcpy(dstbuf, entry->key, entry->length);
|
||||
|
||||
return CRYPT_KEY_OK;
|
||||
}
|
||||
else
|
||||
return CRYPT_KEY_UNKNOWN;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int file_key_management_plugin_init(void *p)
|
||||
|
|
@ -108,8 +97,6 @@ static int file_key_management_plugin_init(void *p)
|
|||
struct st_mariadb_encryption_key_management file_key_management_plugin= {
|
||||
MariaDB_ENCRYPTION_KEY_MANAGEMENT_INTERFACE_VERSION,
|
||||
get_highest_key_used_in_key_file,
|
||||
has_key_from_key_file,
|
||||
get_key_size_from_key_file,
|
||||
get_key_from_key_file
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue