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

Function get_s_key

lrwn/src/keys.rs:82–112  ·  view source on GitHub ↗
(
    opt_neg: bool,
    typ: u8,
    nwk_key: &AES128Key,
    net_id: &NetID,
    join_eui: &EUI64,
    join_nonce: u32,
    dev_nonce: u16,
)

Source from the content-addressed store, hash-verified

80}
81
82fn 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
114fn get_js_key(typ: u8, dev_eui: &EUI64, nwk_key: &AES128Key) -> Result<AES128Key> {
115 let key_bytes = nwk_key.to_bytes();

Callers 4

get_f_nwk_s_int_keyFunction · 0.85
get_app_s_keyFunction · 0.85
get_s_nwk_s_int_keyFunction · 0.85
get_nwk_s_enc_keyFunction · 0.85

Calls 2

to_bytesMethod · 0.45
to_le_bytesMethod · 0.45

Tested by

no test coverage detected