ssi_data_integrity/any/suite/
mod.rs

1mod unknown;
2use ssi_claims_core::ResolverProvider;
3use ssi_eip712::Eip712TypesLoaderProvider;
4use ssi_json_ld::JsonLdLoaderProvider;
5pub use unknown::*;
6
7use crate::{macros, AnyResolver, AnySignatureOptions};
8
9mod pick;
10
11macros::crypto_suites! {
12    /// W3C RSA Signature Suite 2018.
13    ///
14    /// See: <https://w3c-ccg.github.io/lds-rsa2018/>
15    #[cfg(all(feature = "w3c", feature = "rsa"))]
16    rsa_signature_2018: RsaSignature2018,
17
18    /// W3C Ed25519 Signature 2018.
19    ///
20    /// See: <https://w3c-ccg.github.io/lds-ed25519-2018/>
21    #[cfg(all(feature = "w3c", feature = "ed25519"))]
22    ed25519_signature_2018: Ed25519Signature2018,
23
24    /// W3C Ed25519 Signature 2020.
25    ///
26    /// See: <https://w3c.github.io/vc-di-eddsa/#the-ed25519signature2020-suite>
27    #[cfg(all(feature = "w3c", feature = "ed25519"))]
28    ed25519_signature_2020: Ed25519Signature2020,
29
30    /// W3C `eddsa-2022` cryptosuite, a draft version of the `eddsa-rdfc-2022`
31    /// cryptosuite.
32    ///
33    /// See: <https://www.w3.org/TR/2023/WD-vc-di-eddsa-20230714/#eddsa-2022>
34    #[cfg(all(feature = "w3c", feature = "ed25519"))]
35    eddsa_2022: EdDsa2022,
36
37    /// W3C `eddsa-rdfc-2022` cryptosuite.
38    ///
39    /// See: <https://w3c.github.io/vc-di-eddsa/#eddsa-rdfc-2022>
40    #[cfg(all(feature = "w3c", feature = "ed25519"))]
41    eddsa_rdfc_2022: EdDsaRdfc2022,
42
43    /// W3C Ecdsa Secp256k1 Signature 2019.
44    ///
45    /// See: <https://w3c-ccg.github.io/lds-ecdsa-secp256k1-2019/>
46    #[cfg(all(feature = "w3c", feature = "secp256k1"))]
47    ecdsa_secp_256k1_signature2019: EcdsaSecp256k1Signature2019,
48
49    /// W3C Ecdsa Secp256r1 Signature 2019.
50    ///
51    /// See: <https://www.w3.org/community/reports/credentials/CG-FINAL-di-ecdsa-2019-20220724/#ecdsasecp256r1signature2019>
52    #[cfg(all(feature = "w3c", feature = "secp256r1"))]
53    ecdsa_secp_256r1_signature2019: EcdsaSecp256r1Signature2019,
54
55    #[cfg(all(feature = "w3c", any(feature = "secp256r1", feature = "secp384r1")))]
56    ecdsa_rdfc_2019: EcdsaRdfc2019,
57
58    #[cfg(all(feature = "w3c", feature = "secp256r1"))]
59    ecdsa_sd_2023: EcdsaSd2023,
60
61    /// W3C JSON Web Signature 2020.
62    ///
63    /// See: <https://w3c-ccg.github.io/lds-jws2020/>
64    #[cfg(feature = "w3c")]
65    json_web_signature_2020: JsonWebSignature2020,
66
67    #[cfg(all(feature = "w3c", feature = "eip712"))]
68    ethereum_eip712_signature_2021: EthereumEip712Signature2021,
69
70    #[cfg(all(feature = "w3c", feature = "eip712"))]
71    ethereum_eip712_signature_2021_v0_1: EthereumEip712Signature2021v0_1,
72
73    #[cfg(all(feature = "w3c", feature = "bbs"))]
74    bbs_2023: Bbs2023,
75
76    /// DIF Ecdsa Secp256k1 Recovery Signature 2020.
77    ///
78    /// See: <https://identity.foundation/EcdsaSecp256k1RecoverySignature2020/>
79    #[cfg(all(feature = "dif", feature = "secp256k1"))]
80    ecdsa_secp256k1_recovery_signature2020: EcdsaSecp256k1RecoverySignature2020,
81
82    /// Unspecified Solana Signature 2021.
83    #[cfg(feature = "solana")]
84    solana_signature_2021: SolanaSignature2021,
85
86    /// Unspecified Aleo Signature 2021.
87    #[cfg(feature = "aleo")]
88    aleo_signature_2021: AleoSignature2021,
89
90    /// Unspecified Tezos Ed25519 Blake2b, digest size 20, base 58 check encoded, Signature 2021.
91    #[cfg(all(feature = "tezos", feature = "ed25519"))]
92    ed25519_blake2b_digest_size20_base58_check_encoded_signature_2021: Ed25519BLAKE2BDigestSize20Base58CheckEncodedSignature2021,
93
94    /// Unspecified Tezos P256 Blake2b, digest size 20, base 58 check encoded, Signature 2021.
95    #[cfg(all(feature = "tezos", feature = "secp256r1"))]
96    p256_blake2b_digest_size20_base58_check_encoded_signature_2021: P256BLAKE2BDigestSize20Base58CheckEncodedSignature2021,
97
98    /// Unspecified Tezos JCS Signature 2021.
99    #[cfg(feature = "tezos")]
100    tezos_jcs_signature_2021: TezosJcsSignature2021,
101
102    /// Unspecified Tezos Signature 2021.
103    #[cfg(feature = "tezos")]
104    tezos_signature_2021: TezosSignature2021,
105
106    #[cfg(all(feature = "ethereum", feature = "eip712"))]
107    eip712_signature_2021: Eip712Signature2021,
108
109    #[cfg(all(feature = "ethereum", feature = "secp256k1"))]
110    ethereum_personal_signature_2021: EthereumPersonalSignature2021,
111
112    #[cfg(all(feature = "ethereum", feature = "secp256k1"))]
113    ethereum_personal_signature_2021_v0_1: EthereumPersonalSignature2021v0_1
114}
115
116impl AnyProofOptions {
117    #[cfg(all(feature = "w3c", feature = "eip712"))]
118    pub fn eip712(
119        &self,
120    ) -> Option<&ssi_data_integrity_suites::ethereum_eip712_signature_2021::Eip712Options> {
121        match self {
122            Self::EthereumEip712Signature2021(o) => o.eip712.as_ref(),
123            _ => None,
124        }
125    }
126
127    #[cfg(all(feature = "w3c", feature = "eip712"))]
128    pub fn eip712_mut(
129        &mut self,
130    ) -> Option<&mut ssi_data_integrity_suites::ethereum_eip712_signature_2021::Eip712Options> {
131        match self {
132            Self::EthereumEip712Signature2021(o) => o.eip712.as_mut(),
133            _ => None,
134        }
135    }
136
137    #[cfg(all(feature = "w3c", feature = "eip712"))]
138    pub fn eip712_v0_1(
139        &self,
140    ) -> Option<&ssi_data_integrity_suites::ethereum_eip712_signature_2021::v0_1::Eip712Options>
141    {
142        match self {
143            Self::EthereumEip712Signature2021v0_1(o) => o.eip712.as_ref(),
144            _ => None,
145        }
146    }
147
148    #[cfg(all(feature = "w3c", feature = "eip712"))]
149    pub fn eip712_v0_1_mut(
150        &mut self,
151    ) -> Option<&mut ssi_data_integrity_suites::ethereum_eip712_signature_2021::v0_1::Eip712Options>
152    {
153        match self {
154            Self::EthereumEip712Signature2021v0_1(o) => o.eip712.as_mut(),
155            _ => None,
156        }
157    }
158}
159
160pub struct AnyVerifier<R, M, L1, L2> {
161    pub resolver: AnyResolver<R, M>,
162    pub json_ld_loader: L1,
163    pub eip712_loader: L2,
164}
165
166impl<R, M, L1, L2> ResolverProvider for AnyVerifier<R, M, L1, L2> {
167    type Resolver = AnyResolver<R, M>;
168
169    fn resolver(&self) -> &Self::Resolver {
170        &self.resolver
171    }
172}
173
174impl<R, M, L1: ssi_json_ld::Loader, L2> JsonLdLoaderProvider for AnyVerifier<R, M, L1, L2> {
175    type Loader = L1;
176
177    fn loader(&self) -> &Self::Loader {
178        &self.json_ld_loader
179    }
180}
181
182impl<R, M, L1, L2: ssi_eip712::TypesLoader> Eip712TypesLoaderProvider
183    for AnyVerifier<R, M, L1, L2>
184{
185    type Loader = L2;
186
187    fn eip712_types(&self) -> &Self::Loader {
188        &self.eip712_loader
189    }
190}