|
1 |
| -use bitwarden_ssh::import::import_der_key; |
| 1 | +use bitwarden_ssh::{error::SshKeyImportError, import::import_der_key}; |
2 | 2 | use bitwarden_vault::FieldType;
|
3 | 3 | use credential_exchange_format::SshKeyCredential;
|
4 | 4 |
|
5 | 5 | use crate::{cxf::editable_field::create_field, Field, SshKey};
|
6 | 6 |
|
7 |
| -pub(super) fn to_ssh(credential: &SshKeyCredential) -> (SshKey, Vec<Field>) { |
| 7 | +/// Convert SSH key credentials to SshKey and custom fields |
| 8 | +pub(super) fn to_ssh( |
| 9 | + credential: &SshKeyCredential, |
| 10 | +) -> Result<(SshKey, Vec<Field>), SshKeyImportError> { |
8 | 11 | // Convert to OpenSSH format
|
9 | 12 | let encoded_key: Vec<u8> = credential.private_key.as_ref().into();
|
10 |
| - let encoded_key = import_der_key(&encoded_key).expect("valid SSH key format"); |
| 13 | + let encoded_key = import_der_key(&encoded_key)?; |
11 | 14 |
|
12 | 15 | let ssh = SshKey {
|
13 | 16 | private_key: encoded_key.private_key,
|
@@ -39,7 +42,7 @@ pub(super) fn to_ssh(credential: &SshKeyCredential) -> (SshKey, Vec<Field>) {
|
39 | 42 | .flatten()
|
40 | 43 | .collect();
|
41 | 44 |
|
42 |
| - (ssh, fields) |
| 45 | + Ok((ssh, fields)) |
43 | 46 | }
|
44 | 47 |
|
45 | 48 | #[cfg(test)]
|
@@ -67,7 +70,7 @@ mod tests {
|
67 | 70 | key_generation_source: Some("Generated using OpenSSH".to_owned().into()),
|
68 | 71 | };
|
69 | 72 |
|
70 |
| - let (ssh, fields) = to_ssh(&credential); |
| 73 | + let (ssh, fields) = to_ssh(&credential).unwrap(); |
71 | 74 |
|
72 | 75 | assert_eq!(ssh.private_key, "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\nQyNTUxOQAAACDQiCIk4t4YPC6bOSb7CLzac/vC+ZudqhYqY00cxqr8zAAAAIilFVdupRVX\nbgAAAAtzc2gtZWQyNTUxOQAAACDQiCIk4t4YPC6bOSb7CLzac/vC+ZudqhYqY00cxqr8zA\nAAAEA/lPVWpGrjuBbL+G/856Qx3HWIO+FOvLImY51iz5+0NdCIIiTi3hg8Lps5JvsIvNpz\n+8L5m52qFipjTRzGqvzMAAAAAAECAwQF\n-----END OPENSSH PRIVATE KEY-----\n");
|
73 | 76 | assert_eq!(
|
|
0 commit comments