소스 검색

Implement cipher block chaining for the decryption of packets

Bernd Gottschlag 5 년 전
부모
커밋
ed128699b7
1개의 변경된 파일23개의 추가작업 그리고 7개의 파일을 삭제
  1. 23
    7
      base-station/software/src/radio.rs

+ 23
- 7
base-station/software/src/radio.rs 파일 보기

107
             let mut payload = payload.as_ref().to_vec();
107
             let mut payload = payload.as_ref().to_vec();
108
 
108
 
109
             let sensor_id = payload[0];
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
             // Decrypt the package
112
             // Decrypt the package
113
             let key = [
113
             let key = [
114
                 0x9e, 0x37, 0x79, 0xb9, 0x9b, 0x97, 0x73, 0xe9, 0xb9, 0x79, 0x37, 0x9e, 0x6b, 0x69,
114
                 0x9e, 0x37, 0x79, 0xb9, 0x9b, 0x97, 0x73, 0xe9, 0xb9, 0x79, 0x37, 0x9e, 0x6b, 0x69,
115
                 0x51, 0x56,
115
                 0x51, 0x56,
116
             ]; //TODO: define somewhere else
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
             // Calculate the CRC
142
             // Calculate the CRC
127
             let crc_calculation_buffer = payload[8..30].to_vec();
143
             let crc_calculation_buffer = payload[8..30].to_vec();

Loading…
취소
저장