Skip to content

Commit f2a206c

Browse files
twilfredoalistair23
authored andcommitted
cli_helpers: reduce panics
Signed-off-by: Wilfred Mallawa <[email protected]>
1 parent 9a141e9 commit f2a206c

File tree

2 files changed

+67
-44
lines changed

2 files changed

+67
-44
lines changed

src/cli_helpers.rs

Lines changed: 61 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,13 @@ pub fn parse_pcie_identifiers(vid: String, dev_id: String) -> Result<(u16, u16),
5050
///
5151
/// The corresponding libspdm value for the version, None if not found.
5252
pub fn parse_spdm_responder_version(spdm_ver: Option<String>) -> Option<u8> {
53-
if let Some(ver) = spdm_ver {
54-
match ver.as_str() {
55-
"1.0" => {
56-
return Some(u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_10).unwrap())
57-
}
58-
"1.1" => {
59-
return Some(u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_11).unwrap())
60-
}
61-
"1.2" => {
62-
return Some(u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_12).unwrap())
63-
}
64-
"1.3" => {
65-
return Some(u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_13).unwrap())
66-
}
67-
_ => return None,
68-
}
69-
}
70-
None
53+
spdm_ver.and_then(|ver| match ver.as_str() {
54+
"1.0" => u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_10).ok(),
55+
"1.1" => u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_11).ok(),
56+
"1.2" => u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_12).ok(),
57+
"1.3" => u8::try_from(libspdm::libspdm_rs::SPDM_MESSAGE_VERSION_13).ok(),
58+
_ => None,
59+
})
7160
}
7261

7362
/// # Summary
@@ -100,19 +89,33 @@ pub fn parse_aead_cipher_suite(aead_cipher_suites: Option<String>) -> Result<u16
10089
match suite.as_str() {
10190
"AES_128_GCM" => {
10291
libspdm_aead_cipher_suites |=
103-
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AES_128_GCM).unwrap();
92+
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AES_128_GCM).map_err(|e| {
93+
error!("AEAD type conversion error: {e}");
94+
()
95+
})?;
10496
}
10597
"AES_256_GCM" => {
10698
libspdm_aead_cipher_suites |=
107-
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AES_256_GCM).unwrap();
99+
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AES_256_GCM).map_err(|e| {
100+
error!("AEAD type conversion error: {e}");
101+
()
102+
})?;
108103
}
109104
"CHACHA20_POLY1305" => {
110-
libspdm_aead_cipher_suites |=
111-
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_CHACHA20_POLY1305).unwrap();
105+
libspdm_aead_cipher_suites |= u16::try_from(
106+
SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_CHACHA20_POLY1305,
107+
)
108+
.map_err(|e| {
109+
error!("AEAD type conversion error: {e}");
110+
()
111+
})?;
112112
}
113113
"AEAD_SM4_GCM" => {
114114
libspdm_aead_cipher_suites |=
115-
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AEAD_SM4_GCM).unwrap();
115+
u16::try_from(SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AEAD_SM4_GCM).map_err(|e| {
116+
error!("AEAD type conversion error: {e}");
117+
()
118+
})?;
116119
}
117120
_ => {
118121
error!("Unsupported AEAD Cipher Suite ({})", suite);
@@ -160,32 +163,53 @@ pub fn parse_dhe_named_groups(dhe_groups: Option<String>) -> Result<u16, ()> {
160163
for group in groups {
161164
match group.as_str() {
162165
"FFDHE_2048" => {
163-
libspdm_dhe_groups |=
164-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_FFDHE_2048).unwrap();
166+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_FFDHE_2048)
167+
.map_err(|e| {
168+
error!("DHE type conversion error: {e}");
169+
()
170+
})?;
165171
}
166172
"FFDHE_3072" => {
167-
libspdm_dhe_groups |=
168-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_FFDHE_3072).unwrap();
173+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_FFDHE_3072)
174+
.map_err(|e| {
175+
error!("DHE type conversion error: {e}");
176+
()
177+
})?;
169178
}
170179
"FFDHE_4096" => {
171-
libspdm_dhe_groups |=
172-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_FFDHE_4096).unwrap();
180+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_FFDHE_4096)
181+
.map_err(|e| {
182+
error!("DHE type conversion error: {e}");
183+
()
184+
})?;
173185
}
174186
"SECP_256_R1" => {
175-
libspdm_dhe_groups |=
176-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_256_R1).unwrap();
187+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_256_R1)
188+
.map_err(|e| {
189+
error!("DHE type conversion error: {e}");
190+
()
191+
})?;
177192
}
178193
"SECP_384_R1" => {
179-
libspdm_dhe_groups |=
180-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_384_R1).unwrap();
194+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_384_R1)
195+
.map_err(|e| {
196+
error!("DHE type conversion error: {e}");
197+
()
198+
})?;
181199
}
182200
"SECP_521_R1" => {
183-
libspdm_dhe_groups |=
184-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_521_R1).unwrap();
201+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_521_R1)
202+
.map_err(|e| {
203+
error!("DHE type conversion error: {e}");
204+
()
205+
})?;
185206
}
186207
"SM2_P256" => {
187-
libspdm_dhe_groups |=
188-
u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SM2_P256).unwrap();
208+
libspdm_dhe_groups |= u16::try_from(SPDM_ALGORITHMS_DHE_NAMED_GROUP_SM2_P256)
209+
.map_err(|e| {
210+
error!("DHE type conversion error: {e}");
211+
()
212+
})?;
189213
}
190214
_ => {
191215
error!("Unsupported DHE group ({})", group);

src/main.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -850,13 +850,12 @@ async fn main() -> Result<(), ()> {
850850
}
851851
}
852852
// Check if version was specified
853-
let ver = cli_helpers::parse_spdm_responder_version(spdm_ver);
854-
if ver.is_none() {
855-
// spdm_ver has a default value set, if None was returned, it means
856-
// the user argument was invalid.
857-
error!("Unsupported libspdm data spdm version");
858-
return Err(());
859-
}
853+
let ver = Some(
854+
cli_helpers::parse_spdm_responder_version(spdm_ver).ok_or_else(|| {
855+
error!("Unsupported/Invalid SPDM version");
856+
()
857+
})?,
858+
);
860859
responder::setup_capabilities(
861860
cntx_ptr,
862861
0,

0 commit comments

Comments
 (0)