refactor substitution and server_darc.py

This commit is contained in:
2024-06-27 15:14:08 -05:00
parent a918de10c1
commit 3ae5445efe
3 changed files with 116 additions and 81 deletions

View File

@@ -44,18 +44,15 @@ def receive_alphabet(
cdo1 = client_persistent_data_keys.outer_key_1 << client_ephemeral_data_keys.outer_key_1
cdo2 = client_persistent_data_keys.outer_key_2 << client_ephemeral_data_keys.outer_key_2
cdo1_cdo2 = cdo1 << cdo2
substitution = (
client_ephemeral_data_keys.alpha_key ^
client_persistent_data_keys.alpha_key ^
mutual_persistent_data_keys.alpha_key
)
ceda = client_ephemeral_data_keys.alpha_key
cpda = client_persistent_data_keys.alpha_key
mpda = mutual_persistent_data_keys.alpha_key
alphabet_phase2 = ((((
alphabet_phase1 ^
((substitution < mdo1) << (mdi1 < mdo2))
) < ~mdo3)) << cdi1) < (mdo3 << cdo1_cdo2)
(((ceda ^ cpda ^ mpda) < mdo1) << (mdi1 < mdo2))
) < ~mdo3)) << cdi1) < (mdo3 << cdo1 << cdo2)
return alphabet_phase2
@@ -75,16 +72,14 @@ def receive_medium(
cmo1 = client_persistent_medium_keys.outer_key_1 << client_ephemeral_medium_keys.outer_key_1
cmo2 = client_persistent_medium_keys.outer_key_2 << client_ephemeral_medium_keys.outer_key_2
substitution = (
client_ephemeral_medium_keys.alpha_key ^
client_persistent_medium_keys.alpha_key ^
mutual_persistent_medium_keys.alpha_key
)
cema = client_ephemeral_medium_keys.alpha_key
cpma = client_persistent_medium_keys.alpha_key
mpma = mutual_persistent_medium_keys.alpha_key
medium_phase2 = (
(
medium_phase1 ^
((substitution < mmo1) << (mmi1 < mmo2))
(((cema ^ cpma ^ mpma) < mmo1) << (mmi1 < mmo2))
) << (cmi1 < mmo3)
) < (cmo1 << cmo2)
@@ -110,15 +105,13 @@ def transmit_alphabet(
cdo1_cdo2 = cdo1 << cdo2
substitution = (
client_ephemeral_data_keys.alpha_key ^
client_persistent_data_keys.alpha_key ^
mutual_ephemeral_data_keys.alpha_key
)
ceda = client_ephemeral_data_keys.alpha_key
cpda = client_persistent_data_keys.alpha_key
meda = mutual_ephemeral_data_keys.alpha_key
alphabet_phase3 = (
(alphabet_phase2 << ((~cdi1 << mdpi2) < (mdo3 << cdo1_cdo2))) ^
(((substitution < mdo1) << ((mdi1 < mdo2) << (mdpi2 < mdo3))) < cdo1_cdo2)
((((ceda ^ cpda ^ meda) < mdo1) << ((mdi1 < mdo2) << (mdpi2 < mdo3))) < cdo1_cdo2)
)
return alphabet_phase3
@@ -142,15 +135,13 @@ def transmit_medium(
cmo1_cmo2 = cmo1 << cmo2
substitution = (
client_persistent_medium_keys.alpha_key ^
client_ephemeral_medium_keys.alpha_key ^
mutual_ephemeral_medium_keys.alpha_key
)
cpma = client_persistent_medium_keys.alpha_key
cema = client_ephemeral_medium_keys.alpha_key
mema = mutual_ephemeral_medium_keys.alpha_key
medium_phase3 = (
((medium_phase2 < ~cmo1_cmo2) << ((~cmi1 << mmpi1) < mmo3)) ^
((substitution < mmo1) << ((mmi1 < mmo2) << (mmpi1 < mmo3)))
(((cpma ^ cema ^ mema) < mmo1) << ((mmi1 < mmo2) << (mmpi1 < mmo3)))
) < cmo1_cmo2
return medium_phase3

View File

@@ -5,9 +5,21 @@ from src.models import (
)
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)
def darc_phase1(alphabet: AlphabetKey, medium: 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(
medium,
server_keys.persistent.medium,
server_keys.ephemeral.medium,
mutual_keys.persistent.medium,
mutual_keys.ephemeral.medium
)
return alphabet_phase1, medium_phase1
@@ -26,80 +38,109 @@ def translate_data(
mdo2 = mutual_persistent_data_keys.outer_key_2 << mutual_ephemeral_data_keys.outer_key_2
mdo3 = mutual_persistent_data_keys.outer_key_3 << mutual_ephemeral_data_keys.outer_key_3
substitution = server_persistent_data_keys.alpha_key ^ server_ephemeral_data_keys.alpha_key
spda = server_persistent_data_keys.alpha_key
seda = server_ephemeral_data_keys.alpha_key
alpha_phase1 = (
((alphabet < sdo1) << (sdi1 < mdo3)) ^
((substitution < mdo1) << (mdi1 < mdo2))
(((spda ^ seda) < mdo1) << (mdi1 < mdo2))
)
return alpha_phase1
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_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
def translate_medium(
medium: AlphabetKey,
server_persistent_medium_keys: ServerPersistentMediumKeys,
server_ephemeral_medium_keys: ServerEphemeralMediumKeys,
mutual_persistent_medium_keys: MutualPersistentMediumKeys,
mutual_ephemeral_medium_keys: MutualEphemeralMediumKeys
):
mmi1 = mutual_persistent_medium_keys.inner_key_1 << mutual_ephemeral_medium_keys.inner_key_1
mmo1 = mutual_persistent_medium_keys.outer_key_1 << mutual_ephemeral_medium_keys.outer_key_1
mmo2 = mutual_persistent_medium_keys.outer_key_2 << mutual_ephemeral_medium_keys.outer_key_2
spma = server_persistent_medium_keys.alpha_key
sema = server_ephemeral_medium_keys.alpha_key
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)])
operand1 = server_persistent_keys.alpha_key < mutual_outer_key_1
operand2 = server_ephemeral_keys.alpha_key < mutual_outer_key_1
mutual_inner_key = mutual_inner_key < mutual_outer_key_2
operand = medium ^ (operand1 << mutual_inner_key) ^ (operand2 << mutual_inner_key)
operand = medium ^ (((spma ^ sema) < mmo1) << (mmi1 < mmo2))
return operand
def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
medium_unwrapped = phase4_unwrap_medium(darc_message, server_keys.persistent.medium, server_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
translated_alpha = phase4_translate_alphabet(alphabet, server_keys.persistent.data, server_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
medium_unwrapped = phase4_unwrap_medium(
darc_message,
server_keys.persistent.medium,
server_keys.ephemeral.medium,
mutual_keys.persistent.medium,
mutual_keys.ephemeral.medium
)
translated_alpha = phase4_translate_alphabet(
alphabet,
server_keys.persistent.data,
server_keys.ephemeral.data,
mutual_keys.persistent.data,
mutual_keys.ephemeral.data
)
return translated_alpha, medium_unwrapped
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 phase4_translate_alphabet(
alphabet: AlphabetKey,
server_persistent_data_keys: ServerPersistentDataKeys,
server_ephemeral_data_keys: ServerEphemeralDataKeys,
mutual_persistent_data_keys: MutualPersistentDataKeys,
mutual_ephemeral_data_keys: MutualEphemeralDataKeys
):
mdi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
mdi1_mdo2_mpi2_mdo3 = (mdi1 < mdo2) << mpi2_mdo3
sdi1_mpdi2__mdo3 = (server_persistent_keys.inner_key_1 << server_ephemeral_keys.inner_key_1 << mutual_persistent_keys.inner_key_2) < mdo3
mdi1 = mutual_persistent_data_keys.inner_key_1 << mutual_ephemeral_data_keys.inner_key_1
mdo1 = mutual_persistent_data_keys.outer_key_1 << mutual_ephemeral_data_keys.outer_key_1
mdo2 = mutual_persistent_data_keys.outer_key_2 << mutual_ephemeral_data_keys.outer_key_2
mdo3 = mutual_persistent_data_keys.outer_key_3 << mutual_ephemeral_data_keys.outer_key_3
mpdi2 = mutual_persistent_data_keys.inner_key_2
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
sdi1 = server_persistent_data_keys.inner_key_1 << server_ephemeral_data_keys.inner_key_1
sdo1 = server_persistent_data_keys.outer_key_1 << server_ephemeral_data_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)
spda = server_persistent_data_keys.alpha_key
seda = server_ephemeral_data_keys.alpha_key
mpda = mutual_persistent_data_keys.alpha_key
meda = mutual_ephemeral_data_keys.alpha_key
translated_alpha = (
((alphabet < sdo1) << ((sdi1 << mpdi2) < mdo3)) ^
(((spda ^ seda ^ mpda ^ meda) < mdo1) << ((mdi1 < mdo2) << (mpdi2 < 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
def phase4_unwrap_medium(
darc_message: AlphabetKey,
server_persistent_medium_keys: ServerPersistentMediumKeys,
server_ephemeral_medium_keys: ServerEphemeralMediumKeys,
mutual_persistent_medium_keys: MutualPersistentMediumKeys,
mutual_ephemeral_medium_keys: MutualEphemeralMediumKeys
):
mmi1 = mutual_persistent_medium_keys.inner_key_1 << mutual_ephemeral_medium_keys.inner_key_1
mmi3 = mutual_persistent_medium_keys.inner_key_3 << mutual_ephemeral_medium_keys.inner_key_3
mmi4 = mutual_persistent_medium_keys.inner_key_4 << mutual_ephemeral_medium_keys.inner_key_4
mpmi2 = mutual_persistent_medium_keys.inner_key_2
mmo1 = mutual_persistent_medium_keys.outer_key_1 << mutual_ephemeral_medium_keys.outer_key_1
mmo2 = mutual_persistent_medium_keys.outer_key_2 << mutual_ephemeral_medium_keys.outer_key_2
mmo3 = mutual_persistent_medium_keys.outer_key_3 << mutual_ephemeral_medium_keys.outer_key_3
mmo4 = mutual_persistent_medium_keys.outer_key_4 << mutual_ephemeral_medium_keys.outer_key_4
mmo5 = mutual_persistent_medium_keys.outer_key_5 << mutual_ephemeral_medium_keys.outer_key_5
mmo6 = mutual_persistent_medium_keys.outer_key_6 << mutual_ephemeral_medium_keys.outer_key_6
nmmo6_nmmo4 = ~(mmo4 << mmo6)
mmo5 = mutual_persistent_keys.outer_key_5 << mutual_ephemeral_keys.outer_key_5
mmo5_nmmo6_nmmo4 = mmo5 << nmmo6_nmmo4
spma = server_persistent_medium_keys.alpha_key
sema = server_ephemeral_medium_keys.alpha_key
mpma = mutual_persistent_medium_keys.alpha_key
mema = mutual_ephemeral_medium_keys.alpha_key
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)
medium_unwrapped = (
((darc_message < ~mmo4) << ~(mmi4 < (mmo5 << nmmo6_nmmo4))) ^
(((spma ^ sema ^ mpma ^ mema) < mmo1) << ((mmi1 < mmo2) << (mpmi2 < mmo3)))
) << (~mmi3 < nmmo6_nmmo4)
return medium_unwrapped