refactor code and implement unit tests
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
from src.models import AlphabetKey, ClientKeys, MutualKeys, ClientPersistentDataKeys, ClientEphemeralDataKeys, \
|
||||
MutualPersistentDataKeys, MutualEphemeralDataKeys, ClientPersistentMediumKeys, ClientEphemeralMediumKeys, \
|
||||
MutualPersistentMediumKeys, MutualEphemeralMediumKeys, DarcKey, OuterKey
|
||||
|
||||
|
||||
def darc_phase2(alphabet: AlphabetKey, medium: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase2 = receive_alphabet(alphabet, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium = receive_medium(medium, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase2, medium
|
||||
|
||||
|
||||
def receive_alphabet(alphabet_phase1: AlphabetKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1_mo2 = (mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_persistent_keys.alpha_key
|
||||
result = (
|
||||
alphabet_phase1 ^
|
||||
((substitution < mo1) << mi1_mo2)
|
||||
)
|
||||
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
result = result < ~mo3
|
||||
ci1 = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
mo3_co1_co2 = mo3 << co1 << co2
|
||||
|
||||
|
||||
alphabet_phase2 = (result << ci1) < mo3_co1_co2
|
||||
return alphabet_phase2
|
||||
|
||||
|
||||
def receive_medium(medium_phase1: AlphabetKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_persistent_keys.alpha_key
|
||||
sub_mo1_mi1_mo2 = (substitution < mo1) << mi1_mo2
|
||||
result = medium_phase1 ^ sub_mo1_mi1_mo2
|
||||
|
||||
ci1 = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
ci1_mo3 = ci1 < mo3
|
||||
result = result << ci1_mo3
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
medium_phase2 = result < (co1 << co2)
|
||||
|
||||
return medium_phase2
|
||||
|
||||
|
||||
def transmit_alphabet(alphabet_phase2: DarcKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
co1_co2 = co1 << co2
|
||||
mo3_co1_co2 = mo3 << co1 << co2
|
||||
|
||||
ncei1_ncpi1_mpi2 = ~client_ephemeral_keys.inner_key_1 << ~client_persistent_keys.inner_key_1 << mutual_persistent_keys.inner_key_2
|
||||
ncei1_ncpi1_mpi2__mo3_co1_co2 = ncei1_ncpi1_mpi2 < mo3_co1_co2
|
||||
result = alphabet_phase2 << ncei1_ncpi1_mpi2__mo3_co1_co2
|
||||
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
|
||||
mi1_mo2_mpi2_mo3 = (((mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2) << (mutual_persistent_keys.inner_key_2 < mo3)) #< co1_co2
|
||||
alphabet_phase3 = result ^ (((substitution < mo1) << mi1_mo2_mpi2_mo3 ) < co1_co2)
|
||||
return alphabet_phase3
|
||||
|
||||
|
||||
def transmit_medium(medium_phase2: DarcKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
co1_co2 = co1 << co2
|
||||
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
mpi1_mo3 = mutual_persistent_keys.inner_key_2 < mo3
|
||||
mi1_mo2_mpi1_mo3 = mi1_mo2 << mpi1_mo3
|
||||
|
||||
ncei1_ncpi2 = ~(client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1) << mutual_persistent_keys.inner_key_2
|
||||
ncei1_ncpi2__mo3 = ncei1_ncpi2 < mo3
|
||||
|
||||
result = (medium_phase2 < ~co1_co2) << ncei1_ncpi2__mo3
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
sub = client_persistent_keys.alpha_key ^ client_ephemeral_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
sub_mo1 = sub < mo1
|
||||
sub_mo1_mi1_mo2_mpi1_mo3 = (sub_mo1 << mi1_mo2_mpi1_mo3)
|
||||
medium_phase3 = (result ^ sub_mo1_mi1_mo2_mpi1_mo3) < co1_co2
|
||||
|
||||
return medium_phase3
|
||||
|
||||
|
||||
def darc_phase3(alphabet_phase2: AlphabetKey, medium_phase2: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase3 = transmit_alphabet(alphabet_phase2, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium_phase3 = transmit_medium(medium_phase2, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase3, medium_phase3
|
||||
|
||||
|
||||
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)
|
||||
height = len(alphabet.matrix)
|
||||
width = len(alphabet.matrix[0])
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user