Skip to content

Commit 9a3a79f

Browse files
committed
Removed ReferencesMap trait in favor of cloning
Signed-off-by: Bogdan Mircea <[email protected]>
1 parent 9f49ef0 commit 9a3a79f

File tree

10 files changed

+152
-271
lines changed

10 files changed

+152
-271
lines changed

src/data_types/cred_def.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@ impl CredentialDefinition {
5656
.map_err(|e| e.to_string())?;
5757
Ok(key)
5858
}
59+
60+
pub fn try_clone(&self) -> Result<Self, crate::Error> {
61+
let cred_data = CredentialDefinitionData {
62+
primary: self.value.primary.try_clone()?,
63+
revocation: self.value.revocation.clone(),
64+
};
65+
66+
Ok(Self {
67+
schema_id: self.schema_id.clone(),
68+
signature_type: self.signature_type,
69+
tag: self.tag.clone(),
70+
value: cred_data,
71+
issuer_id: self.issuer_id.clone(),
72+
})
73+
}
5974
}
6075

6176
impl Validatable for CredentialDefinition {

src/ffi/presentation.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,18 @@ pub extern "C" fn anoncreds_create_presentation(
177177
}
178178

179179
let schemas = AnoncredsObjectList::load(schemas.as_slice())?;
180-
let schemas = schemas.refs_map::<SchemaId, Schema>(&schema_identifiers)?;
180+
let schemas = schemas
181+
.refs_map::<SchemaId, Schema>(&schema_identifiers)?
182+
.into_iter()
183+
.map(|(k, v)| (k.clone(), v.clone()))
184+
.collect();
181185

182186
let cred_defs = AnoncredsObjectList::load(cred_defs.as_slice())?;
183187
let cred_defs = cred_defs
184-
.refs_map::<CredentialDefinitionId, CredentialDefinition>(&cred_def_identifiers)?;
188+
.refs_map::<CredentialDefinitionId, CredentialDefinition>(&cred_def_identifiers)?
189+
.into_iter()
190+
.map(|(k, v)| v.try_clone().map(|v| (k.clone(), v)))
191+
.collect::<Result<_>>()?;
185192

186193
let presentation = create_presentation(
187194
pres_req.load()?.cast_ref()?,
@@ -292,17 +299,27 @@ pub extern "C" fn anoncreds_verify_presentation(
292299
}
293300

294301
let schemas = AnoncredsObjectList::load(schemas.as_slice())?;
295-
let schemas = schemas.refs_map::<SchemaId, Schema>(&schema_identifiers)?;
302+
let schemas = schemas
303+
.refs_map::<SchemaId, Schema>(&schema_identifiers)?
304+
.into_iter()
305+
.map(|(k, v)| (k.clone(), v.clone()))
306+
.collect();
296307

297308
let cred_defs = AnoncredsObjectList::load(cred_defs.as_slice())?;
298309
let cred_defs = cred_defs
299-
.refs_map::<CredentialDefinitionId, CredentialDefinition>(&cred_def_identifiers)?;
310+
.refs_map::<CredentialDefinitionId, CredentialDefinition>(&cred_def_identifiers)?
311+
.into_iter()
312+
.map(|(k, v)| v.try_clone().map(|v| (k.clone(), v)))
313+
.collect::<Result<_>>()?;
300314

301315
let rev_reg_defs = AnoncredsObjectList::load(rev_reg_defs.as_slice())?;
302316
let rev_reg_defs = rev_reg_defs
303317
.refs_map::<RevocationRegistryDefinitionId, RevocationRegistryDefinition>(
304318
&rev_reg_def_identifiers,
305-
)?;
319+
)?
320+
.into_iter()
321+
.map(|(k, v)| (k.clone(), v.clone()))
322+
.collect::<HashMap<_, _>>();
306323

307324
let rev_reg_defs = if rev_reg_defs.is_empty() {
308325
None
@@ -328,12 +345,14 @@ pub extern "C" fn anoncreds_verify_presentation(
328345
let mut map_nonrevoked_interval_override = HashMap::new();
329346
for (id, req_timestamp, override_timestamp) in &override_entries {
330347
map_nonrevoked_interval_override
331-
.entry(id)
348+
.entry(id.clone())
332349
.or_insert_with(HashMap::new)
333350
.insert(*req_timestamp, *override_timestamp);
334351
}
335352

336-
let rev_status_lists = rev_status_list.as_ref().map(|v| v.iter().copied());
353+
let rev_status_lists = rev_status_list
354+
.as_ref()
355+
.map(|v| v.iter().copied().cloned().collect());
337356

338357
let verify = verify_presentation(
339358
presentation.load()?.cast_ref()?,

src/services/prover.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ use crate::services::helpers::{
2727
get_revealed_attributes_for_credential, new_nonce,
2828
};
2929
use crate::types::{CredentialRevocationState, PresentCredentials};
30-
use crate::utils::ref_map::ReferencesMap;
3130
use crate::utils::validation::Validatable;
3231
use bitvec::bitvec;
3332
use std::collections::{HashMap, HashSet};
@@ -375,11 +374,11 @@ pub fn process_credential(
375374
///
376375
/// let mut schemas = HashMap::new();
377376
/// let schema_id = SchemaId::new_unchecked("did:web:xyz/resource/schema");
378-
/// schemas.insert(&schema_id, &schema);
377+
/// schemas.insert(schema_id, schema);
379378
///
380379
/// let mut cred_defs = HashMap::new();
381380
/// let cred_def_id = CredentialDefinitionId::new_unchecked("did:web:xyz/resource/cred-def");
382-
/// cred_defs.insert(&cred_def_id, &cred_def);
381+
/// cred_defs.insert(cred_def_id, cred_def);
383382
///
384383
/// let mut present = PresentCredentials::default();
385384
/// let mut cred1 = present.add_credential(
@@ -399,18 +398,14 @@ pub fn process_credential(
399398
/// &cred_defs
400399
/// ).expect("Unable to create presentation");
401400
/// ```
402-
pub fn create_presentation<T, U>(
401+
pub fn create_presentation(
403402
pres_req: &PresentationRequest,
404403
credentials: PresentCredentials,
405404
self_attested: Option<HashMap<String, String>>,
406405
link_secret: &LinkSecret,
407-
schemas: &T,
408-
cred_defs: &U,
409-
) -> Result<Presentation>
410-
where
411-
T: ReferencesMap<SchemaId, Schema> + std::fmt::Debug,
412-
U: ReferencesMap<CredentialDefinitionId, CredentialDefinition> + std::fmt::Debug,
413-
{
406+
schemas: &HashMap<SchemaId, Schema>,
407+
cred_defs: &HashMap<CredentialDefinitionId, CredentialDefinition>,
408+
) -> Result<Presentation> {
414409
trace!("create_proof >>> credentials: {:?}, pres_req: {:?}, credentials: {:?}, self_attested: {:?}, link_secret: {:?}, schemas: {:?}, cred_defs: {:?}",
415410
credentials, pres_req, credentials, &self_attested, secret!(&link_secret), schemas, cred_defs);
416411

@@ -442,11 +437,11 @@ where
442437
let credential = present.cred;
443438

444439
let schema = schemas
445-
.get_ref(&credential.schema_id)
440+
.get(&credential.schema_id)
446441
.ok_or_else(|| err_msg!("Schema not provided for ID: {}", credential.schema_id))?;
447442

448443
let cred_def_id = CredentialDefinitionId::new(credential.cred_def_id.clone())?;
449-
let cred_def = cred_defs.get_ref(&cred_def_id).ok_or_else(|| {
444+
let cred_def = cred_defs.get(&cred_def_id).ok_or_else(|| {
450445
err_msg!(
451446
"Credential Definition not provided for ID: {}",
452447
credential.cred_def_id

src/services/verifier.rs

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use crate::services::helpers::build_sub_proof_request;
2323
use crate::services::helpers::get_predicates_for_credential;
2424
use crate::services::helpers::get_revealed_attributes_for_credential;
2525
use crate::utils::query::Query;
26-
use crate::utils::ref_map::ReferencesMap;
2726
use crate::utils::validation::LEGACY_DID_IDENTIFIER;
2827

2928
use once_cell::sync::Lazy;
@@ -44,23 +43,17 @@ static INTERNAL_TAG_MATCHER: Lazy<Regex> =
4443
Lazy::new(|| Regex::new("^attr::([^:]+)::(value|marker)$").unwrap());
4544

4645
/// Verify an incoming proof presentation
47-
pub fn verify_presentation<'a, T, U, V, I, Z>(
46+
pub fn verify_presentation(
4847
presentation: &Presentation,
4948
pres_req: &PresentationRequest,
50-
schemas: &T,
51-
cred_defs: &U,
52-
rev_reg_defs: Option<&V>,
53-
rev_status_lists: Option<I>,
54-
nonrevoke_interval_override: Option<&Z>,
55-
) -> Result<bool>
56-
where
57-
T: ReferencesMap<SchemaId, Schema> + std::fmt::Debug,
58-
U: ReferencesMap<CredentialDefinitionId, CredentialDefinition> + std::fmt::Debug,
59-
V: ReferencesMap<RevocationRegistryDefinitionId, RevocationRegistryDefinition>
60-
+ std::fmt::Debug,
61-
I: IntoIterator<Item = &'a RevocationStatusList> + Clone + std::fmt::Debug,
62-
Z: ReferencesMap<RevocationRegistryDefinitionId, HashMap<u64, u64>> + std::fmt::Debug,
63-
{
49+
schemas: &HashMap<SchemaId, Schema>,
50+
cred_defs: &HashMap<CredentialDefinitionId, CredentialDefinition>,
51+
rev_reg_defs: Option<&HashMap<RevocationRegistryDefinitionId, RevocationRegistryDefinition>>,
52+
rev_status_lists: Option<Vec<RevocationStatusList>>,
53+
nonrevoke_interval_override: Option<
54+
&HashMap<RevocationRegistryDefinitionId, HashMap<u64, u64>>,
55+
>,
56+
) -> Result<bool> {
6457
trace!("verify >>> presentation: {:?}, pres_req: {:?}, schemas: {:?}, cred_defs: {:?}, rev_reg_defs: {:?} rev_status_lists: {:?}",
6558
presentation, pres_req, schemas, cred_defs, rev_reg_defs, rev_status_lists);
6659

@@ -105,11 +98,11 @@ where
10598
let identifier = presentation.identifiers[sub_proof_index].clone();
10699

107100
let schema = schemas
108-
.get_ref(&identifier.schema_id)
101+
.get(&identifier.schema_id)
109102
.ok_or_else(|| err_msg!("Schema not provided for ID: {:?}", identifier.schema_id))?;
110103

111104
let cred_def_id = CredentialDefinitionId::new(identifier.cred_def_id.clone())?;
112-
let cred_def = cred_defs.get_ref(&cred_def_id).ok_or_else(|| {
105+
let cred_def = cred_defs.get(&cred_def_id).ok_or_else(|| {
113106
err_msg!(
114107
"Credential Definition not provided for ID: {:?}",
115108
identifier.cred_def_id
@@ -129,7 +122,7 @@ where
129122
.timestamp()
130123
.ok_or_else(|| err_msg!(Unexpected, "RevStatusList missing timestamp"))?;
131124

132-
let rev_reg: Option<RevocationRegistry> = list.into();
125+
let rev_reg: Option<RevocationRegistry> = (&list).into();
133126
let rev_reg = rev_reg.ok_or_else(|| {
134127
err_msg!(Unexpected, "Revocation status list missing accumulator")
135128
})?;
@@ -210,7 +203,7 @@ where
210203

211204
// Override Interval if an earlier `from` value is accepted by the verifier
212205
nonrevoke_interval_override.map(|maps| {
213-
maps.get_ref(&rev_reg_def_id).map(|map| {
206+
maps.get(&rev_reg_def_id).map(|map| {
214207
cred_nonrevoked_interval
215208
.as_mut()
216209
.map(|int| int.update_with_override(map))
@@ -225,7 +218,7 @@ where
225218
let rev_reg_def = Some(
226219
rev_reg_defs
227220
.ok_or_else(|| err_msg!("Could not load the Revocation Registry Definition"))?
228-
.get_ref(&rev_reg_def_id)
221+
.get(&rev_reg_def_id)
229222
.ok_or_else(|| {
230223
err_msg!(
231224
"Revocation Registry Definition not provided for ID: {:?}",
@@ -500,20 +493,16 @@ fn verify_revealed_attribute_value(
500493
}
501494

502495
#[allow(clippy::too_many_arguments)]
503-
fn verify_requested_restrictions<T, U>(
496+
fn verify_requested_restrictions(
504497
pres_req: &PresentationRequestPayload,
505-
schemas: &T,
506-
cred_defs: &U,
498+
schemas: &HashMap<SchemaId, Schema>,
499+
cred_defs: &HashMap<CredentialDefinitionId, CredentialDefinition>,
507500
requested_proof: &RequestedProof,
508501
received_revealed_attrs: &HashMap<String, Identifier>,
509502
received_unrevealed_attrs: &HashMap<String, Identifier>,
510503
received_predicates: &HashMap<String, Identifier>,
511504
self_attested_attrs: &HashSet<String>,
512-
) -> Result<()>
513-
where
514-
T: ReferencesMap<SchemaId, Schema>,
515-
U: ReferencesMap<CredentialDefinitionId, CredentialDefinition>,
516-
{
505+
) -> Result<()> {
517506
let proof_attr_identifiers: HashMap<String, Identifier> = received_revealed_attrs
518507
.iter()
519508
.chain(received_unrevealed_attrs)
@@ -671,16 +660,12 @@ fn is_self_attested(
671660
}
672661
}
673662

674-
fn gather_filter_info<T, U>(
663+
fn gather_filter_info(
675664
referent: &str,
676665
identifiers: &HashMap<String, Identifier>,
677-
schemas: &T,
678-
cred_defs: &U,
679-
) -> Result<Filter>
680-
where
681-
T: ReferencesMap<SchemaId, Schema>,
682-
U: ReferencesMap<CredentialDefinitionId, CredentialDefinition>,
683-
{
666+
schemas: &HashMap<SchemaId, Schema>,
667+
cred_defs: &HashMap<CredentialDefinitionId, CredentialDefinition>,
668+
) -> Result<Filter> {
684669
let identifier = identifiers.get(referent).ok_or_else(|| {
685670
err_msg!(
686671
InvalidState,
@@ -693,11 +678,11 @@ where
693678
let cred_def_id = &identifier.cred_def_id;
694679

695680
let schema = schemas
696-
.get_ref(schema_id)
681+
.get(schema_id)
697682
.ok_or_else(|| err_msg!("schema_id {schema_id} could not be found in the schemas"))?;
698683

699684
let cred_def = cred_defs
700-
.get_ref(cred_def_id)
685+
.get(cred_def_id)
701686
.ok_or_else(|| err_msg!("cred_def_id {cred_def_id} could not be found in the cred_defs"))?;
702687

703688
Ok(Filter {

src/utils/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,3 @@ pub mod query;
99

1010
#[macro_use]
1111
pub mod macros;
12-
13-
pub mod ref_map;

0 commit comments

Comments
 (0)