Skip to content

Commit 22db651

Browse files
committed
Deleted module main_tests, and added all test functions in the main file itself
1 parent e06351e commit 22db651

File tree

1 file changed

+176
-11
lines changed

1 file changed

+176
-11
lines changed

src/main.rs

Lines changed: 176 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
#[cfg(test)]
2-
mod main_tests;
3-
41
const MESS : i64 = 0x0123456789ABCDEF;
52
const KEY : i64 = 0x133457799BBCDFF1;
63

@@ -29,7 +26,7 @@ const PC1 : [u8; 56] =
2926
29, 21, 13, 5, 28, 20, 12, 4];
3027

3128

32-
pub fn generate_key_plus(key: i64) -> i64 {
29+
fn generate_key_plus(key: i64) -> i64 {
3330
let mut key_plus : i64 = 0;
3431
for idx in 0..56 {
3532
let bit_to_add = key >> (64 - PC1[idx]) & 1;
@@ -40,7 +37,7 @@ pub fn generate_key_plus(key: i64) -> i64 {
4037
}
4138

4239

43-
pub fn split_key(key : i64, key_len: u8) -> (i64, i64) {
40+
fn split_key(key : i64, key_len: u8) -> (i64, i64) {
4441
let half_size = key_len / 2;
4542
let left_half = (key >> half_size) & bit_pattern_ones(half_size);
4643
let right_half = key & bit_pattern_ones(half_size);
@@ -50,7 +47,7 @@ pub fn split_key(key : i64, key_len: u8) -> (i64, i64) {
5047

5148
const LEFT_SHIFTS : [u8; 16] = [1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];
5249

53-
pub fn create_16_subkeys(left_half: i64, right_half: i64) -> Vec<(i64, i64)> {
50+
fn create_16_subkeys(left_half: i64, right_half: i64) -> Vec<(i64, i64)> {
5451
let mut subkeys : Vec<(i64, i64)> = Vec::new();
5552
subkeys.push((left_half, right_half));
5653
for idx in 0..16 {
@@ -62,14 +59,14 @@ pub fn create_16_subkeys(left_half: i64, right_half: i64) -> Vec<(i64, i64)> {
6259
subkeys
6360
}
6461

65-
pub fn bit_rotate_left(bit_pattern : i64, rol_count : u8, pattern_len: u8) -> i64 {
62+
fn bit_rotate_left(bit_pattern : i64, rol_count : u8, pattern_len: u8) -> i64 {
6663
let ones_for_rolled_bits = bit_pattern_ones(rol_count) << pattern_len - rol_count;
6764
let rotated_bits = ((ones_for_rolled_bits) & bit_pattern) >> pattern_len - rol_count;
6865
((bit_pattern << rol_count) & bit_pattern_ones(pattern_len)) | rotated_bits
6966
}
7067

7168

72-
pub fn bit_pattern_ones(how_much: u8) -> i64 {
69+
fn bit_pattern_ones(how_much: u8) -> i64 {
7370
((2u64).pow(how_much as u32) - 1) as i64
7471
}
7572

@@ -85,7 +82,7 @@ const PC2 : [u8; 48] =
8582
46, 42, 50, 36, 29, 32];
8683

8784

88-
pub fn key_kn_from_pair(left: i64, right: i64) -> i64 {
85+
fn key_kn_from_pair(left: i64, right: i64) -> i64 {
8986
let combined = ((left << 28) | right) << 8;
9087
let mut encrypted_key = 0i64;
9188
for idx in 0..48 {
@@ -97,7 +94,7 @@ pub fn key_kn_from_pair(left: i64, right: i64) -> i64 {
9794
}
9895

9996

100-
pub fn convert_pairs_to_encrypted_48_bit_keys(pairs: Vec<(i64, i64)>) -> Vec<i64> {
97+
fn convert_pairs_to_encrypted_48_bit_keys(pairs: Vec<(i64, i64)>) -> Vec<i64> {
10198
let mut keys_48_bit : Vec<i64> = Vec::new();
10299
for idx in 0..pairs.len() {
103100
keys_48_bit.push(key_kn_from_pair(pairs[idx].0, pairs[idx].1));
@@ -118,8 +115,9 @@ const IP : [u8; 64] = [
118115
61, 53,45, 37, 29,21, 13, 5,
119116
63, 55,47, 39, 31,23, 15, 7
120117
];
118+
121119
//b = bit
122-
pub fn initial_permutation_of_64bit_message(message : i64) -> i64 {
120+
fn initial_permutation_of_64bit_message(message : i64) -> i64 {
123121
let mut permutation = 0i64;
124122
for idx in 0..64 {
125123
let bit_at_index_in_message = (message >> (64 - IP[idx])) & 1;
@@ -128,3 +126,170 @@ pub fn initial_permutation_of_64bit_message(message : i64) -> i64 {
128126
}
129127
permutation
130128
}
129+
130+
131+
132+
133+
//tests
134+
#[cfg(test)]
135+
#[test]
136+
fn rotatig_bit_with_1_on_firstbit() {
137+
let bit_to_rotate : i64 = 0b1111000011110000111100001111;
138+
assert_eq!(0b1110000111100001111000011111, bit_rotate_left(bit_to_rotate, 1, 28));
139+
}
140+
141+
142+
#[cfg(test)]
143+
#[test]
144+
fn rotatig_bit_with_2_positions() {
145+
let bit_to_rotate : i64 = 0b1111_0000_1111_0000_1111_0000_1111;
146+
assert_eq!(0b1100_0011_1100_0011_1100_0011_1111, bit_rotate_left(bit_to_rotate, 2, 28));
147+
}
148+
149+
150+
#[cfg(test)]
151+
#[test]
152+
fn ones_for_2_is_11() {
153+
assert_eq!(0b11, bit_pattern_ones(2));
154+
}
155+
156+
157+
#[cfg(test)]
158+
#[test]
159+
fn creating_vector_with_keys_returns_correct_subkeys() {
160+
let subkeys = create_16_subkeys(0b1111000011001100101010101111, 0b0101010101100110011110001111);
161+
assert_eq!(16, subkeys.len());
162+
//1
163+
assert_eq!(0b1110000110011001010101011111, subkeys[0].0);
164+
assert_eq!(0b1010101011001100111100011110, subkeys[0].1);
165+
//2
166+
assert_eq!(0b1100001100110010101010111111, subkeys[1].0);
167+
assert_eq!(0b0101010110011001111000111101, subkeys[1].1);
168+
//3
169+
assert_eq!(0b0000110011001010101011111111, subkeys[2].0);
170+
assert_eq!(0b0101011001100111100011110101, subkeys[2].1);
171+
//4
172+
assert_eq!(0b0011001100101010101111111100, subkeys[3].0);
173+
assert_eq!(0b0101100110011110001111010101, subkeys[3].1);
174+
//5
175+
assert_eq!(0b1100110010101010111111110000, subkeys[4].0);
176+
assert_eq!(0b0110011001111000111101010101, subkeys[4].1);
177+
//6
178+
assert_eq!(0b0011001010101011111111000011, subkeys[5].0);
179+
assert_eq!(0b1001100111100011110101010101, subkeys[5].1);
180+
//7
181+
assert_eq!(0b1100101010101111111100001100, subkeys[6].0);
182+
assert_eq!(0b0110011110001111010101010110, subkeys[6].1);
183+
//8
184+
assert_eq!(0b0010101010111111110000110011, subkeys[7].0);
185+
assert_eq!(0b1001111000111101010101011001, subkeys[7].1);
186+
//9
187+
assert_eq!(0b0101010101111111100001100110, subkeys[8].0);
188+
assert_eq!(0b0011110001111010101010110011, subkeys[8].1);
189+
//10
190+
assert_eq!(0b0101010111111110000110011001, subkeys[9].0);
191+
assert_eq!(0b1111000111101010101011001100, subkeys[9].1);
192+
//11
193+
assert_eq!(0b0101011111111000011001100101, subkeys[10].0);
194+
assert_eq!(0b1100011110101010101100110011, subkeys[10].1);
195+
//12
196+
assert_eq!(0b0101111111100001100110010101, subkeys[11].0);
197+
assert_eq!(0b0001111010101010110011001111, subkeys[11].1);
198+
//13
199+
assert_eq!(0b0111111110000110011001010101, subkeys[12].0);
200+
assert_eq!(0b0111101010101011001100111100, subkeys[12].1);
201+
//14
202+
assert_eq!(0b1111111000011001100101010101, subkeys[13].0);
203+
assert_eq!(0b1110101010101100110011110001, subkeys[13].1);
204+
//15
205+
assert_eq!(0b1111100001100110010101010111, subkeys[14].0);
206+
assert_eq!(0b1010101010110011001111000111, subkeys[14].1);
207+
//16
208+
assert_eq!(0b1111000011001100101010101111, subkeys[15].0);
209+
assert_eq!(0b0101010101100110011110001111, subkeys[15].1);
210+
211+
}
212+
213+
214+
#[cfg(test)]
215+
#[test]
216+
fn test_spliting_a_56_bit_key_into_2_x_28_keys() {
217+
let original_key = 0b11110000110011001010101011110101010101100110011110001111;
218+
let expected_left = 0b1111000011001100101010101111;
219+
let expected_right = 0b0101010101100110011110001111;
220+
assert_eq!((expected_left, expected_right), split_key(original_key, 56));
221+
}
222+
223+
224+
#[cfg(test)]
225+
#[test]
226+
fn generate_key_plus_based_on_pc1_table() {
227+
let key = 0b0001001100110100010101110111100110011011101111001101111111110001;
228+
let key_plus = 0b11110000110011001010101011110101010101100110011110001111;
229+
assert_eq!(key_plus, generate_key_plus(key));
230+
}
231+
232+
233+
#[cfg(test)]
234+
#[test]
235+
fn creating_key_based_on_pairs_and_PC2_table() {
236+
let left = 0b1110000110011001010101011111;
237+
let right = 0b1010101011001100111100011110;
238+
let expected_key = 0b000110110000001011101111111111000111000001110010;
239+
assert_eq!(expected_key, key_kn_from_pair(left, right));
240+
}
241+
242+
243+
#[cfg(test)]
244+
#[test]
245+
fn creating_48_bit_key_based_on_maximum_pairs() {
246+
let left = 0b1111_1111_1111_1111_1111_1111_1111;
247+
let right = 0b1111_1111_1111_1111_1111_1111_1111;
248+
let expected = 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111;
249+
assert_eq!(expected, key_kn_from_pair(left, right));
250+
}
251+
252+
253+
#[cfg(test)]
254+
#[test]
255+
fn get_48_bit_keys_from_array_of_28_bit_pairs() {
256+
let pairs_28_bit = vec![(0b1110000110011001010101011111,0b1010101011001100111100011110),
257+
(0b1100001100110010101010111111,0b0101010110011001111000111101),
258+
(0b0000110011001010101011111111,0b0101011001100111100011110101),
259+
(0b0011001100101010101111111100,0b0101100110011110001111010101),
260+
261+
(0b1100110010101010111111110000,0b0110011001111000111101010101),
262+
(0b0011001010101011111111000011,0b1001100111100011110101010101),
263+
(0b1100101010101111111100001100,0b0110011110001111010101010110),
264+
(0b0010101010111111110000110011,0b1001111000111101010101011001)];
265+
266+
let expected = vec![0b000110110000001011101111111111000111000001110010,
267+
0b011110011010111011011001110110111100100111100101,
268+
0b010101011111110010001010010000101100111110011001,
269+
0b011100101010110111010110110110110011010100011101,
270+
0b011111001110110000000111111010110101001110101000,
271+
0b011000111010010100111110010100000111101100101111,
272+
0b111011001000010010110111111101100001100010111100,
273+
0b111101111000101000111010110000010011101111111011];
274+
275+
assert_eq!(expected, convert_pairs_to_encrypted_48_bit_keys(pairs_28_bit));
276+
}
277+
278+
279+
#[cfg(test)]
280+
#[test]
281+
fn permutation_of_64bit_integer_gives_58_bit() {
282+
let message_64bit = 0x123456789abcdef;
283+
let intial_permutation = 0xcc00ccfff0aaf0aa;
284+
assert_eq!(intial_permutation, initial_permutation_of_64bit_message(message_64bit));
285+
}
286+
287+
288+
#[cfg(test)]
289+
#[test]
290+
fn splitting_key_of_64_bit_into_32_bit_pair() {
291+
let key = 0xcc00ccfff0aaf0aa;
292+
let left = 0xcc00ccffi64;
293+
let right = 0xf0aaf0aai64;
294+
assert_eq!((left, right), split_key(key, 64));
295+
}

0 commit comments

Comments
 (0)