working version of darc

This commit is contained in:
2024-05-20 16:19:59 -05:00
parent 2dfdc33a8f
commit 65a0c8d509
2 changed files with 153 additions and 45 deletions

View File

@@ -237,7 +237,6 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_peristent_keys: Cli
message = operand ^ (operand1 << inner_function_key_applied) message = operand ^ (operand1 << inner_function_key_applied)
outer_position_shuffle_function_key_applied = client_peristent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey outer_position_shuffle_function_key_applied = client_peristent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey
position_shuffle_key_applied = client_peristent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey position_shuffle_key_applied = client_peristent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey
@@ -288,26 +287,6 @@ def darc_phase_4(darc_message: DarcKey, server_persistent_keys: ServerPersistent
rx_data = operand ^ (operand1 << inner_key) ^ (operand2 << inner_key) ^ (operand3 << inner_key) ^ (operand4 << inner_key) rx_data = operand ^ (operand1 << inner_key) ^ (operand2 << inner_key) ^ (operand3 << inner_key) ^ (operand4 << inner_key)
"""
FunctionTranslation PositionFunctionKey = ServerPersistentKeys.PositionFunctionMediumKey;
FunctionTranslation PositionFunctionEphemeralKey = MutualEphemeralKeys.PositionFunctionMediumEphemeralKey;
FunctionTranslation PositionFunctionEphemeralKeyApplied = new FunctionTranslation { Data = Transform.TransformationCompliment(Transform.PermuteInnerTransformation(PositionFunctionKey.Data, PositionFunctionEphemeralKey.Data)) };
#region Inner Shuffle
RxData = Transform.PermuteInnerTransformation(
RxData.Convert<int>(),
Transform.PermuteInnerTransformation(
Transform.TransformationCompliment(
PositionShuffleEphemeralKeyApplied.Data
),
Transform.PermuteOuterTransformation(
PositionFunctionEphemeralKeyApplied.Data.Convert<byte>(),
OuterPositionFunctionEphemeralKeyApplied.Data).Convert<int>())).Convert<byte>();
"""
position_function_ephemeral_key_applied = server_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey position_function_ephemeral_key_applied = server_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey
rx_data = rx_data << (~(position_shuffle_ephemeral_key_applied) << (~position_function_ephemeral_key_applied < outer_position_function_ephemeral_key_applied)) rx_data = rx_data << (~(position_shuffle_ephemeral_key_applied) << (~position_function_ephemeral_key_applied < outer_position_function_ephemeral_key_applied))
@@ -370,20 +349,52 @@ if __name__ == "__main__":
server_ephemeral_keys = {k: {"matrix": v} for k, v in server_ephemeral_keys.items()} server_ephemeral_keys = {k: {"matrix": v} for k, v in server_ephemeral_keys.items()}
mutual_ephemeral_keys = {k: {"matrix": v} for k, v in mutual_ephemeral_keys.items()} mutual_ephemeral_keys = {k: {"matrix": v} for k, v in mutual_ephemeral_keys.items()}
client_persistent_keys = ClientPersistentKeys(**client_persistent_keys) # client_persistent_keys = ClientPersistentKeys(**client_persistent_keys)
client_ephemeral_keys = ClientEphemeralKeys(**client_ephemeral_keys) # client_ephemeral_keys = ClientEphemeralKeys(**client_ephemeral_keys)
server_persistent_keys = ServerPersistentKeys(**server_persistent_keys) # server_persistent_keys = ServerPersistentKeys(**server_persistent_keys)
server_ephemeral_keys = ServerEphemeralKeys(**server_ephemeral_keys) # server_ephemeral_keys = ServerEphemeralKeys(**server_ephemeral_keys)
mutual_ephemeral_keys = MutualEphemeralKeys(**mutual_ephemeral_keys) # mutual_ephemeral_keys = MutualEphemeralKeys(**mutual_ephemeral_keys)
client_persistent_keys = ClientPersistentKeys.random_init(height, width)
client_ephemeral_keys = ClientEphemeralKeys.random_init(height, width)
server_persistent_keys = ServerPersistentKeys.random_init(height, width)
server_ephemeral_keys = ServerEphemeralKeys.random_init(height, width)
mutual_ephemeral_keys = MutualEphemeralKeys.random_init(height, width)
server_persistent_keys.ServerKey = server_persistent_keys.ServerKey ^ client_persistent_keys.MutualKey
server_persistent_keys.ServerMediumKey = server_persistent_keys.ServerMediumKey ^ client_persistent_keys.MutualMediumKey
client_persistent_keys.MutualKey = client_persistent_keys.MutualKey ^ client_persistent_keys.ClientKey
client_persistent_keys.MutualMediumKey = client_persistent_keys.MutualMediumKey ^ client_persistent_keys.ClientMediumKey
server_persistent_keys.MutualKey = client_persistent_keys.MutualKey
server_persistent_keys.MutualMediumKey = client_persistent_keys.MutualMediumKey
server_persistent_keys.OuterFunctionKey = client_persistent_keys.OuterFunctionKey
server_persistent_keys.OuterFunctionFunctionKey = client_persistent_keys.OuterFunctionFunctionKey
server_persistent_keys.OuterServerShuffleFunctionKey = client_persistent_keys.OuterServerShuffleFunctionKey
server_persistent_keys.FunctionKey = client_persistent_keys.FunctionKey
server_persistent_keys.ClientShuffleKeyX = client_persistent_keys.ClientShuffleKeyX
server_persistent_keys.OuterFunctionMediumKey = client_persistent_keys.OuterFunctionMediumKey
server_persistent_keys.OuterFunctionFunctionMediumKey = client_persistent_keys.OuterFunctionFunctionMediumKey
server_persistent_keys.OuterServerShuffleFunctionMediumKey = client_persistent_keys.OuterServerShuffleFunctionMediumKey
server_persistent_keys.FunctionMediumKey = client_persistent_keys.FunctionMediumKey
server_persistent_keys.ClientShuffleMediumKeyX = client_persistent_keys.ClientShuffleMediumKeyX
server_persistent_keys.OuterPositionShuffleMediumKey = client_persistent_keys.OuterPositionShuffleMediumKey
server_persistent_keys.OuterPositionShuffleFunctionMediumKey = client_persistent_keys.OuterPositionShuffleFunctionMediumKey
server_persistent_keys.OuterPositionFunctionMediumKey = client_persistent_keys.OuterPositionFunctionMediumKey
server_persistent_keys.PositionFunctionMediumKey = client_persistent_keys.PositionFunctionMediumKey
server_persistent_keys.PositionShuffleMediumKey = client_persistent_keys.PositionShuffleMediumKey
(phase1_alphabet, phase1_medium) = darc_phase1(server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys) (phase1_alphabet, phase1_medium) = darc_phase1(server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys)
(phase2_alphabet, phase2_medium) = darc_phase2(phase1_alphabet, phase1_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys) (phase2_alphabet, phase2_medium) = darc_phase2(phase1_alphabet, phase1_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys)
(phase3_alphabet, phase3_medium) = darc_phase3(phase2_alphabet, phase2_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys) (phase3_alphabet, phase3_medium) = darc_phase3(phase2_alphabet, phase2_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys)
# original_message = [0, 2, 4, 6, 0, 5, 9, 9, 1, 7]
original_message = [0, 2, 4, 6] original_message = [0, 2, 4, 6, 7, 8, 9]
darc_message = merge_message(phase3_alphabet, phase3_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys, original_message) darc_message = merge_message(phase3_alphabet, phase3_medium, client_persistent_keys, client_ephemeral_keys, mutual_ephemeral_keys, original_message)
message = darc_phase_4(darc_message, server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys) message = darc_phase_4(darc_message, server_persistent_keys, server_ephemeral_keys, mutual_ephemeral_keys)
print(original_message) print(original_message)
print(message) print(message)

View File

@@ -111,9 +111,9 @@ class OuterShuffleKey(DarcKey):
key_type = DarcKeyTypes.outer_shuffle key_type = DarcKeyTypes.outer_shuffle
@classmethod @classmethod
def init_matrix(cls, row_length: int): def init_matrix(cls, height: int):
""" originally buildRandom """ """ originally buildRandom """
matrix = [cls._random_shuffle(list(range(row_length)))] matrix = [cls._random_shuffle(list(range(height)))]
return OuterShuffleKey( return OuterShuffleKey(
matrix=matrix, matrix=matrix,
) )
@@ -123,9 +123,9 @@ class InnerShuffleKey(DarcKey):
key_type = DarcKeyTypes.inner_shuffle key_type = DarcKeyTypes.inner_shuffle
@classmethod @classmethod
def init_matrix(cls, row_length: int, column_length: int): def init_matrix(cls, width: int, height: int):
""" originally buildRandom """ """ originally buildRandom """
matrix = [cls._random_shuffle(list(range(row_length))) for _ in range(column_length)] matrix = [cls._random_shuffle(list(range(width))) for _ in range(height)]
return InnerShuffleKey( return InnerShuffleKey(
matrix=matrix, matrix=matrix,
) )
@@ -136,9 +136,9 @@ class AlphabetKey(DarcKey):
max_value: int = 255 max_value: int = 255
@classmethod @classmethod
def init_matrix(cls, row_length: int, column_length: int, max_value: int): def init_matrix(cls, width: int, height: int, max_value: int):
""" originally buildScramble """ """ originally buildScramble """
matrix = [cls._random_mask(row_length, max_value) for _ in range(column_length)] matrix = [cls._random_mask(width, max_value) for _ in range(height)]
return AlphabetKey( return AlphabetKey(
matrix=matrix, matrix=matrix,
max_value=max_value max_value=max_value
@@ -152,6 +152,9 @@ class ServerPersistentKeys(BaseModel):
MutualKey: AlphabetKey MutualKey: AlphabetKey
FunctionKey: InnerShuffleKey FunctionKey: InnerShuffleKey
ClientShuffleKeyX: InnerShuffleKey ClientShuffleKeyX: InnerShuffleKey
OuterServerShuffleKey: OuterShuffleKey
ServerKey: AlphabetKey
ServerShuffleKey: InnerShuffleKey
MutualMediumKey: AlphabetKey MutualMediumKey: AlphabetKey
OuterFunctionMediumKey: OuterShuffleKey OuterFunctionMediumKey: OuterShuffleKey
@@ -164,13 +167,34 @@ class ServerPersistentKeys(BaseModel):
OuterPositionFunctionMediumKey: OuterShuffleKey OuterPositionFunctionMediumKey: OuterShuffleKey
PositionFunctionMediumKey: InnerShuffleKey PositionFunctionMediumKey: InnerShuffleKey
PositionShuffleMediumKey: InnerShuffleKey PositionShuffleMediumKey: InnerShuffleKey
OuterServerShuffleKey: OuterShuffleKey
ServerKey: AlphabetKey
ServerShuffleKey: InnerShuffleKey
ServerMediumKey: AlphabetKey ServerMediumKey: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ServerPersistentKeys(
OuterFunctionKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
MutualKey=AlphabetKey.init_matrix(width, height, 255),
FunctionKey=InnerShuffleKey.init_matrix(width, height),
ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height),
OuterServerShuffleKey=OuterShuffleKey.init_matrix(height),
ServerKey=AlphabetKey.init_matrix(width, height, 255),
ServerShuffleKey=InnerShuffleKey.init_matrix(width, height),
MutualMediumKey=AlphabetKey.init_matrix(width, height, 255),
OuterFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height),
FunctionMediumKey=InnerShuffleKey.init_matrix(width, height),
ClientShuffleMediumKeyX=InnerShuffleKey.init_matrix(width, height),
OuterPositionShuffleMediumKey=OuterShuffleKey.init_matrix(height),
OuterPositionShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterPositionFunctionMediumKey=OuterShuffleKey.init_matrix(height),
PositionFunctionMediumKey=InnerShuffleKey.init_matrix(width, height),
PositionShuffleMediumKey=InnerShuffleKey.init_matrix(width, height),
ServerMediumKey=AlphabetKey.init_matrix(width, height, 255)
)
class ClientPersistentKeys(BaseModel): class ClientPersistentKeys(BaseModel):
OuterFunctionKey: OuterShuffleKey OuterFunctionKey: OuterShuffleKey
@@ -179,6 +203,10 @@ class ClientPersistentKeys(BaseModel):
MutualKey: AlphabetKey MutualKey: AlphabetKey
FunctionKey: InnerShuffleKey FunctionKey: InnerShuffleKey
ClientShuffleKeyX: InnerShuffleKey ClientShuffleKeyX: InnerShuffleKey
ClientKey: AlphabetKey
ClientShuffleKeyA: InnerShuffleKey
OuterClientShuffleKey: OuterShuffleKey
OuterClientShuffleFunctionKey: OuterShuffleKey
MutualMediumKey: AlphabetKey MutualMediumKey: AlphabetKey
OuterFunctionMediumKey: OuterShuffleKey OuterFunctionMediumKey: OuterShuffleKey
@@ -191,25 +219,59 @@ class ClientPersistentKeys(BaseModel):
OuterPositionFunctionMediumKey: OuterShuffleKey OuterPositionFunctionMediumKey: OuterShuffleKey
PositionFunctionMediumKey: InnerShuffleKey PositionFunctionMediumKey: InnerShuffleKey
PositionShuffleMediumKey: InnerShuffleKey PositionShuffleMediumKey: InnerShuffleKey
ClientKey: AlphabetKey
ClientShuffleKeyA: InnerShuffleKey
OuterClientShuffleKey: OuterShuffleKey
OuterClientShuffleFunctionKey: OuterShuffleKey
OuterClientShuffleMediumKey: OuterShuffleKey OuterClientShuffleMediumKey: OuterShuffleKey
OuterClientShuffleFunctionMediumKey: OuterShuffleKey OuterClientShuffleFunctionMediumKey: OuterShuffleKey
ClientShuffleMediumKeyA: InnerShuffleKey ClientShuffleMediumKeyA: InnerShuffleKey
ClientMediumKey: AlphabetKey ClientMediumKey: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ClientPersistentKeys(
OuterFunctionKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
MutualKey=AlphabetKey.init_matrix(width, height, 255),
FunctionKey=InnerShuffleKey.init_matrix(width, height),
ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height),
ClientKey=AlphabetKey.init_matrix(width, height, 255),
ClientShuffleKeyA=InnerShuffleKey.init_matrix(width, height),
OuterClientShuffleKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
MutualMediumKey=AlphabetKey.init_matrix(width, height, 255),
OuterFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height),
FunctionMediumKey=InnerShuffleKey.init_matrix(width, height),
ClientShuffleMediumKeyX=InnerShuffleKey.init_matrix(width, height),
OuterPositionShuffleMediumKey=OuterShuffleKey.init_matrix(height),
OuterPositionShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterPositionFunctionMediumKey=OuterShuffleKey.init_matrix(height),
PositionFunctionMediumKey=InnerShuffleKey.init_matrix(width, height),
PositionShuffleMediumKey=InnerShuffleKey.init_matrix(width, height),
OuterClientShuffleMediumKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height),
ClientShuffleMediumKeyA=InnerShuffleKey.init_matrix(width, height),
ClientMediumKey=AlphabetKey.init_matrix(width, height, 255)
)
class ServerEphemeralKeys(BaseModel): class ServerEphemeralKeys(BaseModel):
OuterServerShuffleEphemeralKey: OuterShuffleKey OuterServerShuffleEphemeralKey: OuterShuffleKey
ServerEphemeralKey: AlphabetKey ServerEphemeralKey: AlphabetKey
ServerShuffleEphemeralKey: InnerShuffleKey ServerShuffleEphemeralKey: InnerShuffleKey
ServerMediumEphemeralKey: AlphabetKey ServerMediumEphemeralKey: AlphabetKey
Alphabet: AlphabetKey Alphabet: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ServerEphemeralKeys(
OuterServerShuffleEphemeralKey=OuterShuffleKey.init_matrix(height),
ServerEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
ServerShuffleEphemeralKey=InnerShuffleKey.init_matrix(width, height),
ServerMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
Alphabet=AlphabetKey.init_matrix(width, height, 255)
)
class MutualEphemeralKeys(BaseModel): class MutualEphemeralKeys(BaseModel):
MutualEphemeralKey: AlphabetKey MutualEphemeralKey: AlphabetKey
@@ -217,6 +279,7 @@ class MutualEphemeralKeys(BaseModel):
OuterFunctionEphemeralKey: OuterShuffleKey OuterFunctionEphemeralKey: OuterShuffleKey
OuterFunctionFunctionEphemeralKey: OuterShuffleKey OuterFunctionFunctionEphemeralKey: OuterShuffleKey
OuterServerShuffleFunctionEphemeralKey: OuterShuffleKey OuterServerShuffleFunctionEphemeralKey: OuterShuffleKey
MutualMediumEphemeralKey: AlphabetKey MutualMediumEphemeralKey: AlphabetKey
FunctionMediumEphemeralKey: InnerShuffleKey FunctionMediumEphemeralKey: InnerShuffleKey
PositionFunctionMediumEphemeralKey: InnerShuffleKey PositionFunctionMediumEphemeralKey: InnerShuffleKey
@@ -228,13 +291,47 @@ class MutualEphemeralKeys(BaseModel):
PositionShuffleMediumEphemeralKey: InnerShuffleKey PositionShuffleMediumEphemeralKey: InnerShuffleKey
OuterPositionShuffleMediumEphemeralKey: OuterShuffleKey OuterPositionShuffleMediumEphemeralKey: OuterShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return MutualEphemeralKeys(
MutualEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
FunctionEphemeralKey=InnerShuffleKey.init_matrix(width, height),
OuterFunctionEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionEphemeralKey=OuterShuffleKey.init_matrix(height),
MutualMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
FunctionMediumEphemeralKey=InnerShuffleKey.init_matrix(width, height),
PositionFunctionMediumEphemeralKey=InnerShuffleKey.init_matrix(width, height),
OuterFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterPositionFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterPositionShuffleFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
PositionShuffleMediumEphemeralKey=InnerShuffleKey.init_matrix(width, height),
OuterPositionShuffleMediumEphemeralKey=OuterShuffleKey.init_matrix(height)
)
class ClientEphemeralKeys(BaseModel): class ClientEphemeralKeys(BaseModel):
OuterClientShuffleEphemeralKey: OuterShuffleKey OuterClientShuffleEphemeralKey: OuterShuffleKey
OuterClientShuffleFunctionEphemeralKey: OuterShuffleKey OuterClientShuffleFunctionEphemeralKey: OuterShuffleKey
ClientEphemeralKey: AlphabetKey ClientEphemeralKey: AlphabetKey
ClientShuffleEphemeralKeyA: InnerShuffleKey ClientShuffleEphemeralKeyA: InnerShuffleKey
OuterClientShuffleMediumEphemeralKey: OuterShuffleKey OuterClientShuffleMediumEphemeralKey: OuterShuffleKey
OuterClientShuffleFunctionMediumEphemeralKey: OuterShuffleKey OuterClientShuffleFunctionMediumEphemeralKey: OuterShuffleKey
ClientShuffleMediumEphemeralKeyA: InnerShuffleKey ClientShuffleMediumEphemeralKeyA: InnerShuffleKey
ClientMediumEphemeralKey: AlphabetKey ClientMediumEphemeralKey: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ClientEphemeralKeys(
OuterClientShuffleEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionEphemeralKey=OuterShuffleKey.init_matrix(height),
ClientEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
ClientShuffleEphemeralKeyA=InnerShuffleKey.init_matrix(width, height),
OuterClientShuffleMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
ClientShuffleMediumEphemeralKeyA=InnerShuffleKey.init_matrix(width, height),
ClientMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255)
)