diff --git a/src/mimick_csharp_test.py b/src/mimick_csharp_test.py index 842c259..dc8bda6 100644 --- a/src/mimick_csharp_test.py +++ b/src/mimick_csharp_test.py @@ -1,5 +1,5 @@ from src.models import ServerEphemeralKeys, ServerPersistentKeys, ClientEphemeralKeys, ClientPersistentKeys, \ - MutualEphemeralKeys, AlphabetKey, DarcKey, OuterShuffleKey + MutualEphemeralKeys, AlphabetKey, DarcKey, OuterShuffleKey, MutualPersistentKeys import json height = 10 @@ -7,13 +7,18 @@ width = 7 block_size = 10 -def translate_data(server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - function_ephemeral_key_applied = server_persistent_keys.FunctionKey << mutual_ephemeral_keys.FunctionEphemeralKey - outer_function_ephemeral_key_applied = server_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionEphemeralKey - outer_function_function_ephemeral_key_applied = server_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionEphemeralKey +def darc_phase1(alphabet: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + alphabet_phase1 = translate_data(alphabet, server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + medium = translate_medium(server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + return alphabet_phase1, medium + +def translate_data(alphabet: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + function_ephemeral_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1 + outer_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey + outer_function_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey outer_server_shuffle_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleKey << server_ephemeral_keys.OuterServerShuffleEphemeralKey - outer_server_shuffle_function_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionEphemeralKey - input_data = server_ephemeral_keys.Alphabet < outer_server_shuffle_ephemeral_key_applied + outer_server_shuffle_function_ephemeral_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey + input_data = alphabet < outer_server_shuffle_ephemeral_key_applied server_shuffle_ephemeral_key_applied = server_ephemeral_keys.ServerShuffleEphemeralKey << server_persistent_keys.ServerShuffleKey # TODO: should this be the other way around? server_shuffle_ephemeral_key_applied = server_shuffle_ephemeral_key_applied < outer_server_shuffle_function_ephemeral_key_applied input_data = input_data << server_shuffle_ephemeral_key_applied @@ -30,11 +35,11 @@ def translate_data(server_persistent_keys: ServerPersistentKeys, server_ephemera operand = operand ^ (operand1 << inner_function_shuffled) ^ (operand2 << inner_function_shuffled) return operand -def translate_medium(server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): +def translate_medium(server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - function_ephemeral_key_applied = server_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumEphemeralKey - outer_function_ephemeral_key_applied = server_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey - outer_function_function_ephemeral_key_applied = server_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey + function_ephemeral_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey + outer_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey + outer_function_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey input_data = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)]) @@ -51,26 +56,21 @@ def translate_medium(server_persistent_keys: ServerPersistentKeys, server_epheme return operand -def darc_phase1(server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - alphabet = translate_data(server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys) - medium = translate_medium(server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys) - return alphabet, medium - -def receive_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - function_key_applied = client_persistent_keys.FunctionKey << mutual_ephemeral_keys.FunctionEphemeralKey - outer_function_key_applied = client_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionEphemeralKey - outer_function_function_key_applied = client_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionEphemeralKey +def receive_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + function_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1 + outer_function_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey + outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey inner_function_key_applied = function_key_applied < outer_function_function_key_applied operand = alphabet operand1 = client_ephemeral_keys.ClientEphemeralKey < outer_function_key_applied operand2 = client_persistent_keys.ClientKey < outer_function_key_applied - operand3 = client_persistent_keys.MutualKey < outer_function_key_applied + operand3 = mutual_persistent_keys.MutualKey < outer_function_key_applied result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied) - outer_server_shuffle_function_key_applied = client_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionEphemeralKey + outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey client_shuffle_key_a_applied = client_persistent_keys.ClientShuffleKeyA << client_ephemeral_keys.ClientShuffleEphemeralKeyA result = result << (client_shuffle_key_a_applied < outer_server_shuffle_function_key_applied) @@ -82,119 +82,118 @@ def receive_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistent return result -def receive_medium(medium: DarcKey, client_peristent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - function_key_applied = client_peristent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumEphemeralKey - outer_function_key_applied = client_peristent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey - outer_function_function_key_applied = client_peristent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey +def receive_medium(medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + function_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey + outer_function_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey + outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey inner_function_key_applied = function_key_applied < outer_function_function_key_applied operand = medium operand1 = client_ephemeral_keys.ClientMediumEphemeralKey < outer_function_key_applied - operand2 = client_peristent_keys.ClientMediumKey < outer_function_key_applied - operand3 = client_peristent_keys.MutualMediumKey < outer_function_key_applied + operand2 = client_persistent_keys.ClientMediumKey < outer_function_key_applied + operand3 = mutual_persistent_keys.MutualMediumKey < outer_function_key_applied result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied) - client_shuffle_key_a_applied = client_peristent_keys.ClientShuffleMediumKeyA << client_ephemeral_keys.ClientShuffleMediumEphemeralKeyA - outer_server_shuffle_function_key_applied = client_peristent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey + client_shuffle_key_a_applied = client_persistent_keys.ClientShuffleMediumKeyA << client_ephemeral_keys.ClientShuffleMediumEphemeralKeyA + outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey client_shuffle_key_a_applied = client_shuffle_key_a_applied < outer_server_shuffle_function_key_applied result = result << client_shuffle_key_a_applied - outer_client_shuffle_key_applied = client_peristent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey - outer_client_shuffle_function_key_applied = client_peristent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey + outer_client_shuffle_key_applied = client_persistent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey + outer_client_shuffle_function_key_applied = client_persistent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey outer_client_shuffle_key_applied = outer_client_shuffle_key_applied << outer_client_shuffle_function_key_applied result = result < outer_client_shuffle_key_applied return result -def darc_phase2(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - alphabet = receive_alphabet(alphabet, client_peristent_keys, client_ephemeral_keys, mutual_ephemeral_keys) - medium = receive_medium(medium, client_peristent_keys, client_ephemeral_keys, mutual_ephemeral_keys) - return alphabet, medium +def darc_phase2(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + alphabet_phase2 = receive_alphabet(alphabet, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + medium = receive_medium(medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + return alphabet_phase2, medium - -def transmit_alphabet(alphabet: DarcKey, client_peristent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - outer_server_shuffle_function_key_applied = client_peristent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionEphemeralKey - outer_client_shuffle_key_applied = client_peristent_keys.OuterClientShuffleKey << client_ephemeral_keys.OuterClientShuffleEphemeralKey - outer_client_shuffle_function_key_applied = client_peristent_keys.OuterClientShuffleFunctionKey << client_ephemeral_keys.OuterClientShuffleFunctionEphemeralKey +def transmit_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey + outer_client_shuffle_key_applied = client_persistent_keys.OuterClientShuffleKey << client_ephemeral_keys.OuterClientShuffleEphemeralKey + outer_client_shuffle_function_key_applied = client_persistent_keys.OuterClientShuffleFunctionKey << client_ephemeral_keys.OuterClientShuffleFunctionEphemeralKey input_outer_client_shuffle_key = outer_client_shuffle_key_applied << outer_client_shuffle_function_key_applied input_outer_server_shuffle_function_key = outer_server_shuffle_function_key_applied << input_outer_client_shuffle_key - outer_function_function_key_applied = client_peristent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionEphemeralKey + outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey outer_function_function_key_applied = outer_function_function_key_applied << input_outer_client_shuffle_key - function_key_applied = client_peristent_keys.FunctionKey << mutual_ephemeral_keys.FunctionEphemeralKey + function_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1 function_key_applied = function_key_applied < outer_function_function_key_applied - reordered_shuffle_key_x = client_peristent_keys.ClientShuffleKeyX < input_outer_server_shuffle_function_key + reordered_shuffle_key_x = mutual_persistent_keys.ClientShuffleKeyX < input_outer_server_shuffle_function_key function_ephemeral_key_applied = function_key_applied << reordered_shuffle_key_x - client_shuffle_key_b = (~client_persistent_keys.ClientShuffleKeyA) << client_peristent_keys.ClientShuffleKeyX + client_shuffle_key_b = (~client_persistent_keys.ClientShuffleKeyA) << mutual_persistent_keys.ClientShuffleKeyX client_shuffle_ephemeral_key_b = ~client_ephemeral_keys.ClientShuffleEphemeralKeyA input_client_shuffle_key_b = client_shuffle_ephemeral_key_b << client_shuffle_key_b input_client_shuffle_key_b = input_client_shuffle_key_b < input_outer_server_shuffle_function_key shuffled_items = alphabet << input_client_shuffle_key_b - outer_function_key_applied = client_peristent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionEphemeralKey + outer_function_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey input_outer_function_key = outer_function_key_applied << input_outer_client_shuffle_key inner_function_key_applied = function_ephemeral_key_applied operand = shuffled_items operand1 = client_ephemeral_keys.ClientEphemeralKey < input_outer_function_key - operand2 = client_peristent_keys.ClientKey < input_outer_function_key - operand3 = mutual_ephemeral_keys.MutualEphemeralKey < input_outer_function_key + operand2 = client_persistent_keys.ClientKey < input_outer_function_key + operand3 = mutual_ephemeral_keys.MutualKey < input_outer_function_key result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied) return result -def transmit_medium(medium: DarcKey, client_peristent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): +def transmit_medium(medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): client_shuffle_ephemeral_key_b = ~client_ephemeral_keys.ClientShuffleMediumEphemeralKeyA - outer_server_shuffle_function_key_applied = client_peristent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey - outer_client_shuffle_key_applied = client_peristent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey + outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey + outer_client_shuffle_key_applied = client_persistent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey - outer_client_suffle_function_key_applied = client_peristent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey + outer_client_suffle_function_key_applied = client_persistent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey input_outer_client_shuffle_key = outer_client_shuffle_key_applied << outer_client_suffle_function_key_applied input_outer_server_shuffle_function_key = outer_server_shuffle_function_key_applied << input_outer_client_shuffle_key - outer_function_function_key_applied = client_peristent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey + outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey outer_function_function_key_applied = outer_function_function_key_applied << input_outer_client_shuffle_key - function_key_applied = client_peristent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumEphemeralKey + function_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey function_key_applied = function_key_applied < outer_function_function_key_applied - reordered_shuffle_key_x = client_peristent_keys.ClientShuffleMediumKeyX < input_outer_server_shuffle_function_key + reordered_shuffle_key_x = mutual_persistent_keys.ClientShuffleMediumKeyX < input_outer_server_shuffle_function_key function_ephemeral_key_applied = function_key_applied << reordered_shuffle_key_x - client_shuffle_key_b = (~client_peristent_keys.ClientShuffleMediumKeyA) << client_peristent_keys.ClientShuffleMediumKeyX + client_shuffle_key_b = (~client_persistent_keys.ClientShuffleMediumKeyA) << mutual_persistent_keys.ClientShuffleMediumKeyX input_client_shuffle_key_b = client_shuffle_ephemeral_key_b << client_shuffle_key_b input_client_shuffle_key_b = input_client_shuffle_key_b < input_outer_server_shuffle_function_key shuffled_items = medium << input_client_shuffle_key_b - outer_function_key_applied = client_peristent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey + outer_function_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey input_outer_function_key = outer_function_key_applied << input_outer_client_shuffle_key inner_function_key_applied = function_ephemeral_key_applied operand = shuffled_items operand1 = client_ephemeral_keys.ClientMediumEphemeralKey < input_outer_function_key - operand2 = client_peristent_keys.ClientMediumKey < input_outer_function_key - operand3 = mutual_ephemeral_keys.MutualMediumEphemeralKey < input_outer_function_key + operand2 = client_persistent_keys.ClientMediumKey < input_outer_function_key + operand3 = mutual_ephemeral_keys.MutualMediumKey < input_outer_function_key result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied) return result -def darc_phase3(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - alphabet = transmit_alphabet(alphabet, client_peristent_keys, client_ephemeral_keys, mutual_ephemeral_keys) - medium = transmit_medium(medium, client_peristent_keys, client_ephemeral_keys, mutual_ephemeral_keys) - return alphabet, medium +def darc_phase3(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + alphabet_phase3 = transmit_alphabet(alphabet, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + medium = transmit_medium(medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + return alphabet_phase3, medium -def merge_message(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys, input_sequence: list[int]): - outer_client_shuffle_alphabet_key_applied = client_peristent_keys.OuterClientShuffleKey << client_ephemeral_keys.OuterClientShuffleEphemeralKey - outer_client_shuffle_function_alphabet_key_applied = client_peristent_keys.OuterClientShuffleFunctionKey << client_ephemeral_keys.OuterClientShuffleFunctionEphemeralKey +def merge_message(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys, input_sequence: list[int]): + outer_client_shuffle_alphabet_key_applied = client_persistent_keys.OuterClientShuffleKey << client_ephemeral_keys.OuterClientShuffleEphemeralKey + outer_client_shuffle_function_alphabet_key_applied = client_persistent_keys.OuterClientShuffleFunctionKey << client_ephemeral_keys.OuterClientShuffleFunctionEphemeralKey outer_client_shuffle_alphabet_key_applied = ~(outer_client_shuffle_alphabet_key_applied << outer_client_shuffle_function_alphabet_key_applied) msg_len = len(input_sequence) @@ -208,8 +207,8 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: Cli input_sequence_applied = outer_client_shuffle_alphabet_key_applied << padded_input_sequence - outer_client_shuffle_medium_key_applied = client_peristent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey - outer_client_shuffle_function_medium_key_applied = client_peristent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey + outer_client_shuffle_medium_key_applied = client_persistent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey + outer_client_shuffle_function_medium_key_applied = client_persistent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey outer_client_shuffle_medium_key_applied = outer_client_shuffle_medium_key_applied << outer_client_shuffle_function_medium_key_applied @@ -221,9 +220,9 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: Cli if msg_len < height: message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr - position_function_key_applied = client_peristent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey - outer_position_function_key_applied = client_peristent_keys.OuterPositionFunctionMediumKey << mutual_ephemeral_keys.OuterPositionFunctionMediumEphemeralKey - outer_position_shuffle_key_applied = client_peristent_keys.OuterPositionShuffleMediumKey << mutual_ephemeral_keys.OuterPositionShuffleMediumEphemeralKey + position_function_key_applied = mutual_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey + outer_position_function_key_applied = mutual_persistent_keys.OuterPositionFunctionMediumKey << mutual_ephemeral_keys.OuterPositionFunctionMediumEphemeralKey + outer_position_shuffle_key_applied = mutual_persistent_keys.OuterPositionShuffleMediumKey << mutual_ephemeral_keys.OuterPositionShuffleMediumEphemeralKey outer_position_function_key_applied = outer_position_shuffle_key_applied << outer_position_function_key_applied @@ -237,8 +236,8 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: Cli message = operand ^ (operand1 << inner_function_key_applied) - outer_position_shuffle_function_key_applied = client_peristent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey - position_shuffle_key_applied = client_peristent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey + outer_position_shuffle_function_key_applied = mutual_persistent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey + position_shuffle_key_applied = mutual_persistent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey outer_position_shuffle_key_applied = outer_client_shuffle_medium_key_applied << outer_position_shuffle_key_applied outer_position_shuffle_function_key_applied = outer_position_shuffle_function_key_applied << outer_position_function_key_applied @@ -248,33 +247,33 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: Cli return message -def darc_phase_4(darc_message: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_ephemeral_keys: MutualEphemeralKeys): - outer_position_function_ephemeral_key_applied = server_persistent_keys.OuterPositionFunctionMediumKey << mutual_ephemeral_keys.OuterPositionFunctionMediumEphemeralKey - outer_position_shuffle_ephemeral_key_applied = server_persistent_keys.OuterPositionShuffleMediumKey << mutual_ephemeral_keys.OuterPositionShuffleMediumEphemeralKey +def darc_phase_4(alphabet: DarcKey, darc_message: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys): + outer_position_function_ephemeral_key_applied = mutual_persistent_keys.OuterPositionFunctionMediumKey << mutual_ephemeral_keys.OuterPositionFunctionMediumEphemeralKey + outer_position_shuffle_ephemeral_key_applied = mutual_persistent_keys.OuterPositionShuffleMediumKey << mutual_ephemeral_keys.OuterPositionShuffleMediumEphemeralKey outer_position_function_ephemeral_key_applied = ~(outer_position_shuffle_ephemeral_key_applied << outer_position_function_ephemeral_key_applied) outer_position_shuffle_ephemeral_key_applied = ~outer_position_shuffle_ephemeral_key_applied - outer_position_shuffle_function_ephemeral_key_applied = server_persistent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey + outer_position_shuffle_function_ephemeral_key_applied = mutual_persistent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey outer_position_shuffle_function_ephemeral_key_applied = outer_position_shuffle_function_ephemeral_key_applied << outer_position_function_ephemeral_key_applied - outer_function_function_medium_ephemeral_key_applied = server_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey - outer_server_shuffle_function_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionEphemeralKey + outer_function_function_medium_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey + outer_server_shuffle_function_ephemeral_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey - outer_server_shuffle_function_medium_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey + outer_server_shuffle_function_medium_ephemeral_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey - function_medium_ephemeral_key_applied = server_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumEphemeralKey + function_medium_ephemeral_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey - client_shuffle_medium_key_x = server_persistent_keys.ClientShuffleMediumKeyX < outer_server_shuffle_function_medium_ephemeral_key_applied + client_shuffle_medium_key_x = mutual_persistent_keys.ClientShuffleMediumKeyX < outer_server_shuffle_function_medium_ephemeral_key_applied client_shuffle_medium_key_x = (function_medium_ephemeral_key_applied < outer_function_function_medium_ephemeral_key_applied) << client_shuffle_medium_key_x - position_shuffle_ephemeral_key_applied = server_persistent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey + position_shuffle_ephemeral_key_applied = mutual_persistent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey position_shuffle_ephemeral_key_applied = position_shuffle_ephemeral_key_applied < outer_position_shuffle_function_ephemeral_key_applied client_shuffle_medium_key_x = client_shuffle_medium_key_x << position_shuffle_ephemeral_key_applied - outer_function_medium_ephemeral_key_applied = server_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey + outer_function_medium_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey rx_data = darc_message < outer_position_shuffle_ephemeral_key_applied @@ -282,34 +281,33 @@ def darc_phase_4(darc_message: DarcKey, server_persistent_keys: ServerPersistent operand = rx_data operand1 = server_persistent_keys.ServerMediumKey < outer_function_medium_ephemeral_key_applied operand2 = server_ephemeral_keys.ServerMediumEphemeralKey < outer_function_medium_ephemeral_key_applied - operand3 = server_persistent_keys.MutualMediumKey < outer_function_medium_ephemeral_key_applied - operand4 = mutual_ephemeral_keys.MutualMediumEphemeralKey < outer_function_medium_ephemeral_key_applied + operand3 = mutual_persistent_keys.MutualMediumKey < outer_function_medium_ephemeral_key_applied + operand4 = mutual_ephemeral_keys.MutualMediumKey < outer_function_medium_ephemeral_key_applied rx_data = operand ^ (operand1 << inner_key) ^ (operand2 << inner_key) ^ (operand3 << inner_key) ^ (operand4 << inner_key) - position_function_ephemeral_key_applied = server_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey + position_function_ephemeral_key_applied = mutual_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey rx_data = rx_data << (~(position_shuffle_ephemeral_key_applied) << (~position_function_ephemeral_key_applied < outer_position_function_ephemeral_key_applied)) - client_shuffle_key_x = server_persistent_keys.ClientShuffleKeyX < outer_server_shuffle_function_ephemeral_key_applied - outer_function_function_ephemeral_key_applied = server_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionEphemeralKey + client_shuffle_key_x = mutual_persistent_keys.ClientShuffleKeyX < outer_server_shuffle_function_ephemeral_key_applied + outer_function_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey - function_ephemeral_key_applied = server_persistent_keys.FunctionKey << mutual_ephemeral_keys.FunctionEphemeralKey + function_ephemeral_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1 function_ephemeral_key_applied = (function_ephemeral_key_applied < outer_function_function_ephemeral_key_applied) << client_shuffle_key_x - server_shuffle_ephemeral_key_applied = ~(server_persistent_keys.ServerShuffleKey << server_persistent_keys.ClientShuffleKeyX) << ~(server_ephemeral_keys.ServerShuffleEphemeralKey) + server_shuffle_ephemeral_key_applied = ~(server_persistent_keys.ServerShuffleKey << mutual_persistent_keys.ClientShuffleKeyX) << ~(server_ephemeral_keys.ServerShuffleEphemeralKey) server_shuffle_ephemeral_key_applied = ~(server_shuffle_ephemeral_key_applied < outer_server_shuffle_function_ephemeral_key_applied) outer_server_shuffle_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleKey << server_ephemeral_keys.OuterServerShuffleEphemeralKey - alphabet = server_ephemeral_keys.Alphabet alpha_prep = (alphabet < outer_server_shuffle_ephemeral_key_applied) << server_shuffle_ephemeral_key_applied - outer_function_ephemeral_key_applied = server_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionEphemeralKey + outer_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey inner_key = function_ephemeral_key_applied operand = alpha_prep operand1 = server_persistent_keys.ServerKey < outer_function_ephemeral_key_applied operand2 = server_ephemeral_keys.ServerEphemeralKey < outer_function_ephemeral_key_applied - operand3 = server_persistent_keys.MutualKey < outer_function_ephemeral_key_applied - operand4 = mutual_ephemeral_keys.MutualEphemeralKey < outer_function_ephemeral_key_applied + operand3 = mutual_persistent_keys.MutualKey < outer_function_ephemeral_key_applied + operand4 = mutual_ephemeral_keys.MutualKey < outer_function_ephemeral_key_applied alpha_prep = operand ^ (operand1 << inner_key) ^ (operand2 << inner_key) ^ (operand3 << inner_key) ^ (operand4 << inner_key) return resolve_message(alpha_prep.matrix, rx_data.matrix) @@ -328,26 +326,26 @@ def resolve_message(translated_alphabet, translated_messasge): return message if __name__ == "__main__": - with open("../darc_key_json/client_persistent_keys.json") as fp: - client_persistent_keys = json.load(fp) +# with open("../darc_key_json/client_persistent_keys.json") as fp: +# client_persistent_keys = json.load(fp) +# +# with open("../darc_key_json/client_ephemeral_keys.json") as fp: +# client_ephemeral_keys = json.load(fp) +# +# with open("../darc_key_json/server_persistent_keys.json") as fp: +# server_persistent_keys = json.load(fp) +# +# with open("../darc_key_json/server_ephemeral_keys.json") as fp: +# server_ephemeral_keys = json.load(fp) +# +# with open("../darc_key_json/mutual_ephemeral_keys.json") as fp: +# mutual_ephemeral_keys = json.load(fp) - with open("../darc_key_json/client_ephemeral_keys.json") as fp: - client_ephemeral_keys = json.load(fp) - - with open("../darc_key_json/server_persistent_keys.json") as fp: - server_persistent_keys = json.load(fp) - - with open("../darc_key_json/server_ephemeral_keys.json") as fp: - server_ephemeral_keys = json.load(fp) - - with open("../darc_key_json/mutual_ephemeral_keys.json") as fp: - mutual_ephemeral_keys = json.load(fp) - - client_persistent_keys = {k: {"matrix": v} for k, v in client_persistent_keys.items()} - client_ephemeral_keys = {k: {"matrix": v} for k, v in client_ephemeral_keys.items()} - server_persistent_keys = {k: {"matrix": v} for k, v in server_persistent_keys.items()} - server_ephemeral_keys = {k: {"matrix": v} for k, v in server_ephemeral_keys.items()} - mutual_ephemeral_keys = {k: {"matrix": v} for k, v in mutual_ephemeral_keys.items()} +# client_persistent_keys = {k: {"matrix": v} for k, v in client_persistent_keys.items()} +# client_ephemeral_keys = {k: {"matrix": v} for k, v in client_ephemeral_keys.items()} +# server_persistent_keys = {k: {"matrix": v} for k, v in server_persistent_keys.items()} +# server_ephemeral_keys = {k: {"matrix": v} for k, v in server_ephemeral_keys.items()} +# mutual_ephemeral_keys = {k: {"matrix": v} for k, v in mutual_ephemeral_keys.items()} # client_persistent_keys = ClientPersistentKeys(**client_persistent_keys) # client_ephemeral_keys = ClientEphemeralKeys(**client_ephemeral_keys) @@ -360,41 +358,23 @@ if __name__ == "__main__": server_persistent_keys = ServerPersistentKeys.random_init(height, width) server_ephemeral_keys = ServerEphemeralKeys.random_init(height, width) mutual_ephemeral_keys = MutualEphemeralKeys.random_init(height, width) + mutual_persistent_keys = MutualPersistentKeys.random_init(height, width) - server_persistent_keys.ServerKey = server_persistent_keys.ServerKey ^ client_persistent_keys.MutualKey - server_persistent_keys.ServerMediumKey = server_persistent_keys.ServerMediumKey ^ client_persistent_keys.MutualMediumKey + server_persistent_keys.ServerKey = server_persistent_keys.ServerKey ^ mutual_persistent_keys.MutualKey + server_persistent_keys.ServerMediumKey = server_persistent_keys.ServerMediumKey ^ mutual_persistent_keys.MutualMediumKey - client_persistent_keys.MutualKey = client_persistent_keys.MutualKey ^ client_persistent_keys.ClientKey - client_persistent_keys.MutualMediumKey = client_persistent_keys.MutualMediumKey ^ client_persistent_keys.ClientMediumKey + mutual_persistent_keys.MutualKey = mutual_persistent_keys.MutualKey ^ client_persistent_keys.ClientKey + mutual_persistent_keys.MutualMediumKey = mutual_persistent_keys.MutualMediumKey ^ client_persistent_keys.ClientMediumKey - server_persistent_keys.MutualKey = client_persistent_keys.MutualKey - server_persistent_keys.MutualMediumKey = client_persistent_keys.MutualMediumKey - - server_persistent_keys.OuterFunctionKey = client_persistent_keys.OuterFunctionKey - server_persistent_keys.OuterFunctionFunctionKey = client_persistent_keys.OuterFunctionFunctionKey - server_persistent_keys.OuterServerShuffleFunctionKey = client_persistent_keys.OuterServerShuffleFunctionKey - server_persistent_keys.FunctionKey = client_persistent_keys.FunctionKey - server_persistent_keys.ClientShuffleKeyX = client_persistent_keys.ClientShuffleKeyX - server_persistent_keys.OuterFunctionMediumKey = client_persistent_keys.OuterFunctionMediumKey - server_persistent_keys.OuterFunctionFunctionMediumKey = client_persistent_keys.OuterFunctionFunctionMediumKey - server_persistent_keys.OuterServerShuffleFunctionMediumKey = client_persistent_keys.OuterServerShuffleFunctionMediumKey - server_persistent_keys.FunctionMediumKey = client_persistent_keys.FunctionMediumKey - server_persistent_keys.ClientShuffleMediumKeyX = client_persistent_keys.ClientShuffleMediumKeyX - server_persistent_keys.OuterPositionShuffleMediumKey = client_persistent_keys.OuterPositionShuffleMediumKey - server_persistent_keys.OuterPositionShuffleFunctionMediumKey = client_persistent_keys.OuterPositionShuffleFunctionMediumKey - server_persistent_keys.OuterPositionFunctionMediumKey = client_persistent_keys.OuterPositionFunctionMediumKey - server_persistent_keys.PositionFunctionMediumKey = client_persistent_keys.PositionFunctionMediumKey - server_persistent_keys.PositionShuffleMediumKey = client_persistent_keys.PositionShuffleMediumKey - - - (phase1_alphabet, phase1_medium) = darc_phase1(server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys) - (phase2_alphabet, phase2_medium) = darc_phase2(phase1_alphabet, phase1_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys) - (phase3_alphabet, phase3_medium) = darc_phase3(phase2_alphabet, phase2_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys) + alphabet = AlphabetKey.init_matrix(width, height, 255) + (phase1_alphabet, phase1_medium) = darc_phase1(alphabet, server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + (phase2_alphabet, phase2_medium) = darc_phase2(phase1_alphabet, phase1_medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) + (phase3_alphabet, phase3_medium) = darc_phase3(phase2_alphabet, phase2_medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) original_message = [0, 2, 4, 6, 7, 8, 9] - darc_message = merge_message(phase3_alphabet, phase3_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys, original_message) + darc_message = merge_message(phase3_alphabet, phase3_medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys, original_message) - message = darc_phase_4(darc_message, server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys) + message = darc_phase_4(alphabet, darc_message, server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys) print(original_message) print(message) diff --git a/src/models.py b/src/models.py index b38549a..5d7a077 100644 --- a/src/models.py +++ b/src/models.py @@ -146,79 +146,28 @@ class AlphabetKey(DarcKey): class ServerPersistentKeys(BaseModel): - OuterFunctionKey: OuterShuffleKey - OuterFunctionFunctionKey: OuterShuffleKey - OuterServerShuffleFunctionKey: OuterShuffleKey - MutualKey: AlphabetKey - FunctionKey: InnerShuffleKey - ClientShuffleKeyX: InnerShuffleKey OuterServerShuffleKey: OuterShuffleKey ServerKey: AlphabetKey ServerShuffleKey: InnerShuffleKey - MutualMediumKey: AlphabetKey - OuterFunctionMediumKey: OuterShuffleKey - OuterFunctionFunctionMediumKey: OuterShuffleKey - OuterServerShuffleFunctionMediumKey: OuterShuffleKey - FunctionMediumKey: InnerShuffleKey - ClientShuffleMediumKeyX: InnerShuffleKey - OuterPositionShuffleMediumKey: OuterShuffleKey - OuterPositionShuffleFunctionMediumKey: OuterShuffleKey - OuterPositionFunctionMediumKey: OuterShuffleKey - PositionFunctionMediumKey: InnerShuffleKey - PositionShuffleMediumKey: InnerShuffleKey ServerMediumKey: AlphabetKey @classmethod def random_init(cls, height: int, width: int): return ServerPersistentKeys( - OuterFunctionKey=OuterShuffleKey.init_matrix(height), - OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height), - OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height), - MutualKey=AlphabetKey.init_matrix(width, height, 255), - FunctionKey=InnerShuffleKey.init_matrix(width, height), - ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height), OuterServerShuffleKey=OuterShuffleKey.init_matrix(height), ServerKey=AlphabetKey.init_matrix(width, height, 255), ServerShuffleKey=InnerShuffleKey.init_matrix(width, height), - MutualMediumKey=AlphabetKey.init_matrix(width, height, 255), - OuterFunctionMediumKey=OuterShuffleKey.init_matrix(height), - OuterFunctionFunctionMediumKey=OuterShuffleKey.init_matrix(height), - OuterServerShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height), - FunctionMediumKey=InnerShuffleKey.init_matrix(width, height), - ClientShuffleMediumKeyX=InnerShuffleKey.init_matrix(width, height), - OuterPositionShuffleMediumKey=OuterShuffleKey.init_matrix(height), - OuterPositionShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height), - OuterPositionFunctionMediumKey=OuterShuffleKey.init_matrix(height), - PositionFunctionMediumKey=InnerShuffleKey.init_matrix(width, height), - PositionShuffleMediumKey=InnerShuffleKey.init_matrix(width, height), ServerMediumKey=AlphabetKey.init_matrix(width, height, 255) ) class ClientPersistentKeys(BaseModel): - OuterFunctionKey: OuterShuffleKey - OuterFunctionFunctionKey: OuterShuffleKey - OuterServerShuffleFunctionKey: OuterShuffleKey - MutualKey: AlphabetKey - FunctionKey: InnerShuffleKey - ClientShuffleKeyX: InnerShuffleKey ClientKey: AlphabetKey ClientShuffleKeyA: InnerShuffleKey OuterClientShuffleKey: OuterShuffleKey OuterClientShuffleFunctionKey: OuterShuffleKey - MutualMediumKey: AlphabetKey - OuterFunctionMediumKey: OuterShuffleKey - OuterFunctionFunctionMediumKey: OuterShuffleKey - OuterServerShuffleFunctionMediumKey: OuterShuffleKey - FunctionMediumKey: InnerShuffleKey - ClientShuffleMediumKeyX: InnerShuffleKey - OuterPositionShuffleMediumKey: OuterShuffleKey - OuterPositionShuffleFunctionMediumKey: OuterShuffleKey - OuterPositionFunctionMediumKey: OuterShuffleKey - PositionFunctionMediumKey: InnerShuffleKey - PositionShuffleMediumKey: InnerShuffleKey OuterClientShuffleMediumKey: OuterShuffleKey OuterClientShuffleFunctionMediumKey: OuterShuffleKey ClientShuffleMediumKeyA: InnerShuffleKey @@ -227,16 +176,46 @@ class ClientPersistentKeys(BaseModel): @classmethod def random_init(cls, height: int, width: int): return ClientPersistentKeys( - OuterFunctionKey=OuterShuffleKey.init_matrix(height), - OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height), - OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height), - MutualKey=AlphabetKey.init_matrix(width, height, 255), - FunctionKey=InnerShuffleKey.init_matrix(width, height), - ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height), ClientKey=AlphabetKey.init_matrix(width, height, 255), ClientShuffleKeyA=InnerShuffleKey.init_matrix(width, height), OuterClientShuffleKey=OuterShuffleKey.init_matrix(height), OuterClientShuffleFunctionKey=OuterShuffleKey.init_matrix(height), + OuterClientShuffleMediumKey=OuterShuffleKey.init_matrix(height), + OuterClientShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height), + ClientShuffleMediumKeyA=InnerShuffleKey.init_matrix(width, height), + ClientMediumKey=AlphabetKey.init_matrix(width, height, 255) + ) + + +class MutualPersistentKeys(BaseModel): + OuterFunctionKey: OuterShuffleKey + OuterFunctionFunctionKey: OuterShuffleKey + OuterServerShuffleFunctionKey: OuterShuffleKey + MutualKey: AlphabetKey + Inner1: InnerShuffleKey + ClientShuffleKeyX: InnerShuffleKey + + MutualMediumKey: AlphabetKey + OuterFunctionMediumKey: OuterShuffleKey + OuterFunctionFunctionMediumKey: OuterShuffleKey + OuterServerShuffleFunctionMediumKey: OuterShuffleKey + FunctionMediumKey: InnerShuffleKey + ClientShuffleMediumKeyX: InnerShuffleKey + OuterPositionShuffleMediumKey: OuterShuffleKey + OuterPositionShuffleFunctionMediumKey: OuterShuffleKey + OuterPositionFunctionMediumKey: OuterShuffleKey + PositionFunctionMediumKey: InnerShuffleKey + PositionShuffleMediumKey: InnerShuffleKey + + @classmethod + def random_init(cls, height: int, width: int): + return MutualPersistentKeys( + OuterFunctionKey=OuterShuffleKey.init_matrix(height), + OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height), + OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height), + MutualKey=AlphabetKey.init_matrix(width, height, 255), + Inner1=InnerShuffleKey.init_matrix(width, height), + ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height), MutualMediumKey=AlphabetKey.init_matrix(width, height, 255), OuterFunctionMediumKey=OuterShuffleKey.init_matrix(height), OuterFunctionFunctionMediumKey=OuterShuffleKey.init_matrix(height), @@ -248,19 +227,15 @@ class ClientPersistentKeys(BaseModel): OuterPositionFunctionMediumKey=OuterShuffleKey.init_matrix(height), PositionFunctionMediumKey=InnerShuffleKey.init_matrix(width, height), PositionShuffleMediumKey=InnerShuffleKey.init_matrix(width, height), - OuterClientShuffleMediumKey=OuterShuffleKey.init_matrix(height), - OuterClientShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height), - ClientShuffleMediumKeyA=InnerShuffleKey.init_matrix(width, height), - ClientMediumKey=AlphabetKey.init_matrix(width, height, 255) ) + class ServerEphemeralKeys(BaseModel): OuterServerShuffleEphemeralKey: OuterShuffleKey ServerEphemeralKey: AlphabetKey ServerShuffleEphemeralKey: InnerShuffleKey ServerMediumEphemeralKey: AlphabetKey - Alphabet: AlphabetKey @classmethod def random_init(cls, height: int, width: int): @@ -269,19 +244,18 @@ class ServerEphemeralKeys(BaseModel): ServerEphemeralKey=AlphabetKey.init_matrix(width, height, 255), ServerShuffleEphemeralKey=InnerShuffleKey.init_matrix(width, height), ServerMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255), - Alphabet=AlphabetKey.init_matrix(width, height, 255) ) class MutualEphemeralKeys(BaseModel): - MutualEphemeralKey: AlphabetKey - FunctionEphemeralKey: InnerShuffleKey - OuterFunctionEphemeralKey: OuterShuffleKey - OuterFunctionFunctionEphemeralKey: OuterShuffleKey - OuterServerShuffleFunctionEphemeralKey: OuterShuffleKey + MutualKey: AlphabetKey + Inner1: InnerShuffleKey + OuterFunctionKey: OuterShuffleKey + OuterFunctionFunctionKey: OuterShuffleKey + OuterServerShuffleFunctionKey: OuterShuffleKey - MutualMediumEphemeralKey: AlphabetKey - FunctionMediumEphemeralKey: InnerShuffleKey + MutualMediumKey: AlphabetKey + FunctionMediumKey: InnerShuffleKey PositionFunctionMediumEphemeralKey: InnerShuffleKey OuterFunctionMediumEphemeralKey: OuterShuffleKey OuterFunctionFunctionMediumEphemeralKey: OuterShuffleKey @@ -294,13 +268,13 @@ class MutualEphemeralKeys(BaseModel): @classmethod def random_init(cls, height: int, width: int): return MutualEphemeralKeys( - MutualEphemeralKey=AlphabetKey.init_matrix(width, height, 255), - FunctionEphemeralKey=InnerShuffleKey.init_matrix(width, height), - OuterFunctionEphemeralKey=OuterShuffleKey.init_matrix(height), - OuterFunctionFunctionEphemeralKey=OuterShuffleKey.init_matrix(height), - OuterServerShuffleFunctionEphemeralKey=OuterShuffleKey.init_matrix(height), - MutualMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255), - FunctionMediumEphemeralKey=InnerShuffleKey.init_matrix(width, height), + MutualKey=AlphabetKey.init_matrix(width, height, 255), + Inner1=InnerShuffleKey.init_matrix(width, height), + OuterFunctionKey=OuterShuffleKey.init_matrix(height), + OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height), + OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height), + MutualMediumKey=AlphabetKey.init_matrix(width, height, 255), + FunctionMediumKey=InnerShuffleKey.init_matrix(width, height), PositionFunctionMediumEphemeralKey=InnerShuffleKey.init_matrix(width, height), OuterFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height), OuterFunctionFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),