diff --git a/src/process.rs b/src/process.rs index ff70c51..15bb27f 100644 --- a/src/process.rs +++ b/src/process.rs @@ -24,11 +24,20 @@ pub struct ProcessState { } impl ProcessState { - pub fn decrypt_pcd(&self) -> Value { - // TODO add real error management + pub fn decrypt_pcd(&self) -> anyhow::Result { let mut fields2plain = Map::new(); - let _ = self.encrypted_pcd.decrypt_fields(&self.keys, &mut fields2plain); - Value::Object(fields2plain) + let fields2commit = self.pcd_commitment.to_value_object()?; + self.encrypted_pcd.decrypt_fields(&fields2commit, &self.keys, &mut fields2plain)?; + Ok(Value::Object(fields2plain)) + } + + pub fn get_message_hash(&self, approval: bool) -> anyhow::Result { + let merkle_root = ::create_merkle_tree(&self.pcd_commitment)?.root().unwrap(); + if approval { + Ok(AnkHash::ValidationYes(AnkValidationYesHash::from_byte_array(merkle_root))) + } else { + Ok(AnkHash::ValidationNo(AnkValidationNoHash::from_byte_array(merkle_root))) + } } fn list_modified_fields(&self, previous_state: Option<&ProcessState>) -> Vec {