From 26495e973e327ff0583a63d6eca6c0d883d6f6a7 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Thu, 19 Dec 2024 14:06:38 +0100 Subject: [PATCH] Check if we don't have the roles already in clear when validating a state --- src/process.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/process.rs b/src/process.rs index 16d221b..6b57434 100644 --- a/src/process.rs +++ b/src/process.rs @@ -157,12 +157,18 @@ impl ProcessState { return Err(anyhow::anyhow!("State is identical to the previous state")); } - let mut fields2plains = Map::new(); - let fields2commit = self.pcd_commitment.as_object().ok_or(anyhow::Error::msg("pcd_commitment is not an object"))?; - self.encrypted_pcd - .decrypt_all(self.commited_in, &fields2commit, &self.keys, &mut fields2plains)?; + let roles2rules = match self.encrypted_pcd.extract_roles() { + Ok(roles) => roles, + Err(_) => { + let mut fields2plains = Map::new(); + let fields2commit = self.pcd_commitment.as_object().ok_or(anyhow::Error::msg("pcd_commitment is not an object"))?; + self.encrypted_pcd + .decrypt_all(self.commited_in, &fields2commit, &self.keys, &mut fields2plains)?; + + Value::Object(fields2plains).extract_roles()? + } + }; - let roles2rules = Value::Object(fields2plains).extract_roles()?; // Check if each modified field satisfies at least one applicable rule across all roles let all_fields_validated = modified_fields.iter().all(|field| {