Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: openwallet-foundation/vcx
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 683f8a38c47de8f9a9802595b9af2d1e6660c15c
Choose a base ref
..
head repository: openwallet-foundation/vcx
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: e73b22e1698305b5d1c0e39ea583a168638b9cd9
Choose a head ref
Showing with 1,499 additions and 2,026 deletions.
  1. +0 −22 Cargo.lock
  2. +15 −25 aries_vcx/src/common/ledger/transactions.rs
  3. +16 −23 aries_vcx/src/handlers/connection/mediated_connection.rs
  4. +14 −26 aries_vcx/src/handlers/discovery/mod.rs
  5. +8 −14 aries_vcx/src/handlers/issuance/holder.rs
  6. +49 −42 aries_vcx/src/handlers/issuance/issuer.rs
  7. +4 −8 aries_vcx/src/handlers/out_of_band/receiver.rs
  8. +2 −6 aries_vcx/src/handlers/out_of_band/sender.rs
  9. +25 −18 aries_vcx/src/handlers/proof_presentation/prover.rs
  10. +26 −12 aries_vcx/src/handlers/proof_presentation/verifier.rs
  11. +6 −8 aries_vcx/src/handlers/util.rs
  12. +5 −14 aries_vcx/src/protocols/common.rs
  13. +28 −46 aries_vcx/src/protocols/connection/generic/mod.rs
  14. +25 −30 aries_vcx/src/protocols/connection/invitee/mod.rs
  15. +4 −1 aries_vcx/src/protocols/connection/invitee/states/invited.rs
  16. +28 −26 aries_vcx/src/protocols/connection/inviter/mod.rs
  17. +5 −1 aries_vcx/src/protocols/connection/inviter/states/invited.rs
  18. +10 −13 aries_vcx/src/protocols/connection/mod.rs
  19. +17 −17 aries_vcx/src/protocols/issuance/holder/state_machine.rs
  20. +21 −36 aries_vcx/src/protocols/issuance/issuer/state_machine.rs
  21. +2 −0 aries_vcx/src/protocols/issuance/issuer/states/requested_received.rs
  22. +47 −50 aries_vcx/src/protocols/mediated_connection/invitee/state_machine.rs
  23. +28 −30 aries_vcx/src/protocols/mediated_connection/inviter/state_machine.rs
  24. +25 −20 aries_vcx/src/protocols/oob/mod.rs
  25. +20 −40 aries_vcx/src/protocols/proof_presentation/prover/state_machine.rs
  26. +4 −6 aries_vcx/src/protocols/proof_presentation/prover/states/presentation_proposal_sent.rs
  27. +6 −5 aries_vcx/src/protocols/proof_presentation/prover/states/presentation_request_received.rs
  28. +33 −38 aries_vcx/src/protocols/proof_presentation/verifier/state_machine.rs
  29. +4 −6 aries_vcx/src/protocols/proof_presentation/verifier/states/presentation_proposal_received.rs
  30. +6 −5 aries_vcx/src/protocols/proof_presentation/verifier/states/presentation_request_set.rs
  31. +27 −11 aries_vcx/src/protocols/revocation_notification/mod.rs
  32. +16 −26 aries_vcx/src/protocols/revocation_notification/receiver/state_machine.rs
  33. +13 −18 aries_vcx/src/protocols/revocation_notification/sender/state_machine.rs
  34. +9 −14 aries_vcx/src/protocols/trustping/mod.rs
  35. +2 −9 aries_vcx/src/utils/encryption_envelope.rs
  36. +7 −9 aries_vcx/tests/test_connection.rs
  37. +75 −93 aries_vcx/tests/test_creds_proofs.rs
  38. +55 −83 aries_vcx/tests/utils/scenarios.rs
  39. +30 −22 libvcx_core/src/api_vcx/api_handle/mediated_connection.rs
  40. +0 −2 messages/Cargo.toml
  41. +49 −29 messages/src/decorators/attachment.rs
  42. +14 −16 messages/src/decorators/localization.rs
  43. +8 −3 messages/src/decorators/please_ack.rs
  44. +22 −14 messages/src/decorators/thread.rs
  45. +10 −16 messages/src/decorators/timing.rs
  46. +1 −5 messages/src/misc/mod.rs
  47. +12 −15 messages/src/msg_fields/protocols/basic_message.rs
  48. +18 −30 messages/src/msg_fields/protocols/connection/invitation/mod.rs
  49. +67 −81 messages/src/msg_fields/protocols/connection/invitation/pairwise.rs
  50. +18 −41 messages/src/msg_fields/protocols/connection/invitation/public.rs
  51. +1 −2 messages/src/msg_fields/protocols/connection/mod.rs
  52. +20 −20 messages/src/msg_fields/protocols/connection/problem_report.rs
  53. +14 −18 messages/src/msg_fields/protocols/connection/request.rs
  54. +24 −13 messages/src/msg_fields/protocols/connection/response.rs
  55. +13 −29 messages/src/msg_fields/protocols/cred_issuance/ack.rs
  56. +29 −22 messages/src/msg_fields/protocols/cred_issuance/issue_credential.rs
  57. +12 −4 messages/src/msg_fields/protocols/cred_issuance/mod.rs
  58. +20 −29 messages/src/msg_fields/protocols/cred_issuance/offer_credential.rs
  59. +6 −105 messages/src/msg_fields/protocols/cred_issuance/problem_report.rs
  60. +25 −30 messages/src/msg_fields/protocols/cred_issuance/propose_credential.rs
  61. +16 −16 messages/src/msg_fields/protocols/cred_issuance/request_credential.rs
  62. +15 −16 messages/src/msg_fields/protocols/discover_features/disclose.rs
  63. +7 −3 messages/src/msg_fields/protocols/discover_features/mod.rs
  64. +25 −40 messages/src/msg_fields/protocols/discover_features/query.rs
  65. +19 −12 messages/src/msg_fields/protocols/notification/ack.rs
  66. +6 −103 messages/src/msg_fields/protocols/notification/problem_report.rs
  67. +28 −24 messages/src/msg_fields/protocols/out_of_band/invitation.rs
  68. +14 −16 messages/src/msg_fields/protocols/out_of_band/reuse.rs
  69. +14 −16 messages/src/msg_fields/protocols/out_of_band/reuse_accepted.rs
  70. +13 −29 messages/src/msg_fields/protocols/present_proof/ack.rs
  71. +29 −20 messages/src/msg_fields/protocols/present_proof/present.rs
  72. +6 −104 messages/src/msg_fields/protocols/present_proof/problem_report.rs
  73. +56 −42 messages/src/msg_fields/protocols/present_proof/propose.rs
  74. +17 −17 messages/src/msg_fields/protocols/present_proof/request.rs
  75. +48 −46 messages/src/msg_fields/protocols/report_problem.rs
  76. +13 −29 messages/src/msg_fields/protocols/revocation/ack.rs
  77. +24 −18 messages/src/msg_fields/protocols/revocation/revoke.rs
  78. +8 −6 messages/src/msg_fields/protocols/routing.rs
  79. +6 −9 messages/src/msg_fields/protocols/trust_ping/ping.rs
  80. +13 −13 messages/src/msg_fields/protocols/trust_ping/ping_response.rs
  81. +15 −35 messages/src/msg_parts.rs
  82. +7 −15 wrappers/vcx-napi-rs/src/api/connection.rs
22 changes: 0 additions & 22 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 15 additions & 25 deletions aries_vcx/src/common/ledger/transactions.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use bs58;
use diddoc_legacy::aries::diddoc::AriesDidDoc;
use diddoc_legacy::aries::service::AriesService;
use messages::msg_fields::protocols::connection::invitation::{Invitation, InvitationContent};
use messages::msg_fields::protocols::connection::invitation::Invitation;
use messages::msg_fields::protocols::out_of_band::invitation::OobService;
use std::{collections::HashMap, sync::Arc};

@@ -93,35 +93,25 @@ pub async fn add_new_did(
pub async fn into_did_doc(indy_ledger: &Arc<dyn IndyLedgerRead>, invitation: &AnyInvitation) -> VcxResult<AriesDidDoc> {
let mut did_doc: AriesDidDoc = AriesDidDoc::default();
let (service_endpoint, recipient_keys, routing_keys) = match invitation {
AnyInvitation::Con(Invitation {
id,
content: InvitationContent::Public(content),
decorators,
}) => {
did_doc.set_id(content.did.to_string());
let service = get_service(indy_ledger, &content.did).await.unwrap_or_else(|err| {
error!("Failed to obtain service definition from the ledger: {}", err);
AriesService::default()
});
AnyInvitation::Con(Invitation::Public(invitation)) => {
did_doc.set_id(invitation.content.did.to_string());
let service = get_service(indy_ledger, &invitation.content.did)
.await
.unwrap_or_else(|err| {
error!("Failed to obtain service definition from the ledger: {}", err);
AriesService::default()
});
(service.service_endpoint, service.recipient_keys, service.routing_keys)
}
AnyInvitation::Con(Invitation {
id,
content: InvitationContent::Pairwise(content),
decorators,
}) => {
did_doc.set_id(id.clone());
AnyInvitation::Con(Invitation::Pairwise(invitation)) => {
did_doc.set_id(invitation.id.clone());
(
content.service_endpoint.clone(),
content.recipient_keys.clone(),
content.routing_keys.clone(),
invitation.content.service_endpoint.clone(),
invitation.content.recipient_keys.clone(),
invitation.content.routing_keys.clone(),
)
}
AnyInvitation::Con(Invitation {
id,
content: InvitationContent::PairwiseDID(content),
decorators,
}) => {
AnyInvitation::Con(Invitation::PairwiseDID(_)) => {
return Err(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidDid,
format!("PairwiseDID invitation not supported yet!"),
39 changes: 16 additions & 23 deletions aries_vcx/src/handlers/connection/mediated_connection.rs
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ use futures::future::BoxFuture;
use futures::stream::StreamExt;
use messages::decorators::timing::Timing;
use messages::msg_fields::protocols::basic_message::{BasicMessage, BasicMessageContent, BasicMessageDecorators};
use messages::msg_fields::protocols::connection::invitation::InvitationContent;
use messages::msg_fields::protocols::connection::invitation::Invitation;
use messages::msg_fields::protocols::connection::request::Request;
use messages::msg_fields::protocols::connection::Connection;
use messages::msg_fields::protocols::discover_features::disclose::Disclose;
@@ -614,16 +614,14 @@ impl MediatedConnection {
SmConnection::Invitee(sm_invitee) => {
let (sm_invitee, can_autohop) = match message {
Some(message) => match message {
AriesMessage::Connection(Connection::Invitation(invitation))
if matches!(invitation.content, InvitationContent::Public(_)) =>
{
(sm_invitee.handle_invitation(AnyInvitation::Con(invitation))?, false)
}
AriesMessage::Connection(Connection::Invitation(invitation))
if matches!(invitation.content, InvitationContent::Pairwise(_)) =>
{
(sm_invitee.handle_invitation(AnyInvitation::Con(invitation))?, false)
}
AriesMessage::Connection(Connection::Invitation(Invitation::Public(invitation))) => (
sm_invitee.handle_invitation(AnyInvitation::Con(Invitation::Public(invitation)))?,
false,
),
AriesMessage::Connection(Connection::Invitation(Invitation::Pairwise(invitation))) => (
sm_invitee.handle_invitation(AnyInvitation::Con(Invitation::Pairwise(invitation)))?,
false,
),
AriesMessage::Connection(Connection::Response(response)) => {
let send_message = self.send_message_closure_connection(Arc::clone(wallet));
(
@@ -809,20 +807,15 @@ impl MediatedConnection {
Err(_) => {
let now = Utc::now();

let content = BasicMessageContent::builder()
.content(message.to_owned())
.sent_time(now)
.build();
let content = BasicMessageContent::new(message.to_owned(), now);

let mut decorators = BasicMessageDecorators::default();
let mut timing = Timing::default();
timing.out_time = Some(now);

let decorators = BasicMessageDecorators::builder()
.timing(Timing::builder().out_time(now).build())
.build();
decorators.timing = Some(timing);

BasicMessage::builder()
.id(Uuid::new_v4().to_string())
.content(content)
.decorators(decorators)
.build()
BasicMessage::with_decorators(Uuid::new_v4().to_string(), content, decorators).into()
}
}
}
40 changes: 14 additions & 26 deletions aries_vcx/src/handlers/discovery/mod.rs
Original file line number Diff line number Diff line change
@@ -21,25 +21,17 @@ pub async fn send_discovery_query(
pw_vk: &str,
) -> VcxResult<()> {
let query = query.unwrap_or("*".to_owned());
let content = QueryContent::builder().query(query);
let mut content = QueryContent::new(query);
content.comment = comment;

let content = if let Some(comment) = comment {
content.comment(comment).build()
} else {
content.build()
};
let mut decorators = QueryDecorators::default();
let mut timing = Timing::default();
timing.out_time = Some(Utc::now());
decorators.timing = Some(timing);

let decorators = QueryDecorators::builder()
.timing(Timing::builder().out_time(Utc::now()).build())
.build();
let query = Query::with_decorators(Uuid::new_v4().to_string(), content, decorators);

let query = Query::builder()
.id(Uuid::new_v4().to_string())
.content(content)
.decorators(decorators)
.build();

send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), query).await
send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), query.into()).await
}

pub async fn respond_discovery_query(
@@ -51,16 +43,12 @@ pub async fn respond_discovery_query(
) -> VcxResult<()> {
let content = DiscloseContent::default();

let decorators = DiscloseDecorators::builder()
.thread(Thread::builder().thid(query.id).build())
.timing(Timing::builder().out_time(Utc::now()).build())
.build();
let mut decorators = DiscloseDecorators::new(Thread::new(query.id));
let mut timing = Timing::default();
timing.out_time = Some(Utc::now());
decorators.timing = Some(timing);

let disclose = Disclose::builder()
.id(Uuid::new_v4().to_string())
.content(content)
.decorators(decorators)
.build();
let disclose = Disclose::with_decorators(Uuid::new_v4().to_string(), content, decorators);

send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), disclose).await
send_message(Arc::clone(wallet), pw_vk.to_string(), did_doc.clone(), disclose.into()).await
}
22 changes: 8 additions & 14 deletions aries_vcx/src/handlers/issuance/holder.rs
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ use messages::msg_fields::protocols::cred_issuance::offer_credential::OfferCrede
use messages::msg_fields::protocols::cred_issuance::propose_credential::ProposeCredential;
use messages::msg_fields::protocols::cred_issuance::request_credential::RequestCredential;
use messages::msg_fields::protocols::cred_issuance::CredentialIssuance;
use messages::msg_fields::protocols::notification::ack::{AckContent, AckDecorators, AckStatus};
use messages::msg_fields::protocols::notification::ack::{AckDecorators, AckStatus};
use messages::msg_fields::protocols::report_problem::ProblemReport;
use messages::msg_fields::protocols::revocation::revoke::Revoke;
use messages::AriesMessage;
@@ -25,19 +25,13 @@ use crate::handlers::revocation_notification::receiver::RevocationNotificationRe
use crate::protocols::issuance::holder::state_machine::{HolderFullState, HolderSM, HolderState};

fn build_credential_ack(thread_id: &str) -> AckCredential {
let content = AckCredentialContent::builder()
.inner(AckContent::builder().status(AckStatus::Ok).build())
.build();
let decorators = AckDecorators::builder()
.thread(Thread::builder().thid(thread_id.to_owned()).build())
.timing(Timing::builder().out_time(Utc::now()).build())
.build();

AckCredential::builder()
.id(Uuid::new_v4().to_string())
.content(content)
.decorators(decorators)
.build()
let content = AckCredentialContent::new(AckStatus::Ok);
let mut decorators = AckDecorators::new(Thread::new(thread_id.to_owned()));
let mut timing = Timing::default();
timing.out_time = Some(Utc::now());
decorators.timing = Some(timing);

AckCredential::with_decorators(Uuid::new_v4().to_string(), content, decorators)
}

#[derive(Serialize, Deserialize, Debug, Clone)]
91 changes: 49 additions & 42 deletions aries_vcx/src/handlers/issuance/issuer.rs
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ use aries_vcx_core::ledger::base_ledger::AnoncredsLedgerRead;
use messages::msg_fields::protocols::cred_issuance::issue_credential::IssueCredential;
use messages::msg_fields::protocols::notification::Notification;
use messages::msg_fields::protocols::report_problem::ProblemReport;
use messages::msg_parts::MsgParts;

use crate::errors::error::prelude::*;
use crate::handlers::util::OfferInfo;
@@ -45,7 +46,7 @@ fn _build_credential_preview(credential_json: &str) -> VcxResult<CredentialPrevi
})?;

// todo: should throw err if cred_values is not serde_json::Value::Array or serde_json::Value::Object
let mut attributes = Vec::new();
let mut credential_preview = CredentialPreview::new(Vec::new());

match cred_values {
serde_json::Value::Array(cred_values) => {
@@ -59,54 +60,48 @@ fn _build_credential_preview(credential_json: &str) -> VcxResult<CredentialPrevi
format!("No 'value' field in cred_value: {:?}", cred_value),
))?;

let name = key
.as_str()
.ok_or(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidOption,
"Credential value names are currently only allowed to be strings",
))?
.to_owned();

let value = value
.as_str()
.ok_or(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidOption,
"Credential values are currently only allowed to be strings",
))?
.to_owned();

let attr = CredentialAttr::builder()
.name(name)
.value(value)
.mime_type(MimeType::Plain)
.build();

attributes.push(attr);
let mut attr = CredentialAttr::new(
key.as_str()
.ok_or(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidOption,
"Credential value names are currently only allowed to be strings",
))?
.to_owned(),
value
.as_str()
.ok_or(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidOption,
"Credential values are currently only allowed to be strings",
))?
.to_owned(),
);

attr.mime_type = Some(MimeType::Plain);
credential_preview.attributes.push(attr);
}
}
serde_json::Value::Object(values_map) => {
for item in values_map.iter() {
let (key, value) = item;
let value = value
.as_str()
.ok_or(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidOption,
"Credential values are currently only allowed to be strings",
))?
.to_owned();
let attr = CredentialAttr::builder()
.name(key.to_owned())
.value(value)
.mime_type(MimeType::Plain)
.build();

attributes.push(attr);

let mut attr = CredentialAttr::new(
key.to_owned(),
value
.as_str()
.ok_or(AriesVcxError::from_msg(
AriesVcxErrorKind::InvalidOption,
"Credential values are currently only allowed to be strings",
))?
.to_owned(),
);

attr.mime_type = Some(MimeType::Plain);
credential_preview.attributes.push(attr);
}
}
_ => {}
};

Ok(CredentialPreview::new(attributes))
Ok(credential_preview)
}

impl Issuer {
@@ -284,10 +279,22 @@ impl Issuer {
}
AriesMessage::ReportProblem(report) => self.issuer_sm.clone().receive_problem_report(report)?,
AriesMessage::Notification(Notification::ProblemReport(report)) => {
self.issuer_sm.clone().receive_problem_report(report.into())?
let MsgParts {
id,
content,
decorators,
} = report;
let report = ProblemReport::with_decorators(id, content.0, decorators);
self.issuer_sm.clone().receive_problem_report(report)?
}
AriesMessage::CredentialIssuance(CredentialIssuance::ProblemReport(report)) => {
self.issuer_sm.clone().receive_problem_report(report.into())?
let MsgParts {
id,
content,
decorators,
} = report;
let report = ProblemReport::with_decorators(id, content.0, decorators);
self.issuer_sm.clone().receive_problem_report(report)?
}
_ => self.issuer_sm.clone(),
};
Loading