cleanup syntax
This commit is contained in:
@@ -99,7 +99,7 @@ def transmit_medium(medium_phase2: DarcKey, client_persistent_keys: ClientPersis
|
|||||||
ncei1_ncpi2 = ~(client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1) << mutual_persistent_keys.inner_key_2
|
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
|
ncei1_ncpi2__mo3 = ncei1_ncpi2 < mo3
|
||||||
|
|
||||||
result = (medium_phase2 < ~co1_co2) << ncei1_ncpi2__mo3
|
result = ((medium_phase2 < ~co1_co2) << ncei1_ncpi2__mo3)
|
||||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
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 = client_persistent_keys.alpha_key ^ client_ephemeral_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||||
@@ -116,12 +116,9 @@ def darc_phase3(alphabet_phase2: AlphabetKey, medium_phase2: AlphabetKey, client
|
|||||||
return alphabet_phase3, medium_phase3
|
return alphabet_phase3, medium_phase3
|
||||||
|
|
||||||
|
|
||||||
def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]):
|
def merge_message(alphabet_phase3: AlphabetKey, medium_phase3: AlphabetKey, 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
|
height = len(alphabet_phase3.matrix)
|
||||||
client_outer_key_2 = client_keys.persistent.data.outer_key_2 << client_keys.ephemeral.data.outer_key_2
|
width = len(alphabet_phase3.matrix[0])
|
||||||
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)
|
msg_len = len(input_sequence)
|
||||||
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
||||||
|
|
||||||
@@ -131,40 +128,29 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, m
|
|||||||
else:
|
else:
|
||||||
padded_input_sequence = OuterKey(matrix=[input_sequence])
|
padded_input_sequence = OuterKey(matrix=[input_sequence])
|
||||||
|
|
||||||
client_outer_key_1 = client_outer_key_1 << padded_input_sequence
|
cdo1 = client_keys.persistent.data.outer_key_1 << client_keys.ephemeral.data.outer_key_1
|
||||||
|
cdo2 = client_keys.persistent.data.outer_key_2 << client_keys.ephemeral.data.outer_key_2
|
||||||
|
ncdo1_ncdo2 = ~(cdo1 << cdo2)
|
||||||
|
|
||||||
client_med_outer_key_1 = client_keys.persistent.medium.outer_key_1 << client_keys.ephemeral.medium.outer_key_1
|
ncdo1_ncdo2_inp = ncdo1_ncdo2 << padded_input_sequence
|
||||||
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
|
cmo1 = client_keys.persistent.medium.outer_key_1 << client_keys.ephemeral.medium.outer_key_1
|
||||||
|
cmo2 = client_keys.persistent.medium.outer_key_2 << client_keys.ephemeral.medium.outer_key_2
|
||||||
|
|
||||||
client_outer_key_1 = client_outer_key_1 << client_med_outer_key_1
|
alpha_ncdo1_ncdo2_inp = alphabet_phase3 < ncdo1_ncdo2_inp
|
||||||
message = alphabet < client_outer_key_1
|
ncmo2_ncmo1 = ~(cmo1 << cmo2)
|
||||||
|
|
||||||
message_pad_key = ~client_med_outer_key_1
|
|
||||||
|
|
||||||
if msg_len < height:
|
if msg_len < height:
|
||||||
message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr
|
alpha_ncdo1_ncdo2_inp.matrix[msg_len] = eof_arr
|
||||||
|
|
||||||
mutual_inner_key_3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
mmi3 = 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
|
mmo6 = 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
|
mmo4 = 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
|
mmi3_nmmo6_nmmo4 = mmi3 < ~(mmo4 << mmo6)
|
||||||
|
|
||||||
client_med_outer_key_1 = ~client_med_outer_key_1
|
mmo5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||||
outer_key_1 = ~(client_med_outer_key_1 << outer_key_1)
|
mmi4 = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||||
|
|
||||||
mutual_inner_key_3 = mutual_inner_key_3 < outer_key_1
|
darc_message = (((medium_phase3 < ncmo2_ncmo1) ^ (alpha_ncdo1_ncdo2_inp << mmi3_nmmo6_nmmo4)) < mmo4) << (mmi4 < (mmo5 << ~mmo6))
|
||||||
|
return darc_message
|
||||||
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
|
|
||||||
|
|||||||
14
src/key_generation.py
Normal file
14
src/key_generation.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
from src.models import ServerKeys, MutualKeys, ClientKeys
|
||||||
|
|
||||||
|
|
||||||
|
def generate_keys(height, width):
|
||||||
|
server_keys = ServerKeys.random_init(height, width)
|
||||||
|
mutual_keys = MutualKeys.random_init(height, width)
|
||||||
|
client_keys = ClientKeys.random_init(height, width)
|
||||||
|
|
||||||
|
server_keys.persistent.data.alpha_key = server_keys.persistent.data.alpha_key ^ mutual_keys.persistent.data.alpha_key
|
||||||
|
server_keys.persistent.medium.alpha_key = server_keys.persistent.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key
|
||||||
|
|
||||||
|
mutual_keys.persistent.data.alpha_key = mutual_keys.persistent.data.alpha_key ^ client_keys.persistent.data.alpha_key
|
||||||
|
mutual_keys.persistent.medium.alpha_key = mutual_keys.persistent.medium.alpha_key ^ client_keys.persistent.medium.alpha_key
|
||||||
|
return server_keys, mutual_keys, client_keys
|
||||||
@@ -1,15 +1,21 @@
|
|||||||
from src.models import AlphabetKey, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys, \
|
from src.models import AlphabetKey, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys, \
|
||||||
MutualEphemeralDataKeys, InnerKey, ServerKeys, MutualKeys, ServerPersistentMediumKeys, ServerEphemeralMediumKeys, \
|
MutualEphemeralDataKeys, ServerKeys, MutualKeys, ServerPersistentMediumKeys, ServerEphemeralMediumKeys, \
|
||||||
MutualPersistentMediumKeys, MutualEphemeralMediumKeys, DarcKey
|
MutualPersistentMediumKeys, MutualEphemeralMediumKeys, DarcKey
|
||||||
|
|
||||||
|
|
||||||
|
def darc_phase1(alphabet: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||||
|
alphabet_phase1 = translate_data(alphabet, server_keys.persistent.data, server_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||||
|
medium_phase1 = translate_medium(server_keys.persistent.medium, server_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||||
|
return alphabet_phase1, medium_phase1
|
||||||
|
|
||||||
|
|
||||||
def translate_data(alphabet: AlphabetKey, server_persistent_keys: ServerPersistentDataKeys, server_ephemeral_keys: ServerEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
def translate_data(alphabet: AlphabetKey, server_persistent_keys: ServerPersistentDataKeys, server_ephemeral_keys: ServerEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||||
so1 = server_persistent_keys.outer_key_1 << server_ephemeral_keys.outer_key_1
|
so1 = server_persistent_keys.outer_key_1 << server_ephemeral_keys.outer_key_1
|
||||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||||
si1_mo3: InnerKey = (server_persistent_keys.inner_key_1 << server_ephemeral_keys.inner_key_1) < mo3
|
si1_mo3 = (server_persistent_keys.inner_key_1 << server_ephemeral_keys.inner_key_1) < mo3
|
||||||
|
|
||||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||||
mi1_mo2: InnerKey = (mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2
|
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
|
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||||
|
|
||||||
substitution = server_persistent_keys.alpha_key ^ server_ephemeral_keys.alpha_key
|
substitution = server_persistent_keys.alpha_key ^ server_ephemeral_keys.alpha_key
|
||||||
@@ -20,11 +26,14 @@ def translate_data(alphabet: AlphabetKey, server_persistent_keys: ServerPersiste
|
|||||||
|
|
||||||
return alpha_phase1
|
return alpha_phase1
|
||||||
|
|
||||||
def translate_medium(height, width, server_persistent_keys: ServerPersistentMediumKeys, server_ephemeral_keys: ServerEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
|
||||||
|
def translate_medium(server_persistent_keys: ServerPersistentMediumKeys, server_ephemeral_keys: ServerEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||||
mutual_inner_key = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
mutual_inner_key = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||||
mutual_outer_key_1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
mutual_outer_key_1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||||
mutual_outer_key_2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
mutual_outer_key_2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||||
|
|
||||||
|
height = len(mutual_inner_key.matrix)
|
||||||
|
width = len(mutual_inner_key.matrix[0])
|
||||||
medium = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)])
|
medium = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)])
|
||||||
|
|
||||||
operand1 = server_persistent_keys.alpha_key < mutual_outer_key_1
|
operand1 = server_persistent_keys.alpha_key < mutual_outer_key_1
|
||||||
@@ -35,18 +44,60 @@ def translate_medium(height, width, server_persistent_keys: ServerPersistentMedi
|
|||||||
return operand
|
return operand
|
||||||
|
|
||||||
|
|
||||||
def darc_phase1(alphabet: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||||
height = len(alphabet.matrix)
|
medium_unwrapped = phase4_unwrap_medium(darc_message, server_keys.persistent.medium, server_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||||
width = len(alphabet.matrix[0])
|
translated_alpha = phase4_translate_alphabet(alphabet, server_keys.persistent.data, server_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||||
alphabet_phase1 = translate_data(alphabet, server_keys.persistent.data, server_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
return translated_alpha, medium_unwrapped
|
||||||
medium = translate_medium(height, width, server_keys.persistent.medium, server_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
|
||||||
return alphabet_phase1, medium
|
|
||||||
|
|
||||||
|
|
||||||
|
def phase4_translate_alphabet(alphabet: AlphabetKey, server_persistent_keys: ServerPersistentDataKeys, server_ephemeral_keys: ServerEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||||
|
mdo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||||
|
mpi2_mdo3 = mutual_persistent_keys.inner_key_2 < mdo3
|
||||||
|
mdo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||||
|
|
||||||
def resolve_message(translated_alphabet, translated_messasge):
|
mdi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||||
alphabet_map = {str(key): idx for idx, key in enumerate(translated_alphabet)}
|
mdi1_mdo2_mpi2_mdo3 = (mdi1 < mdo2) << mpi2_mdo3
|
||||||
encoded_message = [str(alpha) for alpha in translated_messasge]
|
sdi1_mpdi2__mdo3 = (server_persistent_keys.inner_key_1 << server_ephemeral_keys.inner_key_1 << mutual_persistent_keys.inner_key_2) < mdo3
|
||||||
|
|
||||||
|
sdo1 = server_persistent_keys.outer_key_1 << server_ephemeral_keys.outer_key_1
|
||||||
|
mdo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||||
|
|
||||||
|
sub_mdo1 = (server_persistent_keys.alpha_key ^ server_ephemeral_keys.alpha_key ^ mutual_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key) < mdo1
|
||||||
|
translated_alpha = ((alphabet < sdo1) << sdi1_mpdi2__mdo3) ^ (sub_mdo1 << mdi1_mdo2_mpi2_mdo3)
|
||||||
|
return translated_alpha
|
||||||
|
|
||||||
|
|
||||||
|
def phase4_unwrap_medium(darc_message: AlphabetKey, server_persistent_keys: ServerPersistentMediumKeys, server_ephemeral_keys: ServerEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||||
|
mmo6 = mutual_persistent_keys.outer_key_6 << mutual_ephemeral_keys.outer_key_6
|
||||||
|
mmo4 = mutual_persistent_keys.outer_key_4 << mutual_ephemeral_keys.outer_key_4
|
||||||
|
|
||||||
|
nmmo6_nmmo4 = ~(mmo4 << mmo6)
|
||||||
|
|
||||||
|
mmo5 = mutual_persistent_keys.outer_key_5 << mutual_ephemeral_keys.outer_key_5
|
||||||
|
mmo5_nmmo6_nmmo4 = mmo5 << nmmo6_nmmo4
|
||||||
|
|
||||||
|
mmo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||||
|
|
||||||
|
mmo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||||
|
|
||||||
|
mmi3 = mutual_persistent_keys.inner_key_3 << mutual_ephemeral_keys.inner_key_3
|
||||||
|
mmi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||||
|
|
||||||
|
mpmi2 = mutual_persistent_keys.inner_key_2 < mmo3
|
||||||
|
|
||||||
|
mmi4 = mutual_persistent_keys.inner_key_4 << mutual_ephemeral_keys.inner_key_4
|
||||||
|
|
||||||
|
mmo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||||
|
|
||||||
|
sub_med_mmo1 = (server_persistent_keys.alpha_key ^ server_ephemeral_keys.alpha_key ^ mutual_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key) < mmo1
|
||||||
|
|
||||||
|
medium_unwrapped = (((darc_message < ~mmo4) << ~(mmi4 < mmo5_nmmo6_nmmo4)) ^ (sub_med_mmo1 << ((mmi1 < mmo2) << mpmi2))) << (~mmi3 < nmmo6_nmmo4)
|
||||||
|
return medium_unwrapped
|
||||||
|
|
||||||
|
|
||||||
|
def resolve_message(translated_alphabet: AlphabetKey, translated_messasge: AlphabetKey):
|
||||||
|
alphabet_map = {str(key): idx for idx, key in enumerate(translated_alphabet.matrix)}
|
||||||
|
encoded_message = [str(alpha) for alpha in translated_messasge.matrix]
|
||||||
|
|
||||||
message = []
|
message = []
|
||||||
for alpha in encoded_message:
|
for alpha in encoded_message:
|
||||||
@@ -56,52 +107,3 @@ def resolve_message(translated_alphabet, translated_messasge):
|
|||||||
break
|
break
|
||||||
|
|
||||||
return message
|
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
|
|
||||||
|
|
||||||
nmmo6_nmmo4 = ~(mmo4 << mmo6)
|
|
||||||
|
|
||||||
mmo5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
|
||||||
mmo5_nmmo6_nmmo4 = mmo5 << nmmo6_nmmo4
|
|
||||||
|
|
||||||
mmo2 = mutual_keys.persistent.medium.outer_key_2 << mutual_keys.ephemeral.medium.outer_key_2
|
|
||||||
|
|
||||||
mmo3 = mutual_keys.persistent.medium.outer_key_3 << mutual_keys.ephemeral.medium.outer_key_3
|
|
||||||
|
|
||||||
mmi3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
|
||||||
mmi1 = mutual_keys.persistent.medium.inner_key_1 << mutual_keys.ephemeral.medium.inner_key_1
|
|
||||||
|
|
||||||
mpmi2 = mutual_keys.persistent.medium.inner_key_2 < mmo3
|
|
||||||
|
|
||||||
mmi4 = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
|
||||||
|
|
||||||
mmo1 = mutual_keys.persistent.medium.outer_key_1 << mutual_keys.ephemeral.medium.outer_key_1
|
|
||||||
|
|
||||||
sub_med_mmo1 = (server_keys.persistent.medium.alpha_key ^ server_keys.ephemeral.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key ^ mutual_keys.ephemeral.medium.alpha_key) < mmo1
|
|
||||||
|
|
||||||
medium_unwrapped = (((darc_message < ~mmo4) << ~(mmi4 < mmo5_nmmo6_nmmo4)) ^ (sub_med_mmo1 << ((mmi1 < mmo2) << mpmi2))) << (~mmi3 < nmmo6_nmmo4)
|
|
||||||
|
|
||||||
|
|
||||||
mdo3 = mutual_keys.persistent.data.outer_key_3 << mutual_keys.ephemeral.data.outer_key_3
|
|
||||||
mpi2_mdo3 = mutual_keys.persistent.data.inner_key_2 < mdo3
|
|
||||||
mdo2 = mutual_keys.persistent.data.outer_key_2 << mutual_keys.ephemeral.data.outer_key_2
|
|
||||||
|
|
||||||
mdi1 = mutual_keys.persistent.data.inner_key_1 << mutual_keys.ephemeral.data.inner_key_1
|
|
||||||
mdi1_mdo2_mpi2_mdo3 = (mdi1 < mdo2) << mpi2_mdo3
|
|
||||||
sdi1_mpdi2__mdo3 = (server_keys.persistent.data.inner_key_1 << server_keys.ephemeral.data.inner_key_1 << mutual_keys.persistent.data.inner_key_2) < mdo3
|
|
||||||
|
|
||||||
sdo1 = server_keys.persistent.data.outer_key_1 << server_keys.ephemeral.data.outer_key_1
|
|
||||||
alpha_sdo1__sdi1_mpdi2__mdo3 = (alphabet < sdo1) << sdi1_mpdi2__mdo3
|
|
||||||
|
|
||||||
mdo1 = mutual_keys.persistent.data.outer_key_1 << mutual_keys.ephemeral.data.outer_key_1
|
|
||||||
|
|
||||||
sub_mdo1 = (server_keys.persistent.data.alpha_key ^ server_keys.ephemeral.data.alpha_key ^ mutual_keys.persistent.data.alpha_key ^ mutual_keys.ephemeral.data.alpha_key) < mdo1
|
|
||||||
translated_alpha = alpha_sdo1__sdi1_mpdi2__mdo3 ^ (sub_mdo1 << mdi1_mdo2_mpi2_mdo3)
|
|
||||||
|
|
||||||
return resolve_message(
|
|
||||||
translated_alpha.matrix,
|
|
||||||
medium_unwrapped.matrix
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,25 +1,20 @@
|
|||||||
from src.client_darc_noclient import merge_message_no_client, darc_phase_2_3
|
from src.client_darc_noclient import merge_message_no_client, darc_phase_2_3
|
||||||
from src.client_darc import merge_message, darc_phase2, darc_phase3
|
from src.client_darc import merge_message, darc_phase2, darc_phase3
|
||||||
|
from src.key_generation import generate_keys
|
||||||
from src.models import (AlphabetKey, OuterKey, ClientKeys, ServerKeys,
|
from src.models import (AlphabetKey, OuterKey, ClientKeys, ServerKeys,
|
||||||
MutualKeys)
|
MutualKeys)
|
||||||
from src.server_darc import darc_phase1, darc_phase_4
|
from src.server_darc import darc_phase1, darc_phase_4, resolve_message
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("height, width", [(256, 10), (100, 70), (40, 50)])
|
|
||||||
def test_darc(height, width):
|
@pytest.mark.parametrize("height, width, message_len", [(256, 10, 256), (100, 70, 70), (40, 50, 40), (256, 10, 128), (100, 70, 35), (40, 50, 20)])
|
||||||
server_keys = ServerKeys.random_init(height, width)
|
def test_darc(height, width, message_len):
|
||||||
mutual_keys = MutualKeys.random_init(height, width)
|
|
||||||
client_keys = ClientKeys.random_init(height, width)
|
|
||||||
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
||||||
|
|
||||||
server_keys.persistent.data.alpha_key = server_keys.persistent.data.alpha_key ^ mutual_keys.persistent.data.alpha_key
|
server_keys, mutual_keys, client_keys = generate_keys(height, width)
|
||||||
server_keys.persistent.medium.alpha_key = server_keys.persistent.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key
|
|
||||||
|
|
||||||
mutual_keys.persistent.data.alpha_key = mutual_keys.persistent.data.alpha_key ^ client_keys.persistent.data.alpha_key
|
|
||||||
mutual_keys.persistent.medium.alpha_key = mutual_keys.persistent.medium.alpha_key ^ client_keys.persistent.medium.alpha_key
|
|
||||||
|
|
||||||
original_message = OuterKey.init_matrix(height).matrix[0]
|
original_message = OuterKey.init_matrix(height).matrix[0]
|
||||||
|
original_message = original_message[:message_len]
|
||||||
|
|
||||||
(alphabet_phase1, medium_phase1) = darc_phase1(alphabet, server_keys, mutual_keys)
|
(alphabet_phase1, medium_phase1) = darc_phase1(alphabet, server_keys, mutual_keys)
|
||||||
|
|
||||||
@@ -27,29 +22,23 @@ def test_darc(height, width):
|
|||||||
(phase3_alphabet, phase3_medium) = darc_phase3(alphabet_phase2, medium_phase2, client_keys, mutual_keys)
|
(phase3_alphabet, phase3_medium) = darc_phase3(alphabet_phase2, medium_phase2, client_keys, mutual_keys)
|
||||||
darc_message = merge_message(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)
|
translated_alphabet, unwrapped_message = darc_phase_4(alphabet, darc_message, server_keys, mutual_keys)
|
||||||
|
|
||||||
|
message = resolve_message(translated_alphabet, unwrapped_message)
|
||||||
assert original_message == message
|
assert original_message == message
|
||||||
|
|
||||||
@pytest.mark.parametrize("height, width", [(256, 10), (100, 70), (40, 50)])
|
@pytest.mark.parametrize("height, width, message_len", [(256, 10, 256), (100, 70, 70), (40, 50, 40), (256, 10, 128), (100, 70, 35), (40, 50, 20)])
|
||||||
def test_darc_no_client(height, width):
|
def test_darc_no_client(height, width, message_len):
|
||||||
server_keys = ServerKeys.random_init(height, width)
|
|
||||||
mutual_keys = MutualKeys.random_init(height, width)
|
|
||||||
client_keys = ClientKeys.random_init(height, width)
|
|
||||||
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
||||||
|
server_keys, mutual_keys, client_keys = generate_keys(height, width)
|
||||||
server_keys.persistent.data.alpha_key = server_keys.persistent.data.alpha_key ^ mutual_keys.persistent.data.alpha_key
|
|
||||||
server_keys.persistent.medium.alpha_key = server_keys.persistent.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key
|
|
||||||
|
|
||||||
mutual_keys.persistent.data.alpha_key = mutual_keys.persistent.data.alpha_key ^ client_keys.persistent.data.alpha_key
|
|
||||||
mutual_keys.persistent.medium.alpha_key = mutual_keys.persistent.medium.alpha_key ^ client_keys.persistent.medium.alpha_key
|
|
||||||
|
|
||||||
original_message = OuterKey.init_matrix(height).matrix[0]
|
original_message = OuterKey.init_matrix(height).matrix[0]
|
||||||
|
original_message = original_message[:message_len]
|
||||||
(alphabet_phase1, medium_phase1) = darc_phase1(alphabet, server_keys, mutual_keys)
|
(alphabet_phase1, medium_phase1) = darc_phase1(alphabet, server_keys, mutual_keys)
|
||||||
|
|
||||||
(phase3_alphabet, phase3_medium) = darc_phase_2_3(alphabet_phase1, medium_phase1, mutual_keys)
|
(phase3_alphabet, phase3_medium) = darc_phase_2_3(alphabet_phase1, medium_phase1, mutual_keys)
|
||||||
darc_message = merge_message_no_client(phase3_alphabet, phase3_medium, mutual_keys, original_message)
|
darc_message = merge_message_no_client(phase3_alphabet, phase3_medium, mutual_keys, original_message)
|
||||||
|
|
||||||
message = darc_phase_4(alphabet, darc_message, server_keys, mutual_keys)
|
translated_alphabet, unwrapped_message = darc_phase_4(alphabet, darc_message, server_keys, mutual_keys)
|
||||||
assert original_message == message
|
message = resolve_message(translated_alphabet, unwrapped_message)
|
||||||
|
assert original_message == message
|
||||||
|
|||||||
Reference in New Issue
Block a user