diff --git a/services/root-keys/src/implementation.rs b/services/root-keys/src/implementation.rs index 7b2f6a950..7a827e419 100644 --- a/services/root-keys/src/implementation.rs +++ b/services/root-keys/src/implementation.rs @@ -2401,8 +2401,10 @@ impl<'a> RootKeys { } } let sig_rec: &SignatureInFlash = unsafe{(sig_region.as_ptr() as *const SignatureInFlash).as_ref().unwrap()}; - let sig = Signature::from_bytes(&sig_rec.signature).expect("Signature malformed"); - + let sig = match Signature::from_bytes(&sig_rec.signature) { + Ok(sig) => sig, + Err(_) => return SignatureResult::MalformedSignature, + }; let mut sigtype = SignatureResult::SelfSignOk; // check against all the known signature types in detail loop { @@ -2417,7 +2419,7 @@ impl<'a> RootKeys { self.read_key_256(KeyRomLocs::DEVELOPER_PUBKEY) }, _ => { - panic!("Invalid state during check gateware signature") + return SignatureResult::InvalidSignatureType } }; // check for uninitialized signature records @@ -2436,7 +2438,10 @@ impl<'a> RootKeys { } continue; } - let pubkey = PublicKey::from_bytes(&pubkey_bytes).expect("public key was not valid"); + let pubkey = match PublicKey::from_bytes(&pubkey_bytes) { + Ok(pubkey) => pubkey, + Err(_) => return SignatureResult::InvalidPubKey, + }; let region = match region_enum { GatewareRegion::Boot => self.gateware(), diff --git a/services/root-keys/src/main.rs b/services/root-keys/src/main.rs index 5b606dbd3..21683399d 100644 --- a/services/root-keys/src/main.rs +++ b/services/root-keys/src/main.rs @@ -41,6 +41,9 @@ pub enum SignatureResult { ThirdPartyOk, DevKeyOk, Invalid, + MalformedSignature, + InvalidSignatureType, + InvalidPubKey, } #[allow(dead_code)] pub enum GatewareRegion {