(&mut self)
| 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"); |
no test coverage detected