add benchmark; modify darc implementation so mutual inner key 2 has an ephemeral key
This commit is contained in:
0
benchmark/__init__.py
Normal file
0
benchmark/__init__.py
Normal file
21
benchmark/generate_test_vectors.py
Normal file
21
benchmark/generate_test_vectors.py
Normal 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
|
||||||
@@ -93,7 +93,8 @@ def transmit_alphabet(
|
|||||||
mutual_persistent_data_keys: MutualPersistentDataKeys,
|
mutual_persistent_data_keys: MutualPersistentDataKeys,
|
||||||
mutual_ephemeral_data_keys: MutualEphemeralDataKeys
|
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
|
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
|
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
|
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
|
meda = mutual_ephemeral_data_keys.alpha_key
|
||||||
|
|
||||||
alphabet_phase3 = (
|
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_persistent_medium_keys: MutualPersistentMediumKeys,
|
||||||
mutual_ephemeral_medium_keys: MutualEphemeralMediumKeys
|
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
|
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
|
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
|
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
|
mema = mutual_ephemeral_medium_keys.alpha_key
|
||||||
|
|
||||||
medium_phase3 = (
|
medium_phase3 = (
|
||||||
((medium_phase2 < ~cmo1_cmo2) << ((~cmi1 << mpmi2) < mmo3)) ^
|
((medium_phase2 < ~cmo1_cmo2) << ((~cmi1 << mmi2) < mmo3)) ^
|
||||||
(((cpma ^ cema ^ mema) < mmo1) << ((mmi1 < mmo2) << (mpmi2 < mmo3)))
|
(((cpma ^ cema ^ mema) < mmo1) << ((mmi1 < mmo2) << (mmi2 < mmo3)))
|
||||||
) < cmo1_cmo2
|
) < cmo1_cmo2
|
||||||
|
|
||||||
return medium_phase3
|
return medium_phase3
|
||||||
|
|||||||
@@ -93,8 +93,8 @@ def phase4_translate_alphabet(
|
|||||||
mdo1 = mutual_persistent_data_keys.outer_key_1 << mutual_ephemeral_data_keys.outer_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
|
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
|
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
|
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
|
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
|
meda = mutual_ephemeral_data_keys.alpha_key
|
||||||
|
|
||||||
translated_alphabet = (
|
translated_alphabet = (
|
||||||
((alphabet < sdo1) << ((sdi1 << mpdi2) < mdo3)) ^
|
((alphabet < sdo1) << ((sdi1 << mdi2) < mdo3)) ^
|
||||||
(((spda ^ seda ^ mpda ^ meda) < mdo1) << ((mdi1 < mdo2) << (mpdi2 < mdo3)))
|
(((spda ^ seda ^ mpda ^ meda) < mdo1) << ((mdi1 < mdo2) << (mdi2 < mdo3)))
|
||||||
)
|
)
|
||||||
return translated_alphabet
|
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
|
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
|
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
|
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
|
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
|
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
|
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 = (
|
unwrapped_medium = (
|
||||||
((darc_message < ~mmo4) << ~(mmi4 < (mmo5 << nmmo6_nmmo4))) ^
|
((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)
|
) << (~mmi3 < nmmo6_nmmo4)
|
||||||
return unwrapped_medium
|
return unwrapped_medium
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ def test_darc(height, width, message_len):
|
|||||||
assert original_message == message
|
assert original_message == message
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skip
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"height, width, message_len",
|
"height, width, message_len",
|
||||||
[(256, 10, 256), (100, 70, 70), (40, 50, 40), (256, 10, 128), (100, 70, 35), (40, 50, 20)]
|
[(256, 10, 256), (100, 70, 70), (40, 50, 40), (256, 10, 128), (100, 70, 35), (40, 50, 20)]
|
||||||
|
|||||||
Reference in New Issue
Block a user