cryptohelpers/rsa/
components.rs

1//! Traits for objects with RSA key components
2use openssl::{
3    bn::BigNum,
4};
5pub trait HasComponents
6{
7    fn raw(&self) -> &[u8];
8}
9
10pub trait HasPublicComponents: HasComponents
11{
12    fn e(&self) -> &[u8];
13    fn n(&self) -> &[u8];
14    
15    /// Get the modulus component as a new `BigNum`.
16    ///
17    /// # Notes
18    /// This can panic if the internal state of the instance is incorrect
19    #[inline] fn num_n(&self) -> BigNum
20    {
21	BigNum::from_slice(self.n()).unwrap() //we assume things like this succeed because we assume the internal stat is consistant
22    }
23
24    /// Get the exponent component as a new `BigNum`
25    ///
26    /// # Notes
27    /// This can panic if the internal state of the instance is incorrect
28    #[inline] fn num_e(&self) -> BigNum
29    {
30	BigNum::from_slice(self.e()).unwrap()
31    }
32}
33
34pub trait HasPrivateComponents: HasPublicComponents
35{
36    fn d(&self) -> &[u8];
37    fn p(&self) -> &[u8];
38    fn q(&self) -> &[u8];
39    fn dmp1(&self) -> &[u8];
40    fn dmq1(&self) -> &[u8];
41    fn iqmp(&self) -> &[u8];
42
43    #[inline] fn num_d(&self) -> BigNum
44    {
45	BigNum::from_slice(self.d()).unwrap()
46    }
47    #[inline] fn num_p(&self) -> BigNum
48    {
49	BigNum::from_slice(self.p()).unwrap()
50    }
51    #[inline] fn num_q(&self) -> BigNum
52    {
53	BigNum::from_slice(self.q()).unwrap()
54    }
55    #[inline] fn num_dmp1(&self) -> BigNum
56    {
57	BigNum::from_slice(self.dmp1()).unwrap()
58    }
59    #[inline] fn num_dmq1(&self) -> BigNum
60    {
61	BigNum::from_slice(self.dmq1()).unwrap()
62    }
63    #[inline] fn num_iqmp(&self) -> BigNum
64    {
65	BigNum::from_slice(self.iqmp()).unwrap()
66    }
67}