refactor substitution and server_darc.py
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -12,12 +12,13 @@ import pytest
|
||||
)
|
||||
def test_darc(height, width, message_len):
|
||||
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
||||
medium = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)])
|
||||
|
||||
server_keys, mutual_keys, client_keys = generate_keys(height, width)
|
||||
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, medium, server_keys, mutual_keys)
|
||||
|
||||
(alphabet_phase2, medium_phase2) = darc_phase2(alphabet_phase1, medium_phase1, client_keys, mutual_keys)
|
||||
(phase3_alphabet, phase3_medium) = darc_phase3(alphabet_phase2, medium_phase2, client_keys, mutual_keys)
|
||||
@@ -35,11 +36,13 @@ def test_darc(height, width, message_len):
|
||||
)
|
||||
def test_darc_no_client(height, width, message_len):
|
||||
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
||||
medium = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)])
|
||||
|
||||
server_keys, mutual_keys, client_keys = generate_keys(height, width)
|
||||
|
||||
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, medium, server_keys, 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)
|
||||
|
||||
Reference in New Issue
Block a user