MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / decrypt_frm_payload

Method decrypt_frm_payload

chirpstack/src/uplink/data.rs:591–615  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

589 }
590
591 fn decrypt_frm_payload(&mut self) -> Result<()> {
592 trace!("Decrypting FRMPayload");
593 let ds = self.device.as_ref().unwrap().get_device_session()?;
594 let mut f_port = 0;
595
596 if let lrwn::Payload::MACPayload(pl) = &self.phy_payload.payload {
597 f_port = pl.f_port.unwrap_or(0);
598 }
599
600 // Mac-commands (f_port=0) or Relay payload (f_port=226).
601 if f_port == 0 || f_port == lrwn::LA_FPORT_RELAY {
602 let nwk_s_enc_key = AES128Key::from_slice(&ds.nwk_s_enc_key)?;
603 if let Err(e) = self.phy_payload.decrypt_frm_payload(&nwk_s_enc_key) {
604 // This avoids failing in case of a corrupted mac-command in the frm_payload.
605 warn!(error = %e.full(), "Decrypting frm_payload failed");
606 }
607 } else if !self._is_end_to_end_encrypted()
608 && let Some(app_s_key) = &ds.app_s_key
609 {
610 let app_s_key = AES128Key::from_slice(&app_s_key.aes_key)?;
611 self.phy_payload.decrypt_frm_payload(&app_s_key)?;
612 }
613
614 Ok(())
615 }
616
617 async fn log_uplink_frame_set(&self) -> Result<()> {
618 trace!("Logging uplink frame-set");

Callers 4

log_downlink_frameMethod · 0.45
_handleMethod · 0.45
_handle_relayedMethod · 0.45

Calls 4

get_device_sessionMethod · 0.80
unwrapMethod · 0.80
as_refMethod · 0.80

Tested by

no test coverage detected