{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Linear codes for Inner Product Masking\n", "\n", "### $n=3$ shares, $\\ell=4$ bits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Parameters:\n", "\n", "- $Z=(X + L_2Y_2 + L_3Y_3, Y_2, Y_3)=X\\mathbf{G} + Y\\mathbf{H}$ where $X, Y=(Y_2, Y_3)$ and $Z$ are the sensitive variable, a mask and the protected variable, respectively. $\\mathbf{G} = [1, 0, 0]$ and $\\mathbf{H} = [[L_2, 1, 0], [L_3, 0, 1]]$ are two generator matrices of codes $\\mathcal{C}$ and $\\mathcal{D}$, resp.\n", "- $L_2, L_3\\in \\mathbb{F}_{2^\\ell}\\backslash\\{0\\}$, thus there are 15*15=225 linear codes for IPM\n", "- Each element over $\\mathbb{F}_{2^\\ell}$ can be denoted as $\\alpha^i$ where $i\\in\\{0, 1, \\ldots, 14\\}$, the corresponding irreducible polynomial is $g(\\alpha) = \\alpha^4 + \\alpha +1$\n", "- $\\mathbf{H}^\\perp = [1, L_2, L_3]$ is the generator matirx of dual code $\\mathcal{D}^\\perp$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:57.148572Z", "start_time": "2020-02-15T10:43:56.062508Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import re\n", "import pandas as pd # Pandas for tables\n", "from IPython.display import Latex\n", "from IPython.display import HTML" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:57.156507Z", "start_time": "2020-02-15T10:43:57.150549Z" } }, "outputs": [], "source": [ "def read_f(file_name):\n", " \"\"\"Reading weight enumerators.\"\"\"\n", " with open(file_name, 'r') as fp:\n", " wd = fp.read().split(\"]\\n\")[:-1] # \"\\n\"\n", " wd = np.array([list(map(int, re.findall(r\"\\d+\", elem))) for elem in wd])\n", " \n", " return wd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Loading all weight enumerators" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:57.174466Z", "start_time": "2020-02-15T10:43:57.159501Z" } }, "outputs": [], "source": [ "wd = read_f(\"weight_distrib_n3k4.txt\") # Weight distribution\n", "\n", "# print(wd.shape) # 226 entries: 225 for IPM codes and one for BKLC codes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Generating values" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:57.185435Z", "start_time": "2020-02-15T10:43:57.177455Z" } }, "outputs": [], "source": [ "alpha_all = np.array(['$\\\\alpha^{%d}$'%i for i in np.arange(15)])\n", "d_all = np.zeros(len(wd))\n", "B_all = np.zeros(len(wd))\n", "L_2 = np.zeros(len(wd), dtype=int)\n", "L_3 = np.zeros(len(wd), dtype=int)\n", "for i in range(len(wd)):\n", " d_all[i] = wd[i][2]\n", " B_all[i] = wd[i][3]\n", " L_2[i] = int(i/15)\n", " L_3[i] = int(i%15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Defining styles of dataframe\n", "\n", "See more setting of dataframe from https://mode.com/example-gallery/python_dataframe_styling/" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:57.206522Z", "start_time": "2020-02-15T10:43:57.199565Z" } }, "outputs": [], "source": [ "# Set properties for th, td and caption elements in dataframe\n", "th_props = [('font-size', '14px'), ('text-align', 'left'), ('font-weight', 'bold'), ('background-color', '#E0E0E0')]\n", "td_props = [('font-size', '13px'), ('text-align', 'left'), ('min-width', '80px')]\n", "cp_props = [('font-size', '16px'), ('text-align', 'center')]\n", "# Set table styles\n", "styles = [dict(selector=\"th\", props=th_props), dict(selector=\"td\", props=td_props), dict(selector=\"caption\", props=cp_props)]\n", "cm_1 = sns.light_palette(\"red\", as_cmap=True)\n", "cm_2 = sns.light_palette(\"purple\", as_cmap=True, reverse=True)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:58.382391Z", "start_time": "2020-02-15T10:43:57.475800Z" }, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Tab. I All linear codes for IPM with $n=3$ shares over $\\mathbb{F}_{2^4}$.
$L_2$ $L_3$ $d_{\\mathcal{D}}^\\perp$ $B_{d_{\\mathcal{D}}^\\perp}$ Weight Enumerators
0$\\alpha^{0}$$\\alpha^{0}$34[0, 1, 3, 4, 6, 6, 9, 4, 12, 1]
1$\\alpha^{0}$$\\alpha^{1}$33[0, 1, 3, 3, 4, 1, 5, 1, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1, 11, 1]
2$\\alpha^{0}$$\\alpha^{2}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
3$\\alpha^{0}$$\\alpha^{3}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
4$\\alpha^{0}$$\\alpha^{4}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
5$\\alpha^{0}$$\\alpha^{5}$43[0, 1, 4, 3, 5, 1, 6, 3, 7, 6, 9, 1, 10, 1]
6$\\alpha^{0}$$\\alpha^{6}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
7$\\alpha^{0}$$\\alpha^{7}$42[0, 1, 4, 2, 5, 4, 6, 1, 7, 4, 8, 3, 10, 1]
8$\\alpha^{0}$$\\alpha^{8}$42[0, 1, 4, 2, 5, 4, 6, 1, 7, 4, 8, 3, 10, 1]
9$\\alpha^{0}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 5, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1]
10$\\alpha^{0}$$\\alpha^{10}$56[0, 1, 5, 6, 6, 4, 7, 1, 8, 3, 11, 1]
11$\\alpha^{0}$$\\alpha^{11}$41[0, 1, 4, 1, 5, 5, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1]
12$\\alpha^{0}$$\\alpha^{12}$31[0, 1, 3, 1, 4, 1, 5, 4, 6, 3, 7, 1, 8, 2, 9, 2, 10, 1]
13$\\alpha^{0}$$\\alpha^{13}$32[0, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 1, 8, 4, 9, 1, 11, 1]
14$\\alpha^{0}$$\\alpha^{14}$33[0, 1, 3, 3, 4, 1, 5, 1, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1, 11, 1]
15$\\alpha^{1}$$\\alpha^{0}$33[0, 1, 3, 3, 4, 1, 5, 1, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1, 11, 1]
16$\\alpha^{1}$$\\alpha^{1}$33[0, 1, 3, 3, 4, 1, 5, 1, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1, 11, 1]
17$\\alpha^{1}$$\\alpha^{2}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
18$\\alpha^{1}$$\\alpha^{3}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
19$\\alpha^{1}$$\\alpha^{4}$44[0, 1, 4, 4, 6, 4, 8, 7]
20$\\alpha^{1}$$\\alpha^{5}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
21$\\alpha^{1}$$\\alpha^{6}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
22$\\alpha^{1}$$\\alpha^{7}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
23$\\alpha^{1}$$\\alpha^{8}$42[0, 1, 4, 2, 5, 2, 6, 4, 7, 4, 8, 1, 9, 2]
24$\\alpha^{1}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 4, 6, 4, 7, 2, 8, 2, 9, 2]
25$\\alpha^{1}$$\\alpha^{10}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
26$\\alpha^{1}$$\\alpha^{11}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
27$\\alpha^{1}$$\\alpha^{12}$42[0, 1, 4, 2, 5, 3, 6, 4, 7, 2, 8, 1, 9, 3]
28$\\alpha^{1}$$\\alpha^{13}$31[0, 1, 3, 1, 4, 2, 5, 3, 6, 1, 7, 3, 8, 3, 9, 1, 10, 1]
29$\\alpha^{1}$$\\alpha^{14}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
30$\\alpha^{2}$$\\alpha^{0}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
31$\\alpha^{2}$$\\alpha^{1}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
32$\\alpha^{2}$$\\alpha^{2}$32[0, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 1, 8, 4, 9, 1, 11, 1]
33$\\alpha^{2}$$\\alpha^{3}$31[0, 1, 3, 1, 4, 2, 5, 3, 6, 1, 7, 3, 8, 3, 9, 1, 10, 1]
34$\\alpha^{2}$$\\alpha^{4}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
35$\\alpha^{2}$$\\alpha^{5}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
36$\\alpha^{2}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 4, 6, 2, 7, 4, 8, 4]
37$\\alpha^{2}$$\\alpha^{7}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
38$\\alpha^{2}$$\\alpha^{8}$42[0, 1, 4, 2, 6, 8, 8, 5]
39$\\alpha^{2}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
40$\\alpha^{2}$$\\alpha^{10}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
41$\\alpha^{2}$$\\alpha^{11}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
42$\\alpha^{2}$$\\alpha^{12}$41[0, 1, 4, 1, 5, 4, 6, 3, 7, 4, 8, 2, 10, 1]
43$\\alpha^{2}$$\\alpha^{13}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
44$\\alpha^{2}$$\\alpha^{14}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
45$\\alpha^{3}$$\\alpha^{0}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
46$\\alpha^{3}$$\\alpha^{1}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
47$\\alpha^{3}$$\\alpha^{2}$31[0, 1, 3, 1, 4, 2, 5, 3, 6, 1, 7, 3, 8, 3, 9, 1, 10, 1]
48$\\alpha^{3}$$\\alpha^{3}$31[0, 1, 3, 1, 4, 1, 5, 4, 6, 3, 7, 1, 8, 2, 9, 2, 10, 1]
49$\\alpha^{3}$$\\alpha^{4}$42[0, 1, 4, 2, 5, 3, 6, 4, 7, 2, 8, 1, 9, 3]
50$\\alpha^{3}$$\\alpha^{5}$41[0, 1, 4, 1, 5, 4, 6, 3, 7, 4, 8, 2, 10, 1]
51$\\alpha^{3}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
52$\\alpha^{3}$$\\alpha^{7}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
53$\\alpha^{3}$$\\alpha^{8}$41[0, 1, 4, 1, 5, 1, 6, 6, 7, 6, 9, 1]
54$\\alpha^{3}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 2, 6, 4, 7, 6, 8, 2]
55$\\alpha^{3}$$\\alpha^{10}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
56$\\alpha^{3}$$\\alpha^{11}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
57$\\alpha^{3}$$\\alpha^{12}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
58$\\alpha^{3}$$\\alpha^{13}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
59$\\alpha^{3}$$\\alpha^{14}$44[0, 1, 4, 4, 6, 4, 8, 7]
60$\\alpha^{4}$$\\alpha^{0}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
61$\\alpha^{4}$$\\alpha^{1}$44[0, 1, 4, 4, 6, 4, 8, 7]
62$\\alpha^{4}$$\\alpha^{2}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
63$\\alpha^{4}$$\\alpha^{3}$42[0, 1, 4, 2, 5, 3, 6, 4, 7, 2, 8, 1, 9, 3]
64$\\alpha^{4}$$\\alpha^{4}$41[0, 1, 4, 1, 5, 5, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1]
65$\\alpha^{4}$$\\alpha^{5}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
66$\\alpha^{4}$$\\alpha^{6}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
67$\\alpha^{4}$$\\alpha^{7}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
68$\\alpha^{4}$$\\alpha^{8}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
69$\\alpha^{4}$$\\alpha^{9}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
70$\\alpha^{4}$$\\alpha^{10}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
71$\\alpha^{4}$$\\alpha^{11}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
72$\\alpha^{4}$$\\alpha^{12}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
73$\\alpha^{4}$$\\alpha^{13}$41[0, 1, 4, 1, 5, 4, 6, 2, 7, 4, 8, 4]
74$\\alpha^{4}$$\\alpha^{14}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
75$\\alpha^{5}$$\\alpha^{0}$43[0, 1, 4, 3, 5, 1, 6, 3, 7, 6, 9, 1, 10, 1]
76$\\alpha^{5}$$\\alpha^{1}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
77$\\alpha^{5}$$\\alpha^{2}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
78$\\alpha^{5}$$\\alpha^{3}$41[0, 1, 4, 1, 5, 4, 6, 3, 7, 4, 8, 2, 10, 1]
79$\\alpha^{5}$$\\alpha^{4}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
80$\\alpha^{5}$$\\alpha^{5}$56[0, 1, 5, 6, 6, 4, 7, 1, 8, 3, 11, 1]
81$\\alpha^{5}$$\\alpha^{6}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
82$\\alpha^{5}$$\\alpha^{7}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
83$\\alpha^{5}$$\\alpha^{8}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
84$\\alpha^{5}$$\\alpha^{9}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
85$\\alpha^{5}$$\\alpha^{10}$612[0, 1, 6, 12, 8, 3]
86$\\alpha^{5}$$\\alpha^{11}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
87$\\alpha^{5}$$\\alpha^{12}$41[0, 1, 4, 1, 5, 1, 6, 6, 7, 6, 9, 1]
88$\\alpha^{5}$$\\alpha^{13}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
89$\\alpha^{5}$$\\alpha^{14}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
90$\\alpha^{6}$$\\alpha^{0}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
91$\\alpha^{6}$$\\alpha^{1}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
92$\\alpha^{6}$$\\alpha^{2}$41[0, 1, 4, 1, 5, 4, 6, 2, 7, 4, 8, 4]
93$\\alpha^{6}$$\\alpha^{3}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
94$\\alpha^{6}$$\\alpha^{4}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
95$\\alpha^{6}$$\\alpha^{5}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
96$\\alpha^{6}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 5, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1]
97$\\alpha^{6}$$\\alpha^{7}$41[0, 1, 4, 1, 5, 4, 6, 4, 7, 2, 8, 2, 9, 2]
98$\\alpha^{6}$$\\alpha^{8}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
99$\\alpha^{6}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 2, 6, 4, 7, 6, 8, 2]
100$\\alpha^{6}$$\\alpha^{10}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
101$\\alpha^{6}$$\\alpha^{11}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
102$\\alpha^{6}$$\\alpha^{12}$41[0, 1, 4, 1, 5, 2, 6, 4, 7, 6, 8, 2]
103$\\alpha^{6}$$\\alpha^{13}$42[0, 1, 4, 2, 6, 8, 8, 5]
104$\\alpha^{6}$$\\alpha^{14}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
105$\\alpha^{7}$$\\alpha^{0}$42[0, 1, 4, 2, 5, 4, 6, 1, 7, 4, 8, 3, 10, 1]
106$\\alpha^{7}$$\\alpha^{1}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
107$\\alpha^{7}$$\\alpha^{2}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
108$\\alpha^{7}$$\\alpha^{3}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
109$\\alpha^{7}$$\\alpha^{4}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
110$\\alpha^{7}$$\\alpha^{5}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
111$\\alpha^{7}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 4, 6, 4, 7, 2, 8, 2, 9, 2]
112$\\alpha^{7}$$\\alpha^{7}$42[0, 1, 4, 2, 5, 4, 6, 1, 7, 4, 8, 3, 10, 1]
113$\\alpha^{7}$$\\alpha^{8}$42[0, 1, 4, 2, 5, 2, 6, 4, 7, 4, 8, 1, 9, 2]
114$\\alpha^{7}$$\\alpha^{9}$42[0, 1, 4, 2, 6, 8, 8, 5]
115$\\alpha^{7}$$\\alpha^{10}$41[0, 1, 4, 1, 5, 1, 6, 6, 7, 6, 9, 1]
116$\\alpha^{7}$$\\alpha^{11}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
117$\\alpha^{7}$$\\alpha^{12}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
118$\\alpha^{7}$$\\alpha^{13}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
119$\\alpha^{7}$$\\alpha^{14}$42[0, 1, 4, 2, 5, 2, 6, 4, 7, 4, 8, 1, 9, 2]
120$\\alpha^{8}$$\\alpha^{0}$42[0, 1, 4, 2, 5, 4, 6, 1, 7, 4, 8, 3, 10, 1]
121$\\alpha^{8}$$\\alpha^{1}$42[0, 1, 4, 2, 5, 2, 6, 4, 7, 4, 8, 1, 9, 2]
122$\\alpha^{8}$$\\alpha^{2}$42[0, 1, 4, 2, 6, 8, 8, 5]
123$\\alpha^{8}$$\\alpha^{3}$41[0, 1, 4, 1, 5, 1, 6, 6, 7, 6, 9, 1]
124$\\alpha^{8}$$\\alpha^{4}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
125$\\alpha^{8}$$\\alpha^{5}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
126$\\alpha^{8}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
127$\\alpha^{8}$$\\alpha^{7}$42[0, 1, 4, 2, 5, 2, 6, 4, 7, 4, 8, 1, 9, 2]
128$\\alpha^{8}$$\\alpha^{8}$42[0, 1, 4, 2, 5, 4, 6, 1, 7, 4, 8, 3, 10, 1]
129$\\alpha^{8}$$\\alpha^{9}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
130$\\alpha^{8}$$\\alpha^{10}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
131$\\alpha^{8}$$\\alpha^{11}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
132$\\alpha^{8}$$\\alpha^{12}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
133$\\alpha^{8}$$\\alpha^{13}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
134$\\alpha^{8}$$\\alpha^{14}$41[0, 1, 4, 1, 5, 4, 6, 4, 7, 2, 8, 2, 9, 2]
135$\\alpha^{9}$$\\alpha^{0}$41[0, 1, 4, 1, 5, 5, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1]
136$\\alpha^{9}$$\\alpha^{1}$41[0, 1, 4, 1, 5, 4, 6, 4, 7, 2, 8, 2, 9, 2]
137$\\alpha^{9}$$\\alpha^{2}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
138$\\alpha^{9}$$\\alpha^{3}$41[0, 1, 4, 1, 5, 2, 6, 4, 7, 6, 8, 2]
139$\\alpha^{9}$$\\alpha^{4}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
140$\\alpha^{9}$$\\alpha^{5}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
141$\\alpha^{9}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 2, 6, 4, 7, 6, 8, 2]
142$\\alpha^{9}$$\\alpha^{7}$42[0, 1, 4, 2, 6, 8, 8, 5]
143$\\alpha^{9}$$\\alpha^{8}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
144$\\alpha^{9}$$\\alpha^{9}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
145$\\alpha^{9}$$\\alpha^{10}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
146$\\alpha^{9}$$\\alpha^{11}$41[0, 1, 4, 1, 5, 4, 6, 2, 7, 4, 8, 4]
147$\\alpha^{9}$$\\alpha^{12}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
148$\\alpha^{9}$$\\alpha^{13}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
149$\\alpha^{9}$$\\alpha^{14}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
150$\\alpha^{10}$$\\alpha^{0}$56[0, 1, 5, 6, 6, 4, 7, 1, 8, 3, 11, 1]
151$\\alpha^{10}$$\\alpha^{1}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
152$\\alpha^{10}$$\\alpha^{2}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
153$\\alpha^{10}$$\\alpha^{3}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
154$\\alpha^{10}$$\\alpha^{4}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
155$\\alpha^{10}$$\\alpha^{5}$612[0, 1, 6, 12, 8, 3]
156$\\alpha^{10}$$\\alpha^{6}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
157$\\alpha^{10}$$\\alpha^{7}$41[0, 1, 4, 1, 5, 1, 6, 6, 7, 6, 9, 1]
158$\\alpha^{10}$$\\alpha^{8}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
159$\\alpha^{10}$$\\alpha^{9}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
160$\\alpha^{10}$$\\alpha^{10}$43[0, 1, 4, 3, 5, 1, 6, 3, 7, 6, 9, 1, 10, 1]
161$\\alpha^{10}$$\\alpha^{11}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
162$\\alpha^{10}$$\\alpha^{12}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
163$\\alpha^{10}$$\\alpha^{13}$41[0, 1, 4, 1, 5, 4, 6, 3, 7, 4, 8, 2, 10, 1]
164$\\alpha^{10}$$\\alpha^{14}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
165$\\alpha^{11}$$\\alpha^{0}$41[0, 1, 4, 1, 5, 5, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1]
166$\\alpha^{11}$$\\alpha^{1}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
167$\\alpha^{11}$$\\alpha^{2}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
168$\\alpha^{11}$$\\alpha^{3}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
169$\\alpha^{11}$$\\alpha^{4}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
170$\\alpha^{11}$$\\alpha^{5}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
171$\\alpha^{11}$$\\alpha^{6}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
172$\\alpha^{11}$$\\alpha^{7}$52[0, 1, 5, 2, 6, 6, 7, 6, 8, 1]
173$\\alpha^{11}$$\\alpha^{8}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
174$\\alpha^{11}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 4, 6, 2, 7, 4, 8, 4]
175$\\alpha^{11}$$\\alpha^{10}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
176$\\alpha^{11}$$\\alpha^{11}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
177$\\alpha^{11}$$\\alpha^{12}$44[0, 1, 4, 4, 6, 4, 8, 7]
178$\\alpha^{11}$$\\alpha^{13}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
179$\\alpha^{11}$$\\alpha^{14}$42[0, 1, 4, 2, 5, 3, 6, 4, 7, 2, 8, 1, 9, 3]
180$\\alpha^{12}$$\\alpha^{0}$31[0, 1, 3, 1, 4, 1, 5, 4, 6, 3, 7, 1, 8, 2, 9, 2, 10, 1]
181$\\alpha^{12}$$\\alpha^{1}$42[0, 1, 4, 2, 5, 3, 6, 4, 7, 2, 8, 1, 9, 3]
182$\\alpha^{12}$$\\alpha^{2}$41[0, 1, 4, 1, 5, 4, 6, 3, 7, 4, 8, 2, 10, 1]
183$\\alpha^{12}$$\\alpha^{3}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
184$\\alpha^{12}$$\\alpha^{4}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
185$\\alpha^{12}$$\\alpha^{5}$41[0, 1, 4, 1, 5, 1, 6, 6, 7, 6, 9, 1]
186$\\alpha^{12}$$\\alpha^{6}$41[0, 1, 4, 1, 5, 2, 6, 4, 7, 6, 8, 2]
187$\\alpha^{12}$$\\alpha^{7}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
188$\\alpha^{12}$$\\alpha^{8}$54[0, 1, 5, 4, 6, 4, 7, 4, 8, 3]
189$\\alpha^{12}$$\\alpha^{9}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
190$\\alpha^{12}$$\\alpha^{10}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
191$\\alpha^{12}$$\\alpha^{11}$44[0, 1, 4, 4, 6, 4, 8, 7]
192$\\alpha^{12}$$\\alpha^{12}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
193$\\alpha^{12}$$\\alpha^{13}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
194$\\alpha^{12}$$\\alpha^{14}$31[0, 1, 3, 1, 4, 2, 5, 3, 6, 1, 7, 3, 8, 3, 9, 1, 10, 1]
195$\\alpha^{13}$$\\alpha^{0}$32[0, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 1, 8, 4, 9, 1, 11, 1]
196$\\alpha^{13}$$\\alpha^{1}$31[0, 1, 3, 1, 4, 2, 5, 3, 6, 1, 7, 3, 8, 3, 9, 1, 10, 1]
197$\\alpha^{13}$$\\alpha^{2}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
198$\\alpha^{13}$$\\alpha^{3}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
199$\\alpha^{13}$$\\alpha^{4}$41[0, 1, 4, 1, 5, 4, 6, 2, 7, 4, 8, 4]
200$\\alpha^{13}$$\\alpha^{5}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
201$\\alpha^{13}$$\\alpha^{6}$42[0, 1, 4, 2, 6, 8, 8, 5]
202$\\alpha^{13}$$\\alpha^{7}$41[0, 1, 4, 1, 5, 3, 6, 4, 7, 4, 8, 2, 9, 1]
203$\\alpha^{13}$$\\alpha^{8}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
204$\\alpha^{13}$$\\alpha^{9}$54[0, 1, 5, 4, 6, 6, 7, 2, 8, 1, 9, 2]
205$\\alpha^{13}$$\\alpha^{10}$41[0, 1, 4, 1, 5, 4, 6, 3, 7, 4, 8, 2, 10, 1]
206$\\alpha^{13}$$\\alpha^{11}$43[0, 1, 4, 3, 5, 2, 6, 2, 7, 4, 8, 2, 9, 2]
207$\\alpha^{13}$$\\alpha^{12}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
208$\\alpha^{13}$$\\alpha^{13}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
209$\\alpha^{13}$$\\alpha^{14}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
210$\\alpha^{14}$$\\alpha^{0}$33[0, 1, 3, 3, 4, 1, 5, 1, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1, 11, 1]
211$\\alpha^{14}$$\\alpha^{1}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
212$\\alpha^{14}$$\\alpha^{2}$31[0, 1, 3, 1, 4, 3, 5, 1, 6, 2, 7, 3, 8, 2, 9, 3]
213$\\alpha^{14}$$\\alpha^{3}$44[0, 1, 4, 4, 6, 4, 8, 7]
214$\\alpha^{14}$$\\alpha^{4}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
215$\\alpha^{14}$$\\alpha^{5}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
216$\\alpha^{14}$$\\alpha^{6}$42[0, 1, 4, 2, 5, 3, 6, 2, 7, 4, 8, 3, 9, 1]
217$\\alpha^{14}$$\\alpha^{7}$42[0, 1, 4, 2, 5, 2, 6, 4, 7, 4, 8, 1, 9, 2]
218$\\alpha^{14}$$\\alpha^{8}$41[0, 1, 4, 1, 5, 4, 6, 4, 7, 2, 8, 2, 9, 2]
219$\\alpha^{14}$$\\alpha^{9}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
220$\\alpha^{14}$$\\alpha^{10}$55[0, 1, 5, 5, 6, 5, 7, 2, 8, 1, 9, 1, 10, 1]
221$\\alpha^{14}$$\\alpha^{11}$42[0, 1, 4, 2, 5, 3, 6, 4, 7, 2, 8, 1, 9, 3]
222$\\alpha^{14}$$\\alpha^{12}$31[0, 1, 3, 1, 4, 2, 5, 3, 6, 1, 7, 3, 8, 3, 9, 1, 10, 1]
223$\\alpha^{14}$$\\alpha^{13}$32[0, 1, 3, 2, 4, 2, 5, 1, 6, 2, 7, 4, 8, 1, 9, 1, 10, 2]
224$\\alpha^{14}$$\\alpha^{14}$33[0, 1, 3, 3, 4, 1, 5, 1, 6, 3, 7, 2, 8, 2, 9, 1, 10, 1, 11, 1]
" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'$L_2$': alpha_all[L_2[:-1]], '$L_3$': alpha_all[L_3[:-1]], '$d_{\\mathcal{D}}^\\perp$': d_all[:-1], \n", " '$B_{d_{\\mathcal{D}}^\\perp}$': B_all[:-1], 'Weight Enumerators': wd[:-1]})\n", "\n", "pd.set_option('display.max_colwidth', 1000)\n", "pd.set_option('display.width', 800)\n", "(df.style\n", " .background_gradient(cmap=cm_1, subset=['$d_{\\mathcal{D}}^\\perp$','$B_{d_{\\mathcal{D}}^\\perp}$' ])\n", " .background_gradient(cmap=cm_2, subset=['$B_{d_{\\mathcal{D}}^\\perp}$' ])\n", " .set_caption('Tab. I All linear codes for IPM with $n=3$ shares over $\\mathbb{F}_{2^4}$.')\n", " .set_table_styles(styles))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Optimal linear codes for IPM" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Linear codes with $d_{\\mathcal{D}}^\\perp=6$\n", "\n", "We focus on the the linear codes with greater $d_{\\mathcal{D}}^\\perp$, which are better in the sense of side-channel resistance (from our paper)." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:58.389373Z", "start_time": "2020-02-15T10:43:58.384385Z" } }, "outputs": [], "source": [ "# Finding the indices of d_C=6\n", "d_index = []\n", "d_index_L2 = []\n", "d_index_L3 = []\n", "d_C = 6\n", "for i in range(len(wd)-1):\n", " if wd[i][2] == d_C:\n", " d_index.append(i)\n", " d_index_L2.append(int(i/15))\n", " d_index_L3.append(int(i%15))\n", "\n", "#d_index = np.array(d_index)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:58.415335Z", "start_time": "2020-02-15T10:43:58.392364Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "[85, 155]\n" ] } ], "source": [ "print(len(d_index))\n", "print(d_index)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:43:58.422285Z", "start_time": "2020-02-15T10:43:58.417301Z" } }, "outputs": [], "source": [ "def highlight(s, threshold, column):\n", " is_min = pd.Series(data=False, index=s.index)\n", " is_min[column] = (s.loc[column] <= threshold)\n", " return ['background-color: gold' if is_min.any() else '' for v in is_min]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:44:02.071600Z", "start_time": "2020-02-15T10:44:02.038725Z" }, "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Tab. II Linear codes for IPM with $d_{\\mathcal{D}}^\\perp=6$.
$L_2$ $L_3$ $d_{\\mathcal{D}}^\\perp$ $B_{d_{\\mathcal{D}}^\\perp}$ Weight Enumerators
0$\\alpha^{5}$$\\alpha^{10}$612[0, 1, 6, 12, 8, 3]
1$\\alpha^{10}$$\\alpha^{5}$612[0, 1, 6, 12, 8, 3]
" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_4 = pd.DataFrame({'$L_2$': np.array(alpha_all)[d_index_L2], '$L_3$': np.array(alpha_all)[d_index_L3], '$d_{\\mathcal{D}}^\\perp$': \n", " d_all[d_index], '$B_{d_{\\mathcal{D}}^\\perp}$': B_all[d_index], 'Weight Enumerators': wd[d_index]})\n", "df_4 = df_4.sort_values(by=['$B_{d_{\\mathcal{D}}^\\perp}$'], ascending=True)\n", "\n", "(df_4.style\n", " .apply(highlight, threshold=12, column=['$B_{d_{\\mathcal{D}}^\\perp}$'], axis=1)\n", " .background_gradient(cmap=cm_2, subset=['$B_{d_{\\mathcal{D}}^\\perp}$' ])\n", " .set_caption('Tab. II Linear codes for IPM with $d_{\\mathcal{D}}^\\perp=6$.')\n", " .set_table_styles(styles))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Optimal codes for IPM\n", "\n", "As shown in our paper, the codes satifying two conditions are optimal:\n", "\n", "- Maximizing $d_{\\mathcal{D}}^\\perp$, here $\\max\\{d_{\\mathcal{D}}^\\perp\\} = 6$\n", "- Minimizing $B_{d_{\\mathcal{D}}^\\perp}$, here $\\min\\{B_{d_{\\mathcal{D}}^\\perp}\\} = 12$\n", "\n", "Note that we use two leakage detection metrics **SNR** (signal-to-noise ratio) and **MI** (mutual information), and one leakage exploitation metric **SR** (success rate) to assess the side-channel resistance of IPM with different codes." ] }, { "cell_type": "markdown", "metadata": { "scrolled": false }, "source": [ "As a result of Tab. II, we conclude that the optimal codes for IPM are genetated by $\\mathbf{H}=[[L_2, 1, 0], [L_3, 0, 1]]$ where $(L_2, L_3)\\in\\{(\\alpha^5, \\alpha^{10}), (\\alpha^{10}, \\alpha^{5})\\}$. Note that these two codes are equivalent.\n", "\n", "The two optimal codes are equivalent and the generator matrix of the first one is: \n", "$$\n", "\\mathbf{H}_{optimal}=\\left( \\begin{matrix} \\alpha^{5} & 1 & 0 \\\\ \\alpha^{10} & 0 & 1 \\end{matrix} \\right) \\in \\mathbb{F}_{2^4}^{2\\times 3} \n", "= \\left(\n", " \\begin{matrix}\n", " 0&1&1&0&1&0&0&0&0&0&0&0 \\\\\n", " 0&0&1&1&0&1&0&0&0&0&0&0 \\\\\n", " 1&1&0&1&0&0&1&0&0&0&0&0 \\\\\n", " 1&0&1&0&0&0&0&1&0&0&0&0 \\\\\n", " 1&1&1&0&0&0&0&0&1&0&0&0 \\\\\n", " 0&1&1&1&0&0&0&0&0&1&0&0 \\\\\n", " 1&1&1&1&0&0&0&0&0&0&1&0 \\\\\n", " 1&0&1&1&0&0&0&0&0&0&0&1 \n", " \\end{matrix} \n", "\\right) \\normalsize\\in \\mathbb{F}_2^{8\\times 12}\n", "$$ " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3 BKLC code with parameter $[12, 4, 6]$\n", "\n", "BKLC is the short of Best Known Linear Code. Note that the code $[12, 4, 6]$ is unique.\n", "\n", "*The BKLC is defined as An [n, k] linear code $\\mathcal{C}$ is said to be a best known linear [n, k] code (BKLC) if $\\mathcal{C}$ has the highest minimum weight among all known [n, k] linear codes.[See definition from Magma.](http://www.enseignement.polytechnique.fr/profs/informatique/Eric.Schost/X2002/Maj1/htmlhelp/text1263.htm)*" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2020-02-15T10:44:12.353850Z", "start_time": "2020-02-15T10:44:12.324928Z" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Tab. III A BKLC code for IPM with $d_{\\mathcal{D}}^\\perp=6$.
$L_2$ $L_3$ $d_{\\mathcal{D}}^\\perp$ $B_{d_{\\mathcal{D}}^\\perp}$ Weight Enumerators
0 -- --612[0, 1, 6, 12, 8, 3]
" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bklc_index = [-1]\n", "cm_3 = sns.light_palette(\"red\", as_cmap=True, reverse=True)\n", "df_bklc = pd.DataFrame({'$L_2$': [' --'], '$L_3$': [' --'], '$d_{\\mathcal{D}}^\\perp$': d_all[-1], '$B_{d_{\\mathcal{D}}^\\perp}$': \n", " B_all[-1], 'Weight Enumerators': wd[bklc_index]})\n", "\n", "(df_bklc.style\n", " .background_gradient(cmap=cm_3, subset=['$d_{\\mathcal{D}}^\\perp$', '$B_{d_{\\mathcal{D}}^\\perp}$'])\n", " .set_caption('Tab. III A BKLC code for IPM with $d_{\\mathcal{D}}^\\perp=6$.')\n", " .set_table_styles(styles))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that this BKLC code is equivalent to the best linear codes in IPM. It is interesting to notice that the BKLC code $[12, 4, 6]$ can be generated by $\\mathbf{H}^\\perp=[1, L_2=\\alpha^5, L_3=\\alpha^{10}]$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The generator matrix of the dual code of this BKLC code is: \n", "$$\n", "\\mathbf{H}_{BKLC}^\\perp= \\left(\n", " \\begin{matrix}\n", " 0&1&1&0&1&0&0&0&0&0&0&0 \\\\\n", " 0&0&1&1&0&1&0&0&0&0&0&0 \\\\\n", " 1&1&0&1&0&0&1&0&0&0&0&0 \\\\\n", " 1&0&1&0&0&0&0&1&0&0&0&0 \\\\\n", " 1&1&1&0&0&0&0&0&1&0&0&0 \\\\\n", " 0&1&1&1&0&0&0&0&0&1&0&0 \\\\\n", " 1&1&1&1&0&0&0&0&0&0&1&0 \\\\\n", " 1&0&1&1&0&0&0&0&0&0&0&1 \n", " \\end{matrix} \n", "\\right) \\normalsize\\in \\mathbb{F}_2^{8\\times 12}\n", "$$ " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }