(
opt_neg: bool,
typ: u8,
nwk_key: &AES128Key,
net_id: &NetID,
join_eui: &EUI64,
join_nonce: u32,
dev_nonce: u16,
)
| 80 | } |
| 81 | |
| 82 | fn get_s_key( |
| 83 | opt_neg: bool, |
| 84 | typ: u8, |
| 85 | nwk_key: &AES128Key, |
| 86 | net_id: &NetID, |
| 87 | join_eui: &EUI64, |
| 88 | join_nonce: u32, |
| 89 | dev_nonce: u16, |
| 90 | ) -> Result<AES128Key> { |
| 91 | let key_bytes = nwk_key.to_bytes(); |
| 92 | let key = Array::from(key_bytes); |
| 93 | let cipher = Aes128::new(&key); |
| 94 | |
| 95 | let mut b: [u8; 16] = [0; 16]; |
| 96 | |
| 97 | b[0] = typ; |
| 98 | if opt_neg { |
| 99 | b[1..4].clone_from_slice(&join_nonce.to_le_bytes()[0..3]); |
| 100 | b[4..12].clone_from_slice(&join_eui.to_le_bytes()); |
| 101 | b[12..14].clone_from_slice(&dev_nonce.to_le_bytes()[0..2]); |
| 102 | } else { |
| 103 | b[1..4].clone_from_slice(&join_nonce.to_le_bytes()[0..3]); |
| 104 | b[4..7].clone_from_slice(&net_id.to_le_bytes()); |
| 105 | b[7..9].clone_from_slice(&dev_nonce.to_le_bytes()[0..2]); |
| 106 | } |
| 107 | |
| 108 | let mut block = Block::from(b); |
| 109 | cipher.encrypt_block(&mut block); |
| 110 | |
| 111 | Ok(AES128Key::from_slice(&block)?) |
| 112 | } |
| 113 | |
| 114 | fn get_js_key(typ: u8, dev_eui: &EUI64, nwk_key: &AES128Key) -> Result<AES128Key> { |
| 115 | let key_bytes = nwk_key.to_bytes(); |
no test coverage detected