From 4f3b37642fb78b956be161eef5e934f83edff38f Mon Sep 17 00:00:00 2001 From: Donovan Date: Tue, 28 May 2024 13:06:57 -0500 Subject: [PATCH] add message merge back with client keys --- src/mimick_csharp_test.py | 65 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/src/mimick_csharp_test.py b/src/mimick_csharp_test.py index cb22946..1c679b4 100644 --- a/src/mimick_csharp_test.py +++ b/src/mimick_csharp_test.py @@ -211,7 +211,7 @@ def transceive_medium(medium_phase1: DarcKey, client_persistent_keys: ClientPers return medium_phase3 -def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]): +def merge_message_no_client(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]): msg_len = len(input_sequence) if msg_len < height: @@ -243,6 +243,59 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, m return message +def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]): + client_outer_key_1 = client_keys.persistent.data.outer_key_1 << client_keys.ephemeral.data.outer_key_1 + client_outer_key_2 = client_keys.persistent.data.outer_key_2 << client_keys.ephemeral.data.outer_key_2 + client_outer_key_1 = ~(client_outer_key_1 << client_outer_key_2) + + msg_len = len(input_sequence) + eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0] + + if msg_len < height: + padded_input_sequence = OuterKey.init_matrix(height) + padded_input_sequence.matrix = [input_sequence + padded_input_sequence.matrix[0][msg_len:]] + else: + padded_input_sequence = OuterKey(matrix=[input_sequence]) + + client_outer_key_1 = client_outer_key_1 << padded_input_sequence + + client_med_outer_key_1 = client_keys.persistent.medium.outer_key_1 << client_keys.ephemeral.medium.outer_key_1 + client_med_outer_key_2 = client_keys.persistent.medium.outer_key_2 << client_keys.ephemeral.medium.outer_key_2 + + client_med_outer_key_1 = client_med_outer_key_1 << client_med_outer_key_2 + + client_outer_key_1 = client_outer_key_1 << client_med_outer_key_1 + message = alphabet < client_outer_key_1 + + message_pad_key = ~client_med_outer_key_1 + + if msg_len < height: + message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr + + mutual_inner_key_3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3 + mutual_outer_key_6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6 + mutual_outer_key_4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4 + + outer_key_1 = mutual_outer_key_4 << mutual_outer_key_6 + + client_med_outer_key_1 = ~client_med_outer_key_1 + outer_key_1 = ~(client_med_outer_key_1 << outer_key_1) + + mutual_inner_key_3 = mutual_inner_key_3 < outer_key_1 + + message = medium ^ (message << mutual_inner_key_3) + + mutual_outer_key_5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5 + mutual_inner_key = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4 + + mutual_outer_key_4 = client_med_outer_key_1 << mutual_outer_key_4 + outer_key_2 = mutual_outer_key_5 << outer_key_1 + + message = message << (mutual_inner_key < outer_key_2) + message = message < mutual_outer_key_4 + return message + + def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys) -> DarcKey: mmo6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6 mmo4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4 @@ -444,11 +497,13 @@ if __name__ == "__main__": mutual_keys.persistent.medium.alpha_key = mutual_keys.persistent.medium.alpha_key ^ client_keys.persistent.medium.alpha_key (alphabet_phase1, medium_phase1) = darc_phase1(alphabet, server_keys, mutual_keys) - phase3_medium = transceive_medium(medium_phase1, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium) - phase3_alphabet = transceive_alphabet(alphabet_phase1, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data) + (alphabet_phase2, medium_phase2) = darc_phase2(alphabet_phase1, medium_phase1, client_keys, mutual_keys) + (phase3_alphabet, phase3_medium) = darc_phase3(alphabet_phase2, medium_phase2, client_keys, mutual_keys) + #phase3_medium = transceive_medium(medium_phase1, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium) + #phase3_alphabet = transceive_alphabet(alphabet_phase1, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data) original_message = OuterKey.init_matrix(height).matrix[0] - darc_message = merge_message(phase3_alphabet, phase3_medium, client_keys, mutual_keys, original_message) - + #darc_message = merge_message_no_client(phase3_alphabet, phase3_medium, client_keys, mutual_keys, original_message) + darc_message = merge_message(phase3_alphabet, phase3_medium,client_keys, mutual_keys, original_message) message = darc_phase_4(alphabet, darc_message, server_keys, mutual_keys) print(original_message)