refactor use numpy in user_cipher.py

This commit is contained in:
2025-03-11 10:33:08 -05:00
parent dd0b496a21
commit 526e537586
7 changed files with 230 additions and 177 deletions

View File

@@ -12,12 +12,12 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.154404Z",
"start_time": "2025-03-07T19:01:08.149432Z"
"end_time": "2025-03-10T15:54:01.727846Z",
"start_time": "2025-03-10T15:54:01.637744Z"
}
},
"outputs": [],
"execution_count": 58
"execution_count": 2
},
{
"cell_type": "code",
@@ -38,12 +38,12 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.165511Z",
"start_time": "2025-03-07T19:01:08.162339Z"
"end_time": "2025-03-10T15:54:01.735895Z",
"start_time": "2025-03-10T15:54:01.733121Z"
}
},
"outputs": [],
"execution_count": 59
"execution_count": 3
},
{
"cell_type": "code",
@@ -53,12 +53,12 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.174320Z",
"start_time": "2025-03-07T19:01:08.172724Z"
"end_time": "2025-03-10T15:54:01.746332Z",
"start_time": "2025-03-10T15:54:01.744308Z"
}
},
"outputs": [],
"execution_count": 60
"execution_count": 4
},
{
"cell_type": "markdown",
@@ -90,7 +90,7 @@
")\n",
"keypad_size = KeypadSize(\n",
" numb_of_keys = 5,\n",
" attrs_per_key = 6 # aka number of sets\n",
" props_per_key = 6 # aka number of sets\n",
")\n",
"customer_id = api.create_new_customer(keypad_size, policy)\n",
"customer = api.customers[customer_id]"
@@ -98,12 +98,12 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.378578Z",
"start_time": "2025-03-07T19:01:08.188114Z"
"end_time": "2025-03-10T15:54:02.001142Z",
"start_time": "2025-03-10T15:54:01.752948Z"
}
},
"outputs": [],
"execution_count": 61
"execution_count": 5
},
{
"cell_type": "markdown",
@@ -129,19 +129,19 @@
{
"cell_type": "code",
"source": [
"set_vals = customer.attributes.set_vals\n",
"attr_vals = customer.attributes.attr_vals\n",
"set_vals = customer.cipher.set_key\n",
"attr_vals = customer.cipher.prop_key\n",
"print(f\"Customer Sets: {set_vals}\")\n",
"print(f\"Customer Attributes:\")\n",
"interface_keypad = list_to_matrix(attr_vals, keypad_size.attrs_per_key)\n",
"interface_keypad = list_to_matrix(attr_vals, keypad_size.props_per_key)\n",
"for idx, key_vals in enumerate(interface_keypad):\n",
" print(f\"{key_vals}\")"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.387613Z",
"start_time": "2025-03-07T19:01:08.385501Z"
"end_time": "2025-03-10T15:54:02.011259Z",
"start_time": "2025-03-10T15:54:02.008541Z"
}
},
"outputs": [
@@ -149,17 +149,17 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Customer Sets: [14533, 13441, 52408, 39610, 49828, 11300]\n",
"Customer Sets: [5584, 23615, 13665, 42236, 20931, 35557]\n",
"Customer Attributes:\n",
"[50415, 3350, 62907, 34493, 46982, 55292]\n",
"[23503, 57678, 17001, 8963, 4893, 53685]\n",
"[25912, 9324, 2770, 57761, 57056, 5837]\n",
"[49831, 16518, 53473, 35853, 12433, 20763]\n",
"[60930, 19614, 2083, 2879, 58781, 13705]\n"
"[51116, 4647, 54248, 42959, 35151, 56238]\n",
"[37806, 51776, 33630, 63761, 13028, 29812]\n",
"[41783, 30499, 23526, 21846, 1217, 40587]\n",
"[20418, 53142, 62008, 29738, 64343, 49564]\n",
"[4306, 19073, 56680, 38208, 21317, 14264]\n"
]
}
],
"execution_count": 62
"execution_count": 6
},
{
"cell_type": "markdown",
@@ -173,7 +173,7 @@
{
"cell_type": "code",
"source": [
"attr_keypad_view = list_to_matrix(attr_vals, keypad_size.attrs_per_key)\n",
"attr_keypad_view = list_to_matrix(attr_vals, keypad_size.props_per_key)\n",
"attr_set_view = matrix_transpose(attr_keypad_view)\n",
"set_attribute_dict = dict(zip(set_vals, attr_set_view))\n",
"print(f\"Set to Attribute Map:\")\n",
@@ -183,8 +183,8 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.412394Z",
"start_time": "2025-03-07T19:01:08.410114Z"
"end_time": "2025-03-10T15:54:16.867336Z",
"start_time": "2025-03-10T15:54:16.864589Z"
}
},
"outputs": [
@@ -193,16 +193,16 @@
"output_type": "stream",
"text": [
"Set to Attribute Map:\n",
"14533: [50415, 23503, 25912, 49831, 60930]\n",
"13441: [3350, 57678, 9324, 16518, 19614]\n",
"52408: [62907, 17001, 2770, 53473, 2083]\n",
"39610: [34493, 8963, 57761, 35853, 2879]\n",
"49828: [46982, 4893, 57056, 12433, 58781]\n",
"11300: [55292, 53685, 5837, 20763, 13705]\n"
"5584: [51116, 37806, 41783, 20418, 4306]\n",
"23615: [4647, 51776, 30499, 53142, 19073]\n",
"13665: [54248, 33630, 23526, 62008, 56680]\n",
"42236: [42959, 63761, 21846, 29738, 38208]\n",
"20931: [35151, 13028, 1217, 64343, 21317]\n",
"35557: [56238, 29812, 40587, 49564, 14264]\n"
]
}
],
"execution_count": 63
"execution_count": 8
},
{
"cell_type": "markdown",
@@ -232,27 +232,24 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.439639Z",
"start_time": "2025-03-07T19:01:08.436629Z"
"end_time": "2025-03-10T15:54:20.741427Z",
"start_time": "2025-03-10T15:54:20.731719Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[[3, 20, 10, 6, 29],\n",
" [27, 26, 4, 24, 11],\n",
" [15, 2, 22, 0, 5],\n",
" [9, 8, 16, 12, 23],\n",
" [21, 14, 28, 18, 17]]"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
"ename": "AttributeError",
"evalue": "'NKodeAPI' object has no attribute 'generate_signup_interface'",
"output_type": "error",
"traceback": [
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[0;31mAttributeError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[0;32mIn[9], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m session_id, signup_interface \u001B[38;5;241m=\u001B[39m \u001B[43mapi\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mgenerate_signup_interface\u001B[49m(customer_id)\n\u001B[1;32m 2\u001B[0m list_to_matrix(signup_interface, keypad_size\u001B[38;5;241m.\u001B[39mnumb_of_keys)\n",
"\u001B[0;31mAttributeError\u001B[0m: 'NKodeAPI' object has no attribute 'generate_signup_interface'"
]
}
],
"execution_count": 64
"execution_count": 9
},
{
"cell_type": "markdown",
@@ -280,7 +277,7 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.474579Z",
"end_time": "2025-03-10T15:54:02.091787Z",
"start_time": "2025-03-07T19:01:08.471813Z"
}
},
@@ -320,7 +317,7 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:08.496620Z",
"end_time": "2025-03-10T15:54:02.111894Z",
"start_time": "2025-03-07T19:01:08.494090Z"
}
},
@@ -352,7 +349,7 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.173784Z",
"end_time": "2025-03-10T15:54:02.115281Z",
"start_time": "2025-03-07T19:01:08.522178Z"
}
},
@@ -384,30 +381,31 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.193871Z",
"start_time": "2025-03-07T19:01:09.190856Z"
"end_time": "2025-03-10T15:54:02.129677Z",
"start_time": "2025-03-10T15:41:40.490919Z"
}
},
"cell_type": "code",
"source": [
"from src.user_cipher_keys import UserCipherKeys\n",
"from src.user_cipher import UserCipher\n",
"from src.utils import xor_lists\n",
"import numpy as np\n",
"\n",
"\n",
"set_key = [46785, 4782, 4405, 44408, 35377, 55527]\n",
"set_key = xor_lists(set_key, customer.attributes.set_vals)\n",
"user_keys = UserCipherKeys(\n",
" alpha_key = [\n",
"user_keys = UserCipher(\n",
" prop_key = np.array([\n",
" 57200, 8398, 54694, 25997, 30388,\n",
" 46948, 45549, 30364, 49712, 10447,\n",
" 9205, 1777, 10731, 30979, 2795,\n",
" 17068, 56758, 62574, 28641, 11451,\n",
" 26820, 50373, 48783, 25350, 62177,\n",
" 60608, 54242, 4637, 3525, 16313\n",
" ],\n",
" pass_key=[16090, 38488, 45111, 32674, 46216, 52013, 48980, 36811, 35296, 17206],\n",
" mask_key=[29575, 43518, 44373, 62063, 37651, 31671, 31663, 65514, 36454, 47325],\n",
" set_key=set_key,\n",
" ]),\n",
" pass_key=np.array([16090, 38488, 45111, 32674, 46216, 52013, 48980, 36811, 35296, 17206]),\n",
" mask_key=np.array([29575, 43518, 44373, 62063, 37651, 31671, 31663, 65514, 36454, 47325]),\n",
" set_key=np.array(set_key),\n",
" salt=b'$2b$12$fX.in.GGAjz3QBBwqSWc6e',\n",
" max_nkode_len=customer.nkode_policy.max_nkode_len, \n",
")\n",
@@ -419,15 +417,18 @@
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Passcode Set Vals: [39610, 52408, 49828, 14533]\n",
"Passcode Attr Vals: [34493, 53473, 4893, 23503]\n"
"ename": "NameError",
"evalue": "name 'customer' is not defined",
"output_type": "error",
"traceback": [
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[0;32mIn[5], line 6\u001B[0m\n\u001B[1;32m 2\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01msrc\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mutils\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m xor_lists\n\u001B[1;32m 5\u001B[0m set_key \u001B[38;5;241m=\u001B[39m [\u001B[38;5;241m46785\u001B[39m, \u001B[38;5;241m4782\u001B[39m, \u001B[38;5;241m4405\u001B[39m, \u001B[38;5;241m44408\u001B[39m, \u001B[38;5;241m35377\u001B[39m, \u001B[38;5;241m55527\u001B[39m]\n\u001B[0;32m----> 6\u001B[0m set_key \u001B[38;5;241m=\u001B[39m xor_lists(set_key, \u001B[43mcustomer\u001B[49m\u001B[38;5;241m.\u001B[39mattributes\u001B[38;5;241m.\u001B[39mset_vals)\n\u001B[1;32m 7\u001B[0m user_keys \u001B[38;5;241m=\u001B[39m UserCipher(\n\u001B[1;32m 8\u001B[0m prop_key \u001B[38;5;241m=\u001B[39m [\n\u001B[1;32m 9\u001B[0m \u001B[38;5;241m57200\u001B[39m, \u001B[38;5;241m8398\u001B[39m, \u001B[38;5;241m54694\u001B[39m, \u001B[38;5;241m25997\u001B[39m, \u001B[38;5;241m30388\u001B[39m,\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 20\u001B[0m max_nkode_len\u001B[38;5;241m=\u001B[39mcustomer\u001B[38;5;241m.\u001B[39mnkode_policy\u001B[38;5;241m.\u001B[39mmax_nkode_len, \n\u001B[1;32m 21\u001B[0m )\n\u001B[1;32m 23\u001B[0m passcode_server_attr \u001B[38;5;241m=\u001B[39m [customer\u001B[38;5;241m.\u001B[39mattributes\u001B[38;5;241m.\u001B[39mattr_vals[idx] \u001B[38;5;28;01mfor\u001B[39;00m idx \u001B[38;5;129;01min\u001B[39;00m user_passcode]\n",
"\u001B[0;31mNameError\u001B[0m: name 'customer' is not defined"
]
}
],
"execution_count": 68
"execution_count": 5
},
{
"metadata": {},
@@ -449,24 +450,36 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.223843Z",
"start_time": "2025-03-07T19:01:09.221595Z"
"end_time": "2025-03-10T15:54:02.130699Z",
"start_time": "2025-03-10T15:45:03.947109Z"
}
},
"cell_type": "code",
"source": [
"from src.utils import xor_lists\n",
"\n",
"padded_passcode_server_set = user_keys.pad_user_mask(passcode_server_set, customer.attributes.set_vals)\n",
"padded_passcode_server_set = user_keys.pad_user_mask(passcode_server_set, customer.properites.set_vals)\n",
"\n",
"set_idx = [customer.attributes.get_set_index(set_val) for set_val in padded_passcode_server_set]\n",
"set_idx = [customer.properites.get_set_index(set_val) for set_val in padded_passcode_server_set]\n",
"mask_set_keys = [user_keys.set_key[idx] for idx in set_idx]\n",
"ciphered_mask = xor_lists(mask_set_keys, padded_passcode_server_set)\n",
"ciphered_mask = xor_lists(ciphered_mask, user_keys.mask_key)\n",
"mask = user_keys.encode_base64_str(ciphered_mask)"
],
"outputs": [],
"execution_count": 69
"outputs": [
{
"ename": "NameError",
"evalue": "name 'user_keys' is not defined",
"output_type": "error",
"traceback": [
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[0;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[0;32mIn[5], line 3\u001B[0m\n\u001B[1;32m 1\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01msrc\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mutils\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m xor_lists\n\u001B[0;32m----> 3\u001B[0m padded_passcode_server_set \u001B[38;5;241m=\u001B[39m \u001B[43muser_keys\u001B[49m\u001B[38;5;241m.\u001B[39mpad_user_mask(passcode_server_set, customer\u001B[38;5;241m.\u001B[39mproperites\u001B[38;5;241m.\u001B[39mset_vals)\n\u001B[1;32m 5\u001B[0m set_idx \u001B[38;5;241m=\u001B[39m [customer\u001B[38;5;241m.\u001B[39mproperites\u001B[38;5;241m.\u001B[39mget_set_index(set_val) \u001B[38;5;28;01mfor\u001B[39;00m set_val \u001B[38;5;129;01min\u001B[39;00m padded_passcode_server_set]\n\u001B[1;32m 6\u001B[0m mask_set_keys \u001B[38;5;241m=\u001B[39m [user_keys\u001B[38;5;241m.\u001B[39mset_key[idx] \u001B[38;5;28;01mfor\u001B[39;00m idx \u001B[38;5;129;01min\u001B[39;00m set_idx]\n",
"\u001B[0;31mNameError\u001B[0m: name 'user_keys' is not defined"
]
}
],
"execution_count": 5
},
{
"metadata": {},
@@ -483,7 +496,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.479816Z",
"end_time": "2025-03-10T15:54:02.130948Z",
"start_time": "2025-03-07T19:01:09.236822Z"
}
},
@@ -494,7 +507,7 @@
"import base64\n",
"from src.utils import int_array_to_bytes\n",
"\n",
"ciphered_customer_attrs = xor_lists(customer.attributes.attr_vals, user_keys.alpha_key)\n",
"ciphered_customer_attrs = xor_lists(customer.attributes.attr_vals, user_keys.prop_key)\n",
"passcode_ciphered_attrs = [ciphered_customer_attrs[idx] for idx in user_passcode]\n",
"pad_len = customer.nkode_policy.max_nkode_len - passcode_len\n",
"\n",
@@ -513,7 +526,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.495420Z",
"end_time": "2025-03-10T15:54:02.141842Z",
"start_time": "2025-03-07T19:01:09.488943Z"
}
},
@@ -553,7 +566,7 @@
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.736403Z",
"end_time": "2025-03-10T15:54:02.143871Z",
"start_time": "2025-03-07T19:01:09.500580Z"
}
},
@@ -605,7 +618,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.774425Z",
"end_time": "2025-03-10T15:54:02.144830Z",
"start_time": "2025-03-07T19:01:09.772200Z"
}
},
@@ -613,7 +626,7 @@
"source": [
"user = customer.users[username]\n",
"set_vals = customer.attributes.set_vals\n",
"user_keys = user.user_keys\n",
"user_keys = user.cipher\n",
"user_mask = user.enciphered_passcode.mask\n",
"decoded_mask = user_keys.decode_base64_str(user_mask)\n",
"deciphered_mask = xor_lists(decoded_mask, user_keys.mask_key)\n",
@@ -643,7 +656,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:09.795190Z",
"end_time": "2025-03-10T15:54:02.145423Z",
"start_time": "2025-03-07T19:01:09.792579Z"
}
},
@@ -679,7 +692,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:10.057899Z",
"end_time": "2025-03-10T15:54:02.145859Z",
"start_time": "2025-03-07T19:01:09.819860Z"
}
},
@@ -716,7 +729,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:11.147274Z",
"end_time": "2025-03-10T15:54:02.146298Z",
"start_time": "2025-03-07T19:01:10.066784Z"
}
},
@@ -763,7 +776,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:11.355505Z",
"end_time": "2025-03-10T15:54:02.148090Z",
"start_time": "2025-03-07T19:01:11.153001Z"
}
},
@@ -789,7 +802,7 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:11.363643Z",
"end_time": "2025-03-10T15:54:02.154941Z",
"start_time": "2025-03-07T19:01:11.361690Z"
}
},
@@ -799,8 +812,8 @@
"sets_xor = xor_lists(new_sets, old_sets)\n",
"for user in customer.users.values():\n",
" user.renew = True\n",
" user.user_keys.set_key = xor_lists(user.user_keys.set_key, sets_xor)\n",
" user.user_keys.alpha_key = xor_lists(user.user_keys.alpha_key, attrs_xor)"
" user.cipher.set_key = xor_lists(user.cipher.set_key, sets_xor)\n",
" user.cipher.prop_key = xor_lists(user.cipher.prop_key, attrs_xor)"
],
"outputs": [],
"execution_count": 78
@@ -813,18 +826,18 @@
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-03-07T19:01:11.989265Z",
"end_time": "2025-03-10T15:54:02.155673Z",
"start_time": "2025-03-07T19:01:11.369911Z"
}
},
"cell_type": "code",
"source": [
"user.user_keys = UserCipherKeys.new(\n",
"user.cipher = UserCipher.create(\n",
" customer.attributes.keypad_size,\n",
" customer.attributes.set_vals,\n",
" user.user_keys.max_nkode_len\n",
" user.cipher.max_nkode_len\n",
")\n",
"user.enciphered_passcode = user.user_keys.encipher_nkode(presumed_selected_attributes_idx, customer.attributes)\n",
"user.enciphered_passcode = user.cipher.encipher_nkode(presumed_selected_attributes_idx, customer.attributes)\n",
"user.renew = False"
],
"outputs": [],