From 3ae5445efec53c6d9b57200a86d1ce728c8166c6 Mon Sep 17 00:00:00 2001 From: Donovan Date: Thu, 27 Jun 2024 15:14:08 -0500 Subject: [PATCH] refactor substitution and server_darc.py --- src/client_darc.py | 45 ++++++-------- src/server_darc.py | 145 +++++++++++++++++++++++++++++---------------- test/test_darc.py | 7 ++- 3 files changed, 116 insertions(+), 81 deletions(-) diff --git a/src/client_darc.py b/src/client_darc.py index 86ec281..04916f2 100644 --- a/src/client_darc.py +++ b/src/client_darc.py @@ -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 diff --git a/src/server_darc.py b/src/server_darc.py index 1a7156d..cfed4eb 100644 --- a/src/server_darc.py +++ b/src/server_darc.py @@ -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 diff --git a/test/test_darc.py b/test/test_darc.py index ff98562..dbd2ee1 100644 --- a/test/test_darc.py +++ b/test/test_darc.py @@ -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)