over_there/core/transport/auth/
split.rs1use super::{Authenticator, Digest, Signer, Verifier};
2use std::sync::Arc;
3
4pub fn split<A>(authenticator: A) -> (SignerHalf<A>, VerifierHalf<A>)
7where
8 A: Authenticator,
9{
10 let arc_self = Arc::new(authenticator);
11 let arc_self_2 = Arc::clone(&arc_self);
12
13 let s_half = SignerHalf { signer: arc_self };
14 let v_half = VerifierHalf {
15 verifier: arc_self_2,
16 };
17 (s_half, v_half)
18}
19
20pub fn clone_split<A>(original: A) -> (A, A)
23where
24 A: Authenticator + Clone,
25{
26 let clone = original.clone();
27 (original, clone)
28}
29
30pub struct SignerHalf<S>
31where
32 S: Signer,
33{
34 signer: Arc<S>,
35}
36
37impl<S> Signer for SignerHalf<S>
38where
39 S: Signer,
40{
41 fn sign(&self, message: &[u8]) -> Digest {
42 self.signer.sign(message)
43 }
44}
45
46pub struct VerifierHalf<V>
47where
48 V: Verifier,
49{
50 verifier: Arc<V>,
51}
52
53impl<V> Verifier for VerifierHalf<V>
54where
55 V: Verifier,
56{
57 fn verify(&self, message: &[u8], signature: &Digest) -> bool {
58 self.verifier.verify(message, signature)
59 }
60}