From 11ae1ea7592d1e789082db5b7bb9466c60bb0294 Mon Sep 17 00:00:00 2001 From: Donovan Date: Tue, 9 Jul 2024 13:11:42 -0500 Subject: [PATCH] implement customer interface --- encipher_nkode.py | 14 ++++++++++++++ src/models.py | 35 +++++++++++++++++++++++------------ 2 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 encipher_nkode.py diff --git a/encipher_nkode.py b/encipher_nkode.py new file mode 100644 index 0000000..9503645 --- /dev/null +++ b/encipher_nkode.py @@ -0,0 +1,14 @@ +from src.models import ( + CustomerInterface, + UserEncipherKeys, + EncipheredNKode +) + + +def encipher_nkode( + user_nkode_attributes: list[int], + user_nkode_sets: list[int], + user_keys: UserEncipherKeys, + customer_interface: CustomerInterface +) -> EncipheredNKode: + pass diff --git a/src/models.py b/src/models.py index 6e3c976..180853d 100644 --- a/src/models.py +++ b/src/models.py @@ -1,10 +1,8 @@ import secrets - +from pydantic import BaseModel from src.utils import ( generate_random_list, generate_random_matrix, xor_lists, - random_number_in_range ) -from pydantic import BaseModel class UserEncipherKeys(BaseModel): @@ -14,11 +12,11 @@ class UserEncipherKeys(BaseModel): mask_key: list[int] @staticmethod - def new_user_encipher_keys(height: int, width: int, nkode_set_values: list[int]): - assert len(nkode_set_values) == width + def new_user_encipher_keys(height: int, width: int, set_values: list[int]): + assert len(set_values) == width set_key = generate_random_list(width) - set_key = xor_lists(set_key, nkode_set_values) + set_key = xor_lists(set_key, set_values) return UserEncipherKeys( alpha_key=generate_random_matrix(width, height), @@ -33,14 +31,19 @@ class CustomerAttribute(BaseModel): set_val: int -class Customer(BaseModel): - base_interface: dict[ - list[CustomerAttribute]] # { set0: [(val0, set0) ... (valN, set0)], ... setM: [(val0, setM) ... (valN, setM)]} +class CustomerInterface(BaseModel): + # base_interface: { set0: [attr0 ... attrN], ... setM: [(val0, setM) ... (valN, setM)]} + base_interface: dict[int, CustomerAttribute] + + def __init__(self, **data): + super().__init__(**data) + self._set_index_lookup: dict[int, int] = {} + self._attr_index_lookup: dict[CustomerAttribute: (int, int)] = {} @staticmethod def new_interface(height: int, width: int): - assert(height <= 256) - assert(width <= 256) + assert (height <= 256) + assert (width <= 256) base_interface = {} possible_set_vals = list(range(256)) @@ -54,6 +57,14 @@ class Customer(BaseModel): possible_attr_values.remove(cur_attr) possible_set_vals.remove(cur_set) - return Customer( + return CustomerInterface( base_interface=base_interface ) + + def get_set_values(self) -> list[int]: + return list(self.base_interface.keys()) + + +class EncipheredNKode(BaseModel): + code: str + mask: str