39
39
#endif
40
40
41
41
#define PG_TDE_FILEMAGIC 0x03454454 /* version ID value = TDE 03 */
42
+ #define PG_TDE_MAP_FILENAME "%d_keys"
42
43
43
44
#define MAP_ENTRY_SIZE sizeof(TDEMapEntry)
44
45
#define TDE_FILE_HEADER_SIZE sizeof(TDEFileHeader)
@@ -49,6 +50,19 @@ typedef struct TDEFileHeader
49
50
TDESignedPrincipalKeyInfo signed_key_info ;
50
51
} TDEFileHeader ;
51
52
53
+ /* We do not need the dbOid since the entries are stored in a file per db */
54
+ typedef struct TDEMapEntry
55
+ {
56
+ Oid spcOid ;
57
+ RelFileNumber relNumber ;
58
+ uint32 type ;
59
+ InternalKey enc_key ;
60
+ /* IV and tag used when encrypting the key itself */
61
+ unsigned char entry_iv [MAP_ENTRY_IV_SIZE ];
62
+ unsigned char aead_tag [MAP_ENTRY_AEAD_TAG_SIZE ];
63
+ } TDEMapEntry ;
64
+
65
+ static void pg_tde_set_db_file_path (Oid dbOid , char * path );
52
66
static bool pg_tde_find_map_entry (const RelFileLocator * rlocator , TDEMapEntryType key_type , char * db_map_path , TDEMapEntry * map_entry );
53
67
static InternalKey * tde_decrypt_rel_key (TDEPrincipalKey * principal_key , TDEMapEntry * map_entry );
54
68
static int pg_tde_open_file_basic (const char * tde_filename , int fileFlags , bool ignore_missing );
@@ -360,6 +374,15 @@ pg_tde_delete_principal_key(Oid dbOid)
360
374
361
375
#endif /* !FRONTEND */
362
376
377
+ static void
378
+ pg_tde_set_db_file_path (Oid dbOid , char * path )
379
+ {
380
+ char * fname = psprintf (PG_TDE_MAP_FILENAME , dbOid );
381
+
382
+ join_path_components (path , pg_tde_get_data_dir (), fname );
383
+ pfree (fname );
384
+ }
385
+
363
386
void
364
387
pg_tde_sign_principal_key_info (TDESignedPrincipalKeyInfo * signed_key_info , const TDEPrincipalKey * principal_key )
365
388
{
0 commit comments