mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-05-11 05:13:09 +00:00
lrwn: Add function for encrypting McKey.
This commit is contained in:
parent
62e8cfb7f1
commit
d3dd14b029
@ -1,3 +1,4 @@
|
|||||||
|
use aes::cipher::BlockDecrypt;
|
||||||
use aes::cipher::{generic_array::GenericArray, BlockEncrypt, KeyInit};
|
use aes::cipher::{generic_array::GenericArray, BlockEncrypt, KeyInit};
|
||||||
use aes::{Aes128, Block};
|
use aes::{Aes128, Block};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
@ -775,6 +776,19 @@ pub fn get_mc_net_s_key(mc_key: AES128Key, mc_addr: DevAddr) -> Result<AES128Key
|
|||||||
get_key(mc_key, b)
|
get_key(mc_key, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn encrypt_mc_key(mc_ke_key: AES128Key, mc_key: AES128Key) -> [u8; 16] {
|
||||||
|
let mc_ke_key_bytes = mc_ke_key.to_bytes();
|
||||||
|
let mut mc_key_bytes = mc_key.to_bytes();
|
||||||
|
|
||||||
|
let key = GenericArray::from_slice(&mc_ke_key_bytes);
|
||||||
|
let cipher = Aes128::new(key);
|
||||||
|
|
||||||
|
let block = Block::from_mut_slice(&mut mc_key_bytes);
|
||||||
|
cipher.decrypt_block(block);
|
||||||
|
|
||||||
|
mc_key_bytes
|
||||||
|
}
|
||||||
|
|
||||||
fn get_key(key: AES128Key, b: [u8; 16]) -> Result<AES128Key> {
|
fn get_key(key: AES128Key, b: [u8; 16]) -> Result<AES128Key> {
|
||||||
let key_bytes = key.to_bytes();
|
let key_bytes = key.to_bytes();
|
||||||
let key = GenericArray::from_slice(&key_bytes);
|
let key = GenericArray::from_slice(&key_bytes);
|
||||||
@ -1367,6 +1381,17 @@ mod test {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_encrypt_mc_key() {
|
||||||
|
let ke_key = AES128Key::from_bytes([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
|
||||||
|
let mc_key = AES128Key::from_bytes([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
[52, 55, 214, 226, 49, 215, 2, 65, 155, 81, 180, 148, 114, 113, 182, 17],
|
||||||
|
encrypt_mc_key(ke_key, mc_key)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
fn run_tests_encode(tests: &[CommandTest]) {
|
fn run_tests_encode(tests: &[CommandTest]) {
|
||||||
for tst in tests {
|
for tst in tests {
|
||||||
println!("> {}", tst.name);
|
println!("> {}", tst.name);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user