@@ -43,7 +43,7 @@ pub struct VssStore {
43
43
client : VssClient < CustomRetryPolicy > ,
44
44
store_id : String ,
45
45
runtime : Arc < Runtime > ,
46
- storable_builder : StorableBuilder < RandEntropySource > ,
46
+ data_encryption_key : [ u8 ; 32 ] ,
47
47
key_obfuscator : KeyObfuscator ,
48
48
}
49
49
@@ -55,7 +55,6 @@ impl VssStore {
55
55
let ( data_encryption_key, obfuscation_master_key) =
56
56
derive_data_encryption_and_obfuscation_keys ( & vss_seed) ;
57
57
let key_obfuscator = KeyObfuscator :: new ( obfuscation_master_key) ;
58
- let storable_builder = StorableBuilder :: new ( data_encryption_key, RandEntropySource ) ;
59
58
let retry_policy = ExponentialBackoffRetryPolicy :: new ( Duration :: from_millis ( 10 ) )
60
59
. with_max_attempts ( 10 )
61
60
. with_max_total_delay ( Duration :: from_secs ( 15 ) )
@@ -70,7 +69,7 @@ impl VssStore {
70
69
} ) as _ ) ;
71
70
72
71
let client = VssClient :: new_with_headers ( base_url, retry_policy, header_provider) ;
73
- Self { client, store_id, runtime, storable_builder , key_obfuscator }
72
+ Self { client, store_id, runtime, data_encryption_key , key_obfuscator }
74
73
}
75
74
76
75
fn build_key (
@@ -132,10 +131,9 @@ impl KVStore for VssStore {
132
131
& self , primary_namespace : & str , secondary_namespace : & str , key : & str ,
133
132
) -> io:: Result < Vec < u8 > > {
134
133
check_namespace_key_validity ( primary_namespace, secondary_namespace, Some ( key) , "read" ) ?;
135
- let request = GetObjectRequest {
136
- store_id : self . store_id . clone ( ) ,
137
- key : self . build_key ( primary_namespace, secondary_namespace, key) ?,
138
- } ;
134
+
135
+ let store_key = self . build_key ( primary_namespace, secondary_namespace, key) ?;
136
+ let request = GetObjectRequest { store_id : self . store_id . clone ( ) , key : store_key. clone ( ) } ;
139
137
let resp = self . runtime . block_on ( self . client . get_object ( & request) ) . map_err ( |e| {
140
138
let msg = format ! (
141
139
"Failed to read from key {}/{}/{}: {}" ,
@@ -156,20 +154,24 @@ impl KVStore for VssStore {
156
154
Error :: new ( ErrorKind :: Other , msg)
157
155
} ) ?;
158
156
159
- Ok ( self . storable_builder . deconstruct ( storable) ?. 0 )
157
+ let storable_builder = StorableBuilder :: new ( self . data_encryption_key , RandEntropySource ) ;
158
+ let decrypted = storable_builder. deconstruct ( storable, store_key. as_bytes ( ) ) ?. 0 ;
159
+ Ok ( decrypted)
160
160
}
161
161
162
162
fn write (
163
163
& self , primary_namespace : & str , secondary_namespace : & str , key : & str , buf : & [ u8 ] ,
164
164
) -> io:: Result < ( ) > {
165
165
check_namespace_key_validity ( primary_namespace, secondary_namespace, Some ( key) , "write" ) ?;
166
+ let store_key = self . build_key ( primary_namespace, secondary_namespace, key) ?;
166
167
let version = -1 ;
167
- let storable = self . storable_builder . build ( buf. to_vec ( ) , version) ;
168
+ let storable_builder = StorableBuilder :: new ( self . data_encryption_key , RandEntropySource ) ;
169
+ let storable = storable_builder. build ( buf. to_vec ( ) , version, store_key. as_bytes ( ) ) ;
168
170
let request = PutObjectRequest {
169
171
store_id : self . store_id . clone ( ) ,
170
172
global_version : None ,
171
173
transaction_items : vec ! [ KeyValue {
172
- key: self . build_key ( primary_namespace , secondary_namespace , key ) ? ,
174
+ key: store_key ,
173
175
version,
174
176
value: storable. encode_to_vec( ) ,
175
177
} ] ,
0 commit comments