@@ -536,6 +536,19 @@ pub(crate) fn time_to_timestamp(time: SystemTime) -> i64 {
536
536
pub ( crate ) trait EncryptableStore {
537
537
fn get_cypher ( & self ) -> Option < & StoreCipher > ;
538
538
539
+ /// If the store is using encryption, this will hash the given key. This is
540
+ /// useful when we need to do queries against a given key, but we don't
541
+ /// need to store the key in plain text (i.e. it's not both a key and a
542
+ /// value).
543
+ fn encode_key ( & self , table_name : & str , key : impl AsRef < [ u8 ] > ) -> Key {
544
+ let bytes = key. as_ref ( ) ;
545
+ if let Some ( store_cipher) = self . get_cypher ( ) {
546
+ Key :: Hashed ( store_cipher. hash_key ( table_name, bytes) )
547
+ } else {
548
+ Key :: Plain ( bytes. to_owned ( ) )
549
+ }
550
+ }
551
+
539
552
fn encode_value ( & self , value : Vec < u8 > ) -> Result < Vec < u8 > > {
540
553
if let Some ( key) = self . get_cypher ( ) {
541
554
let encrypted = key. encrypt_value_data ( value) ?;
@@ -545,16 +558,6 @@ pub(crate) trait EncryptableStore {
545
558
}
546
559
}
547
560
548
- fn serialize_value ( & self , value : & impl Serialize ) -> Result < Vec < u8 > > {
549
- let serialized = rmp_serde:: to_vec_named ( value) ?;
550
- self . encode_value ( serialized)
551
- }
552
-
553
- fn serialize_json ( & self , value : & impl Serialize ) -> Result < Vec < u8 > > {
554
- let serialized = serde_json:: to_vec ( value) ?;
555
- self . encode_value ( serialized)
556
- }
557
-
558
561
fn decode_value < ' a > ( & self , value : & ' a [ u8 ] ) -> Result < Cow < ' a , [ u8 ] > > {
559
562
if let Some ( key) = self . get_cypher ( ) {
560
563
let encrypted = rmp_serde:: from_slice ( value) ?;
@@ -565,6 +568,21 @@ pub(crate) trait EncryptableStore {
565
568
}
566
569
}
567
570
571
+ fn serialize_value ( & self , value : & impl Serialize ) -> Result < Vec < u8 > > {
572
+ let serialized = rmp_serde:: to_vec_named ( value) ?;
573
+ self . encode_value ( serialized)
574
+ }
575
+
576
+ fn deserialize_value < T : DeserializeOwned > ( & self , value : & [ u8 ] ) -> Result < T > {
577
+ let decoded = self . decode_value ( value) ?;
578
+ Ok ( rmp_serde:: from_slice ( & decoded) ?)
579
+ }
580
+
581
+ fn serialize_json ( & self , value : & impl Serialize ) -> Result < Vec < u8 > > {
582
+ let serialized = serde_json:: to_vec ( value) ?;
583
+ self . encode_value ( serialized)
584
+ }
585
+
568
586
fn deserialize_json < T : DeserializeOwned > ( & self , data : & [ u8 ] ) -> Result < T > {
569
587
let decoded = self . decode_value ( data) ?;
570
588
@@ -594,20 +612,6 @@ pub(crate) trait EncryptableStore {
594
612
err. into_inner ( ) . into ( )
595
613
} )
596
614
}
597
-
598
- fn deserialize_value < T : DeserializeOwned > ( & self , value : & [ u8 ] ) -> Result < T > {
599
- let decoded = self . decode_value ( value) ?;
600
- Ok ( rmp_serde:: from_slice ( & decoded) ?)
601
- }
602
-
603
- fn encode_key ( & self , table_name : & str , key : impl AsRef < [ u8 ] > ) -> Key {
604
- let bytes = key. as_ref ( ) ;
605
- if let Some ( store_cipher) = self . get_cypher ( ) {
606
- Key :: Hashed ( store_cipher. hash_key ( table_name, bytes) )
607
- } else {
608
- Key :: Plain ( bytes. to_owned ( ) )
609
- }
610
- }
611
615
}
612
616
613
617
#[ cfg( test) ]
0 commit comments