sentc_crypto_utils/cryptomat/
mod.rs

1#[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//__________________________________________________________________________________________________
57//symmetric
58
59#[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//__________________________________________________________________________________________________
82//asymmetric
83
84#[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 SkWrapper: SkWrapper;
95	type PkWrapper: PkWrapper;
96	type KeyGen: StaticKeyPair;
97
98	// fn sk_from_inner(inner: <<Self as StaticKeyPairWrapper>::KeyGen as StaticKeyPair>::SecretKey, id: String) -> Self::SkWrapper;
99
100	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//__________________________________________________________________________________________________
120//sign
121
122#[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}