|
|
@@ -107,21 +107,37 @@ fn radio_thread(updates: &mpsc::Sender<SensorUpdate>) -> Result<(), Error> {
|
|
107
|
107
|
let mut payload = payload.as_ref().to_vec();
|
|
108
|
108
|
|
|
109
|
109
|
let sensor_id = payload[0];
|
|
110
|
|
- let salt = payload[0..8].to_vec();
|
|
|
110
|
+ let mut salt = payload[0..8].to_vec();
|
|
111
|
111
|
|
|
112
|
112
|
// Decrypt the package
|
|
113
|
113
|
let key = [
|
|
114
|
114
|
0x9e, 0x37, 0x79, 0xb9, 0x9b, 0x97, 0x73, 0xe9, 0xb9, 0x79, 0x37, 0x9e, 0x6b, 0x69,
|
|
115
|
115
|
0x51, 0x56,
|
|
116
|
116
|
]; //TODO: define somewhere else
|
|
117
|
|
- decrypt(&key, &mut payload.as_mut_slice()[8..32]);
|
|
|
117
|
+ //decrypt(&key, &mut payload.as_mut_slice()[8..32]);
|
|
118
|
118
|
|
|
119
|
|
- info!("decrypted: {:x?}", payload);
|
|
120
|
|
- let mut current_c
|
|
121
|
|
- while (
|
|
122
|
|
- {
|
|
123
|
|
-
|
|
|
119
|
+ let mut position_in_buffer = 24;
|
|
|
120
|
+ let (mut previous_cipher_block, mut current_cipher_block) =
|
|
|
121
|
+ payload[position_in_buffer - 8..position_in_buffer + 8].split_at_mut(8);
|
|
|
122
|
+
|
|
|
123
|
+ loop {
|
|
|
124
|
+ decrypt(&key, current_cipher_block);
|
|
|
125
|
+
|
|
|
126
|
+ for i in 0..8 {
|
|
|
127
|
+ current_cipher_block[i] ^= previous_cipher_block[i];
|
|
|
128
|
+ }
|
|
|
129
|
+
|
|
|
130
|
+ position_in_buffer -= 8;
|
|
|
131
|
+ if position_in_buffer == 0 {
|
|
|
132
|
+ break;
|
|
|
133
|
+ }
|
|
|
134
|
+ info!("position_in_buffer = {}", position_in_buffer);
|
|
|
135
|
+ let blocks =
|
|
|
136
|
+ payload[position_in_buffer - 8..position_in_buffer + 8].split_at_mut(8);
|
|
|
137
|
+ previous_cipher_block = blocks.0;
|
|
|
138
|
+ current_cipher_block = blocks.1;
|
|
124
|
139
|
}
|
|
|
140
|
+ info!("decrypted: {:x?}", payload);
|
|
125
|
141
|
|
|
126
|
142
|
// Calculate the CRC
|
|
127
|
143
|
let crc_calculation_buffer = payload[8..30].to_vec();
|