1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
use Result;
use crate::;
/// A trait for types that can encapsulate shared secrets for public key encryption.
///
/// The `Encrypter` trait defines an interface for encapsulating a shared secret using
/// a public key. This is a key part of hybrid encryption schemes, where a shared
/// symmetric key is encapsulated with a public key, and the recipient uses their
/// private key to recover the symmetric key.
///
/// Types implementing this trait provide the ability to:
/// 1. Access their encapsulation public key
/// 2. Generate and encapsulate new shared secrets
///
/// This trait is typically implemented by:
/// - Encapsulation public keys
/// - Higher-level types that contain or can generate encapsulation public keys
/// A trait for types that can decapsulate shared secrets for public key decryption.
///
/// The `Decrypter` trait defines an interface for decapsulating (recovering) a shared
/// secret using a private key. This is the counterpart to the `Encrypter` trait and is
/// used by the recipient of encapsulated messages.
///
/// Types implementing this trait provide the ability to:
/// 1. Access their encapsulation private key
/// 2. Decapsulate shared secrets from ciphertexts
///
/// This trait is typically implemented by:
/// - Encapsulation private keys
/// - Higher-level types that contain or can access encapsulation private keys