bitwarden_vault/cipher/
ssh_key.rsuse bitwarden_core::key_management::{KeyIds, SymmetricKeyId};
use bitwarden_crypto::{CryptoError, Decryptable, EncString, Encryptable, KeyStoreContext};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[cfg(feature = "wasm")]
use tsify_next::Tsify;
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct SshKey {
pub private_key: EncString,
pub public_key: EncString,
pub fingerprint: EncString,
}
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
#[cfg_attr(feature = "wasm", derive(Tsify), tsify(into_wasm_abi, from_wasm_abi))]
pub struct SshKeyView {
pub private_key: String,
pub public_key: String,
pub fingerprint: String,
}
impl Encryptable<KeyIds, SymmetricKeyId, SshKey> for SshKeyView {
fn encrypt(
&self,
ctx: &mut KeyStoreContext<KeyIds>,
key: SymmetricKeyId,
) -> Result<SshKey, CryptoError> {
Ok(SshKey {
private_key: self.private_key.encrypt(ctx, key)?,
public_key: self.public_key.encrypt(ctx, key)?,
fingerprint: self.fingerprint.encrypt(ctx, key)?,
})
}
}
impl Decryptable<KeyIds, SymmetricKeyId, SshKeyView> for SshKey {
fn decrypt(
&self,
ctx: &mut KeyStoreContext<KeyIds>,
key: SymmetricKeyId,
) -> Result<SshKeyView, CryptoError> {
Ok(SshKeyView {
private_key: self.private_key.decrypt(ctx, key)?,
public_key: self.public_key.decrypt(ctx, key)?,
fingerprint: self.fingerprint.decrypt(ctx, key)?,
})
}
}