CUBRID Engine
latest
|
#include "storage_common.h"
Go to the source code of this file.
Classes | |
struct | tde_data_key_set |
struct | tde_mk_file_item |
struct | tde_cipher |
struct | tde_keyinfo |
Macros | |
#define | TDE_DK_ALGORITHM TDE_ALGORITHM_AES |
#define | TDE_DATA_PAGE_ENC_OFFSET sizeof (FILEIO_PAGE_RESERVED) |
#define | TDE_DATA_PAGE_ENC_LENGTH DB_PAGESIZE |
#define | TDE_LOG_PAGE_ENC_OFFSET sizeof (LOG_HDRPAGE) |
#define | TDE_LOG_PAGE_ENC_LENGTH ((LOG_PAGESIZE) - (TDE_LOG_PAGE_ENC_OFFSET)) |
#define | TDE_DATA_PAGE_NONCE_LENGTH 16 |
#define | TDE_LOG_PAGE_NONCE_LENGTH 16 |
#define | TDE_DK_NONCE_LENGTH 16 |
#define | TDE_MASTER_KEY_LENGTH 32 |
#define | TDE_DATA_KEY_LENGTH 32 |
#define | TDE_MK_FILE_CONTENTS_START CUBRID_MAGIC_MAX_LENGTH |
#define | TDE_MK_FILE_ITEM_SIZE (sizeof (TDE_MK_FILE_ITEM)) |
#define | TDE_MK_FILE_ITEM_OFFSET(index) (TDE_MK_FILE_CONTENTS_START + TDE_MK_FILE_ITEM_SIZE * (index)) |
#define | TDE_MK_FILE_ITEM_INDEX(offset) (((offset) - TDE_MK_FILE_CONTENTS_START) / TDE_MK_FILE_ITEM_SIZE) |
#define | TDE_MK_FILE_ITEM_COUNT_MAX 128 |
#define | LOG_MAY_CONTAIN_USER_DATA(rcvindex) |
Typedefs | |
typedef fileio_page | FILEIO_PAGE |
typedef log_page | LOG_PAGE |
typedef enum tde_data_key_type | TDE_DATA_KEY_TYPE |
typedef struct tde_data_key_set | TDE_DATA_KEY_SET |
typedef struct tde_mk_file_item | TDE_MK_FILE_ITEM |
typedef struct tde_cipher | TDE_CIPHER |
typedef struct tde_keyinfo | TDE_KEYINFO |
Enumerations | |
enum | TDE_ALGORITHM { TDE_ALGORITHM_NONE = 0, TDE_ALGORITHM_AES = 1, TDE_ALGORITHM_ARIA = 2 } |
enum | tde_data_key_type { TDE_DATA_KEY_TYPE_PERM, TDE_DATA_KEY_TYPE_TEMP, TDE_DATA_KEY_TYPE_LOG } |
Functions | |
int | tde_initialize (THREAD_ENTRY *thread_p, HFID *keyinfo_hfid) |
int | tde_cipher_initialize (THREAD_ENTRY *thread_p, const HFID *keyinfo_hfid, const char *mk_path_given) |
int | tde_get_keyinfo (THREAD_ENTRY *thread_p, TDE_KEYINFO *keyinfo) |
void | tde_make_keys_file_fullname (char *keys_vol_fullname, const char *db_full_name, bool ignore_parm) |
bool | tde_validate_keys_file (int vdes) |
int | tde_copy_keys_file (THREAD_ENTRY *thread_p, const char *dest_fullname, const char *src_fullname, bool keep_dest_mount, bool keep_src_mount) |
int | tde_load_mk (int vdes, const TDE_KEYINFO *keyinfo, unsigned char *master_key) |
int | tde_change_mk (THREAD_ENTRY *thread_p, const int mk_index, const unsigned char *master_key, const time_t created_time) |
int | tde_encrypt_data_page (const FILEIO_PAGE *iopage_plain, TDE_ALGORITHM tde_algo, bool is_temp, FILEIO_PAGE *iopage_cipher) |
int | tde_decrypt_data_page (const FILEIO_PAGE *iopage_cipher, TDE_ALGORITHM tde_algo, bool is_temp, FILEIO_PAGE *iopage_plain) |
int | tde_encrypt_log_page (const LOG_PAGE *logpage_plain, TDE_ALGORITHM tde_algo, LOG_PAGE *logpage_cipher) |
int | tde_decrypt_log_page (const LOG_PAGE *logpage_cipher, TDE_ALGORITHM tde_algo, LOG_PAGE *logpage_plain) |
int | tde_create_mk (unsigned char *master_key, time_t *created_time) |
int | tde_add_mk (int vdes, const unsigned char *master_key, time_t created_time, int *mk_index) |
int | tde_find_mk (int vdes, int mk_index, unsigned char *master_key, time_t *created_time) |
int | tde_find_first_mk (int vdes, int *mk_index, unsigned char *master_key, time_t *created_time) |
int | tde_delete_mk (int vdes, const int mk_index) |
void | tde_print_mk (const unsigned char *master_key) |
int | tde_dump_mks (int vdes, bool print_value) |
const char * | tde_get_algorithm_name (TDE_ALGORITHM tde_algo) |
Variables | |
TDE_CIPHER | tde_Cipher |
#define LOG_MAY_CONTAIN_USER_DATA | ( | rcvindex | ) |
Definition at line 107 of file tde.h.
Referenced by log_append_compensate_internal(), log_append_postpone(), log_append_redo_crumbs(), log_append_run_postpone(), log_append_sysop_end(), log_append_undo_crumbs(), log_append_undoredo_crumbs(), and log_sysop_end_logical_undo().
#define TDE_DATA_KEY_LENGTH 32 |
Definition at line 55 of file tde.h.
Referenced by file_apply_tde_to_class_files(), stde_get_data_keys(), tde_create_dk(), tde_decrypt_dk(), and tde_encrypt_dk().
#define TDE_DATA_PAGE_ENC_LENGTH DB_PAGESIZE |
Definition at line 44 of file tde.h.
Referenced by tde_decrypt_data_page(), and tde_encrypt_data_page().
#define TDE_DATA_PAGE_ENC_OFFSET sizeof (FILEIO_PAGE_RESERVED) |
Definition at line 43 of file tde.h.
Referenced by tde_decrypt_data_page(), and tde_encrypt_data_page().
#define TDE_DATA_PAGE_NONCE_LENGTH 16 |
Definition at line 49 of file tde.h.
Referenced by tde_decrypt_data_page(), and tde_encrypt_data_page().
#define TDE_DK_ALGORITHM TDE_ALGORITHM_AES |
Definition at line 40 of file tde.h.
Referenced by tde_decrypt_dk(), and tde_encrypt_dk().
#define TDE_DK_NONCE_LENGTH 16 |
Definition at line 51 of file tde.h.
Referenced by tde_decrypt_dk(), tde_dk_nonce(), and tde_encrypt_dk().
#define TDE_LOG_PAGE_ENC_LENGTH ((LOG_PAGESIZE) - (TDE_LOG_PAGE_ENC_OFFSET)) |
Definition at line 46 of file tde.h.
Referenced by tde_decrypt_log_page(), and tde_encrypt_log_page().
#define TDE_LOG_PAGE_ENC_OFFSET sizeof (LOG_HDRPAGE) |
Definition at line 45 of file tde.h.
Referenced by tde_decrypt_log_page(), and tde_encrypt_log_page().
#define TDE_LOG_PAGE_NONCE_LENGTH 16 |
Definition at line 50 of file tde.h.
Referenced by tde_decrypt_log_page(), and tde_encrypt_log_page().
#define TDE_MASTER_KEY_LENGTH 32 |
Definition at line 54 of file tde.h.
Referenced by boot_reset_mk_after_restart_from_backup(), tde(), tde_add_mk(), tde_cipher_initialize(), tde_create_mk(), tde_find_first_mk(), tde_find_mk(), tde_initialize(), tde_load_mk(), tde_make_mk_hash(), tde_print_mk(), tde_validate_mk(), and xtde_change_mk_without_flock().
#define TDE_MK_FILE_CONTENTS_START CUBRID_MAGIC_MAX_LENGTH |
Definition at line 58 of file tde.h.
Referenced by tde_add_mk(), and tde_dump_mks().
#define TDE_MK_FILE_ITEM_COUNT_MAX 128 |
Definition at line 65 of file tde.h.
Referenced by tde_add_mk().
#define TDE_MK_FILE_ITEM_INDEX | ( | offset | ) | (((offset) - TDE_MK_FILE_CONTENTS_START) / TDE_MK_FILE_ITEM_SIZE) |
Definition at line 62 of file tde.h.
Referenced by tde_add_mk(), and tde_dump_mks().
#define TDE_MK_FILE_ITEM_OFFSET | ( | index | ) | (TDE_MK_FILE_CONTENTS_START + TDE_MK_FILE_ITEM_SIZE * (index)) |
Definition at line 60 of file tde.h.
Referenced by tde_delete_mk(), tde_find_first_mk(), and tde_find_mk().
#define TDE_MK_FILE_ITEM_SIZE (sizeof (TDE_MK_FILE_ITEM)) |
Definition at line 59 of file tde.h.
Referenced by tde_add_mk(), tde_delete_mk(), tde_dump_mks(), tde_find_first_mk(), and tde_find_mk().
typedef fileio_page FILEIO_PAGE |
typedef struct tde_cipher TDE_CIPHER |
typedef struct tde_data_key_set TDE_DATA_KEY_SET |
typedef enum tde_data_key_type TDE_DATA_KEY_TYPE |
typedef struct tde_keyinfo TDE_KEYINFO |
typedef struct tde_mk_file_item TDE_MK_FILE_ITEM |
enum TDE_ALGORITHM |
enum tde_data_key_type |
int tde_add_mk | ( | int | vdes, |
const unsigned char * | master_key, | ||
time_t | created_time, | ||
int * | mk_index | ||
) |
Definition at line 1351 of file tde.c.
References ARG_FILE_LINE, tde_mk_file_item::created_time, ER_ERROR_SEVERITY, ER_FAILED, ER_IO_READ, er_set(), er_set_with_oserror(), ER_TDE_INVALID_KEYS_FILE, ER_TDE_MAX_KEY_FILE, err, fileio_get_volume_label_by_fd(), tde_mk_file_item::master_key, NO_ERROR, off_signals, PEEK, restore_signals, TDE_MASTER_KEY_LENGTH, TDE_MK_FILE_CONTENTS_START, TDE_MK_FILE_ITEM_COUNT_MAX, TDE_MK_FILE_ITEM_INDEX, and TDE_MK_FILE_ITEM_SIZE.
Referenced by tde(), and tde_initialize().
int tde_change_mk | ( | THREAD_ENTRY * | thread_p, |
const int | mk_index, | ||
const unsigned char * | master_key, | ||
const time_t | created_time | ||
) |
Definition at line 649 of file tde.c.
References ARG_FILE_LINE, tde_cipher::data_keys, ER_ERROR_SEVERITY, er_set(), ER_TDE_CIPHER_IS_NOT_LOADED, err, heap_flush(), tde_cipher::is_loaded, NO_ERROR, tde_generate_keyinfo(), and tde_update_keyinfo().
Referenced by boot_reset_mk_after_restart_from_backup(), and xtde_change_mk_without_flock().
int tde_cipher_initialize | ( | THREAD_ENTRY * | thread_p, |
const HFID * | keyinfo_hfid, | ||
const char * | mk_path_given | ||
) |
Definition at line 232 of file tde.c.
References ARG_FILE_LINE, assert, ASSERT_ERROR, boot_db_full_name(), er_errid(), ER_ERROR_SEVERITY, er_set(), ER_TDE_INVALID_KEYS_FILE, err, fileio_dismount(), fileio_mount(), HFID_COPY, tde_cipher::is_loaded, LOG_DBTDE_KEYS_VOLID, tde_keyinfo::mk_index, NO_ERROR, NULL, NULL_VOLDES, tde_get_keyinfo(), tde_load_dks(), tde_load_mk(), tde_make_keys_file_fullname(), TDE_MASTER_KEY_LENGTH, tde_validate_keys_file(), and tde_cipher::temp_write_counter.
Referenced by boot_remove_all_volumes(), and boot_restart_server().
int tde_copy_keys_file | ( | THREAD_ENTRY * | thread_p, |
const char * | dest_fullname, | ||
const char * | src_fullname, | ||
bool | keep_dest_mount, | ||
bool | keep_src_mount | ||
) |
Definition at line 398 of file tde.c.
References ARG_FILE_LINE, ASSERT_ERROR, ASSERT_ERROR_AND_SET, boot_db_full_name(), er_errid(), ER_ERROR_SEVERITY, ER_FAILED, ER_IO_WRITE, er_set(), er_set_with_oserror(), ER_TDE_INVALID_KEYS_FILE, err, fileio_dismount(), fileio_is_volume_exist(), fileio_mount(), fileio_unformat_and_rename(), LOG_DBCOPY_VOLID, LOG_DBTDE_KEYS_VOLID, NO_ERROR, NULL, NULL_VOLDES, tde_create_keys_file(), and tde_validate_keys_file().
Referenced by boot_reset_mk_after_restart_from_backup(), logpb_backup(), and logpb_copy_database().
int tde_create_mk | ( | unsigned char * | master_key, |
time_t * | created_time | ||
) |
Definition at line 1311 of file tde.c.
References ARG_FILE_LINE, assert, ER_ERROR_SEVERITY, er_set(), ER_TDE_KEY_CREATION_FAIL, NO_ERROR, NULL, and TDE_MASTER_KEY_LENGTH.
Referenced by tde(), and tde_initialize().
int tde_decrypt_data_page | ( | const FILEIO_PAGE * | iopage_cipher, |
TDE_ALGORITHM | tde_algo, | ||
bool | is_temp, | ||
FILEIO_PAGE * | iopage_plain | ||
) |
Definition at line 949 of file tde.c.
References ARG_FILE_LINE, tde_cipher::data_keys, ER_ERROR_SEVERITY, er_set(), ER_TDE_CIPHER_IS_NOT_LOADED, err, tde_cipher::is_loaded, NO_ERROR, tde_data_key_set::perm_key, fileio_page::prv, TDE_DATA_PAGE_ENC_LENGTH, TDE_DATA_PAGE_ENC_OFFSET, TDE_DATA_PAGE_NONCE_LENGTH, tde_decrypt_internal(), fileio_page_reserved::tde_nonce, and tde_data_key_set::temp_key.
Referenced by pgbuf_claim_bcb_for_fix().
int tde_decrypt_log_page | ( | const LOG_PAGE * | logpage_cipher, |
TDE_ALGORITHM | tde_algo, | ||
LOG_PAGE * | logpage_plain | ||
) |
Definition at line 1027 of file tde.c.
References ARG_FILE_LINE, tde_cipher::data_keys, ER_ERROR_SEVERITY, er_set(), ER_TDE_CIPHER_IS_NOT_LOADED, log_page::hdr, tde_cipher::is_loaded, tde_data_key_set::log_key, log_hdrpage::logical_pageid, tde_decrypt_internal(), TDE_LOG_PAGE_ENC_LENGTH, TDE_LOG_PAGE_ENC_OFFSET, and TDE_LOG_PAGE_NONCE_LENGTH.
Referenced by la_log_fetch(), la_log_fetch_from_archive(), la_log_page_check(), logpb_fetch_from_archive(), logpb_read_page_from_active_log(), and logpb_read_page_from_file().
int tde_delete_mk | ( | int | vdes, |
const int | mk_index | ||
) |
Definition at line 1569 of file tde.c.
References ARG_FILE_LINE, tde_mk_file_item::created_time, ER_ERROR_SEVERITY, er_set(), ER_TDE_MASTER_KEY_NOT_FOUND, NO_ERROR, off_signals, restore_signals, TDE_MK_FILE_ITEM_OFFSET, and TDE_MK_FILE_ITEM_SIZE.
Referenced by tde().
int tde_dump_mks | ( | int | vdes, |
bool | print_value | ||
) |
Definition at line 1629 of file tde.c.
References tde_mk_file_item::created_time, CTIME_MAX, ER_FAILED, i, tde_mk_file_item::master_key, NO_ERROR, off_signals, restore_signals, TDE_MK_FILE_CONTENTS_START, TDE_MK_FILE_ITEM_INDEX, TDE_MK_FILE_ITEM_SIZE, and tde_print_mk().
Referenced by tde().
int tde_encrypt_data_page | ( | const FILEIO_PAGE * | iopage_plain, |
TDE_ALGORITHM | tde_algo, | ||
bool | is_temp, | ||
FILEIO_PAGE * | iopage_cipher | ||
) |
Definition at line 896 of file tde.c.
References ARG_FILE_LINE, tde_cipher::data_keys, ER_ERROR_SEVERITY, er_set(), ER_TDE_CIPHER_IS_NOT_LOADED, err, tde_cipher::is_loaded, fileio_page_reserved::lsa, NO_ERROR, tde_data_key_set::perm_key, fileio_page::prv, TDE_DATA_PAGE_ENC_LENGTH, TDE_DATA_PAGE_ENC_OFFSET, TDE_DATA_PAGE_NONCE_LENGTH, tde_encrypt_internal(), fileio_page_reserved::tde_nonce, tde_data_key_set::temp_key, and tde_cipher::temp_write_counter.
Referenced by pgbuf_bcb_flush_with_wal().
int tde_encrypt_log_page | ( | const LOG_PAGE * | logpage_plain, |
TDE_ALGORITHM | tde_algo, | ||
LOG_PAGE * | logpage_cipher | ||
) |
Definition at line 997 of file tde.c.
References ARG_FILE_LINE, tde_cipher::data_keys, ER_ERROR_SEVERITY, er_set(), ER_TDE_CIPHER_IS_NOT_LOADED, log_page::hdr, tde_cipher::is_loaded, tde_data_key_set::log_key, log_hdrpage::logical_pageid, tde_encrypt_internal(), TDE_LOG_PAGE_ENC_LENGTH, TDE_LOG_PAGE_ENC_OFFSET, and TDE_LOG_PAGE_NONCE_LENGTH.
Referenced by logpb_write_page_to_disk(), logpb_write_toflush_pages_to_archive(), and logpb_writev_append_pages().
int tde_find_first_mk | ( | int | vdes, |
int * | mk_index, | ||
unsigned char * | master_key, | ||
time_t * | created_time | ||
) |
Definition at line 1504 of file tde.c.
References ARG_FILE_LINE, tde_mk_file_item::created_time, ER_ERROR_SEVERITY, ER_FAILED, ER_IO_READ, er_set(), er_set_with_oserror(), ER_TDE_INVALID_KEYS_FILE, err, fileio_get_volume_label_by_fd(), tde_mk_file_item::master_key, NO_ERROR, off_signals, PEEK, restore_signals, TDE_MASTER_KEY_LENGTH, TDE_MK_FILE_ITEM_OFFSET, and TDE_MK_FILE_ITEM_SIZE.
Referenced by boot_reset_mk_after_restart_from_backup(), and tde_initialize().
int tde_find_mk | ( | int | vdes, |
int | mk_index, | ||
unsigned char * | master_key, | ||
time_t * | created_time | ||
) |
Definition at line 1437 of file tde.c.
References ARG_FILE_LINE, tde_mk_file_item::created_time, ER_ERROR_SEVERITY, er_set(), ER_TDE_MASTER_KEY_NOT_FOUND, tde_mk_file_item::master_key, NO_ERROR, NULL, off_signals, restore_signals, TDE_MASTER_KEY_LENGTH, TDE_MK_FILE_ITEM_OFFSET, and TDE_MK_FILE_ITEM_SIZE.
Referenced by tde_load_mk(), and xtde_change_mk_without_flock().
const char* tde_get_algorithm_name | ( | TDE_ALGORITHM | tde_algo | ) |
Definition at line 1694 of file tde.c.
References NULL, TDE_ALGORITHM_AES, TDE_ALGORITHM_ARIA, and TDE_ALGORITHM_NONE.
Referenced by object_printer::describe_class(), emit_schema(), file_alloc(), file_apply_tde_algorithm(), file_destroy(), file_set_tde_algorithm_internal(), logpb_next_append_page(), logpb_start_append(), pgbuf_dealloc_page(), pgbuf_rv_dealloc_undo(), pgbuf_rv_dealloc_undo_compensate(), pgbuf_set_tde_algorithm(), and pt_print_table_option().
int tde_get_keyinfo | ( | THREAD_ENTRY * | thread_p, |
TDE_KEYINFO * | keyinfo | ||
) |
Definition at line 557 of file tde.c.
References recdes::area_size, assert, COPY, recdes::data, ER_FAILED, heap_first(), heap_scancache_end(), heap_scancache_quick_start_with_class_hfid(), HFID_IS_NULL, recdes::length, NO_ERROR, NULL, and S_SUCCESS.
Referenced by boot_reset_mk_after_restart_from_backup(), tde_cipher_initialize(), xtde_change_mk_without_flock(), and xtde_get_mk_info().
int tde_initialize | ( | THREAD_ENTRY * | thread_p, |
HFID * | keyinfo_hfid | ||
) |
Definition at line 106 of file tde.c.
References recdes::area_size, ARG_FILE_LINE, ASSERT_ERROR, boot_db_full_name(), COPY_OID, recdes::data, ER_BO_VOLUME_EXISTS, er_errid(), ER_ERROR_SEVERITY, er_set(), ER_TDE_INVALID_KEYS_FILE, err, fileio_dismount(), fileio_mount(), heap_create_insert_context(), heap_insert_logical(), HFID_COPY, recdes::length, LOG_DBTDE_KEYS_VOLID, tde_data_key_set::log_key, NO_ERROR, NULL, NULL_VOLDES, tde_data_key_set::perm_key, REC_HOME, heap_operation_context::res_oid, tde_add_mk(), tde_create_dk(), tde_create_keys_file(), tde_create_mk(), tde_find_first_mk(), tde_generate_keyinfo(), tde_make_keys_file_fullname(), TDE_MASTER_KEY_LENGTH, tde_validate_keys_file(), tde_data_key_set::temp_key, and recdes::type.
Referenced by boot_create_all_volumes().
int tde_load_mk | ( | int | vdes, |
const TDE_KEYINFO * | keyinfo, | ||
unsigned char * | master_key | ||
) |
Definition at line 693 of file tde.c.
References ARG_FILE_LINE, assert, tde_keyinfo::created_time, ER_ERROR_SEVERITY, er_set(), ER_TDE_INVALID_MASTER_KEY, err, tde_keyinfo::mk_hash, tde_keyinfo::mk_index, NO_ERROR, tde_find_mk(), TDE_MASTER_KEY_LENGTH, and tde_validate_mk().
Referenced by boot_reset_mk_after_restart_from_backup(), and tde_cipher_initialize().
void tde_make_keys_file_fullname | ( | char * | keys_vol_fullname, |
const char * | db_full_name, | ||
bool | ignore_parm | ||
) |
Definition at line 492 of file tde.c.
References fileio_get_base_file_name(), fileio_make_keys_name(), fileio_make_keys_name_given_path(), NULL, prm_get_string_value(), and PRM_ID_TDE_KEYS_FILE_PATH.
Referenced by boot_reset_mk_after_restart_from_backup(), logpb_backup(), logpb_copy_database(), logpb_delete(), logpb_rename_all_volumes_files(), logpb_restore(), stde_get_mk_file_path(), tde_cipher_initialize(), tde_get_mk_file_path(), tde_initialize(), and xtde_change_mk_without_flock().
void tde_print_mk | ( | const unsigned char * | master_key | ) |
Definition at line 1332 of file tde.c.
References i, and TDE_MASTER_KEY_LENGTH.
Referenced by tde(), and tde_dump_mks().
bool tde_validate_keys_file | ( | int | vdes | ) |
Definition at line 358 of file tde.c.
References CUBRID_MAGIC_KEYS, CUBRID_MAGIC_MAX_LENGTH, off_signals, and restore_signals.
Referenced by boot_reset_mk_after_restart_from_backup(), logpb_restore(), tde_cipher_initialize(), tde_copy_keys_file(), and tde_initialize().
TDE_CIPHER tde_Cipher |
Definition at line 69 of file tde.c.
Referenced by boot_reset_mk_after_restart_from_backup(), file_apply_tde_to_class_files(), file_set_tde_algorithm(), la_apply_log_file(), la_delay_replica(), locator_update_force(), logpb_read_page_from_active_log(), logpb_set_tde_algorithm(), pgbuf_set_tde_algorithm(), prior_set_tde_encrypted(), stde_get_data_keys(), and xboot_restart_from_backup().