refactor code and implement unit tests
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
from src.models import AlphabetKey, ClientKeys, MutualKeys, ClientPersistentDataKeys, ClientEphemeralDataKeys, \
|
||||
MutualPersistentDataKeys, MutualEphemeralDataKeys, ClientPersistentMediumKeys, ClientEphemeralMediumKeys, \
|
||||
MutualPersistentMediumKeys, MutualEphemeralMediumKeys, DarcKey, OuterKey
|
||||
|
||||
|
||||
def darc_phase2(alphabet: AlphabetKey, medium: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase2 = receive_alphabet(alphabet, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium = receive_medium(medium, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase2, medium
|
||||
|
||||
|
||||
def receive_alphabet(alphabet_phase1: AlphabetKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1_mo2 = (mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_persistent_keys.alpha_key
|
||||
result = (
|
||||
alphabet_phase1 ^
|
||||
((substitution < mo1) << mi1_mo2)
|
||||
)
|
||||
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
result = result < ~mo3
|
||||
ci1 = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
mo3_co1_co2 = mo3 << co1 << co2
|
||||
|
||||
|
||||
alphabet_phase2 = (result << ci1) < mo3_co1_co2
|
||||
return alphabet_phase2
|
||||
|
||||
|
||||
def receive_medium(medium_phase1: AlphabetKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_persistent_keys.alpha_key
|
||||
sub_mo1_mi1_mo2 = (substitution < mo1) << mi1_mo2
|
||||
result = medium_phase1 ^ sub_mo1_mi1_mo2
|
||||
|
||||
ci1 = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
ci1_mo3 = ci1 < mo3
|
||||
result = result << ci1_mo3
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
medium_phase2 = result < (co1 << co2)
|
||||
|
||||
return medium_phase2
|
||||
|
||||
|
||||
def transmit_alphabet(alphabet_phase2: DarcKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
co1_co2 = co1 << co2
|
||||
mo3_co1_co2 = mo3 << co1 << co2
|
||||
|
||||
ncei1_ncpi1_mpi2 = ~client_ephemeral_keys.inner_key_1 << ~client_persistent_keys.inner_key_1 << mutual_persistent_keys.inner_key_2
|
||||
ncei1_ncpi1_mpi2__mo3_co1_co2 = ncei1_ncpi1_mpi2 < mo3_co1_co2
|
||||
result = alphabet_phase2 << ncei1_ncpi1_mpi2__mo3_co1_co2
|
||||
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
|
||||
mi1_mo2_mpi2_mo3 = (((mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2) << (mutual_persistent_keys.inner_key_2 < mo3)) #< co1_co2
|
||||
alphabet_phase3 = result ^ (((substitution < mo1) << mi1_mo2_mpi2_mo3 ) < co1_co2)
|
||||
return alphabet_phase3
|
||||
|
||||
|
||||
def transmit_medium(medium_phase2: DarcKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
co1_co2 = co1 << co2
|
||||
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
mpi1_mo3 = mutual_persistent_keys.inner_key_2 < mo3
|
||||
mi1_mo2_mpi1_mo3 = mi1_mo2 << mpi1_mo3
|
||||
|
||||
ncei1_ncpi2 = ~(client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1) << mutual_persistent_keys.inner_key_2
|
||||
ncei1_ncpi2__mo3 = ncei1_ncpi2 < mo3
|
||||
|
||||
result = (medium_phase2 < ~co1_co2) << ncei1_ncpi2__mo3
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
sub = client_persistent_keys.alpha_key ^ client_ephemeral_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
sub_mo1 = sub < mo1
|
||||
sub_mo1_mi1_mo2_mpi1_mo3 = (sub_mo1 << mi1_mo2_mpi1_mo3)
|
||||
medium_phase3 = (result ^ sub_mo1_mi1_mo2_mpi1_mo3) < co1_co2
|
||||
|
||||
return medium_phase3
|
||||
|
||||
|
||||
def darc_phase3(alphabet_phase2: AlphabetKey, medium_phase2: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase3 = transmit_alphabet(alphabet_phase2, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium_phase3 = transmit_medium(medium_phase2, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase3, medium_phase3
|
||||
|
||||
|
||||
def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]):
|
||||
client_outer_key_1 = client_keys.persistent.data.outer_key_1 << client_keys.ephemeral.data.outer_key_1
|
||||
client_outer_key_2 = client_keys.persistent.data.outer_key_2 << client_keys.ephemeral.data.outer_key_2
|
||||
client_outer_key_1 = ~(client_outer_key_1 << client_outer_key_2)
|
||||
height = len(alphabet.matrix)
|
||||
width = len(alphabet.matrix[0])
|
||||
msg_len = len(input_sequence)
|
||||
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
||||
|
||||
if msg_len < height:
|
||||
padded_input_sequence = OuterKey.init_matrix(height)
|
||||
padded_input_sequence.matrix = [input_sequence + padded_input_sequence.matrix[0][msg_len:]]
|
||||
else:
|
||||
padded_input_sequence = OuterKey(matrix=[input_sequence])
|
||||
|
||||
client_outer_key_1 = client_outer_key_1 << padded_input_sequence
|
||||
|
||||
client_med_outer_key_1 = client_keys.persistent.medium.outer_key_1 << client_keys.ephemeral.medium.outer_key_1
|
||||
client_med_outer_key_2 = client_keys.persistent.medium.outer_key_2 << client_keys.ephemeral.medium.outer_key_2
|
||||
|
||||
client_med_outer_key_1 = client_med_outer_key_1 << client_med_outer_key_2
|
||||
|
||||
client_outer_key_1 = client_outer_key_1 << client_med_outer_key_1
|
||||
message = alphabet < client_outer_key_1
|
||||
|
||||
message_pad_key = ~client_med_outer_key_1
|
||||
|
||||
if msg_len < height:
|
||||
message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr
|
||||
|
||||
mutual_inner_key_3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
mutual_outer_key_6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
mutual_outer_key_4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
|
||||
outer_key_1 = mutual_outer_key_4 << mutual_outer_key_6
|
||||
|
||||
client_med_outer_key_1 = ~client_med_outer_key_1
|
||||
outer_key_1 = ~(client_med_outer_key_1 << outer_key_1)
|
||||
|
||||
mutual_inner_key_3 = mutual_inner_key_3 < outer_key_1
|
||||
|
||||
message = medium ^ (message << mutual_inner_key_3)
|
||||
|
||||
mutual_outer_key_5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
mutual_inner_key = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||
|
||||
mutual_outer_key_4 = client_med_outer_key_1 << mutual_outer_key_4
|
||||
outer_key_2 = mutual_outer_key_5 << outer_key_1
|
||||
|
||||
message = message << (mutual_inner_key < outer_key_2)
|
||||
message = message < mutual_outer_key_4
|
||||
return message
|
||||
|
||||
75
src/client_darc_noclient.py
Normal file
75
src/client_darc_noclient.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from src.models import DarcKey, MutualKeys, OuterKey, AlphabetKey, \
|
||||
MutualPersistentDataKeys, MutualEphemeralDataKeys
|
||||
|
||||
|
||||
def merge_message_no_client(alphabet: DarcKey, medium: DarcKey, mutual_keys: MutualKeys, input_sequence: list[int]):
|
||||
msg_len = len(input_sequence)
|
||||
height = len(alphabet.matrix)
|
||||
width = len(alphabet.matrix[0])
|
||||
|
||||
if msg_len < height:
|
||||
padded_input_sequence = OuterKey.init_matrix(height)
|
||||
padded_input_sequence.matrix = [input_sequence + padded_input_sequence.matrix[0][msg_len:]]
|
||||
else:
|
||||
padded_input_sequence = OuterKey(matrix=[input_sequence])
|
||||
|
||||
input_seq = padded_input_sequence
|
||||
a_i = alphabet < input_seq
|
||||
|
||||
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
||||
if msg_len < height:
|
||||
a_i.matrix[msg_len] = eof_arr
|
||||
|
||||
mmi3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
mmo6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
mmo4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
mmo5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
mmi4 = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||
|
||||
nmmo6 = ~mmo6
|
||||
message = medium ^ (a_i << (mmi3 < ~(mmo4 << mmo6)))
|
||||
|
||||
mmo5_nmmo6 = mmo5 << nmmo6
|
||||
|
||||
message = (message < mmo4) << (mmi4 < mmo5_nmmo6)
|
||||
|
||||
return message
|
||||
|
||||
|
||||
def darc_phase_2_3(alphabet_phase1: AlphabetKey, medium_phase1: AlphabetKey, mutual_keys: MutualKeys) -> AlphabetKey:
|
||||
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)
|
||||
|
||||
|
||||
def transceive_alphabet(alphabet_phase1: DarcKey, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
ma = mutual_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
|
||||
ma_mo1_mi1_mo2 = (ma < mo1) << (mi1 < mo2)
|
||||
alphabet_phase3 = (alphabet_phase1 ^ ma_mo1_mi1_mo2) << (mutual_persistent_keys.inner_key_2 < mo3)
|
||||
return alphabet_phase3
|
||||
|
||||
|
||||
def transceive_medium(medium_phase1: DarcKey, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
|
||||
ma = mutual_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
ma_mo1_mi1_mo2 = (ma < mo1) << mi1_mo2
|
||||
|
||||
result = medium_phase1 ^ ma_mo1_mi1_mo2
|
||||
|
||||
mpi1_mo3 = mutual_persistent_keys.inner_key_2 < mo3
|
||||
|
||||
medium_phase3 = (result << mpi1_mo3)
|
||||
return medium_phase3
|
||||
@@ -1,510 +0,0 @@
|
||||
from src.models import (AlphabetKey, DarcKey, OuterKey, ClientKeys, ServerKeys,
|
||||
MutualKeys, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys, MutualEphemeralDataKeys,
|
||||
ServerPersistentMediumKeys, ServerEphemeralMediumKeys, MutualPersistentMediumKeys, MutualEphemeralMediumKeys,
|
||||
ClientPersistentDataKeys, ClientEphemeralDataKeys, ClientEphemeralMediumKeys, ClientPersistentMediumKeys, InnerKey)
|
||||
import json
|
||||
|
||||
height = 256
|
||||
width = 7
|
||||
block_size = 10
|
||||
|
||||
|
||||
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 = translate_medium(server_keys.persistent.medium, server_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase1, medium
|
||||
|
||||
def outer_inner_op(operand: AlphabetKey, outer_key: OuterKey, inner_key: InnerKey) -> AlphabetKey:
|
||||
return (operand < outer_key) << inner_key
|
||||
|
||||
def outer_inner(outer_key: OuterKey, inner_key: InnerKey):
|
||||
return lambda x: (x < outer_key) << inner_key
|
||||
|
||||
def inner_outer(inner_key: InnerKey, outer_key: OuterKey):
|
||||
return lambda x: (x << inner_key) < outer_key
|
||||
|
||||
|
||||
def translate_data(alphabet: AlphabetKey, server_persistent_keys: ServerPersistentDataKeys, server_ephemeral_keys: ServerEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
so1 = server_persistent_keys.outer_key_1 << server_ephemeral_keys.outer_key_1
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
si1_mo3: InnerKey = (server_persistent_keys.inner_key_1 << server_ephemeral_keys.inner_key_1) < mo3
|
||||
|
||||
server_func_1 = outer_inner(so1, si1_mo3)
|
||||
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1_mo2: InnerKey = (mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
mutual_func_1 = outer_inner(mo1, mi1_mo2)
|
||||
|
||||
substitution = server_persistent_keys.alpha_key ^ server_ephemeral_keys.alpha_key
|
||||
alpha_phase1 = (
|
||||
server_func_1(alphabet) ^
|
||||
mutual_func_1(substitution)
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
return operand
|
||||
|
||||
|
||||
def darc_phase2(alphabet: AlphabetKey, medium: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase2 = receive_alphabet(alphabet, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium = receive_medium(medium, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase2, medium
|
||||
|
||||
|
||||
def receive_alphabet(alphabet_phase1: AlphabetKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1_mo2 = (mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
mutual_func_1 = outer_inner(mo1, mi1_mo2)
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_persistent_keys.alpha_key
|
||||
result = (
|
||||
alphabet_phase1 ^
|
||||
mutual_func_1(substitution)
|
||||
)
|
||||
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
result = result < ~mo3
|
||||
ci1 = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
mo3_co1_co2 = mo3 << co1 << co2
|
||||
|
||||
client_func_1 = inner_outer(ci1, mo3_co1_co2)
|
||||
|
||||
alphabet_phase2 = client_func_1(result)
|
||||
return alphabet_phase2
|
||||
|
||||
|
||||
def receive_medium(medium_phase1: AlphabetKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_persistent_keys.alpha_key
|
||||
sub_mo1_mi1_mo2 = (substitution < mo1) << mi1_mo2
|
||||
result = medium_phase1 ^ sub_mo1_mi1_mo2
|
||||
|
||||
ci1 = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
ci1_mo3 = ci1 < mo3
|
||||
result = result << ci1_mo3
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
medium_phase2 = result < (co1 << co2)
|
||||
|
||||
return medium_phase2
|
||||
|
||||
|
||||
def darc_phase3(alphabet_phase2: AlphabetKey, medium_phase2: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
|
||||
alphabet_phase3 = transmit_alphabet(alphabet_phase2, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium_phase3 = transmit_medium(medium_phase2, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase3, medium_phase3
|
||||
|
||||
|
||||
def transmit_alphabet(alphabet_phase2: DarcKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
co1_co2 = co1 << co2
|
||||
mo3_co1_co2 = mo3 << co1 << co2
|
||||
|
||||
ncei1_ncpi1_mpi2 = ~client_ephemeral_keys.inner_key_1 << ~client_persistent_keys.inner_key_1 << mutual_persistent_keys.inner_key_2
|
||||
ncei1_ncpi1_mpi2__mo3_co1_co2 = ncei1_ncpi1_mpi2 < mo3_co1_co2
|
||||
result = alphabet_phase2 << ncei1_ncpi1_mpi2__mo3_co1_co2
|
||||
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
substitution = client_ephemeral_keys.alpha_key ^ client_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
|
||||
mi1_mo2_mpi2_mo3 = (((mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2) << (mutual_persistent_keys.inner_key_2 < mo3)) #< co1_co2
|
||||
client_func_2 = outer_inner(mo1, mi1_mo2_mpi2_mo3)
|
||||
alphabet_phase3 = result ^ (client_func_2(substitution) < co1_co2)
|
||||
return alphabet_phase3
|
||||
|
||||
|
||||
def transmit_medium(medium_phase2: DarcKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
co1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
co2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
co1_co2 = co1 << co2
|
||||
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
mpi1_mo3 = mutual_persistent_keys.inner_key_2 < mo3
|
||||
mi1_mo2_mpi1_mo3 = mi1_mo2 << mpi1_mo3
|
||||
|
||||
ncei1_ncpi2 = ~(client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1) << mutual_persistent_keys.inner_key_2
|
||||
ncei1_ncpi2__mo3 = ncei1_ncpi2 < mo3
|
||||
|
||||
result = (medium_phase2 < ~co1_co2) << ncei1_ncpi2__mo3
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
sub = client_persistent_keys.alpha_key ^ client_ephemeral_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
sub_mo1 = sub < mo1
|
||||
sub_mo1_mi1_mo2_mpi1_mo3 = (sub_mo1 << mi1_mo2_mpi1_mo3)
|
||||
medium_phase3 = (result ^ sub_mo1_mi1_mo2_mpi1_mo3) < co1_co2
|
||||
|
||||
return medium_phase3
|
||||
|
||||
|
||||
def transceive_alphabet(alphabet_phase1: DarcKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
ma = mutual_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
|
||||
ma_mo1_mi1_mo2 = (ma < mo1) << (mi1 < mo2)
|
||||
alphabet_phase3 = (alphabet_phase1 ^ ma_mo1_mi1_mo2) << (mutual_persistent_keys.inner_key_2 < mo3)
|
||||
return alphabet_phase3
|
||||
|
||||
|
||||
def transceive_medium(medium_phase1: DarcKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
mi1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
mi1_mo2 = mi1 < mo2
|
||||
|
||||
ma = mutual_persistent_keys.alpha_key ^ mutual_ephemeral_keys.alpha_key
|
||||
ma_mo1_mi1_mo2 = (ma < mo1) << mi1_mo2
|
||||
|
||||
result = medium_phase1 ^ ma_mo1_mi1_mo2
|
||||
|
||||
mpi1_mo3 = mutual_persistent_keys.inner_key_2 < mo3
|
||||
|
||||
medium_phase3 = (result << mpi1_mo3)
|
||||
return medium_phase3
|
||||
|
||||
|
||||
def merge_message_no_client(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]):
|
||||
msg_len = len(input_sequence)
|
||||
|
||||
if msg_len < height:
|
||||
padded_input_sequence = OuterKey.init_matrix(height)
|
||||
padded_input_sequence.matrix = [input_sequence + padded_input_sequence.matrix[0][msg_len:]]
|
||||
else:
|
||||
padded_input_sequence = OuterKey(matrix=[input_sequence])
|
||||
|
||||
input_seq = padded_input_sequence
|
||||
a_i = alphabet < input_seq
|
||||
|
||||
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
||||
if msg_len < height:
|
||||
a_i.matrix[msg_len] = eof_arr
|
||||
|
||||
mmi3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
mmo6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
mmo4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
mmo5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
mmi4 = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||
|
||||
nmmo6 = ~mmo6
|
||||
message = medium ^ (a_i << (mmi3 < ~(mmo4 << mmo6)))
|
||||
|
||||
mmo5_nmmo6 = mmo5 << nmmo6
|
||||
|
||||
message = (message < mmo4) << (mmi4 < mmo5_nmmo6)
|
||||
|
||||
return message
|
||||
|
||||
|
||||
def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]):
|
||||
client_outer_key_1 = client_keys.persistent.data.outer_key_1 << client_keys.ephemeral.data.outer_key_1
|
||||
client_outer_key_2 = client_keys.persistent.data.outer_key_2 << client_keys.ephemeral.data.outer_key_2
|
||||
client_outer_key_1 = ~(client_outer_key_1 << client_outer_key_2)
|
||||
|
||||
msg_len = len(input_sequence)
|
||||
eof_arr = AlphabetKey.init_matrix(width, height, 255).matrix[0]
|
||||
|
||||
if msg_len < height:
|
||||
padded_input_sequence = OuterKey.init_matrix(height)
|
||||
padded_input_sequence.matrix = [input_sequence + padded_input_sequence.matrix[0][msg_len:]]
|
||||
else:
|
||||
padded_input_sequence = OuterKey(matrix=[input_sequence])
|
||||
|
||||
client_outer_key_1 = client_outer_key_1 << padded_input_sequence
|
||||
|
||||
client_med_outer_key_1 = client_keys.persistent.medium.outer_key_1 << client_keys.ephemeral.medium.outer_key_1
|
||||
client_med_outer_key_2 = client_keys.persistent.medium.outer_key_2 << client_keys.ephemeral.medium.outer_key_2
|
||||
|
||||
client_med_outer_key_1 = client_med_outer_key_1 << client_med_outer_key_2
|
||||
|
||||
client_outer_key_1 = client_outer_key_1 << client_med_outer_key_1
|
||||
message = alphabet < client_outer_key_1
|
||||
|
||||
message_pad_key = ~client_med_outer_key_1
|
||||
|
||||
if msg_len < height:
|
||||
message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr
|
||||
|
||||
mutual_inner_key_3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
mutual_outer_key_6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
mutual_outer_key_4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
|
||||
outer_key_1 = mutual_outer_key_4 << mutual_outer_key_6
|
||||
|
||||
client_med_outer_key_1 = ~client_med_outer_key_1
|
||||
outer_key_1 = ~(client_med_outer_key_1 << outer_key_1)
|
||||
|
||||
mutual_inner_key_3 = mutual_inner_key_3 < outer_key_1
|
||||
|
||||
message = medium ^ (message << mutual_inner_key_3)
|
||||
|
||||
mutual_outer_key_5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
mutual_inner_key = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||
|
||||
mutual_outer_key_4 = client_med_outer_key_1 << mutual_outer_key_4
|
||||
outer_key_2 = mutual_outer_key_5 << outer_key_1
|
||||
|
||||
message = message << (mutual_inner_key < outer_key_2)
|
||||
message = message < mutual_outer_key_4
|
||||
return message
|
||||
|
||||
|
||||
def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys) -> DarcKey:
|
||||
mmo6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
mmo4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
|
||||
nmmo6_nmmo4 = ~(mmo4 << mmo6)
|
||||
|
||||
mmo5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
mmo5_nmmo6_nmmo4 = mmo5 << nmmo6_nmmo4
|
||||
|
||||
mmo2 = mutual_keys.persistent.medium.outer_key_2 << mutual_keys.ephemeral.medium.outer_key_2
|
||||
|
||||
mmo3 = mutual_keys.persistent.medium.outer_key_3 << mutual_keys.ephemeral.medium.outer_key_3
|
||||
|
||||
mmi3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
mmi1 = mutual_keys.persistent.medium.inner_key_1 << mutual_keys.ephemeral.medium.inner_key_1
|
||||
|
||||
mpmi2 = mutual_keys.persistent.medium.inner_key_2 < mmo3
|
||||
|
||||
mmi4 = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||
|
||||
mmo1 = mutual_keys.persistent.medium.outer_key_1 << mutual_keys.ephemeral.medium.outer_key_1
|
||||
|
||||
sub_med_mmo1 = (server_keys.persistent.medium.alpha_key ^ server_keys.ephemeral.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key ^ mutual_keys.ephemeral.medium.alpha_key) < mmo1
|
||||
|
||||
medium_unwrapped = (((darc_message < ~mmo4) << ~(mmi4 < mmo5_nmmo6_nmmo4)) ^ (sub_med_mmo1 << ((mmi1 < mmo2) << mpmi2))) << (~mmi3 < nmmo6_nmmo4)
|
||||
|
||||
|
||||
mdo3 = mutual_keys.persistent.data.outer_key_3 << mutual_keys.ephemeral.data.outer_key_3
|
||||
mpi2_mdo3 = mutual_keys.persistent.data.inner_key_2 < mdo3
|
||||
mdo2 = mutual_keys.persistent.data.outer_key_2 << mutual_keys.ephemeral.data.outer_key_2
|
||||
|
||||
mdi1 = mutual_keys.persistent.data.inner_key_1 << mutual_keys.ephemeral.data.inner_key_1
|
||||
mdi1_mdo2_mpi2_mdo3 = (mdi1 < mdo2) << mpi2_mdo3
|
||||
sdi1_mpdi2__mdo3 = (server_keys.persistent.data.inner_key_1 << server_keys.ephemeral.data.inner_key_1 << mutual_keys.persistent.data.inner_key_2) < mdo3
|
||||
|
||||
sdo1 = server_keys.persistent.data.outer_key_1 << server_keys.ephemeral.data.outer_key_1
|
||||
alpha_sdo1__sdi1_mpdi2__mdo3 = (alphabet < sdo1) << sdi1_mpdi2__mdo3
|
||||
|
||||
mdo1 = mutual_keys.persistent.data.outer_key_1 << mutual_keys.ephemeral.data.outer_key_1
|
||||
|
||||
sub_mdo1 = (server_keys.persistent.data.alpha_key ^ server_keys.ephemeral.data.alpha_key ^ mutual_keys.persistent.data.alpha_key ^ mutual_keys.ephemeral.data.alpha_key) < mdo1
|
||||
translated_alpha = alpha_sdo1__sdi1_mpdi2__mdo3 ^ (sub_mdo1 << mdi1_mdo2_mpi2_mdo3)
|
||||
|
||||
return resolve_message(
|
||||
translated_alpha.matrix,
|
||||
medium_unwrapped.matrix
|
||||
)
|
||||
|
||||
|
||||
def resolve_message(translated_alphabet, translated_messasge):
|
||||
alphabet_map = {str(key): idx for idx, key in enumerate(translated_alphabet)}
|
||||
encoded_message = [str(alpha) for alpha in translated_messasge]
|
||||
|
||||
message = []
|
||||
for alpha in encoded_message:
|
||||
if alpha in alphabet_map.keys():
|
||||
message.append(alphabet_map[alpha])
|
||||
else:
|
||||
break
|
||||
|
||||
return message
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
#with open("../darc_key_json/client_persistent_keys.json") as fp:
|
||||
# client_persistent_keys = json.load(fp)
|
||||
|
||||
#with open("../darc_key_json/client_ephemeral_keys.json") as fp:
|
||||
# client_ephemeral_keys = json.load(fp)
|
||||
|
||||
#with open("../darc_key_json/server_persistent_keys.json") as fp:
|
||||
# server_persistent_keys = json.load(fp)
|
||||
|
||||
#with open("../darc_key_json/server_ephemeral_keys.json") as fp:
|
||||
# server_ephemeral_keys = json.load(fp)
|
||||
|
||||
#with open("../darc_key_json/mutual_ephemeral_keys.json") as fp:
|
||||
# mutual_ephemeral_keys = json.load(fp)
|
||||
|
||||
#client_persistent_keys = {k: {"matrix": v} for k, v in client_persistent_keys.items()}
|
||||
#client_ephemeral_keys = {k: {"matrix": v} for k, v in client_ephemeral_keys.items()}
|
||||
#server_persistent_keys = {k: {"matrix": v} for k, v in server_persistent_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()}
|
||||
|
||||
#client_keys = ClientKeys(
|
||||
# persistent=ClientPersistentKeys(
|
||||
# data=ClientPersistentDataKeys(
|
||||
# outer_key_1=client_persistent_keys["outer_key_1"],
|
||||
# outer_key_2=client_persistent_keys["outer_key_2"],
|
||||
# alpha_key=client_persistent_keys["alpha_key"],
|
||||
# inner_key_4=client_persistent_keys["inner_key_4"]
|
||||
|
||||
# ),
|
||||
# medium_phase2=ClientPersistentMediumKeys(
|
||||
# outer_key_1=client_persistent_keys["outer_key_1"],
|
||||
# outer_key_2=client_persistent_keys["outer_key_2"],
|
||||
# inner_key_4=client_persistent_keys["inner_key_4"],
|
||||
# alpha_key=client_persistent_keys["alpha_key"]
|
||||
# )
|
||||
# ),
|
||||
# ephemeral=ClientEphemeralKeys(
|
||||
# data=ClientEphemeralDataKeys(
|
||||
# outer_key_1=client_ephemeral_keys["outer_key_1"],
|
||||
# outer_key_2=client_ephemeral_keys["outer_key_2"],
|
||||
# alpha_key=client_ephemeral_keys["alpha_key"],
|
||||
# inner_key_4=client_ephemeral_keys["inner_key_4"]
|
||||
# ),
|
||||
# medium_phase2=ClientEphemeralMediumKeys(
|
||||
# outer_key_1=client_ephemeral_keys["outer_key_1"],
|
||||
# outer_key_2=client_ephemeral_keys["outer_key_2"],
|
||||
# inner_key_4=client_ephemeral_keys["inner_key_4"],
|
||||
# alpha_key=client_ephemeral_keys["alpha_key"]
|
||||
# )
|
||||
# )
|
||||
#)
|
||||
|
||||
#server_keys = ServerKeys(
|
||||
# persistent=ServerPersistentKeys(
|
||||
# data=ServerPersistentDataKeys(
|
||||
# outer_key_1=server_persistent_keys["outer_key_1"],
|
||||
# alpha_key=server_persistent_keys["alpha_key"],
|
||||
# inner_key_4=server_persistent_keys["inner_key_4"]
|
||||
# ),
|
||||
# medium_phase2=ServerPersistentMediumKeys(
|
||||
# alpha_key=server_persistent_keys["alpha_key"],
|
||||
# )
|
||||
# ),
|
||||
# ephemeral=ServerEphemeralKeys(
|
||||
# data=ServerEphemeralDataKeys(
|
||||
# outer_key_1=server_ephemeral_keys["outer_key_1"],
|
||||
# alpha_key=server_ephemeral_keys["alpha_key"],
|
||||
# inner_key_4=server_ephemeral_keys["inner_key_4"]
|
||||
# ),
|
||||
# medium_phase2=ServerEphemeralMediumKeys(
|
||||
# alpha_key=server_ephemeral_keys["alpha_key"],
|
||||
# )
|
||||
# )
|
||||
#)
|
||||
|
||||
#mutual_keys = MutualKeys(
|
||||
# persistent=MutualPersistentKeys(
|
||||
# data=MutualPersistentDataKeys(
|
||||
# outer_key_1=server_persistent_keys["outer_key_1"],
|
||||
# outer_key_2=server_persistent_keys["outer_key_2"],
|
||||
# outer_key_6=server_persistent_keys["outer_key_6"],
|
||||
# alpha_key=server_persistent_keys["alpha_key"],
|
||||
# inner_key_4=server_persistent_keys["FunctionKey"],
|
||||
# inner_key_1=server_persistent_keys["inner_key_1"],
|
||||
# ),
|
||||
# medium_phase2=MutualPersistentMediumKeys(
|
||||
# alpha_key=server_persistent_keys["alpha_key"],
|
||||
# outer_key_1=server_persistent_keys["outer_key_1"],
|
||||
# outer_key_2=server_persistent_keys["outer_key_2"],
|
||||
# outer_key_6=server_persistent_keys["outer_key_6"],
|
||||
# inner_key_4=server_persistent_keys["inner_key_4"],
|
||||
# inner_key_1=server_persistent_keys["inner_key_1"],
|
||||
# outer_key_3=server_persistent_keys["outer_key_3"],
|
||||
# outer_key_5=server_persistent_keys["outer_key_5"],
|
||||
# outer_key_4=server_persistent_keys["outer_key_4"],
|
||||
# inner_key_3=server_persistent_keys["inner_key_3"],
|
||||
# inner_key_1=server_persistent_keys["inner_key_1"],
|
||||
# )
|
||||
# ),
|
||||
# ephemeral=MutualEphemeralKeys(
|
||||
# data=MutualEphemeralDataKeys(
|
||||
# alpha_key=mutual_ephemeral_keys["MutualEphemeralKey"],
|
||||
# inner_key_4=mutual_ephemeral_keys["FunctionEphemeralKey"],
|
||||
# outer_key_1=mutual_ephemeral_keys["OuterFunctionEphemeralKey"],
|
||||
# outer_key_2=mutual_ephemeral_keys["OuterFunctionFunctionEphemeralKey"],
|
||||
# outer_key_6=mutual_ephemeral_keys["OuterServerShuffleFunctionEphemeralKey"]
|
||||
# ),
|
||||
# medium_phase2=MutualEphemeralMediumKeys(
|
||||
# alpha_key=mutual_ephemeral_keys["MutualMediumEphemeralKey"],
|
||||
# inner_key_4=mutual_ephemeral_keys["FunctionMediumEphemeralKey"],
|
||||
# inner_key_3=mutual_ephemeral_keys["inner_key_3"],
|
||||
# outer_key_1=mutual_ephemeral_keys["outer_key_1"],
|
||||
# outer_key_2=mutual_ephemeral_keys["outer_key_2"],
|
||||
# outer_key_6=mutual_ephemeral_keys["outer_key_6"],
|
||||
# outer_key_3=mutual_ephemeral_keys["outer_key_3"],
|
||||
# outer_key_5=mutual_ephemeral_keys["outer_key_5"],
|
||||
# inner_key_4=mutual_ephemeral_keys["inner_key_4"],
|
||||
# outer_key_4=mutual_ephemeral_keys["outer_key_4"]
|
||||
|
||||
# )
|
||||
# )
|
||||
#)
|
||||
#darc_phase2 = AlphabetKey(**server_ephemeral_keys["Alphabet"])
|
||||
|
||||
server_keys = ServerKeys.random_init(height, width)
|
||||
mutual_keys = MutualKeys.random_init(height, width)
|
||||
client_keys = ClientKeys.random_init(height, width)
|
||||
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
||||
|
||||
server_keys.persistent.data.alpha_key = server_keys.persistent.data.alpha_key ^ mutual_keys.persistent.data.alpha_key
|
||||
server_keys.persistent.medium.alpha_key = server_keys.persistent.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key
|
||||
|
||||
mutual_keys.persistent.data.alpha_key = mutual_keys.persistent.data.alpha_key ^ client_keys.persistent.data.alpha_key
|
||||
mutual_keys.persistent.medium.alpha_key = mutual_keys.persistent.medium.alpha_key ^ client_keys.persistent.medium.alpha_key
|
||||
|
||||
(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)
|
||||
#phase3_medium = transceive_medium(medium_phase1, client_keys.persistent.medium, client_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
#phase3_alphabet = transceive_alphabet(alphabet_phase1, client_keys.persistent.data, client_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
original_message = OuterKey.init_matrix(height).matrix[0]
|
||||
#darc_message = merge_message_no_client(phase3_alphabet, phase3_medium, client_keys, mutual_keys, original_message)
|
||||
darc_message = merge_message(phase3_alphabet, phase3_medium,client_keys, mutual_keys, original_message)
|
||||
message = darc_phase_4(alphabet, darc_message, server_keys, mutual_keys)
|
||||
|
||||
print(original_message)
|
||||
print(message)
|
||||
1030
src/mimick_excel.py
1030
src/mimick_excel.py
File diff suppressed because it is too large
Load Diff
@@ -1,487 +0,0 @@
|
||||
from src.models import DarcKey, DarcKeyTypes
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
height = 10
|
||||
width = 7
|
||||
|
||||
# B_o_m
|
||||
# 2 Outer (Mutual) (Substitution) Function Key
|
||||
outer_mutual_substitution_function_key = DarcKey(matrix=[['9', '7', '4', '2', '5', '3', '0', '6', '1', '8']], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 3 Outer (Mutual) (Substitution) Function Function Key
|
||||
outer_mutual_substitution_function_function_key = DarcKey(matrix=[['8', '1', '4', '5', '2', '3', '7', '6', '0', '9']], key_type=DarcKeyTypes.outer_shuffle)
|
||||
# 4 Outer Server (Mutual) Shuffle (Permutation) Function Key
|
||||
outer_mutual_shuffle_permutation_function_key = DarcKey(matrix=[['3', '9', '2', '5', '0', '7', '6', '8', '1', '4']], key_type=DarcKeyTypes.outer_shuffle)
|
||||
# 5 Outer Client Shuffle (Permutation) Key
|
||||
outer_client_shuffle_permutation_key = DarcKey(matrix=[['6', '4', '7', '8', '0', '2', '1', '9', '5', '3']], key_type=DarcKeyTypes.outer_shuffle)
|
||||
# 6 Outer Client Shuffle (Permutation) Function Key
|
||||
outer_client_shuffle_permutation_function_key = DarcKey(matrix=[['4', '2', '1', '0', '5', '7', '8', '9', '3', '6']], key_type=DarcKeyTypes.outer_shuffle)
|
||||
# 7 Outer Server Shuffle (Permutation) Key
|
||||
outer_server_shuffle_permutation_key = DarcKey(matrix=[['4', '9', '6', '0', '7', '5', '3', '1', '2', '8']], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 15 Outer (Mutual) (Substitution) Function ephemeral Key
|
||||
outer_mutual_substitution_function_ephemeral_key = DarcKey(matrix=[
|
||||
['0', '9', '6', '2', '1', '5', '3', '8', '7', '4']
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 16 Outer (Mutual) (Substitution) Function Function ephemeral Key
|
||||
outer_mutual_substitution_function_function_ephemeral_key = DarcKey(matrix=[
|
||||
['2', '3', '9', '7', '6', '0', '1', '4', '8', '5']
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 17 Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key
|
||||
outer_server_mutual_shuffle_permutation_function_ephemeral_key = DarcKey(matrix=[
|
||||
['0', '8', '5', '9', '7', '3', '1', '4', '6', '2']
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 18 Outer Client Shuffle (Permutation) ephemeral Key
|
||||
outer_client_shuffle_permutation_ephemeral_key = DarcKey(matrix=[
|
||||
['1', '4', '2', '9', '5', '7', '8', '3', '0', '6']
|
||||
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
# 19 Outer Client Shuffle (Permutation) Function ephemeral Key
|
||||
outer_client_shuffle_permutation_function_ephemeral_key = DarcKey(matrix=[
|
||||
['4', '3', '2', '5', '1', '6', '7', '8', '0', '9']
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 20 Outer Server Shuffle (Permutation) ephemeral Key
|
||||
outer_server_shuffle_permutation_ephemeral_key = DarcKey(matrix=[
|
||||
['7', '5', '2', '1', '8', '4', '3', '6', '9', '0']
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 29 Alphabet Input Sequence the message
|
||||
alphabet_input_sequence = DarcKey(matrix=[
|
||||
['0', '2', '4', '6', '8', '1', '3', '5', '7', '9']
|
||||
], key_type=DarcKeyTypes.outer_shuffle)
|
||||
|
||||
# 1 Alphabet Values
|
||||
alphabet_values = DarcKey(matrix=[
|
||||
['10', '28', '38', '41', '51', '64', '70'],
|
||||
['15', '25', '33', '48', '56', '69', '71'],
|
||||
['13', '22', '36', '47', '54', '60', '72'],
|
||||
['12', '24', '31', '43', '58', '63', '73'],
|
||||
['11', '21', '39', '49', '53', '65', '74'],
|
||||
['18', '20', '32', '45', '52', '61', '75'],
|
||||
['14', '29', '37', '44', '57', '68', '76'],
|
||||
['19', '23', '34', '40', '59', '62', '77'],
|
||||
['17', '27', '35', '42', '55', '67', '78'],
|
||||
['16', '26', '30', '46', '50', '66', '79']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
# 8 (Mutual) (Substitution) Function Key
|
||||
mutual_substitution_function_key = DarcKey(matrix=[
|
||||
['1', '5', '0', '2', '3', '6', '4'],
|
||||
['5', '2', '6', '4', '1', '3', '0'],
|
||||
['4', '2', '3', '5', '6', '1', '0'],
|
||||
['0', '3', '1', '6', '5', '2', '4'],
|
||||
['4', '1', '3', '0', '6', '5', '2'],
|
||||
['6', '3', '4', '2', '5', '1', '0'],
|
||||
['2', '3', '0', '4', '1', '6', '5'],
|
||||
['4', '0', '6', '5', '2', '3', '1'],
|
||||
['3', '2', '4', '1', '0', '5', '6'],
|
||||
['2', '3', '4', '1', '5', '0', '6']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
# 9 Client Shuffle (Permutation) Key X
|
||||
client_shuffle_permutation_key_x = DarcKey(matrix=[
|
||||
['6', '3', '1', '4', '5', '0', '2'],
|
||||
['6', '5', '0', '2', '3', '4', '1'],
|
||||
['1', '4', '0', '6', '3', '2', '5'],
|
||||
['6', '1', '4', '5', '3', '2', '0'],
|
||||
['2', '0', '1', '4', '3', '5', '6'],
|
||||
['3', '0', '6', '2', '1', '4', '5'],
|
||||
['3', '2', '0', '1', '6', '4', '5'],
|
||||
['6', '2', '3', '0', '1', '5', '4'],
|
||||
['3', '0', '6', '5', '4', '1', '2'],
|
||||
['3', '2', '5', '0', '4', '1', '6']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
# 10 Client Shuffle (Permutation) Key A (remove A)
|
||||
client_shuffle_permutation_key_a = DarcKey(matrix=[
|
||||
['6', '0', '3', '5', '2', '1', '4'],
|
||||
['4', '3', '2', '5', '0', '1', '6'],
|
||||
['5', '4', '1', '0', '2', '3', '6'],
|
||||
['3', '6', '1', '4', '5', '2', '0'],
|
||||
['3', '5', '4', '2', '0', '1', '6'],
|
||||
['6', '1', '5', '4', '2', '3', '0'],
|
||||
['0', '4', '6', '3', '5', '1', '2'],
|
||||
['0', '6', '4', '3', '1', '2', '5'],
|
||||
['5', '0', '6', '3', '4', '1', '2'],
|
||||
['3', '2', '0', '4', '1', '6', '5']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
# 11 Server Shuffle (Permutation) Key
|
||||
server_shuffle_permutation_key = DarcKey(matrix=[
|
||||
['5', '2', '3', '0', '6', '4', '1'],
|
||||
['5', '2', '6', '3', '0', '1', '4'],
|
||||
['1', '3', '5', '0', '2', '6', '4'],
|
||||
['6', '2', '1', '4', '5', '0', '3'],
|
||||
['2', '3', '4', '1', '5', '6', '0'],
|
||||
['3', '2', '0', '1', '5', '4', '6'],
|
||||
['2', '6', '0', '3', '4', '1', '5'],
|
||||
['3', '0', '4', '6', '2', '5', '1'],
|
||||
['5', '3', '2', '0', '6', '4', '1'],
|
||||
['1', '4', '5', '3', '2', '6', '0']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
|
||||
|
||||
# 21 (Mutual) (Substitution) Function ephemeral Key
|
||||
mutual_substitution_function_ephemeral_key = DarcKey(matrix=[
|
||||
['6', '0', '1', '4', '2', '3', '5'],
|
||||
['2', '3', '6', '4', '0', '1', '5'],
|
||||
['2', '4', '0', '3', '6', '1', '5'],
|
||||
['0', '4', '2', '3', '1', '5', '6'],
|
||||
['6', '4', '2', '5', '1', '0', '3'],
|
||||
['5', '1', '0', '6', '4', '2', '3'],
|
||||
['1', '2', '4', '3', '6', '0', '5'],
|
||||
['6', '1', '4', '0', '5', '3', '2'],
|
||||
['2', '3', '5', '4', '6', '0', '1'],
|
||||
['1', '6', '4', '3', '5', '2', '0']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
# 22 Client Shuffle (Permutation) ephemeral Key A (remove A)
|
||||
client_shuffle_permutation_ephemeral_key_a = DarcKey(matrix=[
|
||||
['5', '0', '4', '3', '2', '6', '1'],
|
||||
['0', '6', '2', '1', '5', '3', '4'],
|
||||
['1', '2', '0', '3', '5', '4', '6'],
|
||||
['0', '2', '6', '3', '4', '5', '1'],
|
||||
['5', '1', '2', '0', '3', '4', '6'],
|
||||
['1', '0', '3', '4', '5', '6', '2'],
|
||||
['3', '0', '5', '2', '6', '4', '1'],
|
||||
['6', '4', '5', '3', '0', '2', '1'],
|
||||
['2', '4', '6', '0', '3', '5', '1'],
|
||||
['4', '6', '2', '3', '5', '1', '0']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
# 23 Server Shuffle (Permutation) ephemeral Key 1 (remove 1)
|
||||
server_shuffle_permutation_ephemeral_key_1 = DarcKey(matrix=[
|
||||
['6', '1', '3', '0', '4', '2', '5'],
|
||||
['3', '2', '1', '0', '4', '5', '6'],
|
||||
['2', '4', '3', '5', '0', '6', '1'],
|
||||
['4', '1', '3', '6', '0', '2', '5'],
|
||||
['1', '4', '2', '3', '0', '5', '6'],
|
||||
['6', '4', '5', '0', '2', '3', '1'],
|
||||
['0', '4', '2', '3', '1', '5', '6'],
|
||||
['0', '6', '3', '5', '1', '2', '4'],
|
||||
['2', '6', '3', '1', '4', '5', '0'],
|
||||
['5', '0', '4', '1', '6', '3', '2']
|
||||
], key_type=DarcKeyTypes.inner_shuffle)
|
||||
|
||||
# 12 Shared (Mutual) (Substitution) Component 1
|
||||
shared_mutual_substitution_component_1 = DarcKey(matrix=[
|
||||
['81', '150', '209', '32', '246', '219', '15'],
|
||||
['100', '15', '50', '179', '52', '1', '142'],
|
||||
['98', '34', '170', '6', '195', '115', '117'],
|
||||
['205', '169', '12', '151', '139', '91', '114'],
|
||||
['192', '153', '175', '62', '249', '230', '103'],
|
||||
['56', '54', '44', '107', '125', '122', '219'],
|
||||
['28', '16', '32', '27', '95', '248', '200'],
|
||||
['152', '121', '40', '198', '19', '55', '59'],
|
||||
['189', '227', '175', '102', '171', '135', '170'],
|
||||
['182', '144', '202', '64', '253', '89', '196']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
|
||||
# 13 Client (Substitution) Key
|
||||
client_substitution_key = DarcKey(matrix=[
|
||||
['148', '232', '147', '96', '20', '201', '150'],
|
||||
['120', '0', '158', '250', '176', '223', '82'],
|
||||
['12', '81', '193', '212', '247', '100', '1'],
|
||||
['127', '211', '164', '202', '25', '149', '34'],
|
||||
['214', '38', '10', '197', '195', '97', '193'],
|
||||
['177', '120', '199', '180', '206', '184', '155'],
|
||||
['154', '146', '186', '205', '190', '47', '169'],
|
||||
['164', '80', '233', '207', '214', '91', '108'],
|
||||
['123', '101', '231', '244', '92', '88', '12'],
|
||||
['222', '193', '85', '98', '224', '145', '0']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
# 14 Server (Substitution) Key
|
||||
server_substitution_key = DarcKey(matrix=[
|
||||
['163', '247', '59', '226', '186', '179', '35'],
|
||||
['140', '180', '54', '88', '40', '252', '97'],
|
||||
['229', '247', '16', '206', '186', '125', '81'],
|
||||
['221', '222', '54', '22', '190', '18', '122'],
|
||||
['126', '130', '83', '142', '152', '238', '237'],
|
||||
['76', '168', '77', '176', '198', '119', '104'],
|
||||
['121', '96', '80', '75', '138', '219', '122'],
|
||||
['92', '210', '20', '56', '232', '219', '245'],
|
||||
['111', '1', '155', '236', '15', '184', '0'],
|
||||
['36', '31', '143', '5', '112', '206', '106']
|
||||
],
|
||||
key_type=DarcKeyTypes.alphabet
|
||||
)
|
||||
|
||||
# 24 Server (Substitution) ephemeral Unique Component Function
|
||||
server_substitution_ephemeral_unique_component_function = 5
|
||||
|
||||
# 25 Shared (Mutual) (Substitution) ephemeral Key
|
||||
shared_mutual_substitution_ephemeral_key = DarcKey(matrix=[
|
||||
['106', '113', '9', '54', '49', '4', '207'],
|
||||
['184', '3', '232', '179', '15', '113', '142'],
|
||||
['129', '44', '164', '54', '1', '32', '201'],
|
||||
['106', '50', '246', '140', '149', '179', '109'],
|
||||
['210', '11', '69', '193', '77', '245', '62'],
|
||||
['37', '76', '137', '24', '220', '30', '165'],
|
||||
['40', '57', '147', '225', '24', '176', '103'],
|
||||
['37', '212', '189', '203', '218', '138', '168'],
|
||||
['73', '227', '38', '164', '20', '239', '24'],
|
||||
['7', '194', '254', '76', '0', '244', '215']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
# 26 Client (Substitution) ephemeral Key
|
||||
client_substitution_ephemeral_key = DarcKey(matrix=[
|
||||
['21', '149', '75', '73', '228', '81', '79'],
|
||||
['41', '189', '80', '209', '45', '101', '53'],
|
||||
['139', '238', '141', '159', '30', '79', '214'],
|
||||
['239', '234', '72', '75', '80', '190', '124'],
|
||||
['203', '225', '246', '200', '205', '195', '92'],
|
||||
['201', '185', '113', '101', '176', '216', '106'],
|
||||
['14', '210', '125', '70', '53', '128', '57'],
|
||||
['115', '27', '97', '39', '199', '26', '104'],
|
||||
['29', '4', '55', '5', '13', '57', '19'],
|
||||
['158', '184', '137', '0', '221', '12', '217']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
# 27 Server (Substitution) ephemeral Random Component
|
||||
server_substitution_ephemeral_random_component = DarcKey(matrix=[
|
||||
['191', '50', '229', '60', '201', '64', '45'],
|
||||
['31', '88', '90', '8', '153', '6', '228'],
|
||||
['117', '63', '38', '90', '236', '207', '254'],
|
||||
['64', '219', '36', '3', '119', '205', '171'],
|
||||
['172', '138', '153', '52', '161', '137', '216'],
|
||||
['49', '150', '210', '129', '174', '190', '54'],
|
||||
['81', '230', '135', '200', '218', '31', '52'],
|
||||
['128', '253', '177', '220', '1', '83', '3'],
|
||||
['204', '199', '43', '50', '148', '215', '6'],
|
||||
['79', '124', '128', '30', '74', '242', '85']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
# 28 Server (Substitution) ephemeral Unique Component
|
||||
server_substitution_ephemeral_unique_component = DarcKey(matrix=[
|
||||
['7', '190', '58', '75', '135', '15', '214', '149', '244', '224']
|
||||
], key_type=DarcKeyTypes.alphabet)
|
||||
|
||||
# 30 Shared (Mutual) (Substitution) Key
|
||||
shared_mutual_substitution_key = shared_mutual_substitution_component_1 ^ client_substitution_key
|
||||
|
||||
# 31 Outer (Mutual) Function Function ephemeral Key Applied = Outer (Mutual) (Substitution) Function Function Key << Outer (Mutual) (Substitution) Function Function ephemeral Key
|
||||
outer_mutual_function_function_ephemeral_key_applied = outer_mutual_substitution_function_function_key << outer_mutual_substitution_function_function_ephemeral_key
|
||||
|
||||
# 32 Inner (Mutual) Function Applied Key = (Mutual) (Substitution) Function Key << (Mutual) (Substitution) Function ephemeral Key
|
||||
inner_mutual_function_applied_key = mutual_substitution_function_key << mutual_substitution_function_ephemeral_key
|
||||
|
||||
# 33 Inner (Mutual) Function Key Scratch = Inner (Mutual) Function Applied Key << Outer (Mutual) Function Function ephemeral Key Applied
|
||||
inner_mutual_function_key_scratch = inner_mutual_function_applied_key < outer_mutual_function_function_ephemeral_key_applied
|
||||
|
||||
# 34 Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key Applied = Outer Server (Mutual) Shuffle (Permutation) Function Key << Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key
|
||||
outer_server_mutual_shuffle_permutation_function_ephemeral_key_applied = outer_mutual_shuffle_permutation_function_key << outer_server_mutual_shuffle_permutation_function_ephemeral_key
|
||||
|
||||
# 35 Client Shuffle (Permutation) Key X Scratch = Client Shuffle (Permutation) Key X < Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key Applied
|
||||
client_shuffle_permutation_key_x_scratch = client_shuffle_permutation_key_x < outer_server_mutual_shuffle_permutation_function_ephemeral_key_applied
|
||||
|
||||
# 36 Inner Function Key Scratch 2 = Inner (Mutual) Function Key Scratch << Client Shuffle (Permutation) Key X Scratch
|
||||
inner_function_key_scratch_2 = inner_mutual_function_key_scratch << client_shuffle_permutation_key_x_scratch
|
||||
|
||||
# 37 Outer (Mutual) Function ephemeral Key Applied = Outer (Mutual) (Substitution) Function Key < Outer (Mutual) (Substitution) Function ephemeral Key
|
||||
outer_mutual_function_ephemeral_key_applied = outer_mutual_substitution_function_key << outer_mutual_substitution_function_ephemeral_key
|
||||
|
||||
# 38 Server (Substitution) Key Scratch = Server (Substitution) Key < Outer (Mutual) Function ephemeral Key Applied
|
||||
server_substitution_key_scratch = server_substitution_key < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 39 Shared (Mutual) (Substitution) Key Scratch = Shared (Mutual) (Substitution) Key < Outer (Mutual) Function ephemeral Key Applied
|
||||
shared_mutual_substitution_key_scratch = shared_mutual_substitution_key < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 40 Shared (Mutual) (Substitution) ephemeral Key Server Scratch = Shared (Mutual) (Substitution) ephemeral Key < Outer (Mutual) Function ephemeral Key Applied
|
||||
shared_mutual_substitution_ephemeral_key_server_scratch = shared_mutual_substitution_ephemeral_key < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# line 78
|
||||
# 41 Server Client Shuffle (Permutation) = Server Shuffle (Permutation) Key << Client Shuffle (Permutation) Key X
|
||||
server_client_shuffle_permutation = server_shuffle_permutation_key << client_shuffle_permutation_key_x
|
||||
|
||||
# 42 Server Client Shuffle (Permutation) Inverse
|
||||
server_client_shuffle_permutation_inverse = ~server_client_shuffle_permutation
|
||||
|
||||
# 43 Server Shuffle (Permutation) ephemeral Key 1 Inverse (remove 1) = ~(Server Shuffle (Permutation) ephemeral Key 1 (remove 1))
|
||||
server_shuffle_permutation_ephemeral_key_1_inverse = ~server_shuffle_permutation_ephemeral_key_1
|
||||
|
||||
# 44 Server Shuffle (Permutation) ephemeral Key Applied = Server Client Shuffle (Permutation) Inverse < Server Shuffle (Permutation) ephemeral Key 1 Inverse (remove 1)
|
||||
server_shuffle_permutation_ephemeral_key_applied = server_client_shuffle_permutation_inverse << server_shuffle_permutation_ephemeral_key_1_inverse
|
||||
|
||||
# line 82
|
||||
# 45 Server Shuffle (Permutation) ephemeral Key Applied Scratch = Server Shuffle (Permutation) ephemeral Key Applied < Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key Applied
|
||||
server_shuffle_permutation_ephemeral_key_applied_scratch = server_shuffle_permutation_ephemeral_key_applied < outer_server_mutual_shuffle_permutation_function_ephemeral_key_applied
|
||||
|
||||
# 46 Server Shuffle (Permutation) ephemeral Key Applied Scratch Inverse = ~Server Shuffle (Permutation) ephemeral Key Applied Scratch
|
||||
server_shuffle_permutation_ephemeral_key_applied_scratch_inverse = ~server_shuffle_permutation_ephemeral_key_applied_scratch
|
||||
|
||||
# 47 Outer Server Shuffle (Permutation) ephemeral Key Applied = Outer Server Shuffle (Permutation) Key < Outer Server Shuffle (Permutation) ephemeral Key
|
||||
outer_server_shuffle_permutation_ephemeral_key_applied = outer_server_shuffle_permutation_key << outer_server_shuffle_permutation_ephemeral_key
|
||||
|
||||
# 48 Alphabet Scratch 1 = Alphabet Values < Outer Server Shuffle (Permutation) ephemeral Key Applied
|
||||
alphabet_scratch_1 = alphabet_values < outer_server_shuffle_permutation_ephemeral_key_applied
|
||||
|
||||
# 49 Alphabet Scratch 2 = Alphabet Scratch 1 << Server Shuffle (Permutation) ephemeral Key Applied Scratch Inverse
|
||||
alphabet_scratch_2 = alphabet_scratch_1 << server_shuffle_permutation_ephemeral_key_applied_scratch_inverse
|
||||
|
||||
# 50 Server (Substitution) ephemeral Component Scratch 1 = Server (Substitution) ephemeral Random Component.column_substitution( Server (Substitution) ephemeral Unique Component Function ,Server (Substitution) ephemeral Unique Component)
|
||||
server_substitution_ephemeral_component_scratch_1 = server_substitution_ephemeral_random_component.column_substitution(
|
||||
server_substitution_ephemeral_unique_component_function,
|
||||
server_substitution_ephemeral_unique_component.matrix[0]
|
||||
)
|
||||
|
||||
# 51 Server (Substitution) ephemeral Component Scratch 2 = Server (Substitution) ephemeral Component Scratch 1 < Outer (Mutual) Function ephemeral Key Applied
|
||||
server_substitution_ephemeral_component_scratch_2 = server_substitution_ephemeral_component_scratch_1 < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 52 Server (Substitution) ephemeral Component Scratch 3 = Alphabet Scratch 2 ^ (Server (Substitution) Key Scratch << Inner Function Key Scratch 2) ^ (Server (Substitution) ephemeral Component Scratch 2 << Inner Function Key Scratch 2) ^ (Shared (Mutual) (Substitution) Key Scratch << Inner Function Key Scratch 2) ^ (Shared (Mutual) (Substitution) ephemeral Key Server Scratch << Inner Function Key Scratch 2)
|
||||
server_substitution_ephemeral_component_scratch_3 = alphabet_scratch_2 ^ (server_substitution_key_scratch << inner_function_key_scratch_2) ^ (server_substitution_ephemeral_component_scratch_2 << inner_function_key_scratch_2) ^ (shared_mutual_substitution_key_scratch << inner_function_key_scratch_2) ^ (shared_mutual_substitution_ephemeral_key_server_scratch << inner_function_key_scratch_2)
|
||||
|
||||
# 52 Inner Function Key Scratch 2 Inverse = ~Inner Function Key Scratch 2
|
||||
inner_function_key_scratch_2_inverse = ~inner_function_key_scratch_2
|
||||
|
||||
# 54 Server (Substitution) ephemeral Key Scratch = Server (Substitution) ephemeral Component Scratch 3 << Inner Function Key Scratch 2 Inverse
|
||||
server_substitution_ephemeral_key_scratch = server_substitution_ephemeral_component_scratch_3 << inner_function_key_scratch_2_inverse
|
||||
|
||||
# 55 Outer (Mutual) Function ephemeral Key Applied Inverse = ~Outer (Mutual) Function ephemeral Key Applied
|
||||
outer_mutual_function_ephemeral_key_applied_inverse = ~outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 56 Server (Substitution) ephemeral Key = Server (Substitution) ephemeral Key Scratch < Outer (Mutual) Function ephemeral Key Applied Inverse
|
||||
server_substitution_ephemeral_key = server_substitution_ephemeral_key_scratch < outer_mutual_function_ephemeral_key_applied_inverse
|
||||
|
||||
# line 94
|
||||
""" Server Tx (Phase 1) """
|
||||
|
||||
# 57 Inner Server Shuffle (Permutation) Key Applied = Server Shuffle (Permutation) ephemeral Key 1 (remove 1) << Server Shuffle (Permutation) Key
|
||||
inner_server_shuffle_permutation_key_applied = server_shuffle_permutation_ephemeral_key_1 << server_shuffle_permutation_key
|
||||
|
||||
# 58 Outer Server Shuffle (Permutation) Key Applied = Inner Server Shuffle (Permutation) Key Applied < Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key Applied
|
||||
outer_server_shuffle_permutation_key_applied = inner_server_shuffle_permutation_key_applied < outer_server_mutual_shuffle_permutation_function_ephemeral_key_applied
|
||||
|
||||
# 59 Server (Substitution) ephemeral Key Scratch = Server (Substitution) ephemeral Key < Outer (Mutual) Function ephemeral Key Applied
|
||||
server_substitution_ephemeral_key_scratch = server_substitution_ephemeral_key < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 86 Outer Shuffle (Permutation) = Alphabet Values << Outer Server Shuffle (Permutation) ephemeral Key Applied
|
||||
#outer_shuffle_permutation = alphabet_values < outer_server_shuffle_permutation_ephemeral_key_applied
|
||||
|
||||
## 87 Inner Shuffle (Permutation) = Outer Shuffle (Permutation) << Outer Server Shuffle (Permutation) Key Applied
|
||||
#inner_shuffle_permutation = outer_shuffle_permutation << outer_server_shuffle_permutation_key_applied
|
||||
|
||||
## 88 Translation (Substitution) = Inner Shuffle (Permutation) ^ (Server (Substitution) ephemeral Key Scratch << Inner (Mutual) Function Key Scratch) ^ (Server (Substitution) Key Scratch << Inner (Mutual) Function Key Scratch)
|
||||
#translation_substitution = inner_shuffle_permutation ^ (
|
||||
# server_substitution_ephemeral_key_scratch << inner_mutual_function_key_scratch) ^ (
|
||||
# server_substitution_key_scratch << inner_mutual_function_key_scratch)
|
||||
|
||||
# line 108
|
||||
""" Client Rx (Phase 2) """
|
||||
|
||||
# 62 Client (Substitution) Key A Scratch = Client (Substitution) Key < Outer (Mutual) Function ephemeral Key Applied
|
||||
client_substitution_key_a_scratch = client_substitution_key < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 63 Client (Substitution) ephemeral Key A Scratch = Client (Substitution) ephemeral Key < Outer (Mutual) Function ephemeral Key Applied
|
||||
client_substitution_ephemeral_key_a_scratch = client_substitution_ephemeral_key < outer_mutual_function_ephemeral_key_applied
|
||||
|
||||
# 64 Client Shuffle (Permutation) Key A Applied (remove A) = Client Shuffle (Permutation) Key A Applied (remove A) << Client Shuffle (Permutation) ephemeral Key A (remove A)
|
||||
client_shuffle_permutation_key_a_applied = client_shuffle_permutation_key_a << client_shuffle_permutation_ephemeral_key_a
|
||||
|
||||
# 65 Client Shuffle (Permutation) Key A Scratch (remove A) = Client Shuffle (Permutation) Key A Applied (remove A) < Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key Applied
|
||||
client_shuffle_permutation_key_a_scratch = client_shuffle_permutation_key_a_applied < outer_server_mutual_shuffle_permutation_function_ephemeral_key_applied
|
||||
|
||||
# 66 Outer Client Shuffle (Permutation) ephemeral Key Applied = Outer Client Shuffle (Permutation) Key << Outer Client Shuffle (Permutation) ephemeral Key
|
||||
outer_client_shuffle_permutation_ephemeral_key_applied = outer_client_shuffle_permutation_key << outer_client_shuffle_permutation_ephemeral_key
|
||||
|
||||
# 67 Outer Client Shuffle (Permutation) Function ephemeral Key Applied = Outer Client Shuffle (Permutation) Function Key << Outer Client Shuffle (Permutation) Function ephemeral Key
|
||||
outer_client_shuffle_permutation_function_ephemeral_key_applied = outer_client_shuffle_permutation_function_key << outer_client_shuffle_permutation_function_ephemeral_key
|
||||
|
||||
# 68 Outer Client Shuffle (Permutation) Function Key Applied = Outer Client Shuffle (Permutation) ephemeral Key Applied << Outer Client Shuffle (Permutation) Function ephemeral Key Applied
|
||||
outer_client_shuffle_permutation_function_key_applied = outer_client_shuffle_permutation_ephemeral_key_applied << outer_client_shuffle_permutation_function_ephemeral_key_applied
|
||||
|
||||
# 69 Outer Client Shuffle (Permutation) Function Key Applied Inverse = ~Outer Client Shuffle (Permutation) Function Key Applied
|
||||
outer_client_shuffle_permutation_function_key_applied_inverse = ~outer_client_shuffle_permutation_function_key_applied
|
||||
|
||||
# 70 Alphabet Input Sequence Scratch = Outer Client Shuffle (Permutation) Function Key Applied Inverse << Alphabet Input Sequence
|
||||
alphabet_input_sequence_scratch = outer_client_shuffle_permutation_function_key_applied_inverse << alphabet_input_sequence
|
||||
|
||||
# 89 Translation (Substitution) - Client Data = Translation (Substitution) ^ (Shared (Mutual) (Substitution) Key Scratch << Inner (Mutual) Function Key Scratch) ^ (Client (Substitution) Key A Scratch << Inner (Mutual) Function Key Scratch) ^ (Client (Substitution) ephemeral Key A Scratch << Inner (Mutual) Function Key Scratch)
|
||||
#translation_substitution_client_data = translation_substitution ^ (
|
||||
# shared_mutual_substitution_key_scratch << inner_mutual_function_key_scratch) ^ (
|
||||
# client_substitution_key_a_scratch << inner_mutual_function_key_scratch) ^ (
|
||||
# client_substitution_ephemeral_key_a_scratch << inner_mutual_function_key_scratch)
|
||||
|
||||
## 90 Inner Shuffle (Permutation) - CSKA+CSEKA = Translation (Substitution) - Client Data << Client Shuffle (Permutation) Key A Scratch (remove A)
|
||||
#inner_shuffle_permutation_cska_cseka = translation_substitution_client_data << client_shuffle_permutation_key_a_scratch
|
||||
|
||||
## 91 Outer Shuffle (Permutation) - Client Rest = Inner Shuffle (Permutation) - CSKA+CSEKA << Outer Client Shuffle (Permutation) Function Key Applied
|
||||
#outer_shuffle_permutation_client_rest = inner_shuffle_permutation_cska_cseka < outer_client_shuffle_permutation_function_key_applied
|
||||
|
||||
# line 130
|
||||
""" Client Tx (Phase 3) """
|
||||
|
||||
# 71 Client Shuffle (Permutation) Key A Inverse (remove A) = ~Client Shuffle (Permutation) Key A (remove A)
|
||||
client_shuffle_permutation_key_a_inverse = ~client_shuffle_permutation_key_a
|
||||
|
||||
# 72 Client Shuffle (Permutation) Key B (remove B) = Client Shuffle (Permutation) Key A Inverse (remove A) << Client Shuffle (Permutation) Key X
|
||||
client_shuffle_permutation_key_b = client_shuffle_permutation_key_a_inverse << client_shuffle_permutation_key_x
|
||||
|
||||
# 73 Client Shuffle (Permutation) ephemeral Key A (remove A) Inverse = ~Client Shuffle (Permutation) ephemeral Key A (remove A)
|
||||
client_shuffle_permutation_ephemeral_key_a_inverse = ~client_shuffle_permutation_ephemeral_key_a
|
||||
|
||||
# 74 Client Shuffle (Permutation) Key B Applied = Client Shuffle (Permutation) ephemeral Key B << Client Shuffle (Permutation) Key B (remove B)
|
||||
client_shuffle_permutation_key_b_applied = client_shuffle_permutation_ephemeral_key_a_inverse << client_shuffle_permutation_key_b
|
||||
|
||||
# 75 Outer Server (Mutual) Shuffle (Permutation) Function Key Scratch = Outer Server (Mutual) Shuffle (Permutation) Function ephemeral Key Applied << Outer Client Shuffle (Permutation) Function Key Applied
|
||||
outer_server_mutual_shuffle_permutation_function_key_scratch = outer_server_mutual_shuffle_permutation_function_ephemeral_key_applied << outer_client_shuffle_permutation_function_key_applied
|
||||
|
||||
# 76 Client Shuffle (Permutation) Key B Scratch = Client Shuffle (Permutation) Key B Applied < Outer Server (Mutual) Shuffle (Permutation) Function Key Scratch
|
||||
client_shuffle_permutation_key_b_scratch = client_shuffle_permutation_key_b_applied < outer_server_mutual_shuffle_permutation_function_key_scratch
|
||||
|
||||
# 77 Client Shuffle (Permutation) Key X Scratch 2 = Client Shuffle (Permutation) Key X < Outer Server (Mutual) Shuffle (Permutation) Function Key Scratch
|
||||
client_shuffle_permutation_key_x_scratch_2 = client_shuffle_permutation_key_x < outer_server_mutual_shuffle_permutation_function_key_scratch
|
||||
|
||||
# line 144
|
||||
# 78 Outer Function Function Key Scratch = Outer (Mutual) Function Function ephemeral Key Applied << Outer Client Shuffle (Permutation) Function Key Applied
|
||||
outer_function_function_key_scratch = outer_mutual_function_function_ephemeral_key_applied << outer_client_shuffle_permutation_function_key_applied
|
||||
|
||||
# 79 Inner (Mutual) Function Key Client Scratch = Inner (Mutual) Function Applied Key < Outer Function Function Key Scratch
|
||||
inner_mutual_function_key_client_scratch = inner_mutual_function_applied_key < outer_function_function_key_scratch
|
||||
|
||||
# line 147
|
||||
# 80 (Mutual) Function Key Scratch 2 = Inner (Mutual) Function Key Client Scratch << client_shuffle_permutation_key_x_scratch_2
|
||||
mutual_function_key_scratch_2 = inner_mutual_function_key_client_scratch << client_shuffle_permutation_key_x_scratch_2
|
||||
|
||||
# 81 Outer (Mutual) Function Key Scratch = Outer (Mutual) Function ephemeral Key Applied << Outer Client Shuffle (Permutation) Function Key Applied
|
||||
outer_mutual_function_key_scratch = outer_mutual_function_ephemeral_key_applied << outer_client_shuffle_permutation_function_key_applied
|
||||
|
||||
# 82 Client (Substitution) Key B Scratch = Client (Substitution) Key < Outer (Mutual) Function Key Scratch
|
||||
client_substitution_key_b_scratch = client_substitution_key < outer_mutual_function_key_scratch
|
||||
|
||||
# 83 Client (Substitution) ephemeral Key B Scratch = Client (Substitution) ephemeral Key < Outer (Mutual) Function Key Scratch
|
||||
client_substitution_ephemeral_key_b_scratch = client_substitution_ephemeral_key < outer_mutual_function_key_scratch
|
||||
|
||||
# 84 Shared (Mutual) (Substitution) ephemeral Key Client Scratch = Shared (Mutual) (Substitution) ephemeral Key < Outer (Mutual) Function Key Scratch
|
||||
shared_mutual_substitution_ephemeral_key_client_scratch = shared_mutual_substitution_ephemeral_key < outer_mutual_function_key_scratch
|
||||
|
||||
# 92 Inner Shuffle (Permutation) - CSEKB +CSKB = Outer Shuffle (Permutation) - Client Rest << Client Shuffle (Permutation) Key B Scratch
|
||||
#inner_shuffle_permutation_csekb_cskb = outer_shuffle_permutation_client_rest << client_shuffle_permutation_key_b_scratch
|
||||
|
||||
## 93 Translation (Substitution) DARC Data = Inner Shuffle (Permutation) - CSEKB +CSKB ^ (Client (Substitution) Key B Scratch << (Mutual) Function Key Scratch 2) ^ (Client (Substitution) ephemeral Key B Scratch << (Mutual) Function Key Scratch 2) ^ (Shared (Mutual) (Substitution) ephemeral Key Client Scratch << (Mutual) Function Key Scratch 2)
|
||||
#translation_substitution_darc_data = inner_shuffle_permutation_csekb_cskb ^ (
|
||||
# client_substitution_key_b_scratch << mutual_function_key_scratch_2) ^ (
|
||||
# client_substitution_ephemeral_key_b_scratch << mutual_function_key_scratch_2) ^ (
|
||||
# shared_mutual_substitution_ephemeral_key_client_scratch << mutual_function_key_scratch_2)
|
||||
|
||||
# line 175
|
||||
""" Server Rx (Phase 4) """
|
||||
|
||||
# 85 Translation (Substitution) = Alphabet Scratch 2 ^ (Server (Substitution) Key Scratch << Inner Function Key Scratch 2) ^ (Server (Substitution) ephemeral Key Scratch << Inner Function Key Scratch 2) ^ (Shared (Mutual) (Substitution) Key Scratch << Inner Function Key Scratch 2) ^ (Shared (Mutual) (Substitution) ephemeral Key Server Scratch << Inner Function Key Scratch 2)
|
||||
translation_substitution = (
|
||||
alphabet_scratch_2 ^
|
||||
(server_substitution_key_scratch << inner_function_key_scratch_2) ^
|
||||
(server_substitution_ephemeral_key_scratch << inner_function_key_scratch_2) ^
|
||||
(shared_mutual_substitution_key_scratch << inner_function_key_scratch_2) ^
|
||||
(shared_mutual_substitution_ephemeral_key_server_scratch << inner_function_key_scratch_2)
|
||||
)
|
||||
|
||||
|
||||
a = 1
|
||||
@@ -1,47 +0,0 @@
|
||||
from models import OuterKey, InnerKey, AlphabetKey
|
||||
|
||||
height = 10
|
||||
width = 7
|
||||
|
||||
a0 = AlphabetKey.init_matrix(width, height, 255)
|
||||
|
||||
o0 = OuterKey.init_matrix(height)
|
||||
|
||||
i0 = InnerKey.init_matrix(width, height)
|
||||
i1 = InnerKey.init_matrix(width, height)
|
||||
i2 = InnerKey.init_matrix(width, height)
|
||||
|
||||
a0_i0_o0_v0 = a0 << (i0 < o0)
|
||||
|
||||
a0_i0_o0_v1 = ((a0 < ~o0) << i0) < o0
|
||||
|
||||
print(a0_i0_o0_v0 == a0_i0_o0_v1)
|
||||
|
||||
a0_o0_i0_v0 = (a0 < o0) << i0
|
||||
a0_o0_i0_v1 = (a0 << (i0 < ~o0)) < o0
|
||||
print(a0_i0_o0_v0 == a0_i0_o0_v1)
|
||||
|
||||
|
||||
a0_o0_i0_v0 = (a0 < o0) << i0
|
||||
|
||||
|
||||
a0_o0_i0_v1 = (a0 << (i0 < ~o0)) < o0
|
||||
print(a0_o0_i0_v0 == a0_o0_i0_v1)
|
||||
|
||||
n_i0_i1 = ~(i0 << i1)
|
||||
|
||||
ni1_ni0 = ~i1 << ~i0
|
||||
|
||||
print(ni1_ni0 == n_i0_i1)
|
||||
|
||||
i0_i1_i2_v0 = i0 << i1 << i2
|
||||
i0_i1_i2_v1 = i0 << (i1 << i2)
|
||||
i0_i1_i2_v2 = (i0 << i1) << i2
|
||||
|
||||
print(i0_i1_i2_v0 == i0_i1_i2_v1 == i0_i1_i2_v2)
|
||||
|
||||
i0_i2_i1 = i0 << i2 << i1
|
||||
#print(i0_i2_i1 == i0_i1_i2_v0)
|
||||
|
||||
print(i0 == i0_i2_i1 << ~(i2 << i1))
|
||||
print(i0 == i0_i2_i1 << ~i1 << ~i2)
|
||||
@@ -0,0 +1,107 @@
|
||||
from src.models import AlphabetKey, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys, \
|
||||
MutualEphemeralDataKeys, InnerKey, ServerKeys, MutualKeys, ServerPersistentMediumKeys, ServerEphemeralMediumKeys, \
|
||||
MutualPersistentMediumKeys, MutualEphemeralMediumKeys, DarcKey
|
||||
|
||||
|
||||
def translate_data(alphabet: AlphabetKey, server_persistent_keys: ServerPersistentDataKeys, server_ephemeral_keys: ServerEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
|
||||
so1 = server_persistent_keys.outer_key_1 << server_ephemeral_keys.outer_key_1
|
||||
mo3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
si1_mo3: InnerKey = (server_persistent_keys.inner_key_1 << server_ephemeral_keys.inner_key_1) < mo3
|
||||
|
||||
mo2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mi1_mo2: InnerKey = (mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1) < mo2
|
||||
mo1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
|
||||
substitution = server_persistent_keys.alpha_key ^ server_ephemeral_keys.alpha_key
|
||||
alpha_phase1 = (
|
||||
((alphabet< so1) << si1_mo3) ^
|
||||
((substitution < mo1) << mi1_mo2)
|
||||
)
|
||||
|
||||
return alpha_phase1
|
||||
|
||||
def translate_medium(height, width, 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
|
||||
|
||||
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)
|
||||
return operand
|
||||
|
||||
|
||||
def darc_phase1(alphabet: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
|
||||
height = len(alphabet.matrix)
|
||||
width = len(alphabet.matrix[0])
|
||||
alphabet_phase1 = translate_data(alphabet, server_keys.persistent.data, server_keys.ephemeral.data, mutual_keys.persistent.data, mutual_keys.ephemeral.data)
|
||||
medium = translate_medium(height, width, server_keys.persistent.medium, server_keys.ephemeral.medium, mutual_keys.persistent.medium, mutual_keys.ephemeral.medium)
|
||||
return alphabet_phase1, medium
|
||||
|
||||
|
||||
|
||||
def resolve_message(translated_alphabet, translated_messasge):
|
||||
alphabet_map = {str(key): idx for idx, key in enumerate(translated_alphabet)}
|
||||
encoded_message = [str(alpha) for alpha in translated_messasge]
|
||||
|
||||
message = []
|
||||
for alpha in encoded_message:
|
||||
if alpha in alphabet_map.keys():
|
||||
message.append(alphabet_map[alpha])
|
||||
else:
|
||||
break
|
||||
|
||||
return message
|
||||
|
||||
|
||||
def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys) -> DarcKey:
|
||||
mmo6 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
mmo4 = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
|
||||
nmmo6_nmmo4 = ~(mmo4 << mmo6)
|
||||
|
||||
mmo5 = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
mmo5_nmmo6_nmmo4 = mmo5 << nmmo6_nmmo4
|
||||
|
||||
mmo2 = mutual_keys.persistent.medium.outer_key_2 << mutual_keys.ephemeral.medium.outer_key_2
|
||||
|
||||
mmo3 = mutual_keys.persistent.medium.outer_key_3 << mutual_keys.ephemeral.medium.outer_key_3
|
||||
|
||||
mmi3 = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
mmi1 = mutual_keys.persistent.medium.inner_key_1 << mutual_keys.ephemeral.medium.inner_key_1
|
||||
|
||||
mpmi2 = mutual_keys.persistent.medium.inner_key_2 < mmo3
|
||||
|
||||
mmi4 = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_4
|
||||
|
||||
mmo1 = mutual_keys.persistent.medium.outer_key_1 << mutual_keys.ephemeral.medium.outer_key_1
|
||||
|
||||
sub_med_mmo1 = (server_keys.persistent.medium.alpha_key ^ server_keys.ephemeral.medium.alpha_key ^ mutual_keys.persistent.medium.alpha_key ^ mutual_keys.ephemeral.medium.alpha_key) < mmo1
|
||||
|
||||
medium_unwrapped = (((darc_message < ~mmo4) << ~(mmi4 < mmo5_nmmo6_nmmo4)) ^ (sub_med_mmo1 << ((mmi1 < mmo2) << mpmi2))) << (~mmi3 < nmmo6_nmmo4)
|
||||
|
||||
|
||||
mdo3 = mutual_keys.persistent.data.outer_key_3 << mutual_keys.ephemeral.data.outer_key_3
|
||||
mpi2_mdo3 = mutual_keys.persistent.data.inner_key_2 < mdo3
|
||||
mdo2 = mutual_keys.persistent.data.outer_key_2 << mutual_keys.ephemeral.data.outer_key_2
|
||||
|
||||
mdi1 = mutual_keys.persistent.data.inner_key_1 << mutual_keys.ephemeral.data.inner_key_1
|
||||
mdi1_mdo2_mpi2_mdo3 = (mdi1 < mdo2) << mpi2_mdo3
|
||||
sdi1_mpdi2__mdo3 = (server_keys.persistent.data.inner_key_1 << server_keys.ephemeral.data.inner_key_1 << mutual_keys.persistent.data.inner_key_2) < mdo3
|
||||
|
||||
sdo1 = server_keys.persistent.data.outer_key_1 << server_keys.ephemeral.data.outer_key_1
|
||||
alpha_sdo1__sdi1_mpdi2__mdo3 = (alphabet < sdo1) << sdi1_mpdi2__mdo3
|
||||
|
||||
mdo1 = mutual_keys.persistent.data.outer_key_1 << mutual_keys.ephemeral.data.outer_key_1
|
||||
|
||||
sub_mdo1 = (server_keys.persistent.data.alpha_key ^ server_keys.ephemeral.data.alpha_key ^ mutual_keys.persistent.data.alpha_key ^ mutual_keys.ephemeral.data.alpha_key) < mdo1
|
||||
translated_alpha = alpha_sdo1__sdi1_mpdi2__mdo3 ^ (sub_mdo1 << mdi1_mdo2_mpi2_mdo3)
|
||||
|
||||
return resolve_message(
|
||||
translated_alpha.matrix,
|
||||
medium_unwrapped.matrix
|
||||
)
|
||||
|
||||
90
src/utils.py
90
src/utils.py
@@ -1,90 +0,0 @@
|
||||
import secrets
|
||||
|
||||
|
||||
def random_number(min_val: int, max_val: int) -> int:
|
||||
""" originally secure_rand """
|
||||
return min_val + secrets.randbelow(max_val - min_val + 1)
|
||||
|
||||
|
||||
def random_shuffle(array: list[int]) -> list[int]:
|
||||
for i in range(len(array) - 1, 0, -1):
|
||||
j = random_number(0, i)
|
||||
array[i], array[j] = array[j], array[i]
|
||||
return array
|
||||
|
||||
|
||||
def mask_array(array_len: int) -> list[int]:
|
||||
new_array = []
|
||||
for i in range(array_len):
|
||||
random_val = random_number(0, array_len)
|
||||
new_array.append(random_val)
|
||||
return new_array
|
||||
|
||||
|
||||
def build_shuffle_matrix(row_length: int, column_length: int) -> list[list[int]]:
|
||||
""" originally buildRandom """
|
||||
output = []
|
||||
for i in range(column_length):
|
||||
output.append(random_shuffle(list(range(row_length))))
|
||||
|
||||
return output
|
||||
|
||||
|
||||
def build_mask_matrix(row_length: int, column_length: int, max_value: int) -> list[list[int]]:
|
||||
""" originally buildScramble """
|
||||
output = []
|
||||
for i in range(column_length):
|
||||
row = [random_number(0, max_value - 1) for _ in range(row_length)]
|
||||
output.append(row)
|
||||
return output
|
||||
|
||||
|
||||
def mapped_transform(operand: list[list[int]], function_map: list[list[int]]):
|
||||
""" originally transpose """
|
||||
assert len(operand) == len(function_map)
|
||||
assert len(operand[0]) == len(function_map[0])
|
||||
|
||||
output = []
|
||||
for i, el in enumerate(function_map):
|
||||
row = []
|
||||
for j, el2 in enumerate(el):
|
||||
row.append(operand[el2][j])
|
||||
output.append(row)
|
||||
return output
|
||||
|
||||
|
||||
def chain_map_transform(functions: list[list[list[int]]]) -> list[list[int]]:
|
||||
""" originally chainMap """
|
||||
output = functions[0]
|
||||
for i in range(1, len(functions)):
|
||||
output = mapped_transform(output, functions[i])
|
||||
return output
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
alphabet = "abcd"
|
||||
bytes_per_char = 4
|
||||
alphabet_len = len(alphabet)
|
||||
|
||||
functionKey = build_shuffle_matrix(bytes_per_char, alphabet_len)
|
||||
functionEphemeralKey = build_shuffle_matrix(bytes_per_char, alphabet_len)
|
||||
|
||||
outerFunctionFunctionKey = build_shuffle_matrix(alphabet_len, 1)
|
||||
outerFunctionFunctionEphemeralKey = build_shuffle_matrix(alphabet_len, 1)
|
||||
|
||||
outerServerShuffleKey = build_shuffle_matrix(alphabet_len, 1)
|
||||
outerServerShuffleEphemeralKey = build_shuffle_matrix(alphabet_len, 1)
|
||||
|
||||
serverKey = build_mask_matrix(bytes_per_char, alphabet_len, 255)
|
||||
serverEphemeralKey = build_mask_matrix(bytes_per_char, alphabet_len, 255)
|
||||
|
||||
interfaceConfig = build_mask_matrix(bytes_per_char, alphabet_len, alphabet_len)
|
||||
|
||||
outerFunctionFunctionEphemeralKeyApplied = mapped_transform(outerFunctionFunctionKey,
|
||||
outerFunctionFunctionEphemeralKey)
|
||||
|
||||
outerServerShuffleEphemeralKeyApplied = mapped_transform(outerServerShuffleKey, outerServerShuffleEphemeralKey)
|
||||
|
||||
inputData = mapped_transform(interfaceConfig, outerServerShuffleEphemeralKeyApplied)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user