WIP: almost all tables defined - compression is still missing

This commit is contained in:
David Testé
2026-01-06 11:28:48 +01:00
parent 186ace4fb4
commit d555fc25a4
4 changed files with 845 additions and 72 deletions

View File

@@ -453,13 +453,13 @@ class ParamsDefinition:
f"ParamsDefinition("
f"message_size={self.precision.message()}, "
f"carry_size={self.precision.carry()}, "
# f"pbs_kind={self.pbs_kind}, "
f"pbs_kind={self.pbs_kind}, "
f"grouping_factor={self.grouping_factor}, "
# f"noise_distribution={self.noise_distribution}, "
f"noise_distribution={self.noise_distribution}, "
f"atomic_pattern={self.atomic_pattern}, "
f"p_fail={self.p_fail}, "
# f"version={self.version}, "
# f"details={self.details})"
f"version={self.version}, "
f"details={self.details})"
)
def components_match(self, *components):

View File

@@ -679,6 +679,7 @@ class ElementType(enum.Enum):
Operation = 0
ParamComponent = 1
SizeComponent = 2
Reference = 3
class LatexSeparator(enum.StrEnum):
@@ -810,7 +811,7 @@ class LatexArraySection:
if param_def.components_match(*row_filters, elem.elem):
row_values.append(value)
print("Row values:", row_values)
# print("Row values:", row_values) # DEBUG
return " & ".join(row_values) + r" \\"

View File

@@ -1,13 +1,14 @@
"""
All tables are named after their label in the whitepaper.
"""
from PIL.IptcImagePlugin import COMPRESSION
from benchmark_specs import (
AtomicPattern,
ErrorFailureProbability,
GroupingFactor,
OperandSize,
Precision,
PBSKind,
)
from formatters.common import (
ElementType,
@@ -21,8 +22,8 @@ from formatters.common import (
# Table 3 is core crypto KS/KS-PBS/PBS in the multibit case for V1_4_PARAM_MULTI_BIT_GROUP_X_MESSAGE_Y_CARRY_Y_KS_PBS_GAUSSIAN_2MZ for X in [2,3,4], Y in [1,2,3,4] and Z in [64, 128]
# Table 5 is special case with 1_1_64, 2_2_64, 4_4_64
# Table 6 is special case with 1_1_128, 2_2_128, 4_4_128
# Table 7 is the multibit special case with V1_4_PARAM_MULTI_BIT_GROUP_X_MESSAGE_Y_CARRY_Y_KS_PBS_GAUSSIAN_2MZ for X in [2,3,4], Y = 2, Z = 64.
# Table 8 is special case for 2_2_128 and 2_2_128 KS_32 <--- changed
# Table 7 is the multibit special case with V1_4_PARAM_MULTI_BIT_GROUP_X_MESSAGE_Y_CARRY_Y_KS_PBS_GAUSSIAN_2MZ for X in [2,3,4], Y = 2, Z = 128.
# Table 8 is special case for 2_2_128 and 2_2_128 KS_32
# Table 9, 10, 11, 12 are the integer ops for 2_2_64_KS32 and 2_2_128_KS32
# Table 13 is compression (which I believe was in special case?) for the 64/128 compression parameters
@@ -48,6 +49,10 @@ def _get_operation_elem(
)
def _get_cref_elem(cref_name) -> LatexRowElement:
return LatexRowElement(cref_name, ElementType.Reference, f"\\cref{{{cref_name}}}")
PFAIL_2M64_ELEM = LatexRowElement(
ErrorFailureProbability.TWO_MINUS_64, ElementType.ParamComponent, r"\(2^{-64}\)"
)
@@ -58,13 +63,20 @@ PFAIL_2M128_ELEM = LatexRowElement(
PFAIL_2M64_HIDDEN_ELEM = LatexRowElement(
ErrorFailureProbability.TWO_MINUS_64,
ElementType.ParamComponent,
r"\(2^{-64}\)",
"",
display_element=False,
)
PFAIL_2M128_HIDDEN_ELEM = LatexRowElement(
ErrorFailureProbability.TWO_MINUS_128,
ElementType.ParamComponent,
r"\(2^{-128}\)",
"",
display_element=False,
)
CLASSICAL_PBS_HIDDEN_ELEM = LatexRowElement(
PBSKind.Classical,
ElementType.ParamComponent,
"",
display_element=False,
)
@@ -104,6 +116,31 @@ M4C4_PFAIL_128_ELEM = LatexRowElement(
r"${\tt 4\_4\_128}$",
)
M2C2_PFAIL_128_GF_2_ELEM = LatexRowElement(
GroupingFactor.Two,
ElementType.ParamComponent,
r"${\tt 2\_2\_128\_multibit2}$",
)
M2C2_PFAIL_128_GF_3_ELEM = LatexRowElement(
GroupingFactor.Three,
ElementType.ParamComponent,
r"${\tt 2\_2\_128\_multibit3}$",
)
M2C2_PFAIL_128_GF_4_ELEM = LatexRowElement(
GroupingFactor.Four,
ElementType.ParamComponent,
r"${\tt 2\_2\_128\_multibit4}$",
)
M2C2_HIDDEN_ELEM = LatexRowElement(
Precision.M2C2,
ElementType.ParamComponent,
"",
display_element=False,
)
KSPBS_HIDDEN_ELEM = LatexRowElement(
AtomicPattern.KSPBS,
ElementType.ParamComponent,
@@ -117,12 +154,134 @@ KS32PBS_HIDDEN_ELEM = LatexRowElement(
display_element=False,
)
# ----------------------------
# Operations as LaTex elements
# ----------------------------
KS_OP_ELEM = _get_operation_elem("keyswitch", r"\ks")
PBS_OP_ELEM = _get_operation_elem("pbs_mem_optimized", r"\pbs")
MB_PBS_OP_ELEM = _get_operation_elem("multi_bit_deterministic_pbs", r"\mbpbs")
KSPBS_OP_ELEM = _get_operation_elem("ks_pbs", r"\kspbs")
KS_MB_PBS_OP_ELEM = _get_operation_elem("multi_bit_deterministic_ks_pbs", r"\ksmbpbs")
ADD_OP_ELEM = _get_operation_elem(
"unsigned_add_parallelized", r"\texttt{unsigned\_add\_parallelized}"
)
SUB_OP_ELEM = _get_operation_elem(
"unsigned_sub_parallelized", r"\texttt{unsigned\_sub\_parallelized}"
)
BITNOT_OP_ELEM = _get_operation_elem(
"unsigned_bitnot", r"\texttt{unsigned\_bitnot\_non\_parallelized}"
)
BITAND_OP_ELEM = _get_operation_elem(
"unsigned_bitand_parallelized",
r"\texttt{unsigned\_bit\{and,or,xor\}\_parallelized}",
)
DIV_REM_OP_ELEM = _get_operation_elem(
"unsigned_div_rem_parallelized", r"\texttt{unsigned\_div\_rem\_parallelized}"
)
EQ_OP_ELEM = _get_operation_elem(
"unsigned_eq_parallelized", r"\texttt{unsigned\_\{eq,ne\}\_parallelized}"
)
COMPARISON_OP_ELEM = _get_operation_elem(
"unsigned_gt_parallelized", r"\texttt{unsigned\_\{ge,gt,le,lt\}\_parallelized}"
)
IF_THEN_ELSE_OP_ELEM = _get_operation_elem(
"unsigned_if_then_else_parallelized",
r"\texttt{unsigned\_if\_then\_else\_parallelized}",
)
NEGATION_OP_ELEM = _get_operation_elem(
"unsigned_neg_parallelized", r"\texttt{unsigned\_neg\_parallelized}"
)
MUL_OP_ELEM = _get_operation_elem(
"unsigned_mul_parallelized", r"\texttt{unsigned\_mul\_parallelized}"
)
SCALAR_REM_OP_ELEM = _get_operation_elem(
"unsigned_scalar_rem_parallelized", r"\texttt{unsigned\_scalar\_rem\_parallelized}"
)
SHIFT_OP_ELEM = _get_operation_elem(
"unsigned_left_shift_parallelized",
r"\texttt{unsigned\_\{left,right\}\_shift\_parallelized}",
)
ROTATE_OP_ELEM = _get_operation_elem(
"unsigned_rotate_left_parallelized",
r"\texttt{unsigned\_\{left,right\}\_rotate\_parallelized}",
)
OVERFLOWING_ADD_OP_ELEM = _get_operation_elem(
"unsigned_unsigned_overflowing_add_parallelized",
r"\texttt{unsigned\_overflowing\_add\_parallelized}",
)
OVERFLOWING_SUB_OP_ELEM = _get_operation_elem(
"unsigned_unsigned_overflowing_sub_parallelized",
r"\texttt{unsigned\_overflowing\_sub\_parallelized}",
)
OVERFLOWING_MUL_OP_ELEM = _get_operation_elem(
"unsigned_unsigned_overflowing_mul_parallelized",
r"\texttt{unsigned\_overflowing\_mul\_parallelized}",
)
SUM_CIPHERTEXTS_5_CTXTS_OP_ELEM = _get_operation_elem(
"unsigned_sum_ciphertexts_parallelized_5_ctxts",
r"\texttt{unsigned\_sum\_ciphertexts\_parallelized\_5\_ctxts\_non\_parallelized}",
)
SUM_CIPHERTEXTS_10_CTXTS_OP_ELEM = _get_operation_elem(
"unsigned_sum_ciphertexts_parallelized_10_ctxts",
r"\texttt{unsigned\_sum\_ciphertexts\_parallelized\_10\_ctxts\_non\_parallelized}",
)
SUM_CIPHERTEXTS_20_CTXTS_OP_ELEM = _get_operation_elem(
"unsigned_sum_ciphertexts_parallelized_20_ctxts",
r"\texttt{unsigned\_sum\_ciphertexts\_parallelized\_20\_ctxts\_non\_parallelized}",
)
COMPRESSION_OP_ELEM = _get_operation_elem(
"", "Compress"
)
DECOMPRESSION_OP_ELEM = _get_operation_elem(
"", "Decompress"
)
OVERFLOWING_SCALAR_ADD_OP_ELEM = _get_operation_elem(
"unsigned_unsigned_overflowing_scalar_add_parallelized",
r"\texttt{unsigned\_overflowing\_scalar\_add\_parallelized}",
)
OVERFLOWING_SCALAR_SUB_OP_ELEM = _get_operation_elem(
"unsigned_unsigned_overflowing_scalar_sub_parallelized",
r"\texttt{unsigned\_overflowing\_scalar\_sub\_parallelized}",
)
SCALAR_ADD_OP_ELEM = _get_operation_elem(
"unsigned_scalar_add_parallelized", r"\texttt{unsigned\_scalar\_add\_parallelized}"
)
SCALAR_SUB_OP_ELEM = _get_operation_elem(
"unsigned_scalar_sub_parallelized", r"\texttt{unsigned\_scalar\_sub\_parallelized}"
)
SCALAR_BITWISE_OP_ELEM = _get_operation_elem(
"unsigned_scalar_bitand_parallelized",
r"\texttt{unsigned\_scalar\_bit\{and,or,xor\}\_parallelized}",
)
SCALAR_DIV_OP_ELEM = _get_operation_elem(
"unsigned_scalar_div_parallelized", r"\texttt{unsigned\_scalar\_div\_parallelized}"
)
SCALAR_EQ_OP_ELEM = _get_operation_elem(
"unsigned_scalar_eq_parallelized",
r"\texttt{unsigned\_scalar\_\{eq,ne\}\_parallelized}",
)
SCALAR_COMPARISON_OP_ELEM = _get_operation_elem(
"unsigned_scalar_gt_parallelized",
r"\texttt{unsigned\_scalar\_\{ge,gt,le,lt\}\_parallelized}",
)
SCALAR_MUL_OP_ELEM = _get_operation_elem(
"unsigned_scalar_mul_parallelized", r"\texttt{unsigned\_scalar\_mul\_parallelized}"
)
SCALAR_REM_OP_ELEM = _get_operation_elem(
"unsigned_scalar_rem_parallelized", r"\texttt{unsigned\_scalar\_rem\_parallelized}"
)
SCALAR_SHIFT_OP_ELEM = _get_operation_elem(
"unsigned_scalar_left_shift_parallelized",
r"\texttt{unsigned\_scalar\_\{left,right\}\_shift\_parallelized}",
)
SCALAR_ROTATE_OP_ELEM = _get_operation_elem(
"unsigned_scalar_rotate_left_parallelized",
r"\texttt{unsigned\_scalar\_\{left,right\}\_rotate\_parallelized}",
)
ADD_OP_HIDDEN_ELEM = _get_operation_elem(
"unsigned_add_parallelized", "Addition", display_element=False
)
@@ -133,6 +292,38 @@ MUL_OP_HIDDEN_ELEM = _get_operation_elem(
"unsigned_mul_parallelized", "Multiplication", display_element=False
)
# --------------------
# \cref LaTex elements
# --------------------
ADD_CREF_ELEM = _get_cref_elem("alg:addition")
BITNOT_CREF_ELEM = _get_cref_elem("alg:bitwise-not")
BITWISE_CREF_ELEM = _get_cref_elem("alg:bitwise-ops")
EQ_CREF_ELEM = _get_cref_elem("alg:eq")
DIV_REM_CREF_ELEM = _get_cref_elem("alg:unsig-div-rem")
IF_THEN_ELSE_CREF_ELEM = _get_cref_elem("alg:select")
SHIFT_CREF_ELEM = _get_cref_elem("alg:shift-rot-encr")
MUL_CREF_ELEM = _get_cref_elem("alg:multiplication")
NEGATION_CREF_ELEM = _get_cref_elem("alg:negation")
ROTATE_CREF_ELEM = _get_cref_elem("ssec:shift")
SUB_CREF_ELEM = _get_cref_elem("alg:sub")
SUM_CIPHERTEXTS_CREF_ELEM = _get_cref_elem("alg:sum")
OVERFLOWING_CREF_ELEM = _get_cref_elem("ssec:overflow")
COMPARISON_CREF_ELEM = _get_cref_elem("alg:comparison")
COMPRESSION_REF_ELEM = _get_cref_elem("alg:compression")
DECOMPRESSION_REF_ELEM = _get_cref_elem("alg:decompression")
SCALAR_ADD_CREF_ELEM = _get_cref_elem("sssec:addition-scalar")
SCALAR_BITWISE_CREF_ELEM = _get_cref_elem("alg:scalar-bitwise")
SCALAR_DIV_CREF_ELEM = _get_cref_elem("sssec:scalar-div")
SCALAR_EQ_CREF_ELEM = _get_cref_elem("sssec:equality-scalar")
SCALAR_MUL_CREF_ELEM = _get_cref_elem("alg:scalar-multiplication")
SCALAR_SHIFT_CREF_ELEM = _get_cref_elem("alg:left_shift_scalar,alg:right_shift_scalar")
SCALAR_ROTATE_CREF_ELEM = _get_cref_elem(
"alg:left_rotate_scalar,alg:right_rotate_scalar"
)
SCALAR_SUB_CREF_ELEM = _get_cref_elem("ssec:subtraction-scalar")
# ---------------------
# LaTex column elements
# ---------------------
@@ -263,7 +454,7 @@ TABLE_PBS_BENCH = LatexTable(
M3C3_COL_ELEM,
M4C4_COL_ELEM,
],
# [PFAIL_2M64_ELEM, KSPBS_OP_ELEM_AMORTIZED, M1C1_COL_ELEM, M2C2_COL_ELEM, M3C3_COL_ELEM, M4C4_COL_ELEM], # TODO line de données à calculer depuis les résultats
# [PFAIL_2M64_ELEM, KSPBS_OP_ELEM_AMORTIZED, M1C1_COL_ELEM, M2C2_COL_ELEM, M3C3_COL_ELEM, M4C4_COL_ELEM], # TODO data line to compute from database values
]
),
LatexArraySection(
@@ -292,7 +483,7 @@ TABLE_PBS_BENCH = LatexTable(
M3C3_COL_ELEM,
M4C4_COL_ELEM,
],
# [PFAIL_2M128_ELEM, KSPBS_OP_ELEM_AMORTIZED, M1C1_COL_ELEM, M2C2_COL_ELEM, Precision.M3C3, M4C4_COL_ELEM],
# [PFAIL_2M128_ELEM, KSPBS_OP_ELEM_AMORTIZED, M1C1_COL_ELEM, M2C2_COL_ELEM, Precision.M3C3, M4C4_COL_ELEM], # TODO data line to compute from database values
]
),
]
@@ -496,60 +687,81 @@ TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING = LatexTable(
LatexArraySection(
[
BITAND_OP_AS_COL_ELEM,
[
BITAND_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M1C1_PFAIL_128_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITAND_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_ELEM,
CLASSICAL_PBS_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITAND_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M4C4_PFAIL_128_ELEM,
M2C2_PFAIL_128_GF_2_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITAND_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_GF_3_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITAND_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_GF_4_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
ADD_OP_AS_COL_ELEM,
[
ADD_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M1C1_PFAIL_128_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
ADD_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_ELEM,
CLASSICAL_PBS_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
ADD_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M4C4_PFAIL_128_ELEM,
M2C2_PFAIL_128_GF_2_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
ADD_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_GF_3_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
ADD_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_GF_4_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
MUL_OP_AS_COL_ELEM,
[
MUL_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M1C1_PFAIL_128_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
MUL_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_ELEM,
CLASSICAL_PBS_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
MUL_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M4C4_PFAIL_128_ELEM,
M2C2_PFAIL_128_GF_2_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
MUL_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_GF_3_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
MUL_OP_HIDDEN_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
M2C2_PFAIL_128_GF_4_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
]
@@ -612,16 +824,549 @@ TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING128KS32 = LatexTable(
]
)
# # No LaTex set for this table.
# table_plaintext_ciphertext_ops_pfail64_ks32 = LatexTable()
# No LaTex label set for this table.
TABLE_PLAINTEXT_CIPHERTEXT_OPS_PFAIL64_KS32 = LatexTable(
[
LatexArraySection(
[
[
OVERFLOWING_SCALAR_ADD_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_SCALAR_SUB_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_ADD_OP_ELEM,
SCALAR_ADD_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_BITWISE_OP_ELEM,
SCALAR_BITWISE_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_DIV_OP_ELEM,
SCALAR_DIV_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_EQ_OP_ELEM,
SCALAR_EQ_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_COMPARISON_OP_ELEM,
COMPARISON_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_MUL_OP_ELEM,
SCALAR_MUL_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_REM_OP_ELEM,
SCALAR_DIV_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_SHIFT_OP_ELEM,
SCALAR_SHIFT_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_ROTATE_OP_ELEM,
SCALAR_ROTATE_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_SUB_OP_ELEM,
SCALAR_SUB_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
]
),
]
)
# No LaTex label set for this table.
TABLE_PLAINTEXT_CIPHERTEXT_OPS_PFAIL128_KS32 = LatexTable(
[
LatexArraySection(
[
[
OVERFLOWING_SCALAR_ADD_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_SCALAR_SUB_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_ADD_OP_ELEM,
SCALAR_ADD_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_BITWISE_OP_ELEM,
SCALAR_BITWISE_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_DIV_OP_ELEM,
SCALAR_DIV_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_EQ_OP_ELEM,
SCALAR_EQ_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_COMPARISON_OP_ELEM,
COMPARISON_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_MUL_OP_ELEM,
SCALAR_MUL_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_REM_OP_ELEM,
SCALAR_DIV_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_SHIFT_OP_ELEM,
SCALAR_SHIFT_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_ROTATE_OP_ELEM,
SCALAR_ROTATE_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SCALAR_SUB_OP_ELEM,
SCALAR_SUB_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
]
),
]
)
# No LaTex label set for this table.
TABLE_CIPHERTEXT_CIPHERTEXT_OPS_PFAIL64_KS32 = LatexTable(
[
LatexArraySection(
[
[
ADD_OP_ELEM,
ADD_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITNOT_OP_ELEM,
BITNOT_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITAND_OP_ELEM,
BITWISE_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
DIV_REM_OP_ELEM,
DIV_REM_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
EQ_OP_ELEM,
EQ_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
COMPARISON_OP_ELEM,
COMPARISON_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
IF_THEN_ELSE_OP_ELEM,
IF_THEN_ELSE_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SHIFT_OP_ELEM,
SHIFT_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
MUL_OP_ELEM,
MUL_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
NEGATION_OP_ELEM,
NEGATION_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_SCALAR_ADD_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_MUL_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_SUB_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
ROTATE_OP_ELEM,
ROTATE_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUB_OP_ELEM,
SUB_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUM_CIPHERTEXTS_10_CTXTS_OP_ELEM,
SUM_CIPHERTEXTS_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUM_CIPHERTEXTS_20_CTXTS_OP_ELEM,
SUM_CIPHERTEXTS_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUM_CIPHERTEXTS_5_CTXTS_OP_ELEM,
SUM_CIPHERTEXTS_CREF_ELEM,
PFAIL_2M64_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
]
),
]
)
# No LaTex label set for this table.
TABLE_CIPHERTEXT_CIPHERTEXT_OPS_PFAIL128_KS32 = LatexTable(
[
LatexArraySection(
[
[
ADD_OP_ELEM,
ADD_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITNOT_OP_ELEM,
BITNOT_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
BITAND_OP_ELEM,
BITWISE_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
DIV_REM_OP_ELEM,
DIV_REM_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
EQ_OP_ELEM,
EQ_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
COMPARISON_OP_ELEM,
COMPARISON_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
IF_THEN_ELSE_OP_ELEM,
IF_THEN_ELSE_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SHIFT_OP_ELEM,
SHIFT_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
MUL_OP_ELEM,
MUL_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
NEGATION_OP_ELEM,
NEGATION_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_SCALAR_ADD_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_MUL_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
OVERFLOWING_SUB_OP_ELEM,
OVERFLOWING_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
ROTATE_OP_ELEM,
ROTATE_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUB_OP_ELEM,
SUB_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUM_CIPHERTEXTS_10_CTXTS_OP_ELEM,
SUM_CIPHERTEXTS_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUM_CIPHERTEXTS_20_CTXTS_OP_ELEM,
SUM_CIPHERTEXTS_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
[
SUM_CIPHERTEXTS_5_CTXTS_OP_ELEM,
SUM_CIPHERTEXTS_CREF_ELEM,
PFAIL_2M128_HIDDEN_ELEM,
KS32PBS_HIDDEN_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
],
]
),
]
)
#
# # No LaTex set for this table.
# table_plaintext_ciphertext_ops_pfail128_ks32 = LatexTable()
#
# # No LaTex set for this table.
# table_ciphertext_ciphertext_ops_pfail64_ks32 = LatexTable()
#
# # No LaTex set for this table.
# table_ciphertext_ciphertext_ops_pfail128_ks32 = LatexTable()
#
# table_compression_benchmarks = LatexTable()
TABLE_COMPRESSION_BENCHMARKS = LatexTable(
[
LatexArraySection(
[
[
COMPRESSION_OP_ELEM,
COMPRESSION_REF_ELEM,
PFAIL_2M64_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
_get_operand_size_column_element(512)
],
[
DECOMPRESSION_OP_ELEM,
DECOMPRESSION_REF_ELEM,
PFAIL_2M64_ELEM,
M2C2_HIDDEN_ELEM,
*ALL_OPERAND_SIZES_ELEM,
_get_operand_size_column_element(512)
],
]
),
]
)

View File

@@ -19,10 +19,16 @@ from formatters.core import CoreFormatter
from formatters.integer import IntegerFormatter
from .tables import (
TABLE_BENCH_MULTIBIT_BY_PRECISION,
TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING,
TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING128KS32,
TABLE_COMPARISON_OPERATIONS_PRECISION_PFAIL64,
TABLE_COMPARISON_OPERATIONS_PRECISION_PFAIL128,
TABLE_PBS_BENCH,
TABLE_PLAINTEXT_CIPHERTEXT_OPS_PFAIL64_KS32,
TABLE_PLAINTEXT_CIPHERTEXT_OPS_PFAIL128_KS32,
TABLE_CIPHERTEXT_CIPHERTEXT_OPS_PFAIL64_KS32,
TABLE_CIPHERTEXT_CIPHERTEXT_OPS_PFAIL128_KS32,
TABLE_COMPRESSION_BENCHMARKS,
)
@@ -39,6 +45,7 @@ class ParametersFilterCase:
grouping_factors: list[GroupingFactor] = None,
precisions: list[Precision] = None,
atomic_patterns: list[AtomicPattern] = None,
additional_parameters: list[str] = None,
associated_tables: list[LatexTable] = None,
):
self.param_name_pattern = param_name_pattern
@@ -47,6 +54,8 @@ class ParametersFilterCase:
self.precisions = precisions or []
self.atomic_patterns = atomic_patterns or []
self.additional_parameters = additional_parameters or []
self.associated_tables = associated_tables or []
def get_parameter_variants(self):
@@ -97,7 +106,12 @@ class ParametersFilterCase:
self.param_name_pattern.format_map(Default(atomic_pattern=a))
)
return last_populated or after_atomic_patterns or [self.param_name_pattern]
interpolated_params = (
last_populated or after_atomic_patterns or [self.param_name_pattern]
)
interpolated_params.extend(self.additional_parameters)
return interpolated_params
CORE_CRYPTO_PARAM_CASES = [
@@ -127,7 +141,8 @@ CORE_CRYPTO_PARAM_CASES = [
]
INTEGER_PARAM_CASES = [
# ParametersFilterCase( # TODO Table 5, 6
# # --- Tables 5, 6 ---
# ParametersFilterCase(
# "%PARAM_MESSAGE_{msg}_CARRY_{carry}_KS_PBS_GAUSSIAN_{pfail}", # 1_1, 2_2, 4_4 (pfail: 2m64, 2m128)
# pfails=[
# ErrorFailureProbability.TWO_MINUS_64,
@@ -139,41 +154,53 @@ INTEGER_PARAM_CASES = [
# TABLE_COMPARISON_OPERATIONS_PRECISION_PFAIL128,
# ],
# ),
ParametersFilterCase( # TODO 8
"%PARAM_MESSAGE_2_CARRY_2_{atomic_pattern}_GAUSSIAN_2M128",
atomic_patterns=[
AtomicPattern.KSPBS,
AtomicPattern.KS32PBS,
],
associated_tables=[TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING128KS32],
),
ParametersFilterCase( # TODO Table 9, 10, 11, 12, NEED TO DEAL WITH OPERANDS (ct and plaintext)
"%PARAM_MESSAGE_2_CARRY_2_KS32_PBS_GAUSSIAN_{pfail}",
pfails=[
ErrorFailureProbability.TWO_MINUS_64,
ErrorFailureProbability.TWO_MINUS_128,
],
associated_tables=BLAH,
),
# ParametersFilterCase( # TODO Table 7
# "%PARAM_MULTI_BIT_GROUP_{gf}_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_{pfail}",
# # --- Table 8 ---
# ParametersFilterCase(
# "%PARAM_MESSAGE_2_CARRY_2_{atomic_pattern}_GAUSSIAN_2M128",
# atomic_patterns=[
# AtomicPattern.KSPBS,
# AtomicPattern.KS32PBS,
# ],
# associated_tables=[TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING128KS32],
# ),
# # --- Tables 9, 10, 11, 12 ---
# ParametersFilterCase(
# "%PARAM_MESSAGE_2_CARRY_2_KS32_PBS_GAUSSIAN_{pfail}",
# pfails=[
# ErrorFailureProbability.TWO_MINUS_64,
# ErrorFailureProbability.TWO_MINUS_128,
# ],
# associated_tables=[
# TABLE_PLAINTEXT_CIPHERTEXT_OPS_PFAIL64_KS32,
# TABLE_PLAINTEXT_CIPHERTEXT_OPS_PFAIL128_KS32,
# TABLE_CIPHERTEXT_CIPHERTEXT_OPS_PFAIL64_KS32,
# TABLE_CIPHERTEXT_CIPHERTEXT_OPS_PFAIL128_KS32,
# ],
# ),
# # --- Table 7 ---
# ParametersFilterCase(
# "%PARAM_MULTI_BIT_GROUP_{gf}_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_{pfail}",
# pfails=[
# ErrorFailureProbability.TWO_MINUS_128,
# ],
# grouping_factors=[
# GroupingFactor.Two,
# GroupingFactor.Three,
# GroupingFactor.Four,
# ],
# additional_parameters=["%PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128", ],
# associated_tables=[TABLE_COMPARISON_OPERATIONS_BOOTSTRAPPING, ],
# ),
# ParametersFilterCase( # TODO Table 13
# "%COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_{pfail}",
# pfails=[
# ErrorFailureProbability.TWO_MINUS_64,
# ErrorFailureProbability.TWO_MINUS_128,
# ],
# ),
# # --- Table 13 ---
ParametersFilterCase( # TODO Table 13
# "%COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_{pfail}",
# pfails=[
# ErrorFailureProbability.TWO_MINUS_64,
# ErrorFailureProbability.TWO_MINUS_128,
# ],
"%COMP_PARAM_CUSTOM_BR_LEVEL_1_NOISE_DISTRIB_Gaussian%", # DEBUG
associated_tables=[TABLE_COMPRESSION_BENCHMARKS],
),
]