refactor key structure

This commit is contained in:
2024-05-22 11:20:17 -05:00
parent 67d51c43ae
commit 6d2472f099
2 changed files with 424 additions and 178 deletions

View File

@@ -1,5 +1,8 @@
from src.models import ServerEphemeralKeys, ServerPersistentKeys, ClientEphemeralKeys, ClientPersistentKeys, \
MutualEphemeralKeys, AlphabetKey, DarcKey, OuterShuffleKey, MutualPersistentKeys
MutualEphemeralKeys, AlphabetKey, DarcKey, OuterShuffleKey, MutualPersistentKeys, ClientKeys, ServerKeys, \
MutualKeys, ServerPersistentDataKeys, ServerEphemeralDataKeys, MutualPersistentDataKeys, MutualEphemeralDataKeys, \
ServerPersistentMediumKeys, ServerEphemeralMediumKeys, MutualPersistentMediumKeys, MutualEphemeralMediumKeys, \
ClientPersistentDataKeys, ClientEphemeralDataKeys, ClientEphemeralMediumKeys, ClientPersistentMediumKeys
import json
height = 10
@@ -7,12 +10,13 @@ width = 7
block_size = 10
def darc_phase1(alphabet: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
alphabet_phase1 = translate_data(alphabet, server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
medium = translate_medium(server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
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 translate_data(alphabet: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
def translate_data(alphabet: AlphabetKey, server_persistent_keys: ServerPersistentDataKeys, server_ephemeral_keys: ServerEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
function_ephemeral_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1
outer_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey
outer_function_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey
@@ -35,7 +39,8 @@ def translate_data(alphabet: DarcKey, server_persistent_keys: ServerPersistentKe
operand = operand ^ (operand1 << inner_function_shuffled) ^ (operand2 << inner_function_shuffled)
return operand
def translate_medium(server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
def translate_medium(server_persistent_keys: ServerPersistentMediumKeys, server_ephemeral_keys: ServerEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
function_ephemeral_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey
outer_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey
@@ -56,8 +61,13 @@ def translate_medium(server_persistent_keys: ServerPersistentKeys, server_epheme
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: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
def receive_alphabet(alphabet: AlphabetKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
function_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1
outer_function_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey
outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey
@@ -82,7 +92,7 @@ def receive_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistent
return result
def receive_medium(medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
def receive_medium(medium: AlphabetKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
function_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey
outer_function_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey
outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey
@@ -108,13 +118,13 @@ def receive_medium(medium: DarcKey, client_persistent_keys: ClientPersistentKeys
return result
def darc_phase2(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
alphabet_phase2 = receive_alphabet(alphabet, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
medium = receive_medium(medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
return alphabet_phase2, medium
def darc_phase3(alphabet: AlphabetKey, medium: AlphabetKey, client_keys: ClientKeys, mutual_keys: MutualKeys):
alphabet_phase3 = transmit_alphabet(alphabet, client_keys.Persistent.Data, client_keys.Ephemeral.Data, mutual_keys.Persistent.Data, mutual_keys.Ephemeral.Data)
medium = transmit_medium(medium, client_keys.Persistent.Medium, client_keys.Ephemeral.Medium, mutual_keys.Persistent.Medium, mutual_keys.Ephemeral.Medium)
return alphabet_phase3, medium
def transmit_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
def transmit_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersistentDataKeys, client_ephemeral_keys: ClientEphemeralDataKeys, mutual_persistent_keys: MutualPersistentDataKeys, mutual_ephemeral_keys: MutualEphemeralDataKeys):
outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey
outer_client_shuffle_key_applied = client_persistent_keys.OuterClientShuffleKey << client_ephemeral_keys.OuterClientShuffleEphemeralKey
outer_client_shuffle_function_key_applied = client_persistent_keys.OuterClientShuffleFunctionKey << client_ephemeral_keys.OuterClientShuffleFunctionEphemeralKey
@@ -150,7 +160,7 @@ def transmit_alphabet(alphabet: DarcKey, client_persistent_keys: ClientPersisten
return result
def transmit_medium(medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
def transmit_medium(medium: DarcKey, client_persistent_keys: ClientPersistentMediumKeys, client_ephemeral_keys: ClientEphemeralMediumKeys, mutual_persistent_keys: MutualPersistentMediumKeys, mutual_ephemeral_keys: MutualEphemeralMediumKeys):
client_shuffle_ephemeral_key_b = ~client_ephemeral_keys.ClientShuffleMediumEphemeralKeyA
outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey
outer_client_shuffle_key_applied = client_persistent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey
@@ -186,14 +196,9 @@ def transmit_medium(medium: DarcKey, client_persistent_keys: ClientPersistentKey
return result
def darc_phase3(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
alphabet_phase3 = transmit_alphabet(alphabet, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
medium = transmit_medium(medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
return alphabet_phase3, medium
def merge_message(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: ClientPersistentKeys, client_ephemeral_keys: ClientEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys, input_sequence: list[int]):
outer_client_shuffle_alphabet_key_applied = client_persistent_keys.OuterClientShuffleKey << client_ephemeral_keys.OuterClientShuffleEphemeralKey
outer_client_shuffle_function_alphabet_key_applied = client_persistent_keys.OuterClientShuffleFunctionKey << client_ephemeral_keys.OuterClientShuffleFunctionEphemeralKey
def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, mutual_keys: MutualKeys, input_sequence: list[int]):
outer_client_shuffle_alphabet_key_applied = client_keys.Persistent.Data.OuterClientShuffleKey << client_keys.Ephemeral.Data.OuterClientShuffleEphemeralKey
outer_client_shuffle_function_alphabet_key_applied = client_keys.Persistent.Data.OuterClientShuffleFunctionKey << client_keys.Ephemeral.Data.OuterClientShuffleFunctionEphemeralKey
outer_client_shuffle_alphabet_key_applied = ~(outer_client_shuffle_alphabet_key_applied << outer_client_shuffle_function_alphabet_key_applied)
msg_len = len(input_sequence)
@@ -207,8 +212,8 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: Cl
input_sequence_applied = outer_client_shuffle_alphabet_key_applied << padded_input_sequence
outer_client_shuffle_medium_key_applied = client_persistent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey
outer_client_shuffle_function_medium_key_applied = client_persistent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey
outer_client_shuffle_medium_key_applied = client_keys.Persistent.Medium.OuterClientShuffleMediumKey << client_keys.Ephemeral.Medium.OuterClientShuffleMediumEphemeralKey
outer_client_shuffle_function_medium_key_applied = client_keys.Persistent.Medium.OuterClientShuffleFunctionMediumKey << client_keys.Ephemeral.Medium.OuterClientShuffleFunctionMediumEphemeralKey
outer_client_shuffle_medium_key_applied = outer_client_shuffle_medium_key_applied << outer_client_shuffle_function_medium_key_applied
@@ -220,9 +225,9 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: Cl
if msg_len < height:
message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr
position_function_key_applied = mutual_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey
outer_position_function_key_applied = mutual_persistent_keys.OuterPositionFunctionMediumKey << mutual_ephemeral_keys.OuterPositionFunctionMediumEphemeralKey
outer_position_shuffle_key_applied = mutual_persistent_keys.OuterPositionShuffleMediumKey << mutual_ephemeral_keys.OuterPositionShuffleMediumEphemeralKey
position_function_key_applied = mutual_keys.Persistent.Medium.PositionFunctionMediumKey << mutual_keys.Ephemeral.Medium.PositionFunctionMediumEphemeralKey
outer_position_function_key_applied = mutual_keys.Persistent.Medium.OuterPositionFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionFunctionMediumEphemeralKey
outer_position_shuffle_key_applied = mutual_keys.Persistent.Medium.OuterPositionShuffleMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionShuffleMediumEphemeralKey
outer_position_function_key_applied = outer_position_shuffle_key_applied << outer_position_function_key_applied
@@ -236,8 +241,8 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: Cl
message = operand ^ (operand1 << inner_function_key_applied)
outer_position_shuffle_function_key_applied = mutual_persistent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey
position_shuffle_key_applied = mutual_persistent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey
outer_position_shuffle_function_key_applied = mutual_keys.Persistent.Medium.OuterPositionShuffleFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionShuffleFunctionMediumEphemeralKey
position_shuffle_key_applied = mutual_keys.Persistent.Medium.PositionShuffleMediumKey << mutual_keys.Ephemeral.Medium.PositionShuffleMediumEphemeralKey
outer_position_shuffle_key_applied = outer_client_shuffle_medium_key_applied << outer_position_shuffle_key_applied
outer_position_shuffle_function_key_applied = outer_position_shuffle_function_key_applied << outer_position_function_key_applied
@@ -247,67 +252,67 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_persistent_keys: Cl
return message
def darc_phase_4(alphabet: DarcKey, darc_message: DarcKey, server_persistent_keys: ServerPersistentKeys, server_ephemeral_keys: ServerEphemeralKeys, mutual_persistent_keys: MutualPersistentKeys, mutual_ephemeral_keys: MutualEphemeralKeys):
outer_position_function_ephemeral_key_applied = mutual_persistent_keys.OuterPositionFunctionMediumKey << mutual_ephemeral_keys.OuterPositionFunctionMediumEphemeralKey
outer_position_shuffle_ephemeral_key_applied = mutual_persistent_keys.OuterPositionShuffleMediumKey << mutual_ephemeral_keys.OuterPositionShuffleMediumEphemeralKey
def darc_phase_4(alphabet: AlphabetKey, darc_message: AlphabetKey, server_keys: ServerKeys, mutual_keys: MutualKeys):
outer_position_function_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterPositionFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionFunctionMediumEphemeralKey
outer_position_shuffle_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterPositionShuffleMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionShuffleMediumEphemeralKey
outer_position_function_ephemeral_key_applied = ~(outer_position_shuffle_ephemeral_key_applied << outer_position_function_ephemeral_key_applied)
outer_position_shuffle_ephemeral_key_applied = ~outer_position_shuffle_ephemeral_key_applied
outer_position_shuffle_function_ephemeral_key_applied = mutual_persistent_keys.OuterPositionShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterPositionShuffleFunctionMediumEphemeralKey
outer_position_shuffle_function_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterPositionShuffleFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionShuffleFunctionMediumEphemeralKey
outer_position_shuffle_function_ephemeral_key_applied = outer_position_shuffle_function_ephemeral_key_applied << outer_position_function_ephemeral_key_applied
outer_function_function_medium_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey
outer_server_shuffle_function_ephemeral_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey
outer_function_function_medium_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterFunctionFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterFunctionFunctionMediumEphemeralKey
outer_server_shuffle_function_ephemeral_key_applied = mutual_keys.Persistent.Data.OuterServerShuffleFunctionKey << mutual_keys.Ephemeral.Data.OuterServerShuffleFunctionKey
outer_server_shuffle_function_medium_ephemeral_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey
outer_server_shuffle_function_medium_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterServerShuffleFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterServerShuffleFunctionMediumEphemeralKey
function_medium_ephemeral_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey
function_medium_ephemeral_key_applied = mutual_keys.Persistent.Medium.FunctionMediumKey << mutual_keys.Ephemeral.Medium.FunctionMediumKey
client_shuffle_medium_key_x = mutual_persistent_keys.ClientShuffleMediumKeyX < outer_server_shuffle_function_medium_ephemeral_key_applied
client_shuffle_medium_key_x = mutual_keys.Persistent.Medium.ClientShuffleMediumKeyX < outer_server_shuffle_function_medium_ephemeral_key_applied
client_shuffle_medium_key_x = (function_medium_ephemeral_key_applied < outer_function_function_medium_ephemeral_key_applied) << client_shuffle_medium_key_x
position_shuffle_ephemeral_key_applied = mutual_persistent_keys.PositionShuffleMediumKey << mutual_ephemeral_keys.PositionShuffleMediumEphemeralKey
position_shuffle_ephemeral_key_applied = mutual_keys.Persistent.Medium.PositionShuffleMediumKey << mutual_keys.Ephemeral.Medium.PositionShuffleMediumEphemeralKey
position_shuffle_ephemeral_key_applied = position_shuffle_ephemeral_key_applied < outer_position_shuffle_function_ephemeral_key_applied
client_shuffle_medium_key_x = client_shuffle_medium_key_x << position_shuffle_ephemeral_key_applied
outer_function_medium_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey
outer_function_medium_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterFunctionMediumEphemeralKey
rx_data = darc_message < outer_position_shuffle_ephemeral_key_applied
inner_key = client_shuffle_medium_key_x
operand = rx_data
operand1 = server_persistent_keys.ServerMediumKey < outer_function_medium_ephemeral_key_applied
operand2 = server_ephemeral_keys.ServerMediumEphemeralKey < outer_function_medium_ephemeral_key_applied
operand3 = mutual_persistent_keys.MutualMediumKey < outer_function_medium_ephemeral_key_applied
operand4 = mutual_ephemeral_keys.MutualMediumKey < outer_function_medium_ephemeral_key_applied
operand1 = server_keys.Persistent.Medium.ServerMediumKey < outer_function_medium_ephemeral_key_applied
operand2 = server_keys.Ephemeral.Medium.ServerMediumEphemeralKey < outer_function_medium_ephemeral_key_applied
operand3 = mutual_keys.Persistent.Medium.MutualMediumKey < outer_function_medium_ephemeral_key_applied
operand4 = mutual_keys.Ephemeral.Medium.MutualMediumKey < outer_function_medium_ephemeral_key_applied
rx_data = operand ^ (operand1 << inner_key) ^ (operand2 << inner_key) ^ (operand3 << inner_key) ^ (operand4 << inner_key)
position_function_ephemeral_key_applied = mutual_persistent_keys.PositionFunctionMediumKey << mutual_ephemeral_keys.PositionFunctionMediumEphemeralKey
position_function_ephemeral_key_applied = mutual_keys.Persistent.Medium.PositionFunctionMediumKey << mutual_keys.Ephemeral.Medium.PositionFunctionMediumEphemeralKey
rx_data = rx_data << (~(position_shuffle_ephemeral_key_applied) << (~position_function_ephemeral_key_applied < outer_position_function_ephemeral_key_applied))
client_shuffle_key_x = mutual_persistent_keys.ClientShuffleKeyX < outer_server_shuffle_function_ephemeral_key_applied
outer_function_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey
client_shuffle_key_x = mutual_keys.Persistent.Data.ClientShuffleKeyX < outer_server_shuffle_function_ephemeral_key_applied
outer_function_function_ephemeral_key_applied = mutual_keys.Persistent.Data.OuterFunctionFunctionKey << mutual_keys.Ephemeral.Data.OuterFunctionFunctionKey
function_ephemeral_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1
function_ephemeral_key_applied = mutual_keys.Persistent.Data.Inner1 << mutual_keys.Ephemeral.Data.Inner1
function_ephemeral_key_applied = (function_ephemeral_key_applied < outer_function_function_ephemeral_key_applied) << client_shuffle_key_x
server_shuffle_ephemeral_key_applied = ~(server_persistent_keys.ServerShuffleKey << mutual_persistent_keys.ClientShuffleKeyX) << ~(server_ephemeral_keys.ServerShuffleEphemeralKey)
server_shuffle_ephemeral_key_applied = ~(server_keys.Persistent.Data.ServerShuffleKey << mutual_keys.Persistent.Data.ClientShuffleKeyX) << ~(server_keys.Ephemeral.Data.ServerShuffleEphemeralKey)
server_shuffle_ephemeral_key_applied = ~(server_shuffle_ephemeral_key_applied < outer_server_shuffle_function_ephemeral_key_applied)
outer_server_shuffle_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleKey << server_ephemeral_keys.OuterServerShuffleEphemeralKey
outer_server_shuffle_ephemeral_key_applied = server_keys.Persistent.Data.OuterServerShuffleKey << server_keys.Ephemeral.Data.OuterServerShuffleEphemeralKey
alpha_prep = (alphabet < outer_server_shuffle_ephemeral_key_applied) << server_shuffle_ephemeral_key_applied
outer_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey
outer_function_ephemeral_key_applied = mutual_keys.Persistent.Data.OuterFunctionKey << mutual_keys.Ephemeral.Data.OuterFunctionKey
inner_key = function_ephemeral_key_applied
operand = alpha_prep
operand1 = server_persistent_keys.ServerKey < outer_function_ephemeral_key_applied
operand2 = server_ephemeral_keys.ServerEphemeralKey < outer_function_ephemeral_key_applied
operand3 = mutual_persistent_keys.MutualKey < outer_function_ephemeral_key_applied
operand4 = mutual_ephemeral_keys.MutualKey < outer_function_ephemeral_key_applied
operand1 = server_keys.Persistent.Data.ServerKey < outer_function_ephemeral_key_applied
operand2 = server_keys.Ephemeral.Data.ServerEphemeralKey < outer_function_ephemeral_key_applied
operand3 = mutual_keys.Persistent.Data.MutualKey < outer_function_ephemeral_key_applied
operand4 = mutual_keys.Ephemeral.Data.MutualKey < outer_function_ephemeral_key_applied
alpha_prep = operand ^ (operand1 << inner_key) ^ (operand2 << inner_key) ^ (operand3 << inner_key) ^ (operand4 << inner_key)
return resolve_message(alpha_prep.matrix, rx_data.matrix)
@@ -325,56 +330,157 @@ def resolve_message(translated_alphabet, translated_messasge):
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)
with open("../darc_key_json/client_persistent_keys.json") as fp:
client_persistent_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()}
with open("../darc_key_json/client_ephemeral_keys.json") as fp:
client_ephemeral_keys = json.load(fp)
# client_persistent_keys = ClientPersistentKeys(**client_persistent_keys)
# client_ephemeral_keys = ClientEphemeralKeys(**client_ephemeral_keys)
# server_persistent_keys = ServerPersistentKeys(**server_persistent_keys)
# server_ephemeral_keys = ServerEphemeralKeys(**server_ephemeral_keys)
# mutual_ephemeral_keys = MutualEphemeralKeys(**mutual_ephemeral_keys)
with open("../darc_key_json/server_persistent_keys.json") as fp:
server_persistent_keys = json.load(fp)
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)
mutual_persistent_keys = MutualPersistentKeys.random_init(height, width)
with open("../darc_key_json/server_ephemeral_keys.json") as fp:
server_ephemeral_keys = json.load(fp)
server_persistent_keys.ServerKey = server_persistent_keys.ServerKey ^ mutual_persistent_keys.MutualKey
server_persistent_keys.ServerMediumKey = server_persistent_keys.ServerMediumKey ^ mutual_persistent_keys.MutualMediumKey
with open("../darc_key_json/mutual_ephemeral_keys.json") as fp:
mutual_ephemeral_keys = json.load(fp)
mutual_persistent_keys.MutualKey = mutual_persistent_keys.MutualKey ^ client_persistent_keys.ClientKey
mutual_persistent_keys.MutualMediumKey = mutual_persistent_keys.MutualMediumKey ^ client_persistent_keys.ClientMediumKey
alphabet = AlphabetKey.init_matrix(width, height, 255)
(phase1_alphabet, phase1_medium) = darc_phase1(alphabet, server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
(phase2_alphabet, phase2_medium) = darc_phase2(phase1_alphabet, phase1_medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
(phase3_alphabet, phase3_medium) = darc_phase3(phase2_alphabet, phase2_medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, 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)
# mutual_persistent_keys = MutualPersistentKeys.random_init(height, width)
original_message = [0, 2, 4, 6, 7, 8, 9]
darc_message = merge_message(phase3_alphabet, phase3_medium, client_persistent_keys, client_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys, original_message)
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()}
message = darc_phase_4(alphabet, darc_message, server_persistent_keys, server_ephemeral_keys, mutual_persistent_keys, mutual_ephemeral_keys)
client_keys = ClientKeys(
Persistent=ClientPersistentKeys(
Data=ClientPersistentDataKeys(
OuterClientShuffleKey=client_persistent_keys["OuterClientShuffleKey"],
OuterClientShuffleFunctionKey=client_persistent_keys["OuterClientShuffleFunctionKey"],
ClientKey=client_persistent_keys["ClientKey"],
ClientShuffleKeyA=client_persistent_keys["ClientShuffleKeyA"]
),
Medium=ClientPersistentMediumKeys(
OuterClientShuffleMediumKey=client_persistent_keys["OuterClientShuffleMediumKey"],
OuterClientShuffleFunctionMediumKey=client_persistent_keys["OuterClientShuffleFunctionMediumKey"],
ClientShuffleMediumKeyA=client_persistent_keys["ClientShuffleMediumKeyA"],
ClientMediumKey=client_persistent_keys["ClientMediumKey"]
)
),
Ephemeral=ClientEphemeralKeys(
Data=ClientEphemeralDataKeys(
OuterClientShuffleEphemeralKey=client_ephemeral_keys["OuterClientShuffleEphemeralKey"],
OuterClientShuffleFunctionEphemeralKey=client_ephemeral_keys["OuterClientShuffleFunctionEphemeralKey"],
ClientEphemeralKey=client_ephemeral_keys["ClientEphemeralKey"],
ClientShuffleEphemeralKeyA=client_ephemeral_keys["ClientShuffleEphemeralKeyA"]
),
Medium=ClientEphemeralMediumKeys(
OuterClientShuffleMediumEphemeralKey=client_ephemeral_keys["OuterClientShuffleMediumEphemeralKey"],
OuterClientShuffleFunctionMediumEphemeralKey=client_ephemeral_keys["OuterClientShuffleFunctionMediumEphemeralKey"],
ClientShuffleMediumEphemeralKeyA=client_ephemeral_keys["ClientShuffleMediumEphemeralKeyA"],
ClientMediumEphemeralKey=client_ephemeral_keys["ClientMediumEphemeralKey"]
)
)
)
server_keys = ServerKeys(
Persistent=ServerPersistentKeys(
Data=ServerPersistentDataKeys(
OuterServerShuffleKey=server_persistent_keys["OuterServerShuffleKey"],
ServerKey=server_persistent_keys["ServerKey"],
ServerShuffleKey=server_persistent_keys["ServerShuffleKey"]
),
Medium=ServerPersistentMediumKeys(
ServerMediumKey=server_persistent_keys["ServerMediumKey"],
)
),
Ephemeral=ServerEphemeralKeys(
Data=ServerEphemeralDataKeys(
OuterServerShuffleEphemeralKey=server_ephemeral_keys["OuterServerShuffleEphemeralKey"],
ServerEphemeralKey=server_ephemeral_keys["ServerEphemeralKey"],
ServerShuffleEphemeralKey=server_ephemeral_keys["ServerShuffleEphemeralKey"]
),
Medium=ServerEphemeralMediumKeys(
ServerMediumEphemeralKey=server_ephemeral_keys["ServerMediumEphemeralKey"],
)
)
)
mutual_keys = MutualKeys(
Persistent=MutualPersistentKeys(
Data=MutualPersistentDataKeys(
OuterFunctionKey=server_persistent_keys["OuterFunctionKey"],
OuterFunctionFunctionKey=server_persistent_keys["OuterFunctionFunctionKey"],
OuterServerShuffleFunctionKey=server_persistent_keys["OuterServerShuffleFunctionKey"],
MutualKey=server_persistent_keys["MutualKey"],
Inner1=server_persistent_keys["FunctionKey"],
ClientShuffleKeyX=server_persistent_keys["ClientShuffleKeyX"],
),
Medium=MutualPersistentMediumKeys(
MutualMediumKey=server_persistent_keys["MutualMediumKey"],
OuterFunctionMediumKey=server_persistent_keys["OuterFunctionMediumKey"],
OuterFunctionFunctionMediumKey=server_persistent_keys["OuterFunctionFunctionMediumKey"],
OuterServerShuffleFunctionMediumKey=server_persistent_keys["OuterServerShuffleFunctionMediumKey"],
FunctionMediumKey=server_persistent_keys["FunctionMediumKey"],
ClientShuffleMediumKeyX=server_persistent_keys["ClientShuffleMediumKeyX"],
OuterPositionShuffleMediumKey=server_persistent_keys["OuterPositionShuffleMediumKey"],
OuterPositionShuffleFunctionMediumKey=server_persistent_keys["OuterPositionShuffleFunctionMediumKey"],
OuterPositionFunctionMediumKey=server_persistent_keys["OuterPositionFunctionMediumKey"],
PositionFunctionMediumKey=server_persistent_keys["PositionFunctionMediumKey"],
PositionShuffleMediumKey=server_persistent_keys["PositionShuffleMediumKey"],
)
),
Ephemeral=MutualEphemeralKeys(
Data=MutualEphemeralDataKeys(
MutualKey=mutual_ephemeral_keys["MutualEphemeralKey"],
Inner1=mutual_ephemeral_keys["FunctionEphemeralKey"],
OuterFunctionKey=mutual_ephemeral_keys["OuterFunctionEphemeralKey"],
OuterFunctionFunctionKey=mutual_ephemeral_keys["OuterFunctionFunctionEphemeralKey"],
OuterServerShuffleFunctionKey=mutual_ephemeral_keys["OuterServerShuffleFunctionEphemeralKey"]
),
Medium=MutualEphemeralMediumKeys(
MutualMediumKey=mutual_ephemeral_keys["MutualMediumEphemeralKey"],
FunctionMediumKey=mutual_ephemeral_keys["FunctionMediumEphemeralKey"],
PositionFunctionMediumEphemeralKey=mutual_ephemeral_keys["PositionFunctionMediumEphemeralKey"],
OuterFunctionMediumEphemeralKey=mutual_ephemeral_keys["OuterFunctionMediumEphemeralKey"],
OuterFunctionFunctionMediumEphemeralKey=mutual_ephemeral_keys["OuterFunctionFunctionMediumEphemeralKey"],
OuterPositionFunctionMediumEphemeralKey=mutual_ephemeral_keys["OuterPositionFunctionMediumEphemeralKey"],
OuterServerShuffleFunctionMediumEphemeralKey=mutual_ephemeral_keys["OuterServerShuffleFunctionMediumEphemeralKey"],
OuterPositionShuffleFunctionMediumEphemeralKey=mutual_ephemeral_keys["OuterPositionShuffleFunctionMediumEphemeralKey"],
PositionShuffleMediumEphemeralKey=mutual_ephemeral_keys["PositionShuffleMediumEphemeralKey"],
OuterPositionShuffleMediumEphemeralKey=mutual_ephemeral_keys["OuterPositionShuffleMediumEphemeralKey"]
)
)
)
#server_keys.Persistent.Data.ServerKey = server_keys.Persistent.Data.ServerKey ^ mutual_keys.Persistent.Data.MutualKey
#server_keys.Persistent.Medium.ServerMediumKey = server_keys.Persistent.Medium.ServerMediumKey ^ mutual_keys.Persistent.Medium.MutualMediumKey
#mutual_keys.Persistent.Data.MutualKey = mutual_keys.Persistent.Data.MutualKey ^ client_keys.Persistent.Data.ClientKey
#mutual_keys.Persistent.Medium.MutualMediumKey = mutual_keys.Persistent.Medium.MutualMediumKey ^ client_keys.Persistent.Medium.ClientMediumKey
#alphabet = AlphabetKey.init_matrix(width, height, 255)
alphabet = AlphabetKey(**server_ephemeral_keys["Alphabet"])
(phase1_alphabet, phase1_medium) = darc_phase1(alphabet, server_keys, mutual_keys)
(phase2_alphabet, phase2_medium) = darc_phase2(phase1_alphabet, phase1_medium, client_keys, mutual_keys)
(phase3_alphabet, phase3_medium) = darc_phase3(phase2_alphabet, phase2_medium, client_keys, mutual_keys)
original_message = [ 0, 2, 4, 6, 0, 5, 9, 9, 1, 7 ]
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)

View File

@@ -145,29 +145,53 @@ class AlphabetKey(DarcKey):
)
class ServerPersistentKeys(BaseModel):
OuterServerShuffleKey: OuterShuffleKey
ServerKey: AlphabetKey
ServerShuffleKey: InnerShuffleKey
ServerMediumKey: AlphabetKey
class ClientEphemeralDataKeys(BaseModel):
OuterClientShuffleEphemeralKey: OuterShuffleKey
OuterClientShuffleFunctionEphemeralKey: OuterShuffleKey
ClientEphemeralKey: AlphabetKey
ClientShuffleEphemeralKeyA: InnerShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return ServerPersistentKeys(
OuterServerShuffleKey=OuterShuffleKey.init_matrix(height),
ServerKey=AlphabetKey.init_matrix(width, height, 255),
ServerShuffleKey=InnerShuffleKey.init_matrix(width, height),
ServerMediumKey=AlphabetKey.init_matrix(width, height, 255)
return ClientEphemeralDataKeys(
OuterClientShuffleEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionEphemeralKey=OuterShuffleKey.init_matrix(height),
ClientEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
ClientShuffleEphemeralKeyA=InnerShuffleKey.init_matrix(width, height),
)
class ClientPersistentKeys(BaseModel):
class ClientEphemeralMediumKeys(BaseModel):
OuterClientShuffleMediumEphemeralKey: OuterShuffleKey
OuterClientShuffleFunctionMediumEphemeralKey: OuterShuffleKey
ClientShuffleMediumEphemeralKeyA: InnerShuffleKey
ClientMediumEphemeralKey: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ClientEphemeralMediumKeys(
OuterClientShuffleMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionMediumEphemeralKey=OuterShuffleKey.init_matrix(height),
ClientShuffleMediumEphemeralKeyA=InnerShuffleKey.init_matrix(width, height),
ClientMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255)
)
class ClientPersistentDataKeys(BaseModel):
ClientKey: AlphabetKey
ClientShuffleKeyA: InnerShuffleKey
OuterClientShuffleKey: OuterShuffleKey
OuterClientShuffleFunctionKey: OuterShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return ClientPersistentDataKeys(
ClientKey=AlphabetKey.init_matrix(width, height, 255),
ClientShuffleKeyA=InnerShuffleKey.init_matrix(width, height),
OuterClientShuffleKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
)
class ClientPersistentMediumKeys(BaseModel):
OuterClientShuffleMediumKey: OuterShuffleKey
OuterClientShuffleFunctionMediumKey: OuterShuffleKey
ClientShuffleMediumKeyA: InnerShuffleKey
@@ -175,19 +199,102 @@ class ClientPersistentKeys(BaseModel):
@classmethod
def random_init(cls, height: int, width: int):
return ClientPersistentKeys(
ClientKey=AlphabetKey.init_matrix(width, height, 255),
ClientShuffleKeyA=InnerShuffleKey.init_matrix(width, height),
OuterClientShuffleKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
return ClientPersistentMediumKeys(
OuterClientShuffleMediumKey=OuterShuffleKey.init_matrix(height),
OuterClientShuffleFunctionMediumKey=OuterShuffleKey.init_matrix(height),
ClientShuffleMediumKeyA=InnerShuffleKey.init_matrix(width, height),
ClientMediumKey=AlphabetKey.init_matrix(width, height, 255)
)
class ServerEphemeralDataKeys(BaseModel):
OuterServerShuffleEphemeralKey: OuterShuffleKey
ServerEphemeralKey: AlphabetKey
ServerShuffleEphemeralKey: InnerShuffleKey
class MutualPersistentKeys(BaseModel):
@classmethod
def random_init(cls, height: int, width: int):
return ServerEphemeralDataKeys(
OuterServerShuffleEphemeralKey=OuterShuffleKey.init_matrix(height),
ServerEphemeralKey=AlphabetKey.init_matrix(width, height, 255),
ServerShuffleEphemeralKey=InnerShuffleKey.init_matrix(width, height),
)
class ServerEphemeralMediumKeys(BaseModel):
ServerMediumEphemeralKey: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ServerEphemeralMediumKeys(
ServerMediumEphemeralKey=AlphabetKey.init_matrix(width, height, 255)
)
class ServerPersistentDataKeys(BaseModel):
OuterServerShuffleKey: OuterShuffleKey
ServerKey: AlphabetKey
ServerShuffleKey: InnerShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return ServerPersistentDataKeys(
OuterServerShuffleKey=OuterShuffleKey.init_matrix(height),
ServerKey=AlphabetKey.init_matrix(width, height, 255),
ServerShuffleKey=InnerShuffleKey.init_matrix(width, height),
)
class ServerPersistentMediumKeys(BaseModel):
ServerMediumKey: AlphabetKey
@classmethod
def random_init(cls, height: int, width: int):
return ServerPersistentMediumKeys(
ServerMediumKey=AlphabetKey.init_matrix(width, height, 255)
)
class MutualEphemeralDataKeys(BaseModel):
MutualKey: AlphabetKey
Inner1: InnerShuffleKey
OuterFunctionKey: OuterShuffleKey
OuterFunctionFunctionKey: OuterShuffleKey
OuterServerShuffleFunctionKey: OuterShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return MutualEphemeralDataKeys(
MutualKey=AlphabetKey.init_matrix(width, height, 255),
Inner1=InnerShuffleKey.init_matrix(width, height),
OuterFunctionKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
)
class MutualEphemeralMediumKeys(BaseModel):
MutualMediumKey: AlphabetKey
FunctionMediumKey: InnerShuffleKey
PositionFunctionMediumEphemeralKey: InnerShuffleKey
OuterFunctionMediumEphemeralKey: OuterShuffleKey
OuterFunctionFunctionMediumEphemeralKey: OuterShuffleKey
OuterPositionFunctionMediumEphemeralKey: OuterShuffleKey
OuterServerShuffleFunctionMediumEphemeralKey: OuterShuffleKey
OuterPositionShuffleFunctionMediumEphemeralKey: OuterShuffleKey
PositionShuffleMediumEphemeralKey: InnerShuffleKey
OuterPositionShuffleMediumEphemeralKey: OuterShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return MutualEphemeralMediumKeys(
MutualMediumKey=AlphabetKey.init_matrix(width, height, 255),
FunctionMediumKey=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 MutualPersistentDataKeys(BaseModel):
OuterFunctionKey: OuterShuffleKey
OuterFunctionFunctionKey: OuterShuffleKey
OuterServerShuffleFunctionKey: OuterShuffleKey
@@ -195,6 +302,19 @@ class MutualPersistentKeys(BaseModel):
Inner1: InnerShuffleKey
ClientShuffleKeyX: InnerShuffleKey
@classmethod
def random_init(cls, height: int, width: int):
return MutualPersistentDataKeys(
OuterFunctionKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
MutualKey=AlphabetKey.init_matrix(width, height, 255),
Inner1=InnerShuffleKey.init_matrix(width, height),
ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height),
)
class MutualPersistentMediumKeys(BaseModel):
MutualMediumKey: AlphabetKey
OuterFunctionMediumKey: OuterShuffleKey
OuterFunctionFunctionMediumKey: OuterShuffleKey
@@ -209,13 +329,7 @@ class MutualPersistentKeys(BaseModel):
@classmethod
def random_init(cls, height: int, width: int):
return MutualPersistentKeys(
OuterFunctionKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
MutualKey=AlphabetKey.init_matrix(width, height, 255),
Inner1=InnerShuffleKey.init_matrix(width, height),
ClientShuffleKeyX=InnerShuffleKey.init_matrix(width, height),
return MutualPersistentMediumKeys(
MutualMediumKey=AlphabetKey.init_matrix(width, height, 255),
OuterFunctionMediumKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionMediumKey=OuterShuffleKey.init_matrix(height),
@@ -229,83 +343,109 @@ class MutualPersistentKeys(BaseModel):
PositionShuffleMediumKey=InnerShuffleKey.init_matrix(width, height),
)
class ServerPersistentKeys(BaseModel):
Data: ServerPersistentDataKeys
Medium: ServerPersistentMediumKeys
@classmethod
def random_init(cls, height: int, width: int):
return ServerPersistentKeys(
Data=ServerPersistentDataKeys.random_init(height, width),
Medium=ServerPersistentMediumKeys.random_init(height, width)
)
class ClientPersistentKeys(BaseModel):
Data: ClientPersistentDataKeys
Medium: ClientPersistentMediumKeys
@classmethod
def random_init(cls, height: int, width: int):
return ClientPersistentKeys(
Data=ClientPersistentDataKeys.random_init(height, width),
Medium=ClientPersistentMediumKeys.random_init(height, width)
)
class MutualPersistentKeys(BaseModel):
Data: MutualPersistentDataKeys
Medium: MutualPersistentMediumKeys
@classmethod
def random_init(cls, height: int, width: int):
return MutualPersistentKeys(
Data=MutualPersistentDataKeys.random_init(height, width),
Medium=MutualPersistentMediumKeys.random_init(height, width)
)
class ServerEphemeralKeys(BaseModel):
OuterServerShuffleEphemeralKey: OuterShuffleKey
ServerEphemeralKey: AlphabetKey
ServerShuffleEphemeralKey: InnerShuffleKey
ServerMediumEphemeralKey: AlphabetKey
Data: ServerEphemeralDataKeys
Medium: ServerEphemeralMediumKeys
@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),
Data=ServerEphemeralDataKeys.random_init(height, width),
Medium=ServerEphemeralMediumKeys.random_init(height, width)
)
class MutualEphemeralKeys(BaseModel):
MutualKey: AlphabetKey
Inner1: InnerShuffleKey
OuterFunctionKey: OuterShuffleKey
OuterFunctionFunctionKey: OuterShuffleKey
OuterServerShuffleFunctionKey: OuterShuffleKey
MutualMediumKey: AlphabetKey
FunctionMediumKey: InnerShuffleKey
PositionFunctionMediumEphemeralKey: InnerShuffleKey
OuterFunctionMediumEphemeralKey: OuterShuffleKey
OuterFunctionFunctionMediumEphemeralKey: OuterShuffleKey
OuterPositionFunctionMediumEphemeralKey: OuterShuffleKey
OuterServerShuffleFunctionMediumEphemeralKey: OuterShuffleKey
OuterPositionShuffleFunctionMediumEphemeralKey: OuterShuffleKey
PositionShuffleMediumEphemeralKey: InnerShuffleKey
OuterPositionShuffleMediumEphemeralKey: OuterShuffleKey
Data: MutualEphemeralDataKeys
Medium: MutualEphemeralMediumKeys
@classmethod
def random_init(cls, height: int, width: int):
return MutualEphemeralKeys(
MutualKey=AlphabetKey.init_matrix(width, height, 255),
Inner1=InnerShuffleKey.init_matrix(width, height),
OuterFunctionKey=OuterShuffleKey.init_matrix(height),
OuterFunctionFunctionKey=OuterShuffleKey.init_matrix(height),
OuterServerShuffleFunctionKey=OuterShuffleKey.init_matrix(height),
MutualMediumKey=AlphabetKey.init_matrix(width, height, 255),
FunctionMediumKey=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)
Data=MutualEphemeralDataKeys.random_init(height, width),
Medium=MutualEphemeralMediumKeys.random_init(height, width)
)
class ClientEphemeralKeys(BaseModel):
OuterClientShuffleEphemeralKey: OuterShuffleKey
OuterClientShuffleFunctionEphemeralKey: OuterShuffleKey
ClientEphemeralKey: AlphabetKey
ClientShuffleEphemeralKeyA: InnerShuffleKey
OuterClientShuffleMediumEphemeralKey: OuterShuffleKey
OuterClientShuffleFunctionMediumEphemeralKey: OuterShuffleKey
ClientShuffleMediumEphemeralKeyA: InnerShuffleKey
ClientMediumEphemeralKey: AlphabetKey
Data: ClientEphemeralDataKeys
Medium: ClientEphemeralMediumKeys
@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)
Data=ClientEphemeralDataKeys.random_init(height, width),
Medium=ClientEphemeralMediumKeys.random_init(height, width)
)
class ServerKeys(BaseModel):
Persistent: ServerPersistentKeys
Ephemeral: ServerEphemeralKeys
@classmethod
def random_init(cls, height: int, width: int):
return ServerKeys(
Persistent=ServerPersistentKeys.random_init(height, width),
Ephemeral=ServerEphemeralKeys.random_init(height, width)
)
class MutualKeys(BaseModel):
Persistent: MutualPersistentKeys
Ephemeral: MutualEphemeralKeys
@classmethod
def random_init(cls, height: int, width: int):
return MutualKeys(
Persistent=MutualPersistentKeys.random_init(height, width),
Ephemeral=MutualEphemeralKeys.random_init(height, width)
)
class ClientKeys(BaseModel):
Persistent: ClientPersistentKeys
Ephemeral: ClientEphemeralKeys
@classmethod
def random_init(cls, height: int, width: int):
return ClientKeys(
Persistent=ClientPersistentKeys.random_init(height, width),
Ephemeral=ClientEphemeralKeys.random_init(height, width)
)