encryption/manager/
asymmetric.rs1use super::check_default;
8use crate::contract::{KeyAgreement, Signer};
9use crate::error::Result;
10use crate::registry::Registry;
11
12#[derive(Debug)]
14pub struct SignatureManager {
15 registry: Registry<Box<dyn Signer>>,
16 default_identifier: String,
17}
18
19impl SignatureManager {
20 pub fn new(
21 registry: Registry<Box<dyn Signer>>,
22 default_identifier: impl Into<String>,
23 ) -> Result<Self> {
24 let default_identifier = default_identifier.into();
25 check_default(
26 registry.has(&default_identifier),
27 "signer",
28 &default_identifier,
29 )?;
30 Ok(Self {
31 registry,
32 default_identifier,
33 })
34 }
35
36 pub fn sign(&self, message: &[u8], private_key_hex: &str) -> Result<String> {
38 self.sign_with(&self.default_identifier, message, private_key_hex)
39 }
40
41 pub fn sign_with(
42 &self,
43 identifier: &str,
44 message: &[u8],
45 private_key_hex: &str,
46 ) -> Result<String> {
47 self.registry
48 .get(identifier)?
49 .sign(message, private_key_hex)
50 }
51
52 pub fn verify(&self, message: &[u8], signature_hex: &str, public_key_hex: &str) -> Result<()> {
53 self.verify_with(
54 &self.default_identifier,
55 message,
56 signature_hex,
57 public_key_hex,
58 )
59 }
60
61 pub fn verify_with(
62 &self,
63 identifier: &str,
64 message: &[u8],
65 signature_hex: &str,
66 public_key_hex: &str,
67 ) -> Result<()> {
68 self.registry
69 .get(identifier)?
70 .verify(message, signature_hex, public_key_hex)
71 }
72
73 pub fn registry(&self) -> &Registry<Box<dyn Signer>> {
74 &self.registry
75 }
76
77 pub fn registry_mut(&mut self) -> &mut Registry<Box<dyn Signer>> {
78 &mut self.registry
79 }
80
81 pub fn default_identifier(&self) -> &str {
82 &self.default_identifier
83 }
84
85 pub fn set_default_identifier(&mut self, identifier: impl Into<String>) -> Result<()> {
86 let identifier = identifier.into();
87 check_default(self.registry.has(&identifier), "signer", &identifier)?;
88 self.default_identifier = identifier;
89 Ok(())
90 }
91}
92
93#[derive(Debug)]
95pub struct KeyAgreementManager {
96 registry: Registry<Box<dyn KeyAgreement>>,
97 default_identifier: String,
98}
99
100impl KeyAgreementManager {
101 pub fn new(
102 registry: Registry<Box<dyn KeyAgreement>>,
103 default_identifier: impl Into<String>,
104 ) -> Result<Self> {
105 let default_identifier = default_identifier.into();
106 check_default(
107 registry.has(&default_identifier),
108 "key agreement",
109 &default_identifier,
110 )?;
111 Ok(Self {
112 registry,
113 default_identifier,
114 })
115 }
116
117 pub fn agree(&self, private_key_hex: &str, peer_public_key_hex: &str) -> Result<String> {
119 self.agree_with(
120 &self.default_identifier,
121 private_key_hex,
122 peer_public_key_hex,
123 )
124 }
125
126 pub fn agree_with(
127 &self,
128 identifier: &str,
129 private_key_hex: &str,
130 peer_public_key_hex: &str,
131 ) -> Result<String> {
132 self.registry
133 .get(identifier)?
134 .agree(private_key_hex, peer_public_key_hex)
135 }
136
137 pub fn registry(&self) -> &Registry<Box<dyn KeyAgreement>> {
138 &self.registry
139 }
140
141 pub fn registry_mut(&mut self) -> &mut Registry<Box<dyn KeyAgreement>> {
142 &mut self.registry
143 }
144
145 pub fn default_identifier(&self) -> &str {
146 &self.default_identifier
147 }
148
149 pub fn set_default_identifier(&mut self, identifier: impl Into<String>) -> Result<()> {
150 let identifier = identifier.into();
151 check_default(self.registry.has(&identifier), "key agreement", &identifier)?;
152 self.default_identifier = identifier;
153 Ok(())
154 }
155}