sentc_crypto_utils/cryptomat/
mod.rs1#[cfg(feature = "encryption")]
2mod crypto;
3mod macros;
4
5use alloc::string::String;
6use core::str::FromStr;
7
8#[cfg(feature = "encryption")]
9pub use crypto::*;
10use sentc_crypto_core::cryptomat::{
11 Pk,
12 SignK,
13 SignKeyComposer,
14 SignKeyPair,
15 Sk,
16 SkComposer,
17 StaticKeyPair,
18 SymKey,
19 SymKeyComposer,
20 SymKeyGen,
21 VerifyK,
22};
23
24use crate::error::SdkUtilError;
25
26macro_rules! wrapper_trait {
27 ($name:ident, $inner:ident) => {
28 pub trait $name: FromStr + KeyToString
29 {
30 type Inner: $inner;
31
32 fn get_id(&self) -> &str;
33
34 fn get_key(&self) -> &Self::Inner;
35 }
36 };
37 ($name:ident, $inner:ident, $crypto:ident) => {
38 pub trait $name: FromStr + KeyToString + $crypto
39 {
40 type Inner: $inner;
41
42 fn get_id(&self) -> &str;
43
44 fn get_key(&self) -> &Self::Inner;
45 }
46 };
47}
48
49pub trait KeyToString
50{
51 fn to_string(self) -> Result<String, SdkUtilError>;
52
53 fn to_string_ref(&self) -> Result<String, SdkUtilError>;
54}
55
56#[cfg(not(feature = "encryption"))]
60wrapper_trait!(SymKeyWrapper, SymKey);
61
62#[cfg(feature = "encryption")]
63wrapper_trait!(SymKeyWrapper, SymKey, SymKeyCrypto);
64
65pub trait SymKeyGenWrapper
66{
67 type SymmetricKeyWrapper: SymKeyWrapper;
68 type KeyGen: SymKeyGen;
69
70 fn from_inner(inner: <<Self as SymKeyGenWrapper>::KeyGen as SymKeyGen>::SymmetricKey, id: String) -> Self::SymmetricKeyWrapper;
71}
72
73pub trait SymKeyComposerWrapper
74{
75 type SymmetricKeyWrapper: SymKeyWrapper;
76 type Composer: SymKeyComposer;
77
78 fn from_inner(inner: <<Self as SymKeyComposerWrapper>::Composer as SymKeyComposer>::SymmetricKey, id: String) -> Self::SymmetricKeyWrapper;
79}
80
81#[cfg(not(feature = "encryption"))]
85wrapper_trait!(SkWrapper, Sk);
86
87#[cfg(feature = "encryption")]
88wrapper_trait!(SkWrapper, Sk, SkCryptoWrapper);
89
90wrapper_trait!(PkWrapper, Pk, Clone);
91
92pub trait StaticKeyPairWrapper
93{
94 type PkWrapper: PkWrapper;
96 type KeyGen: StaticKeyPair;
97
98 fn pk_from_inner(inner: <<Self as StaticKeyPairWrapper>::KeyGen as StaticKeyPair>::PublicKey, id: String) -> Self::PkWrapper;
101
102 fn pk_inner_to_pem(inner: &<<Self as StaticKeyPairWrapper>::KeyGen as StaticKeyPair>::PublicKey) -> Result<String, SdkUtilError>;
103}
104
105pub trait StaticKeyComposerWrapper
106{
107 type SkWrapper: SkWrapper;
108 type PkWrapper: PkWrapper;
109 type InnerPk: Pk;
110 type Composer: SkComposer;
111
112 fn sk_from_inner(inner: <<Self as StaticKeyComposerWrapper>::Composer as SkComposer>::SecretKey, id: String) -> Self::SkWrapper;
113
114 fn pk_from_pem(public_key: &str, alg: &str, id: String) -> Result<Self::PkWrapper, SdkUtilError>;
115
116 fn pk_inner_from_pem(public_key: &str, alg: &str) -> Result<Self::InnerPk, SdkUtilError>;
117}
118
119#[cfg(not(feature = "encryption"))]
123wrapper_trait!(SignKWrapper, SignK);
124
125#[cfg(feature = "encryption")]
126wrapper_trait!(SignKWrapper, SignK, SignKCryptoWrapper);
127
128wrapper_trait!(VerifyKWrapper, VerifyK);
129
130pub trait SignKeyPairWrapper
131{
132 type KeyGen: SignKeyPair;
133
134 fn vk_inner_to_pem(inner: &<<Self as SignKeyPairWrapper>::KeyGen as SignKeyPair>::VerifyKey) -> Result<String, SdkUtilError>;
135
136 fn sig_to_string(sig: <<<Self as SignKeyPairWrapper>::KeyGen as SignKeyPair>::SignKey as SignK>::Signature) -> String;
137}
138
139pub trait SignComposerWrapper
140{
141 type SignKWrapper: SignKWrapper;
142 type VerifyKWrapper: VerifyKWrapper;
143 type InnerVk: VerifyK;
144 type Composer: SignKeyComposer;
145
146 fn sk_from_inner(inner: <<Self as SignComposerWrapper>::Composer as SignKeyComposer>::Key, id: String) -> Self::SignKWrapper;
147
148 fn vk_from_pem(public_key: &str, alg: &str, id: String) -> Result<Self::VerifyKWrapper, SdkUtilError>;
149
150 fn vk_inner_from_pem(public_key: &str, alg: &str) -> Result<Self::InnerVk, SdkUtilError>;
151
152 fn sig_to_string(sig: <<<Self as SignComposerWrapper>::SignKWrapper as SignKWrapper>::Inner as SignK>::Signature) -> String;
153
154 fn sig_from_string(sig: &str, alg: &str) -> Result<<<Self as SignComposerWrapper>::InnerVk as VerifyK>::Signature, SdkUtilError>;
155}