add benchmark; modify darc implementation so mutual inner key 2 has an ephemeral key

This commit is contained in:
2024-08-12 12:47:12 -05:00
parent fd7d8dd0c7
commit a9742deddb
5 changed files with 37 additions and 12 deletions

0
benchmark/__init__.py Normal file
View File

View File

@@ -0,0 +1,21 @@
from src.client_darc import darc_phase2, darc_phase3, merge_message
from src.key_generation import generate_keys
from src.models import SubstitutionKey, OuterKey
from src.server_darc import darc_phase1, darc_phase_4, resolve_message
alphabet = SubstitutionKey.init_matrix(width, height, 255)
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_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)
darc_message = merge_message(phase3_alphabet, phase3_medium, client_keys, mutual_keys, original_message)
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

View File

@@ -93,7 +93,8 @@ def transmit_alphabet(
mutual_persistent_data_keys: MutualPersistentDataKeys,
mutual_ephemeral_data_keys: MutualEphemeralDataKeys
):
mpdi2 = mutual_persistent_data_keys.inner_key_2
#mpdi2 = mutual_persistent_data_keys.inner_key_2
mdi2 = mutual_persistent_data_keys.inner_key_2 << mutual_ephemeral_data_keys.inner_key_2
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
@@ -110,10 +111,10 @@ def transmit_alphabet(
meda = mutual_ephemeral_data_keys.alpha_key
alphabet_phase3 = (
(alphabet_phase2 << ((~cdi1 << mpdi2) < (mdo3 << cdo1_cdo2))) ^
(alphabet_phase2 << ((~cdi1 << mdi2) < (mdo3 << cdo1_cdo2))) ^
(
(
((ceda ^ cpda ^ meda) < (mdo1 << cdo1_cdo2)) << ((mdi1 < (mdo2 << cdo1_cdo2)) << (mpdi2 < (mdo3 << cdo1_cdo2)))
((ceda ^ cpda ^ meda) < (mdo1 << cdo1_cdo2)) << ((mdi1 < (mdo2 << cdo1_cdo2)) << (mdi2 < (mdo3 << cdo1_cdo2)))
)
)
)
@@ -127,7 +128,8 @@ def transmit_medium(
mutual_persistent_medium_keys: MutualPersistentMediumKeys,
mutual_ephemeral_medium_keys: MutualEphemeralMediumKeys
):
mpmi2 = mutual_persistent_medium_keys.inner_key_2
#mpmi2 = mutual_persistent_medium_keys.inner_key_2
mmi2 = mutual_persistent_medium_keys.inner_key_2 << mutual_ephemeral_medium_keys.inner_key_2
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
@@ -144,8 +146,8 @@ def transmit_medium(
mema = mutual_ephemeral_medium_keys.alpha_key
medium_phase3 = (
((medium_phase2 < ~cmo1_cmo2) << ((~cmi1 << mpmi2) < mmo3)) ^
(((cpma ^ cema ^ mema) < mmo1) << ((mmi1 < mmo2) << (mpmi2 < mmo3)))
((medium_phase2 < ~cmo1_cmo2) << ((~cmi1 << mmi2) < mmo3)) ^
(((cpma ^ cema ^ mema) < mmo1) << ((mmi1 < mmo2) << (mmi2 < mmo3)))
) < cmo1_cmo2
return medium_phase3

View File

@@ -93,8 +93,8 @@ def phase4_translate_alphabet(
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
#mpdi2 = mutual_persistent_data_keys.inner_key_2
mdi2 = mutual_persistent_data_keys.inner_key_2 << mutual_ephemeral_data_keys.inner_key_2
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
@@ -104,8 +104,8 @@ def phase4_translate_alphabet(
meda = mutual_ephemeral_data_keys.alpha_key
translated_alphabet = (
((alphabet < sdo1) << ((sdi1 << mpdi2) < mdo3)) ^
(((spda ^ seda ^ mpda ^ meda) < mdo1) << ((mdi1 < mdo2) << (mpdi2 < mdo3)))
((alphabet < sdo1) << ((sdi1 << mdi2) < mdo3)) ^
(((spda ^ seda ^ mpda ^ meda) < mdo1) << ((mdi1 < mdo2) << (mdi2 < mdo3)))
)
return translated_alphabet
@@ -120,7 +120,8 @@ def phase4_unwrap_medium(
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
#mpmi2 = mutual_persistent_medium_keys.inner_key_2
mmi2 = mutual_persistent_medium_keys.inner_key_2 << mutual_ephemeral_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
@@ -137,7 +138,7 @@ def phase4_unwrap_medium(
unwrapped_medium = (
((darc_message < ~mmo4) << ~(mmi4 < (mmo5 << nmmo6_nmmo4))) ^
(((spma ^ sema ^ mpma ^ mema) < mmo1) << ((mmi1 < mmo2) << (mpmi2 < mmo3)))
(((spma ^ sema ^ mpma ^ mema) < mmo1) << ((mmi1 < mmo2) << (mmi2 < mmo3)))
) << (~mmi3 < nmmo6_nmmo4)
return unwrapped_medium

View File

@@ -29,6 +29,7 @@ def test_darc(height, width, message_len):
assert original_message == message
@pytest.mark.skip
@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)]