Constant component¶
- class Constant(current_round_number, current_round_number_of_components, output_bit_size, value)¶
Bases:
Component- algebraic_polynomials(model)¶
Return a list of polynomials for CONSTANT addition.
INPUT:
model– model object; a model instance
EXAMPLES:
sage: from claasp.ciphers.toys.fancy_block_cipher import FancyBlockCipher sage: from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel sage: fancy = FancyBlockCipher(number_of_rounds=1) sage: constant_component = fancy.get_component_from_id("constant_0_10") sage: algebraic = AlgebraicModel(fancy) sage: constant_component.algebraic_polynomials(algebraic) [constant_0_10_y0, constant_0_10_y1 + 1, constant_0_10_y2, constant_0_10_y3 + 1, constant_0_10_y4 + 1, constant_0_10_y5 + 1, constant_0_10_y6, constant_0_10_y7 + 1, constant_0_10_y8, constant_0_10_y9, constant_0_10_y10 + 1, constant_0_10_y11 + 1, constant_0_10_y12 + 1, constant_0_10_y13, constant_0_10_y14 + 1, constant_0_10_y15 + 1, constant_0_10_y16, constant_0_10_y17 + 1, constant_0_10_y18 + 1, constant_0_10_y19 + 1, constant_0_10_y20 + 1, constant_0_10_y21 + 1, constant_0_10_y22 + 1, constant_0_10_y23 + 1]
- as_python_dictionary()¶
- check_output_size(available_word_sizes, fixed, word_size)¶
- cms_constraints()¶
Return a list of variables and a list of clauses for a CONSTANT in CMS CIPHER model.
See also
SAT standard of Cipher for the format.
INPUT:
None
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=3) sage: constant_component = speck.component_from(2, 0) sage: constant_component.cms_constraints() (['constant_2_0_0', 'constant_2_0_1', 'constant_2_0_2', ... '-constant_2_0_13', '-constant_2_0_14', 'constant_2_0_15'])
- cms_xor_differential_propagation_constraints(model)¶
- cms_xor_linear_mask_propagation_constraints(model=None)¶
- cp_constraints()¶
Return lists of declarations and constraints for CONSTANT component for CP CIPHER model.
INPUT:
None
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=3) sage: constant_component = speck.component_from(2, 0) sage: constant_component.cp_constraints() (['array[0..15] of var 0..1: constant_2_0;'], ['constraint constant_2_0[0] = 0;', 'constraint constant_2_0[1] = 0;', 'constraint constant_2_0[2] = 0;', 'constraint constant_2_0[3] = 0;', 'constraint constant_2_0[4] = 0;', 'constraint constant_2_0[5] = 0;', 'constraint constant_2_0[6] = 0;', 'constraint constant_2_0[7] = 0;', 'constraint constant_2_0[8] = 0;', 'constraint constant_2_0[9] = 0;', 'constraint constant_2_0[10] = 0;', 'constraint constant_2_0[11] = 0;', 'constraint constant_2_0[12] = 0;', 'constraint constant_2_0[13] = 0;', 'constraint constant_2_0[14] = 0;', 'constraint constant_2_0[15] = 0;'])
- cp_deterministic_truncated_xor_differential_trail_constraints()¶
- cp_wordwise_deterministic_truncated_xor_differential_constraints(model)¶
Return lists of declarations and constraints for CONSTANT component for CP wordwise deterministic truncated xor differential.
INPUT:
model– model object; a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher sage: from claasp.cipher_modules.models.cp.mzn_model import MznModel sage: from claasp.components.constant_component import Constant sage: aes = AESBlockCipher(number_of_rounds=3) sage: cp = MznModel(aes) sage: constant_component = Constant(0, 18, 16, 0xAB01) sage: constant_component.cp_wordwise_deterministic_truncated_xor_differential_constraints(cp) (['array[0..1] of var 0..1: constant_0_18_active = array1d(0..1, [0,0]);', 'array[0..1] of var 0..1: constant_0_18_value = array1d(0..1, [0,0]);'], [])
- cp_xor_differential_propagation_constraints(model=None)¶
Return lists of declarations and constraints for CONSTANT component for CP xor differential model.
INPUT:
model– model object (default: None); a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=22) sage: constant_component = speck.component_from(2, 0) sage: constant_component.cp_xor_differential_propagation_constraints() (['array[0..15] of var 0..2: constant_2_0;'], ['constraint constant_2_0[0] = 0;', 'constraint constant_2_0[1] = 0;', 'constraint constant_2_0[2] = 0;', 'constraint constant_2_0[3] = 0;', 'constraint constant_2_0[4] = 0;', 'constraint constant_2_0[5] = 0;', 'constraint constant_2_0[6] = 0;', 'constraint constant_2_0[7] = 0;', 'constraint constant_2_0[8] = 0;', 'constraint constant_2_0[9] = 0;', 'constraint constant_2_0[10] = 0;', 'constraint constant_2_0[11] = 0;', 'constraint constant_2_0[12] = 0;', 'constraint constant_2_0[13] = 0;', 'constraint constant_2_0[14] = 0;', 'constraint constant_2_0[15] = 0;'])
- cp_xor_differential_propagation_first_step_constraints(model)¶
Return lists of declarations and constraints for CONSTANT component for CP xor differential first step.
INPUT:
model– model object; a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher sage: from claasp.cipher_modules.models.cp.mzn_model import MznModel sage: aes = AESBlockCipher(number_of_rounds=3) sage: cp = MznModel(aes) sage: constant_component = aes.component_from(0, 30) sage: constant_component.cp_xor_differential_propagation_first_step_constraints(cp) (['array[0..3] of var 0..1: constant_0_30 = array1d(0..3, [0,0,0,0]);'], [])
- cp_xor_linear_mask_propagation_constraints(model=None)¶
Return lists of declarations and constraints for CONSTANT component for CP xor linear model.
INPUT:
model– model object (default: None); a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=22) sage: constant_component = speck.component_from(2, 0) sage: constant_component.cp_xor_linear_mask_propagation_constraints() (['array[0..15] of var 0..1: constant_2_0_o;'], [])
- property description¶
- get_bit_based_c_code(verbosity)¶
- get_bit_based_vectorized_python_code(params, convert_output_to_bytes)¶
- get_byte_based_vectorized_python_code(params)¶
- get_graph_representation()¶
- get_word_based_c_code(verbosity, word_size, wordstring_variables)¶
- property id¶
- property input_bit_positions¶
- property input_bit_size¶
- property input_id_links¶
- is_forbidden(forbidden_types, forbidden_descriptions)¶
- is_id_equal_to(component_id)¶
- is_power_of_2_word_based(dto)¶
- milp_bitwise_deterministic_truncated_xor_differential_constraints(model)¶
Returns a list of variables and a list of constraints modeling a component of type Constant.
EXAMPLE:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) sage: from claasp.cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model import MilpBitwiseDeterministicTruncatedXorDifferentialModel sage: milp = MilpBitwiseDeterministicTruncatedXorDifferentialModel(speck) sage: milp.init_model_in_sage_milp_class() sage: constant_component = speck.get_component_from_id("constant_1_0") sage: variables, constraints = constant_component.milp_bitwise_deterministic_truncated_xor_differential_constraints(milp) sage: variables [('x_class[constant_1_0_0]', x_0), ('x_class[constant_1_0_1]', x_1), ... ('x_class[constant_1_0_14]', x_14), ('x_class[constant_1_0_15]', x_15)] sage: constraints [x_0 == 0, x_1 == 0, ... x_14 == 0, x_15 == 0]
- milp_wordwise_deterministic_truncated_xor_differential_constraints(model)¶
Returns a list of variables and a list of constraints modeling a component of type Constant for wordwise models.
EXAMPLE:
sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher sage: from claasp.components.constant_component import Constant sage: aes = AESBlockCipher(number_of_rounds=3) sage: from claasp.cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model import MilpWordwiseDeterministicTruncatedXorDifferentialModel sage: milp = MilpWordwiseDeterministicTruncatedXorDifferentialModel(aes) sage: milp.init_model_in_sage_milp_class() sage: constant_component = aes.get_component_from_id("constant_0_30") sage: variables, constraints = constant_component.milp_wordwise_deterministic_truncated_xor_differential_constraints(milp) sage: variables [('x_class[constant_0_30_word_0_class]', x_0), ('x_class[constant_0_30_word_1_class]', x_1), ('x_class[constant_0_30_word_2_class]', x_2), ('x_class[constant_0_30_word_3_class]', x_3)] sage: constraints [x_0 == 0, x_1 == 0, x_2 == 0, x_3 == 0]
- milp_xor_differential_propagation_constraints(model)¶
Return lists of variables and constrains modeling a component of type CONSTANT for MILP xor differential.
INPUT:
model– model object; a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: from claasp.cipher_modules.models.milp.milp_model import MilpModel sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) sage: milp = MilpModel(speck) sage: milp.init_model_in_sage_milp_class() sage: constant_component = speck.get_component_from_id("constant_1_0") sage: variables, constraints = constant_component.milp_xor_differential_propagation_constraints(milp) sage: variables [('x[constant_1_0_0]', x_0), ('x[constant_1_0_1]', x_1), ... ('x[constant_1_0_14]', x_14), ('x[constant_1_0_15]', x_15)] sage: constraints [x_0 == 0, x_1 == 0, ... x_14 == 0, x_15 == 0]
- milp_xor_linear_mask_propagation_constraints(model)¶
Return a list of variables and a list of constraints for CONSTANT component for MILP xor linear.
INPUT:
model– model object; a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: from claasp.cipher_modules.models.milp.milp_model import MilpModel sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=3) sage: milp = MilpModel(speck) sage: milp.init_model_in_sage_milp_class() sage: constant_component = speck.get_component_from_id("constant_2_0") sage: variables, constraints = constant_component.milp_xor_linear_mask_propagation_constraints(milp) sage: variables [('x[constant_2_0_0_o]', x_0), ('x[constant_2_0_1_o]', x_1), ... ('x[constant_2_0_14_o]', x_14), ('x[constant_2_0_15_o]', x_15)] sage: constraints []
- minizinc_deterministic_truncated_xor_differential_trail_constraints(model)¶
- minizinc_xor_differential_propagation_constraints(model)¶
Return variables and constraints for the CONSTANT component for MINIZINC xor differential.
INPUT:
model– model object; a model instance
EXAMPLES:
sage: from claasp.ciphers.toys.fancy_block_cipher import FancyBlockCipher sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_xor_differential_model_arx_optimized import MznXorDifferentialModelARXOptimized sage: fancy = FancyBlockCipher(number_of_rounds=1) sage: minizinc = MznXorDifferentialModelARXOptimized(fancy) sage: constant_component = fancy.get_component_from_id("constant_0_10") sage: _, constant_xor_differential_constraints = constant_component.minizinc_xor_differential_propagation_constraints(minizinc) sage: constant_xor_differential_constraints[6] 'constraint constant_0_10_y6=0;'
- property output_bit_size¶
- output_size_for_concatenate(available_word_sizes, fixed, word_size)¶
- print()¶
- print_as_python_dictionary()¶
- print_values(code)¶
- print_word_values(code)¶
- sat_bitwise_deterministic_truncated_xor_differential_constraints()¶
Return a list of variables and a list of clauses representing CONSTANT for SAT DETERMINISTIC TRUNCATED XOR DIFFERENTIAL model
The list of the constraints is just the binary representation of the value of the constant. Note that encoding symbols for deterministic truncated XOR differential model requires two variables per each symbol.
See also
SAT standard of Cipher for the format.
INPUT:
None
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=3) sage: constant_component = speck.component_from(2, 0) sage: constant_component.sat_bitwise_deterministic_truncated_xor_differential_constraints() (['constant_2_0_0_0', 'constant_2_0_1_0', ... 'constant_2_0_14_1', 'constant_2_0_15_1'], ['-constant_2_0_0_0', '-constant_2_0_1_0', ... '-constant_2_0_14_1', '-constant_2_0_15_1'])
- sat_constraints()¶
Return a list of variables and a list of clauses representing CONSTANT for SAT CIPHER model
The list of the constraints is just the binary representation of the value of the constant.
See also
SAT standard of Cipher for the format.
INPUT:
None
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=3) sage: constant_component = speck.component_from(2, 0) sage: constant_component.sat_constraints() (['constant_2_0_0', 'constant_2_0_1', ... 'constant_2_0_14', 'constant_2_0_15'], ['-constant_2_0_0', '-constant_2_0_1', ... '-constant_2_0_14', 'constant_2_0_15'])
- sat_semi_deterministic_truncated_xor_differential_constraints()¶
- sat_xor_differential_propagation_constraints(model=None)¶
Return a list of variables and a list of clauses representing CONSTANT for SAT XOR DIFFERENTIAL model
The value encoded is always zero for any constant since its contribute to the difference is null.
See also
INPUT:
model– model object (default: None); a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=3) sage: constant_component = speck.component_from(2, 0) sage: constant_component.sat_xor_differential_propagation_constraints() (['constant_2_0_0', 'constant_2_0_1', ... 'constant_2_0_14', 'constant_2_0_15'], ['-constant_2_0_0', '-constant_2_0_1', ... '-constant_2_0_14', '-constant_2_0_15'])
- sat_xor_linear_mask_propagation_constraints(model=None)¶
Return a list of variables and a list of clauses representing CONSTANT for SAT XOR LINEAR model
The list of the clauses is empty since in XOR linear analysis any constant flip the sign if needed.
See also
SAT standard of Cipher for the format.
INPUT:
model– model object (default: None); a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=3) sage: constant_component = speck.component_from(2, 0) sage: constant_component.sat_xor_linear_mask_propagation_constraints() (['constant_2_0_0_o', 'constant_2_0_1_o', 'constant_2_0_2_o', ... 'constant_2_0_14_o', 'constant_2_0_15_o'], [])
- select_bits(code)¶
- select_words(code, word_size, input=True)¶
- set_description(description)¶
- set_id(id_string)¶
- set_input_bit_positions(bit_positions)¶
- set_input_id_links(input_id_links)¶
- smt_constraints()¶
Return a variable list and SMT-LIB list asserts representing CONSTANT for SMT CIPHER model
The list of the constraints is just the binary representation of the value of the constant.
INPUT:
None
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.tea_block_cipher import TeaBlockCipher sage: tea = TeaBlockCipher(number_of_rounds=3) sage: constant_component = tea.component_from(0, 2) sage: constant_component.smt_constraints() (['constant_0_2_0', 'constant_0_2_1', ... 'constant_0_2_30', 'constant_0_2_31'], ['(assert constant_0_2_0)', '(assert (not constant_0_2_1))', ... '(assert (not constant_0_2_30))', '(assert constant_0_2_31)'])
- smt_xor_differential_propagation_constraints(model=None)¶
Return a variable list and SMT-LIB list asserts representing CONSTANT for SMT XOR DIFFERENTIAL model
The value encoded is always zero for any constant since its contribute to the difference is null.
INPUT:
model– model object (default: None); a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.tea_block_cipher import TeaBlockCipher sage: tea = TeaBlockCipher(number_of_rounds=3) sage: constant_component = tea.component_from(0, 2) sage: constant_component.smt_xor_differential_propagation_constraints() (['constant_0_2_0', 'constant_0_2_1', ... 'constant_0_2_30', 'constant_0_2_31'], ['(assert (not constant_0_2_0))', '(assert (not constant_0_2_1))', ... '(assert (not constant_0_2_30))', '(assert (not constant_0_2_31))'])
- smt_xor_linear_mask_propagation_constraints(model=None)¶
Return a variable list and SMT-LIB list asserts representing CONSTANT for SMT XOR LINEAR model
The list of the clauses is empty since in XOR linear analysis any constant flip the sign if needed.
INPUT:
model– model object (default: None); a model instance
EXAMPLES:
sage: from claasp.ciphers.block_ciphers.tea_block_cipher import TeaBlockCipher sage: tea = TeaBlockCipher(number_of_rounds=3) sage: constant_component = tea.component_from(0, 2) sage: constant_component.smt_xor_linear_mask_propagation_constraints() (['constant_0_2_0_o', 'constant_0_2_1_o', 'constant_0_2_2_o', ... 'constant_0_2_30_o', 'constant_0_2_31_o'], [])
- property suffixes¶
- property type¶
- constant_to_repr(val, output_size)¶