Refactor AlphabetKet to SubstitutionKey
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
from src.models import (
|
||||
AlphabetKey, ClientKeys, MutualKeys, ClientPersistentDataKeys, ClientEphemeralDataKeys,
|
||||
SubstitutionKey, ClientKeys, MutualKeys, ClientPersistentDataKeys, ClientEphemeralDataKeys,
|
||||
MutualPersistentDataKeys, MutualEphemeralDataKeys, ClientPersistentMediumKeys, ClientEphemeralMediumKeys,
|
||||
MutualPersistentMediumKeys, MutualEphemeralMediumKeys, DarcKey, OuterKey, Mask
|
||||
)
|
||||
|
||||
|
||||
def darc_phase2(
|
||||
alphabet_phase1: AlphabetKey,
|
||||
medium_phase1: AlphabetKey,
|
||||
alphabet_phase1: SubstitutionKey,
|
||||
medium_phase1: SubstitutionKey,
|
||||
client_keys: ClientKeys,
|
||||
mutual_keys: MutualKeys
|
||||
):
|
||||
@@ -29,7 +29,7 @@ def darc_phase2(
|
||||
|
||||
|
||||
def receive_alphabet(
|
||||
alphabet_phase1: AlphabetKey,
|
||||
alphabet_phase1: SubstitutionKey,
|
||||
client_persistent_data_keys: ClientPersistentDataKeys,
|
||||
client_ephemeral_data_keys: ClientEphemeralDataKeys,
|
||||
mutual_persistent_data_keys: MutualPersistentDataKeys,
|
||||
@@ -57,7 +57,7 @@ def receive_alphabet(
|
||||
|
||||
|
||||
def receive_medium(
|
||||
medium_phase1: AlphabetKey,
|
||||
medium_phase1: SubstitutionKey,
|
||||
client_persistent_medium_keys: ClientPersistentMediumKeys,
|
||||
client_ephemeral_medium_keys: ClientEphemeralMediumKeys,
|
||||
mutual_persistent_medium_keys: MutualPersistentMediumKeys,
|
||||
@@ -152,8 +152,8 @@ def transmit_medium(
|
||||
|
||||
|
||||
def darc_phase3(
|
||||
alphabet_phase2: AlphabetKey,
|
||||
medium_phase2: AlphabetKey,
|
||||
alphabet_phase2: SubstitutionKey,
|
||||
medium_phase2: SubstitutionKey,
|
||||
client_keys: ClientKeys,
|
||||
mutual_keys: MutualKeys
|
||||
):
|
||||
@@ -175,8 +175,8 @@ def darc_phase3(
|
||||
|
||||
|
||||
def merge_message(
|
||||
alphabet_phase3: AlphabetKey,
|
||||
medium_phase3: AlphabetKey,
|
||||
alphabet_phase3: SubstitutionKey,
|
||||
medium_phase3: SubstitutionKey,
|
||||
client_keys: ClientKeys,
|
||||
mutual_keys: MutualKeys,
|
||||
message: list[int]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from src.models import DarcKey, MutualKeys, OuterKey, AlphabetKey, \
|
||||
from src.models import DarcKey, MutualKeys, OuterKey, SubstitutionKey, \
|
||||
MutualPersistentDataKeys, MutualEphemeralDataKeys
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ def merge_message_no_client(alphabet: DarcKey, medium: DarcKey, mutual_keys: Mut
|
||||
input_seq = padded_input_sequence
|
||||
a_i = alphabet < input_seq
|
||||
|
||||
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
||||
eof_arr = SubstitutionKey.init_matrix(width, height, 255).matrix[0]
|
||||
if msg_len < height:
|
||||
a_i.matrix[msg_len] = eof_arr
|
||||
|
||||
@@ -36,7 +36,7 @@ def merge_message_no_client(alphabet: DarcKey, medium: DarcKey, mutual_keys: Mut
|
||||
return message
|
||||
|
||||
|
||||
def darc_phase_2_3(alphabet_phase1: AlphabetKey, medium_phase1: AlphabetKey, mutual_keys: MutualKeys) -> AlphabetKey:
|
||||
def darc_phase_2_3(alphabet_phase1: SubstitutionKey, medium_phase1: SubstitutionKey, mutual_keys: MutualKeys) -> SubstitutionKey:
|
||||
phase3_alphabet = transceive_alphabet(alphabet_phase1, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
phase3_medium = transceive_medium(medium_phase1, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return (phase3_alphabet, phase3_medium)
|
||||
|
||||
@@ -6,7 +6,7 @@ from pydantic import BaseModel
|
||||
class DarcKeyType(str, Enum):
|
||||
outer_shuffle = "outer_shuffle"
|
||||
inner_shuffle = "inner_shuffle"
|
||||
alphabet = "alphabet"
|
||||
substitution = "substitution"
|
||||
other = "other"
|
||||
|
||||
|
||||
@@ -61,8 +61,8 @@ class DarcKey(BaseModel):
|
||||
def __xor__(self, other):
|
||||
assert len(self.matrix) == len(other.matrix)
|
||||
assert len(self.matrix[0]) == len(other.matrix[0])
|
||||
assert self.key_type == DarcKeyType.alphabet
|
||||
assert other.key_type == DarcKeyType.alphabet
|
||||
assert self.key_type == DarcKeyType.substitution
|
||||
assert other.key_type == DarcKeyType.substitution
|
||||
output = []
|
||||
for i, el in enumerate(self.matrix):
|
||||
row = []
|
||||
@@ -129,21 +129,21 @@ class InnerKey(DarcKey):
|
||||
)
|
||||
|
||||
|
||||
class AlphabetKey(DarcKey):
|
||||
key_type: DarcKeyType = DarcKeyType.alphabet
|
||||
class SubstitutionKey(DarcKey):
|
||||
key_type: DarcKeyType = DarcKeyType.substitution
|
||||
|
||||
@classmethod
|
||||
def init_matrix(cls, width: int, height: int, max_value: int):
|
||||
def init_matrix(cls, width: int, height: int, max_value: int = 255):
|
||||
""" originally buildScramble """
|
||||
matrix = [cls._random_mask(width, max_value) for _ in range(height)]
|
||||
return AlphabetKey(
|
||||
return SubstitutionKey(
|
||||
matrix=matrix,
|
||||
max_value=max_value
|
||||
)
|
||||
|
||||
|
||||
class Mask(DarcKey):
|
||||
key_type: DarcKeyType = DarcKeyType.alphabet
|
||||
key_type: DarcKeyType = DarcKeyType.substitution
|
||||
|
||||
@classmethod
|
||||
def init_matrix(cls, width: int, height: int, col_mask: int):
|
||||
@@ -162,7 +162,7 @@ class Mask(DarcKey):
|
||||
class ClientEphemeralDataKeys(BaseModel):
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
inner_key_1: InnerKey
|
||||
|
||||
@classmethod
|
||||
@@ -170,7 +170,7 @@ class ClientEphemeralDataKeys(BaseModel):
|
||||
return ClientEphemeralDataKeys(
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
)
|
||||
|
||||
@@ -179,7 +179,7 @@ class ClientEphemeralMediumKeys(BaseModel):
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
inner_key_1: InnerKey
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
@@ -187,12 +187,12 @@ class ClientEphemeralMediumKeys(BaseModel):
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255)
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255)
|
||||
)
|
||||
|
||||
|
||||
class ClientPersistentDataKeys(BaseModel):
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
inner_key_1: InnerKey
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
@@ -200,7 +200,7 @@ class ClientPersistentDataKeys(BaseModel):
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return ClientPersistentDataKeys(
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
@@ -211,7 +211,7 @@ class ClientPersistentMediumKeys(BaseModel):
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
inner_key_1: InnerKey
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
@@ -219,60 +219,60 @@ class ClientPersistentMediumKeys(BaseModel):
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255)
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255)
|
||||
)
|
||||
|
||||
|
||||
class ServerEphemeralDataKeys(BaseModel):
|
||||
outer_key_1: OuterKey
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
inner_key_1: InnerKey
|
||||
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return ServerEphemeralDataKeys(
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
)
|
||||
|
||||
|
||||
class ServerEphemeralMediumKeys(BaseModel):
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return ServerEphemeralMediumKeys(
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255)
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255)
|
||||
)
|
||||
|
||||
|
||||
class ServerPersistentDataKeys(BaseModel):
|
||||
outer_key_1: OuterKey
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
inner_key_1: InnerKey
|
||||
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return ServerPersistentDataKeys(
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
)
|
||||
|
||||
|
||||
class ServerPersistentMediumKeys(BaseModel):
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return ServerPersistentMediumKeys(
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255)
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255)
|
||||
)
|
||||
|
||||
|
||||
class MutualEphemeralDataKeys(BaseModel):
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
inner_key_1: InnerKey
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
@@ -281,7 +281,7 @@ class MutualEphemeralDataKeys(BaseModel):
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return MutualEphemeralDataKeys(
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
@@ -290,7 +290,7 @@ class MutualEphemeralDataKeys(BaseModel):
|
||||
|
||||
|
||||
class MutualEphemeralMediumKeys(BaseModel):
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
@@ -306,7 +306,7 @@ class MutualEphemeralMediumKeys(BaseModel):
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return MutualEphemeralMediumKeys(
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
outer_key_3=OuterKey.init_matrix(height),
|
||||
@@ -323,7 +323,7 @@ class MutualPersistentDataKeys(BaseModel):
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
outer_key_3: OuterKey
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
inner_key_1: InnerKey
|
||||
inner_key_2: InnerKey
|
||||
|
||||
@@ -333,14 +333,14 @@ class MutualPersistentDataKeys(BaseModel):
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
outer_key_3=OuterKey.init_matrix(height),
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
inner_key_1=InnerKey.init_matrix(width, height),
|
||||
inner_key_2=InnerKey.init_matrix(width, height),
|
||||
)
|
||||
|
||||
|
||||
class MutualPersistentMediumKeys(BaseModel):
|
||||
alpha_key: AlphabetKey
|
||||
alpha_key: SubstitutionKey
|
||||
|
||||
outer_key_1: OuterKey
|
||||
outer_key_2: OuterKey
|
||||
@@ -357,7 +357,7 @@ class MutualPersistentMediumKeys(BaseModel):
|
||||
@classmethod
|
||||
def random_init(cls, height: int, width: int):
|
||||
return MutualPersistentMediumKeys(
|
||||
alpha_key=AlphabetKey.init_matrix(width, height, 255),
|
||||
alpha_key=SubstitutionKey.init_matrix(width, height, 255),
|
||||
outer_key_1=OuterKey.init_matrix(height),
|
||||
outer_key_2=OuterKey.init_matrix(height),
|
||||
outer_key_3=OuterKey.init_matrix(height),
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
from src.models import (
|
||||
AlphabetKey, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys,
|
||||
SubstitutionKey, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys,
|
||||
MutualEphemeralDataKeys, ServerKeys, MutualKeys, ServerPersistentMediumKeys, ServerEphemeralMediumKeys,
|
||||
MutualPersistentMediumKeys, MutualEphemeralMediumKeys
|
||||
)
|
||||
|
||||
|
||||
def darc_phase1(alphabet: AlphabetKey, medium: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||
def darc_phase1(alphabet: SubstitutionKey, medium: SubstitutionKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase1 = translate_data(
|
||||
alphabet,
|
||||
server_keys.persistent.data,
|
||||
@@ -24,7 +24,7 @@ def darc_phase1(alphabet: AlphabetKey, medium: AlphabetKey, server_keys: ServerK
|
||||
|
||||
|
||||
def translate_data(
|
||||
alphabet: AlphabetKey,
|
||||
alphabet: SubstitutionKey,
|
||||
server_persistent_data_keys: ServerPersistentDataKeys,
|
||||
server_ephemeral_data_keys: ServerEphemeralDataKeys,
|
||||
mutual_persistent_data_keys: MutualPersistentDataKeys,
|
||||
@@ -49,7 +49,7 @@ def translate_data(
|
||||
|
||||
|
||||
def translate_medium(
|
||||
medium: AlphabetKey,
|
||||
medium: SubstitutionKey,
|
||||
server_persistent_medium_keys: ServerPersistentMediumKeys,
|
||||
server_ephemeral_medium_keys: ServerEphemeralMediumKeys,
|
||||
mutual_persistent_medium_keys: MutualPersistentMediumKeys,
|
||||
@@ -65,7 +65,7 @@ def translate_medium(
|
||||
return medium_phase1
|
||||
|
||||
|
||||
def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||
def darc_phase_4(alphabet: SubstitutionKey, darc_message: SubstitutionKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||
medium_unwrapped = phase4_unwrap_medium(
|
||||
darc_message,
|
||||
server_keys.persistent.medium,
|
||||
@@ -84,7 +84,7 @@ def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys:
|
||||
|
||||
|
||||
def phase4_translate_alphabet(
|
||||
alphabet: AlphabetKey,
|
||||
alphabet: SubstitutionKey,
|
||||
server_persistent_data_keys: ServerPersistentDataKeys,
|
||||
server_ephemeral_data_keys: ServerEphemeralDataKeys,
|
||||
mutual_persistent_data_keys: MutualPersistentDataKeys,
|
||||
@@ -113,7 +113,7 @@ def phase4_translate_alphabet(
|
||||
|
||||
|
||||
def phase4_unwrap_medium(
|
||||
darc_message: AlphabetKey,
|
||||
darc_message: SubstitutionKey,
|
||||
server_persistent_medium_keys: ServerPersistentMediumKeys,
|
||||
server_ephemeral_medium_keys: ServerEphemeralMediumKeys,
|
||||
mutual_persistent_medium_keys: MutualPersistentMediumKeys,
|
||||
@@ -144,7 +144,7 @@ def phase4_unwrap_medium(
|
||||
return unwrapped_medium
|
||||
|
||||
|
||||
def resolve_message(translated_alphabet: AlphabetKey, unwrapped_medium: AlphabetKey) -> list[int]:
|
||||
def resolve_message(translated_alphabet: SubstitutionKey, unwrapped_medium: SubstitutionKey) -> list[int]:
|
||||
alphabet_map = {str(key): idx for idx, key in enumerate(translated_alphabet.matrix)}
|
||||
encoded_message = [str(alpha) for alpha in unwrapped_medium.matrix]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user