signstar_crypto/key/base/
nethsm.rs

1//! NetHSM specific integration for cryptographic keys.
2
3use nethsm_sdk_rs::models::SignMode;
4
5use crate::key::base::{DecryptMode, EncryptMode, KeyMechanism, KeyType, SignatureType};
6
7impl From<KeyType> for nethsm_sdk_rs::models::KeyType {
8    fn from(value: KeyType) -> Self {
9        match value {
10            KeyType::Curve25519 => Self::Curve25519,
11            KeyType::EcP256 => Self::EcP256,
12            KeyType::EcP384 => Self::EcP384,
13            KeyType::EcP521 => Self::EcP521,
14            KeyType::Generic => Self::Generic,
15            KeyType::Rsa => Self::Rsa,
16        }
17    }
18}
19
20impl TryFrom<nethsm_sdk_rs::models::KeyType> for KeyType {
21    type Error = crate::key::Error;
22    /// Creates a [`KeyType`] from a [`nethsm_sdk_rs::models::KeyType`].
23    ///
24    /// # Panics
25    ///
26    /// Panics if `value` is [`nethsm_sdk_rs::models::KeyType::EcP224`].
27    /// This variant is about to be removed from [`nethsm_sdk_rs::models::KeyType`] and [`KeyType`]
28    /// does not support it.
29    fn try_from(value: nethsm_sdk_rs::models::KeyType) -> Result<Self, Self::Error> {
30        Ok(match value {
31            nethsm_sdk_rs::models::KeyType::Curve25519 => Self::Curve25519,
32            nethsm_sdk_rs::models::KeyType::EcP224 => {
33                unimplemented!(
34                    "Elliptic Curve P224 is not implemented and the nethsm-sdk-rs crate will drop it in the future"
35                )
36            }
37            nethsm_sdk_rs::models::KeyType::EcP256 => Self::EcP256,
38            nethsm_sdk_rs::models::KeyType::EcP384 => Self::EcP384,
39            nethsm_sdk_rs::models::KeyType::EcP521 => Self::EcP521,
40            nethsm_sdk_rs::models::KeyType::Generic => Self::Generic,
41            nethsm_sdk_rs::models::KeyType::Rsa => Self::Rsa,
42        })
43    }
44}
45
46impl From<&nethsm_sdk_rs::models::KeyMechanism> for KeyMechanism {
47    fn from(value: &nethsm_sdk_rs::models::KeyMechanism) -> Self {
48        match value {
49            nethsm_sdk_rs::models::KeyMechanism::AesDecryptionCbc => Self::AesDecryptionCbc,
50            nethsm_sdk_rs::models::KeyMechanism::AesEncryptionCbc => Self::AesEncryptionCbc,
51            nethsm_sdk_rs::models::KeyMechanism::EcdsaSignature => Self::EcdsaSignature,
52            nethsm_sdk_rs::models::KeyMechanism::EdDsaSignature => Self::EdDsaSignature,
53            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionOaepMd5 => Self::RsaDecryptionOaepMd5,
54            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionOaepSha1 => {
55                Self::RsaDecryptionOaepSha1
56            }
57            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionOaepSha224 => {
58                Self::RsaDecryptionOaepSha224
59            }
60            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionOaepSha256 => {
61                Self::RsaDecryptionOaepSha256
62            }
63            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionOaepSha384 => {
64                Self::RsaDecryptionOaepSha384
65            }
66            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionOaepSha512 => {
67                Self::RsaDecryptionOaepSha512
68            }
69            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionPkcs1 => Self::RsaDecryptionPkcs1,
70            nethsm_sdk_rs::models::KeyMechanism::RsaDecryptionRaw => Self::RsaDecryptionRaw,
71            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePkcs1 => Self::RsaSignaturePkcs1,
72            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePssMd5 => Self::RsaSignaturePssMd5,
73            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePssSha1 => Self::RsaSignaturePssSha1,
74            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePssSha224 => {
75                Self::RsaSignaturePssSha224
76            }
77            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePssSha256 => {
78                Self::RsaSignaturePssSha256
79            }
80            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePssSha384 => {
81                Self::RsaSignaturePssSha384
82            }
83            nethsm_sdk_rs::models::KeyMechanism::RsaSignaturePssSha512 => {
84                Self::RsaSignaturePssSha512
85            }
86        }
87    }
88}
89
90impl From<KeyMechanism> for nethsm_sdk_rs::models::KeyMechanism {
91    fn from(value: KeyMechanism) -> Self {
92        match value {
93            KeyMechanism::AesDecryptionCbc => Self::AesDecryptionCbc,
94            KeyMechanism::AesEncryptionCbc => Self::AesEncryptionCbc,
95            KeyMechanism::EcdsaSignature => Self::EcdsaSignature,
96            KeyMechanism::EdDsaSignature => Self::EdDsaSignature,
97            KeyMechanism::RsaDecryptionOaepMd5 => Self::RsaDecryptionOaepMd5,
98            KeyMechanism::RsaDecryptionOaepSha1 => Self::RsaDecryptionOaepSha1,
99            KeyMechanism::RsaDecryptionOaepSha224 => Self::RsaDecryptionOaepSha224,
100            KeyMechanism::RsaDecryptionOaepSha256 => Self::RsaDecryptionOaepSha256,
101            KeyMechanism::RsaDecryptionOaepSha384 => Self::RsaDecryptionOaepSha384,
102            KeyMechanism::RsaDecryptionOaepSha512 => Self::RsaDecryptionOaepSha512,
103            KeyMechanism::RsaDecryptionPkcs1 => Self::RsaDecryptionPkcs1,
104            KeyMechanism::RsaDecryptionRaw => Self::RsaDecryptionRaw,
105            KeyMechanism::RsaSignaturePkcs1 => Self::RsaSignaturePkcs1,
106            KeyMechanism::RsaSignaturePssMd5 => Self::RsaSignaturePssMd5,
107            KeyMechanism::RsaSignaturePssSha1 => Self::RsaSignaturePssSha1,
108            KeyMechanism::RsaSignaturePssSha224 => Self::RsaSignaturePssSha224,
109            KeyMechanism::RsaSignaturePssSha256 => Self::RsaSignaturePssSha256,
110            KeyMechanism::RsaSignaturePssSha384 => Self::RsaSignaturePssSha384,
111            KeyMechanism::RsaSignaturePssSha512 => Self::RsaSignaturePssSha512,
112        }
113    }
114}
115
116impl From<SignatureType> for SignMode {
117    /// Creates a [`SignMode`] from a [`SignatureType`].
118    ///
119    /// # Note
120    ///
121    /// The more specific [`SignatureType::EcdsaP256`], [`SignatureType::EcdsaP384`] and
122    /// [`SignatureType::EcdsaP521`] are returned as [`SignMode::Ecdsa`].
123    fn from(value: SignatureType) -> Self {
124        match value {
125            SignatureType::Pkcs1 => SignMode::Pkcs1,
126            SignatureType::PssMd5 => SignMode::PssMd5,
127            SignatureType::PssSha1 => SignMode::PssSha1,
128            SignatureType::PssSha224 => SignMode::PssSha224,
129            SignatureType::PssSha256 => SignMode::PssSha256,
130            SignatureType::PssSha384 => SignMode::PssSha384,
131            SignatureType::PssSha512 => SignMode::PssSha512,
132            SignatureType::EdDsa => SignMode::EdDsa,
133            SignatureType::EcdsaP256 | SignatureType::EcdsaP384 | SignatureType::EcdsaP521 => {
134                SignMode::Ecdsa
135            }
136        }
137    }
138}
139
140impl From<EncryptMode> for nethsm_sdk_rs::models::EncryptMode {
141    fn from(value: EncryptMode) -> Self {
142        match value {
143            EncryptMode::AesCbc => Self::AesCbc,
144        }
145    }
146}
147
148impl From<DecryptMode> for nethsm_sdk_rs::models::DecryptMode {
149    fn from(value: DecryptMode) -> Self {
150        match value {
151            DecryptMode::AesCbc => Self::AesCbc,
152            DecryptMode::OaepMd5 => Self::OaepMd5,
153            DecryptMode::OaepSha1 => Self::OaepSha1,
154            DecryptMode::OaepSha224 => Self::OaepSha224,
155            DecryptMode::OaepSha256 => Self::OaepSha256,
156            DecryptMode::OaepSha384 => Self::OaepSha384,
157            DecryptMode::OaepSha512 => Self::OaepSha512,
158            DecryptMode::Pkcs1 => Self::Pkcs1,
159            DecryptMode::Raw => Self::Raw,
160        }
161    }
162}