use ::serde::{Deserialize, Serialize};
use data_integrity::{
CloneCryptographicSuite, CryptographicSuite, DataIntegrity, DebugCryptographicSuite,
DeserializeCryptographicSuite, SerializeCryptographicSuite,
};
use educe::Educe;
pub use ssi_claims_core::*;
pub use ssi_jws as jws;
pub use jws::{Jws, JwsBuf, JwsPayload, JwsSlice, JwsStr, JwsString, JwsVec};
pub use ssi_jwt as jwt;
pub use jwt::JWTClaims;
pub use ssi_sd_jwt as sd_jwt;
pub use ssi_cose as cose;
pub use ssi_vc as vc;
pub use ssi_vc_jose_cose as vc_jose_cose;
pub use ssi_data_integrity as data_integrity;
#[derive(Educe, Serialize, Deserialize)]
#[serde(
untagged,
bound(
serialize = "S: SerializeCryptographicSuite",
deserialize = "S: DeserializeCryptographicSuite<'de>"
)
)]
#[educe(Clone(bound("S: CloneCryptographicSuite")))]
#[educe(Debug(bound("S: DebugCryptographicSuite")))]
pub enum JsonCredentialOrJws<S: CryptographicSuite = data_integrity::AnySuite> {
Credential(DataIntegrity<vc::AnyJsonCredential, S>),
Jws(jws::JwsString),
}
#[derive(Educe, Serialize, Deserialize)]
#[serde(
untagged,
bound(
serialize = "S: SerializeCryptographicSuite",
deserialize = "S: DeserializeCryptographicSuite<'de>"
)
)]
#[educe(Clone(bound("S: CloneCryptographicSuite")))]
#[educe(Debug(bound("S: DebugCryptographicSuite")))]
pub enum JsonPresentationOrJws<S: CryptographicSuite = data_integrity::AnySuite> {
Presentation(DataIntegrity<vc::AnyJsonPresentation, S>),
Jws(jws::JwsString),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn accept_proof_without_created_vcdm11_json_ecdsa() {
let _: DataIntegrity<vc::AnyJsonCredential, data_integrity::AnySuite> =
serde_json::from_value(serde_json::json!({
"@context": [
"https://www.w3.org/2018/credentials/v1"
],
"id": "urn:uuid:36245ee9-9074-4b05-a777-febff2e69757",
"type": [
"VerifiableCredential",
],
"issuer": "did:example:issuer",
"credentialSubject": {
"id": "urn:uuid:1a0e4ef5-091f-4060-842e-18e519ab9440"
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:example:issuer#key1",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "sdfjlsdjflskdfj"
}
}))
.unwrap();
}
#[test]
fn accept_proof_without_created_vcdm2_json_or_jws_bbs() {
let _: JsonCredentialOrJws = serde_json::from_value(serde_json::json!({
"@context": [
"https://www.w3.org/ns/credentials/v2"
],
"id": "urn:uuid:36245ee9-9074-4b05-a777-febff2e69757",
"type": [
"VerifiableCredential",
],
"issuer": "did:example:issuer",
"credentialSubject": {
"id": "urn:uuid:1a0e4ef5-091f-4060-842e-18e519ab9440"
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:example:issuer#key1",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "sdfjlsdjflskdfj"
}
}))
.unwrap();
}
}