renamed keys
This commit is contained in:
@@ -5,201 +5,195 @@ from src.models import ServerEphemeralKeys, ServerPersistentKeys, ClientEphemera
|
||||
ClientPersistentDataKeys, ClientEphemeralDataKeys, ClientEphemeralMediumKeys, ClientPersistentMediumKeys
|
||||
import json
|
||||
|
||||
height = 10
|
||||
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)
|
||||
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: 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
|
||||
outer_server_shuffle_ephemeral_key_applied = server_persistent_keys.OuterServerShuffleKey << server_ephemeral_keys.OuterServerShuffleEphemeralKey
|
||||
outer_server_shuffle_function_ephemeral_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey
|
||||
input_data = alphabet < outer_server_shuffle_ephemeral_key_applied
|
||||
server_shuffle_ephemeral_key_applied = server_ephemeral_keys.ServerShuffleEphemeralKey << server_persistent_keys.ServerShuffleKey # TODO: should this be the other way around?
|
||||
server_shuffle_ephemeral_key_applied = server_shuffle_ephemeral_key_applied < outer_server_shuffle_function_ephemeral_key_applied
|
||||
input_data = input_data << server_shuffle_ephemeral_key_applied
|
||||
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
|
||||
mutual_outer_key_3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
# substitute_function_operands
|
||||
outer_function_function = outer_function_function_ephemeral_key_applied
|
||||
inner_function = function_ephemeral_key_applied
|
||||
outer_function = outer_function_ephemeral_key_applied
|
||||
operand = input_data
|
||||
operand1 = server_persistent_keys.ServerKey < outer_function
|
||||
operand2 = server_ephemeral_keys.ServerEphemeralKey < outer_function
|
||||
server_inner_key = server_ephemeral_keys.inner_key_1 << server_persistent_keys.inner_key_1 # TODO: should this be the other way around?
|
||||
server_inner_key = server_inner_key < mutual_outer_key_3
|
||||
server_outer_key_1 = server_persistent_keys.outer_key_1 << server_ephemeral_keys.outer_key_1
|
||||
|
||||
inner_function_shuffled = inner_function < outer_function_function
|
||||
operand = operand ^ (operand1 << inner_function_shuffled) ^ (operand2 << inner_function_shuffled)
|
||||
return operand
|
||||
input_data = alphabet < server_outer_key_1
|
||||
input_data = input_data << server_inner_key
|
||||
|
||||
operand1 = server_persistent_keys.alpha_key_1 < mutual_outer_key_1
|
||||
operand2 = server_ephemeral_keys.alpha_key_1 < mutual_outer_key_1
|
||||
|
||||
mutual_inner_key = mutual_inner_key < mutual_outer_key_2
|
||||
solution = (operand1 << mutual_inner_key) ^ (operand2 << mutual_inner_key)
|
||||
alpha_phase1 = input_data ^ solution
|
||||
|
||||
return alpha_phase1
|
||||
|
||||
|
||||
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
|
||||
outer_function_function_ephemeral_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey
|
||||
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
|
||||
|
||||
input_data = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)])
|
||||
medium = AlphabetKey(matrix=[[0 for _ in range(width)] for _ in range(height)])
|
||||
|
||||
# substitute_function_operands
|
||||
outer_function_function = outer_function_function_ephemeral_key_applied
|
||||
inner_function = function_ephemeral_key_applied
|
||||
outer_function = outer_function_ephemeral_key_applied
|
||||
operand = input_data
|
||||
operand1 = server_persistent_keys.ServerMediumKey < outer_function
|
||||
operand2 = server_ephemeral_keys.ServerMediumEphemeralKey < outer_function
|
||||
operand1 = server_persistent_keys.alpha_key_1 < mutual_outer_key_1
|
||||
operand2 = server_ephemeral_keys.alpha_key_1 < mutual_outer_key_1
|
||||
|
||||
inner_function_shuffled = inner_function < outer_function_function
|
||||
operand = operand ^ (operand1 << inner_function_shuffled) ^ (operand2 << inner_function_shuffled)
|
||||
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)
|
||||
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: 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
|
||||
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
|
||||
mutual_outer_key_3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
inner_function_key_applied = function_key_applied < outer_function_function_key_applied
|
||||
operand = alphabet
|
||||
operand1 = client_ephemeral_keys.ClientEphemeralKey < outer_function_key_applied
|
||||
operand2 = client_persistent_keys.ClientKey < outer_function_key_applied
|
||||
operand3 = mutual_persistent_keys.MutualKey < outer_function_key_applied
|
||||
operand1 = client_ephemeral_keys.alpha_key_1 < mutual_outer_key_1
|
||||
operand2 = client_persistent_keys.alpha_key_1 < mutual_outer_key_1
|
||||
operand3 = mutual_persistent_keys.alpha_key_1 < mutual_outer_key_1
|
||||
|
||||
result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied)
|
||||
mutual_inner_key = mutual_inner_key < mutual_outer_key_2
|
||||
|
||||
outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionKey << mutual_ephemeral_keys.OuterServerShuffleFunctionKey
|
||||
client_shuffle_key_a_applied = client_persistent_keys.ClientShuffleKeyA << client_ephemeral_keys.ClientShuffleEphemeralKeyA
|
||||
result = alphabet ^ (operand1 << mutual_inner_key) ^ (operand2 << mutual_inner_key) ^ (operand3 << mutual_inner_key)
|
||||
|
||||
result = result << (client_shuffle_key_a_applied < outer_server_shuffle_function_key_applied)
|
||||
client_inner_key = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
client_inner_key = client_inner_key < mutual_outer_key_3
|
||||
result = result << client_inner_key
|
||||
|
||||
client_outer_key_1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
client_outer_key_2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
result = result < (client_outer_key_1 << client_outer_key_2)
|
||||
|
||||
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
|
||||
outer_client_shuffle_key_applied = outer_client_shuffle_key_applied << outer_client_shuffle_function_key_applied
|
||||
result = result < outer_client_shuffle_key_applied
|
||||
return result
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
mutual_outer_key_3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
inner_function_key_applied = function_key_applied < outer_function_function_key_applied
|
||||
operand = medium
|
||||
operand1 = client_ephemeral_keys.ClientMediumEphemeralKey < outer_function_key_applied
|
||||
operand2 = client_persistent_keys.ClientMediumKey < outer_function_key_applied
|
||||
operand3 = mutual_persistent_keys.MutualMediumKey < outer_function_key_applied
|
||||
mutual_inner_key = mutual_inner_key < mutual_outer_key_2
|
||||
|
||||
result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied)
|
||||
operand1 = client_ephemeral_keys.alpha_key_1 < mutual_outer_key_1
|
||||
operand2 = client_persistent_keys.alpha_key_1 < mutual_outer_key_1
|
||||
operand3 = mutual_persistent_keys.alpha_key_1 < mutual_outer_key_1
|
||||
|
||||
client_shuffle_key_a_applied = client_persistent_keys.ClientShuffleMediumKeyA << client_ephemeral_keys.ClientShuffleMediumEphemeralKeyA
|
||||
outer_server_shuffle_function_key_applied = mutual_persistent_keys.OuterServerShuffleFunctionMediumKey << mutual_ephemeral_keys.OuterServerShuffleFunctionMediumEphemeralKey
|
||||
client_shuffle_key_a_applied = client_shuffle_key_a_applied < outer_server_shuffle_function_key_applied
|
||||
result = result << client_shuffle_key_a_applied
|
||||
result = medium ^ (operand1 << mutual_inner_key) ^ (operand2 << mutual_inner_key) ^ (operand3 << mutual_inner_key)
|
||||
|
||||
outer_client_shuffle_key_applied = client_persistent_keys.OuterClientShuffleMediumKey << client_ephemeral_keys.OuterClientShuffleMediumEphemeralKey
|
||||
outer_client_shuffle_function_key_applied = client_persistent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey
|
||||
outer_client_shuffle_key_applied = outer_client_shuffle_key_applied << outer_client_shuffle_function_key_applied
|
||||
result = result < outer_client_shuffle_key_applied
|
||||
client_inner_key = client_persistent_keys.inner_key_1 << client_ephemeral_keys.inner_key_1
|
||||
client_inner_key = client_inner_key < mutual_outer_key_3
|
||||
result = result << client_inner_key
|
||||
|
||||
client_outer_key_1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
client_outer_key2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
client_outer_key_1 = client_outer_key_1 << client_outer_key2
|
||||
result = result < client_outer_key_1
|
||||
|
||||
return result
|
||||
|
||||
|
||||
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)
|
||||
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: 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
|
||||
mutual_outer_key_2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
mutual_outer_key_3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
|
||||
input_outer_client_shuffle_key = outer_client_shuffle_key_applied << outer_client_shuffle_function_key_applied
|
||||
input_outer_server_shuffle_function_key = outer_server_shuffle_function_key_applied << input_outer_client_shuffle_key
|
||||
outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionKey << mutual_ephemeral_keys.OuterFunctionFunctionKey
|
||||
outer_function_function_key_applied = outer_function_function_key_applied << input_outer_client_shuffle_key
|
||||
client_outer_key_1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
client_outer_key_2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
|
||||
function_key_applied = mutual_persistent_keys.Inner1 << mutual_ephemeral_keys.Inner1
|
||||
function_key_applied = function_key_applied < outer_function_function_key_applied
|
||||
client_outer_key = client_outer_key_1 << client_outer_key_2
|
||||
|
||||
reordered_shuffle_key_x = mutual_persistent_keys.ClientShuffleKeyX < input_outer_server_shuffle_function_key
|
||||
mutual_outer_key_3 = mutual_outer_key_3 << client_outer_key
|
||||
mutual_outer_key_2 = mutual_outer_key_2 << client_outer_key
|
||||
|
||||
function_ephemeral_key_applied = function_key_applied << reordered_shuffle_key_x
|
||||
mutual_inner_key_1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mutual_inner_key_1 = mutual_inner_key_1 < mutual_outer_key_2
|
||||
|
||||
client_shuffle_key_b = (~client_persistent_keys.ClientShuffleKeyA) << mutual_persistent_keys.ClientShuffleKeyX
|
||||
client_shuffle_ephemeral_key_b = ~client_ephemeral_keys.ClientShuffleEphemeralKeyA
|
||||
input_client_shuffle_key_b = client_shuffle_ephemeral_key_b << client_shuffle_key_b
|
||||
input_client_shuffle_key_b = input_client_shuffle_key_b < input_outer_server_shuffle_function_key
|
||||
shuffled_items = alphabet << input_client_shuffle_key_b
|
||||
mutual_inner_key_2 = mutual_persistent_keys.inner_key_2 < mutual_outer_key_3
|
||||
|
||||
outer_function_key_applied = mutual_persistent_keys.OuterFunctionKey << mutual_ephemeral_keys.OuterFunctionKey
|
||||
input_outer_function_key = outer_function_key_applied << input_outer_client_shuffle_key
|
||||
mutual_inner_key = mutual_inner_key_1 << mutual_inner_key_2
|
||||
|
||||
inner_function_key_applied = function_ephemeral_key_applied
|
||||
operand = shuffled_items
|
||||
operand1 = client_ephemeral_keys.ClientEphemeralKey < input_outer_function_key
|
||||
operand2 = client_persistent_keys.ClientKey < input_outer_function_key
|
||||
operand3 = mutual_ephemeral_keys.MutualKey < input_outer_function_key
|
||||
inner_key_1 = ~client_persistent_keys.inner_key_1 << mutual_persistent_keys.inner_key_2
|
||||
inner_key_2 = ~client_ephemeral_keys.inner_key_1
|
||||
inner_key_3 = inner_key_2 << inner_key_1
|
||||
inner_key_3 = inner_key_3 < mutual_outer_key_3
|
||||
result = alphabet << inner_key_3
|
||||
|
||||
result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied)
|
||||
mutual_outer_key_1 = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
outer_key_1 = mutual_outer_key_1 << client_outer_key
|
||||
|
||||
operand1 = client_ephemeral_keys.alpha_key_1 < outer_key_1
|
||||
operand2 = client_persistent_keys.alpha_key_1 < outer_key_1
|
||||
operand3 = mutual_ephemeral_keys.alpha_key_1 < outer_key_1
|
||||
|
||||
result = result ^ (operand1 << mutual_inner_key) ^ (operand2 << mutual_inner_key) ^ (operand3 << mutual_inner_key)
|
||||
return result
|
||||
|
||||
|
||||
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
|
||||
client_inner_key_1 = ~client_ephemeral_keys.inner_key_1
|
||||
mutual_outer_key_3 = mutual_persistent_keys.outer_key_3 << mutual_ephemeral_keys.outer_key_3
|
||||
client_outer_key_1 = client_persistent_keys.outer_key_1 << client_ephemeral_keys.outer_key_1
|
||||
|
||||
outer_client_suffle_function_key_applied = client_persistent_keys.OuterClientShuffleFunctionMediumKey << client_ephemeral_keys.OuterClientShuffleFunctionMediumEphemeralKey
|
||||
input_outer_client_shuffle_key = outer_client_shuffle_key_applied << outer_client_suffle_function_key_applied
|
||||
input_outer_server_shuffle_function_key = outer_server_shuffle_function_key_applied << input_outer_client_shuffle_key
|
||||
client_outer_key_2 = client_persistent_keys.outer_key_2 << client_ephemeral_keys.outer_key_2
|
||||
outer_key_1 = client_outer_key_1 << client_outer_key_2
|
||||
outer_key_2 = mutual_outer_key_3 << outer_key_1
|
||||
|
||||
outer_function_function_key_applied = mutual_persistent_keys.OuterFunctionFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionFunctionMediumEphemeralKey
|
||||
outer_function_function_key_applied = outer_function_function_key_applied << input_outer_client_shuffle_key
|
||||
mutual_outer_key_2 = mutual_persistent_keys.outer_key_2 << mutual_ephemeral_keys.outer_key_2
|
||||
outer_key_3 = mutual_outer_key_2 << outer_key_1
|
||||
|
||||
function_key_applied = mutual_persistent_keys.FunctionMediumKey << mutual_ephemeral_keys.FunctionMediumKey
|
||||
function_key_applied = function_key_applied < outer_function_function_key_applied
|
||||
mutual_inner_key_1 = mutual_persistent_keys.inner_key_1 << mutual_ephemeral_keys.inner_key_1
|
||||
mutual_inner_key_1 = mutual_inner_key_1 < outer_key_3
|
||||
|
||||
reordered_shuffle_key_x = mutual_persistent_keys.ClientShuffleMediumKeyX < input_outer_server_shuffle_function_key
|
||||
mutual_inner_key_2 = mutual_persistent_keys.inner_key_2 < outer_key_2
|
||||
|
||||
function_ephemeral_key_applied = function_key_applied << reordered_shuffle_key_x
|
||||
inner_key_1 = mutual_inner_key_1 << mutual_inner_key_2
|
||||
|
||||
client_shuffle_key_b = (~client_persistent_keys.ClientShuffleMediumKeyA) << mutual_persistent_keys.ClientShuffleMediumKeyX
|
||||
input_client_shuffle_key_b = client_shuffle_ephemeral_key_b << client_shuffle_key_b
|
||||
input_client_shuffle_key_b = input_client_shuffle_key_b < input_outer_server_shuffle_function_key
|
||||
client_shuffle_key_b = (~client_persistent_keys.inner_key_1) << mutual_persistent_keys.inner_key_2
|
||||
input_client_shuffle_key_b = client_inner_key_1 << client_shuffle_key_b
|
||||
input_client_shuffle_key_b = input_client_shuffle_key_b < outer_key_2
|
||||
shuffled_items = medium << input_client_shuffle_key_b
|
||||
outer_function_key_applied = mutual_persistent_keys.OuterFunctionMediumKey << mutual_ephemeral_keys.OuterFunctionMediumEphemeralKey
|
||||
input_outer_function_key = outer_function_key_applied << input_outer_client_shuffle_key
|
||||
outer_function_key_applied = mutual_persistent_keys.outer_key_1 << mutual_ephemeral_keys.outer_key_1
|
||||
input_outer_function_key = outer_function_key_applied << outer_key_1
|
||||
|
||||
inner_function_key_applied = function_ephemeral_key_applied
|
||||
inner_function_key_applied = inner_key_1
|
||||
operand = shuffled_items
|
||||
operand1 = client_ephemeral_keys.ClientMediumEphemeralKey < input_outer_function_key
|
||||
operand2 = client_persistent_keys.ClientMediumKey < input_outer_function_key
|
||||
operand3 = mutual_ephemeral_keys.MutualMediumKey < input_outer_function_key
|
||||
operand1 = client_ephemeral_keys.alpha_key_1 < input_outer_function_key
|
||||
operand2 = client_persistent_keys.alpha_key_1 < input_outer_function_key
|
||||
operand3 = mutual_ephemeral_keys.alpha_key_1 < input_outer_function_key
|
||||
|
||||
result = operand ^ (operand1 << inner_function_key_applied) ^ (operand2 << inner_function_key_applied) ^ (operand3 << inner_function_key_applied)
|
||||
return result
|
||||
|
||||
|
||||
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)
|
||||
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]
|
||||
@@ -210,109 +204,106 @@ def merge_message(alphabet: DarcKey, medium: DarcKey, client_keys: ClientKeys, m
|
||||
else:
|
||||
padded_input_sequence = OuterShuffleKey(matrix=[input_sequence])
|
||||
|
||||
input_sequence_applied = outer_client_shuffle_alphabet_key_applied << padded_input_sequence
|
||||
client_outer_key_1 = client_outer_key_1 << padded_input_sequence
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
outer_client_shuffle_medium_key_applied = outer_client_shuffle_medium_key_applied << outer_client_shuffle_function_medium_key_applied
|
||||
client_med_outer_key_1 = client_med_outer_key_1 << client_med_outer_key_2
|
||||
|
||||
input_sequence_applied = input_sequence_applied << outer_client_shuffle_medium_key_applied
|
||||
message = alphabet < input_sequence_applied
|
||||
client_outer_key_1 = client_outer_key_1 << client_med_outer_key_1
|
||||
message = alphabet < client_outer_key_1
|
||||
|
||||
message_pad_key = ~outer_client_shuffle_medium_key_applied
|
||||
message_pad_key = ~client_med_outer_key_1
|
||||
|
||||
if msg_len < height:
|
||||
message.matrix[message_pad_key.matrix[0][msg_len]] = eof_arr
|
||||
|
||||
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
|
||||
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_position_function_key_applied = outer_position_shuffle_key_applied << outer_position_function_key_applied
|
||||
outer_key_1 = mutual_outer_key_4 << mutual_outer_key_6
|
||||
|
||||
outer_client_shuffle_medium_key_applied = ~outer_client_shuffle_medium_key_applied
|
||||
outer_position_function_key_applied = ~(outer_client_shuffle_medium_key_applied << outer_position_function_key_applied)
|
||||
client_med_outer_key_1 = ~client_med_outer_key_1
|
||||
outer_key_1 = ~(client_med_outer_key_1 << outer_key_1)
|
||||
|
||||
inner_function_key_applied = position_function_key_applied < outer_position_function_key_applied
|
||||
mutual_inner_key_3 = mutual_inner_key_3 < outer_key_1
|
||||
|
||||
operand = medium
|
||||
operand1 = message
|
||||
message = medium ^ (message << mutual_inner_key_3)
|
||||
|
||||
message = operand ^ (operand1 << inner_function_key_applied)
|
||||
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_2
|
||||
|
||||
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
|
||||
mutual_outer_key_4 = client_med_outer_key_1 << mutual_outer_key_4
|
||||
outer_key_2 = mutual_outer_key_5 << outer_key_1
|
||||
|
||||
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
|
||||
|
||||
message = message << (position_shuffle_key_applied < outer_position_shuffle_function_key_applied)
|
||||
message = message < outer_position_shuffle_key_applied
|
||||
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):
|
||||
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 = mutual_keys.persistent.medium.outer_key_6 << mutual_keys.ephemeral.medium.outer_key_6
|
||||
outer_position_shuffle_ephemeral_key_applied = mutual_keys.persistent.medium.outer_key_4 << mutual_keys.ephemeral.medium.outer_key_4
|
||||
|
||||
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_keys.Persistent.Medium.OuterPositionShuffleFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterPositionShuffleFunctionMediumEphemeralKey
|
||||
outer_position_shuffle_function_ephemeral_key_applied = mutual_keys.persistent.medium.outer_key_5 << mutual_keys.ephemeral.medium.outer_key_5
|
||||
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_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_function_function_medium_ephemeral_key_applied = mutual_keys.persistent.medium.outer_key_2 << mutual_keys.ephemeral.medium.outer_key_2
|
||||
outer_server_shuffle_function_ephemeral_key_applied = mutual_keys.persistent.data.outer_key_3 << mutual_keys.ephemeral.data.outer_key_3
|
||||
|
||||
outer_server_shuffle_function_medium_ephemeral_key_applied = mutual_keys.Persistent.Medium.OuterServerShuffleFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterServerShuffleFunctionMediumEphemeralKey
|
||||
outer_server_shuffle_function_medium_ephemeral_key_applied = mutual_keys.persistent.medium.outer_key_3 << mutual_keys.ephemeral.medium.outer_key_3
|
||||
|
||||
function_medium_ephemeral_key_applied = mutual_keys.Persistent.Medium.FunctionMediumKey << mutual_keys.Ephemeral.Medium.FunctionMediumKey
|
||||
function_medium_ephemeral_key_applied = mutual_keys.persistent.medium.inner_key_1 << mutual_keys.ephemeral.medium.inner_key_1
|
||||
|
||||
client_shuffle_medium_key_x = mutual_keys.Persistent.Medium.ClientShuffleMediumKeyX < outer_server_shuffle_function_medium_ephemeral_key_applied
|
||||
client_shuffle_medium_key_x = mutual_keys.persistent.medium.inner_key_2 < 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_keys.Persistent.Medium.PositionShuffleMediumKey << mutual_keys.Ephemeral.Medium.PositionShuffleMediumEphemeralKey
|
||||
position_shuffle_ephemeral_key_applied = mutual_keys.persistent.medium.inner_key_4 << mutual_keys.ephemeral.medium.inner_key_2
|
||||
|
||||
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_keys.Persistent.Medium.OuterFunctionMediumKey << mutual_keys.Ephemeral.Medium.OuterFunctionMediumEphemeralKey
|
||||
outer_function_medium_ephemeral_key_applied = mutual_keys.persistent.medium.outer_key_1 << mutual_keys.ephemeral.medium.outer_key_1
|
||||
|
||||
rx_data = darc_message < outer_position_shuffle_ephemeral_key_applied
|
||||
|
||||
inner_key = client_shuffle_medium_key_x
|
||||
operand = rx_data
|
||||
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
|
||||
operand1 = server_keys.persistent.medium.alpha_key_1 < outer_function_medium_ephemeral_key_applied
|
||||
operand2 = server_keys.ephemeral.medium.alpha_key_1 < outer_function_medium_ephemeral_key_applied
|
||||
operand3 = mutual_keys.persistent.medium.alpha_key_1 < outer_function_medium_ephemeral_key_applied
|
||||
operand4 = mutual_keys.ephemeral.medium.alpha_key_1 < 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_keys.Persistent.Medium.PositionFunctionMediumKey << mutual_keys.Ephemeral.Medium.PositionFunctionMediumEphemeralKey
|
||||
position_function_ephemeral_key_applied = mutual_keys.persistent.medium.inner_key_3 << mutual_keys.ephemeral.medium.inner_key_3
|
||||
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_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
|
||||
client_shuffle_key_x = mutual_keys.persistent.data.inner_key_2 < outer_server_shuffle_function_ephemeral_key_applied
|
||||
outer_function_function_ephemeral_key_applied = mutual_keys.persistent.data.outer_key_2 << mutual_keys.ephemeral.data.outer_key_2
|
||||
|
||||
function_ephemeral_key_applied = mutual_keys.Persistent.Data.Inner1 << mutual_keys.Ephemeral.Data.Inner1
|
||||
function_ephemeral_key_applied = mutual_keys.persistent.data.inner_key_1 << mutual_keys.ephemeral.data.inner_key_1
|
||||
function_ephemeral_key_applied = (function_ephemeral_key_applied < outer_function_function_ephemeral_key_applied) << client_shuffle_key_x
|
||||
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_keys.persistent.data.inner_key_1 << mutual_keys.persistent.data.inner_key_2) << ~(server_keys.ephemeral.data.inner_key_1)
|
||||
server_shuffle_ephemeral_key_applied = ~(server_shuffle_ephemeral_key_applied < outer_server_shuffle_function_ephemeral_key_applied)
|
||||
|
||||
outer_server_shuffle_ephemeral_key_applied = server_keys.Persistent.Data.OuterServerShuffleKey << server_keys.Ephemeral.Data.OuterServerShuffleEphemeralKey
|
||||
outer_server_shuffle_ephemeral_key_applied = server_keys.persistent.data.outer_key_1 << server_keys.ephemeral.data.outer_key_1
|
||||
alpha_prep = (alphabet < outer_server_shuffle_ephemeral_key_applied) << server_shuffle_ephemeral_key_applied
|
||||
|
||||
outer_function_ephemeral_key_applied = mutual_keys.Persistent.Data.OuterFunctionKey << mutual_keys.Ephemeral.Data.OuterFunctionKey
|
||||
outer_function_ephemeral_key_applied = mutual_keys.persistent.data.outer_key_1 << mutual_keys.ephemeral.data.outer_key_1
|
||||
|
||||
inner_key = function_ephemeral_key_applied
|
||||
operand = alpha_prep
|
||||
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
|
||||
operand1 = server_keys.persistent.data.alpha_key_1 < outer_function_ephemeral_key_applied
|
||||
operand2 = server_keys.ephemeral.data.alpha_key_1 < outer_function_ephemeral_key_applied
|
||||
operand3 = mutual_keys.persistent.data.alpha_key_1 < outer_function_ephemeral_key_applied
|
||||
operand4 = mutual_keys.ephemeral.data.alpha_key_1 < 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)
|
||||
@@ -354,103 +345,103 @@ if __name__ == "__main__":
|
||||
#mutual_ephemeral_keys = {k: {"matrix": v} for k, v in mutual_ephemeral_keys.items()}
|
||||
|
||||
#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"]
|
||||
# persistent=ClientPersistentKeys(
|
||||
# data=ClientPersistentDataKeys(
|
||||
# outer_key_1=client_persistent_keys["outer_key_1"],
|
||||
# outer_key_2=client_persistent_keys["outer_key_2"],
|
||||
# alpha_key_1=client_persistent_keys["alpha_key_1"],
|
||||
# inner_key_2=client_persistent_keys["inner_key_2"]
|
||||
|
||||
# ),
|
||||
# Medium=ClientPersistentMediumKeys(
|
||||
# OuterClientShuffleMediumKey=client_persistent_keys["OuterClientShuffleMediumKey"],
|
||||
# OuterClientShuffleFunctionMediumKey=client_persistent_keys["OuterClientShuffleFunctionMediumKey"],
|
||||
# ClientShuffleMediumKeyA=client_persistent_keys["ClientShuffleMediumKeyA"],
|
||||
# ClientMediumKey=client_persistent_keys["ClientMediumKey"]
|
||||
# medium=ClientPersistentMediumKeys(
|
||||
# outer_key_1=client_persistent_keys["outer_key_1"],
|
||||
# outer_key_2=client_persistent_keys["outer_key_2"],
|
||||
# inner_key_2=client_persistent_keys["inner_key_2"],
|
||||
# alpha_key_1=client_persistent_keys["alpha_key_1"]
|
||||
# )
|
||||
# ),
|
||||
# Ephemeral=ClientEphemeralKeys(
|
||||
# Data=ClientEphemeralDataKeys(
|
||||
# OuterClientShuffleEphemeralKey=client_ephemeral_keys["OuterClientShuffleEphemeralKey"],
|
||||
# OuterClientShuffleFunctionEphemeralKey=client_ephemeral_keys["OuterClientShuffleFunctionEphemeralKey"],
|
||||
# ClientEphemeralKey=client_ephemeral_keys["ClientEphemeralKey"],
|
||||
# ClientShuffleEphemeralKeyA=client_ephemeral_keys["ClientShuffleEphemeralKeyA"]
|
||||
# ephemeral=ClientEphemeralKeys(
|
||||
# data=ClientEphemeralDataKeys(
|
||||
# outer_key_1=client_ephemeral_keys["outer_key_1"],
|
||||
# outer_key_2=client_ephemeral_keys["outer_key_2"],
|
||||
# alpha_key_1=client_ephemeral_keys["alpha_key_1"],
|
||||
# inner_key_2=client_ephemeral_keys["inner_key_2"]
|
||||
# ),
|
||||
# Medium=ClientEphemeralMediumKeys(
|
||||
# OuterClientShuffleMediumEphemeralKey=client_ephemeral_keys["OuterClientShuffleMediumEphemeralKey"],
|
||||
# OuterClientShuffleFunctionMediumEphemeralKey=client_ephemeral_keys["OuterClientShuffleFunctionMediumEphemeralKey"],
|
||||
# ClientShuffleMediumEphemeralKeyA=client_ephemeral_keys["ClientShuffleMediumEphemeralKeyA"],
|
||||
# ClientMediumEphemeralKey=client_ephemeral_keys["ClientMediumEphemeralKey"]
|
||||
# medium=ClientEphemeralMediumKeys(
|
||||
# outer_key_1=client_ephemeral_keys["outer_key_1"],
|
||||
# outer_key_2=client_ephemeral_keys["outer_key_2"],
|
||||
# inner_key_2=client_ephemeral_keys["inner_key_2"],
|
||||
# alpha_key_1=client_ephemeral_keys["alpha_key_1"]
|
||||
# )
|
||||
# )
|
||||
#)
|
||||
|
||||
#server_keys = ServerKeys(
|
||||
# Persistent=ServerPersistentKeys(
|
||||
# Data=ServerPersistentDataKeys(
|
||||
# OuterServerShuffleKey=server_persistent_keys["OuterServerShuffleKey"],
|
||||
# ServerKey=server_persistent_keys["ServerKey"],
|
||||
# ServerShuffleKey=server_persistent_keys["ServerShuffleKey"]
|
||||
# persistent=ServerPersistentKeys(
|
||||
# data=ServerPersistentDataKeys(
|
||||
# outer_key_1=server_persistent_keys["outer_key_1"],
|
||||
# alpha_key_1=server_persistent_keys["alpha_key_1"],
|
||||
# inner_key_2=server_persistent_keys["inner_key_2"]
|
||||
# ),
|
||||
# Medium=ServerPersistentMediumKeys(
|
||||
# ServerMediumKey=server_persistent_keys["ServerMediumKey"],
|
||||
# medium=ServerPersistentMediumKeys(
|
||||
# alpha_key_1=server_persistent_keys["alpha_key_1"],
|
||||
# )
|
||||
# ),
|
||||
# Ephemeral=ServerEphemeralKeys(
|
||||
# Data=ServerEphemeralDataKeys(
|
||||
# OuterServerShuffleEphemeralKey=server_ephemeral_keys["OuterServerShuffleEphemeralKey"],
|
||||
# ServerEphemeralKey=server_ephemeral_keys["ServerEphemeralKey"],
|
||||
# ServerShuffleEphemeralKey=server_ephemeral_keys["ServerShuffleEphemeralKey"]
|
||||
# ephemeral=ServerEphemeralKeys(
|
||||
# data=ServerEphemeralDataKeys(
|
||||
# outer_key_1=server_ephemeral_keys["outer_key_1"],
|
||||
# alpha_key_1=server_ephemeral_keys["alpha_key_1"],
|
||||
# inner_key_2=server_ephemeral_keys["inner_key_2"]
|
||||
# ),
|
||||
# Medium=ServerEphemeralMediumKeys(
|
||||
# ServerMediumEphemeralKey=server_ephemeral_keys["ServerMediumEphemeralKey"],
|
||||
# medium=ServerEphemeralMediumKeys(
|
||||
# alpha_key_1=server_ephemeral_keys["alpha_key_1"],
|
||||
# )
|
||||
# )
|
||||
#)
|
||||
|
||||
#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"],
|
||||
# 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_1=server_persistent_keys["alpha_key_1"],
|
||||
# inner_key_2=server_persistent_keys["FunctionKey"],
|
||||
# inner_key_1=server_persistent_keys["inner_key_1"],
|
||||
# ),
|
||||
# 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"],
|
||||
# medium=MutualPersistentMediumKeys(
|
||||
# alpha_key_1=server_persistent_keys["alpha_key_1"],
|
||||
# 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_2=server_persistent_keys["inner_key_2"],
|
||||
# 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(
|
||||
# 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"]
|
||||
# ephemeral=MutualEphemeralKeys(
|
||||
# data=MutualEphemeralDataKeys(
|
||||
# alpha_key_1=mutual_ephemeral_keys["MutualEphemeralKey"],
|
||||
# inner_key_2=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=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"]
|
||||
# medium=MutualEphemeralMediumKeys(
|
||||
# alpha_key_1=mutual_ephemeral_keys["MutualMediumEphemeralKey"],
|
||||
# inner_key_2=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_2=mutual_ephemeral_keys["inner_key_2"],
|
||||
# outer_key_4=mutual_ephemeral_keys["outer_key_4"]
|
||||
|
||||
# )
|
||||
# )
|
||||
@@ -463,17 +454,17 @@ if __name__ == "__main__":
|
||||
client_keys = ClientKeys.random_init(height, width)
|
||||
alphabet = AlphabetKey.init_matrix(width, height, 255)
|
||||
|
||||
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
|
||||
server_keys.persistent.data.alpha_key_1 = server_keys.persistent.data.alpha_key_1 ^ mutual_keys.persistent.data.alpha_key_1
|
||||
server_keys.persistent.medium.alpha_key_1 = server_keys.persistent.medium.alpha_key_1 ^ mutual_keys.persistent.medium.alpha_key_1
|
||||
|
||||
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
|
||||
mutual_keys.persistent.data.alpha_key_1 = mutual_keys.persistent.data.alpha_key_1 ^ client_keys.persistent.data.alpha_key_1
|
||||
mutual_keys.persistent.medium.alpha_key_1 = mutual_keys.persistent.medium.alpha_key_1 ^ client_keys.persistent.medium.alpha_key_1
|
||||
|
||||
(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 ]
|
||||
original_message = OuterShuffleKey.init_matrix(height).matrix[0]
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user