add message merge back with client keys

This commit is contained in:
2024-05-28 13:06:57 -05:00
parent c2afb48c39
commit 4f3b37642f

View File

@@ -211,7 +211,7 @@ def transceive_medium(medium_phase1: DarcKey, client_persistent_keys: ClientPers
return medium_phase3 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) msg_len = len(input_sequence)
if msg_len < height: if msg_len < height:
@@ -243,6 +243,59 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, m
return message 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: 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 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 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 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) (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) (alphabet_phase2, medium_phase2) = darc_phase2(alphabet_phase1, medium_phase1, client_keys, mutual_keys)
phase3_alphabet = transceive_alphabet(alphabet_phase1, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data) (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] 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) message = darc_phase_4(alphabet, darc_message, server_keys, mutual_keys)
print(original_message) print(original_message)