1use super::PublicKeyComponents;
2
3/// RSA key pair components.
4#[derive(Clone, Copy)]
5pub struct KeyPairComponents<Public, Private = Public> {
6 /// The public key components.
7 pub public_key: PublicKeyComponents<Public>,
8
9 /// The private exponent.
10 pub d: Private,
11
12 /// The first prime factor of `d`.
13 pub p: Private,
14
15 /// The second prime factor of `d`.
16 pub q: Private,
17
18 /// `p`'s public Chinese Remainder Theorem exponent.
19 pub dP: Private,
20
21 /// `q`'s public Chinese Remainder Theorem exponent.
22 pub dQ: Private,
23
24 /// `q**-1 mod p`.
25 pub qInv: Private,
26}
27
28impl<Public, Private> core::fmt::Debug for KeyPairComponents<Public, Private>
29where
30 PublicKeyComponents<Public>: core::fmt::Debug,
31{
32 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> Result<(), core::fmt::Error> {
33 // Non-public components are intentionally skipped
34 f&mut DebugStruct<'_, '_>.debug_struct("KeyPairComponents")
35 .field(name:"public_key", &self.public_key)
36 .finish()
37 }
38}
39