Modify fields encryption, can selectively encrypt and fields that are not decrypted stay as they are
This commit is contained in:
parent
8e42596184
commit
c3c6549339
@ -92,6 +92,7 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> {
|
|||||||
|
|
||||||
fn encrypt_fields(
|
fn encrypt_fields(
|
||||||
&self,
|
&self,
|
||||||
|
fields_to_encrypt: &[String],
|
||||||
fields2keys: &mut Map<String, Value>,
|
fields2keys: &mut Map<String, Value>,
|
||||||
fields2cipher: &mut Map<String, Value>,
|
fields2cipher: &mut Map<String, Value>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
@ -102,6 +103,7 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> {
|
|||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
|
|
||||||
for (field, value) in as_map {
|
for (field, value) in as_map {
|
||||||
|
if fields_to_encrypt.contains(field) {
|
||||||
let aes_key = Aes256Gcm::generate_key(&mut rng);
|
let aes_key = Aes256Gcm::generate_key(&mut rng);
|
||||||
let nonce = Aes256Gcm::generate_nonce(&mut rng);
|
let nonce = Aes256Gcm::generate_nonce(&mut rng);
|
||||||
fields2keys.insert(
|
fields2keys.insert(
|
||||||
@ -124,6 +126,9 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> {
|
|||||||
res.extend_from_slice(&cipher);
|
res.extend_from_slice(&cipher);
|
||||||
|
|
||||||
fields2cipher.insert(field.to_owned(), Value::String(res.to_lower_hex_string()));
|
fields2cipher.insert(field.to_owned(), Value::String(res.to_lower_hex_string()));
|
||||||
|
} else {
|
||||||
|
fields2cipher.insert(field.to_owned(), value.clone());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -169,7 +174,8 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> {
|
|||||||
|
|
||||||
fields2plain.insert(field.to_owned(), Value::String(decrypted_value));
|
fields2plain.insert(field.to_owned(), Value::String(decrypted_value));
|
||||||
} else {
|
} else {
|
||||||
fields2plain.insert(field.to_owned(), Value::Null);
|
// We keep the original value, that allows us to have fields that are always left unencrypted
|
||||||
|
fields2plain.insert(field.to_owned(), encrypted_value.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user