Not component

class NOT(current_round_number, current_round_number_of_components, input_id_links, input_bit_positions, output_bit_size)

Bases: Component

algebraic_polynomials(model)

Return a list of polynomials for bitwise NOT.

INPUT:

  • modelmodel object; a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel
sage: ascon = AsconPermutation(number_of_rounds=2)
sage: algebraic = AlgebraicModel(ascon)
sage: not_component = ascon.get_component_from_id("not_0_5")
sage: not_component.algebraic_polynomials(algebraic)
[not_0_5_y0 + not_0_5_x0 + 1,
 not_0_5_y1 + not_0_5_x1 + 1,
 not_0_5_y2 + not_0_5_x2 + 1,
...
 not_0_5_y61 + not_0_5_x61 + 1,
 not_0_5_y62 + not_0_5_x62 + 1,
 not_0_5_y63 + not_0_5_x63 + 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 NOT operation in CMS CIPHER model.

See also

SAT standard of Cipher for the format.

INPUT:

  • None

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.cms_constraints()
(['not_0_8_0',
  'not_0_8_1',
  'not_0_8_2',
  ...
  '-not_0_8_30 -xor_0_6_30',
  'not_0_8_31 xor_0_6_31',
  '-not_0_8_31 -xor_0_6_31'])
cms_xor_differential_propagation_constraints(model)
cms_xor_linear_mask_propagation_constraints(model)
cp_constraints()

Return lists of declarations and constraints for NOT component for CP CIPHER model.

INPUT:

  • None

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.cp_constraints()
([],
 ['constraint not_0_8[0] = (xor_0_6[0] + 1) mod 2;',
 ...
  'constraint not_0_8[31] = (xor_0_6[31] + 1) mod 2;'])
cp_deterministic_truncated_xor_differential_constraints()

Return lists of declarations and constraints for NOT for CP deterministic truncated xor differential model.

INPUT:

  • inverseboolean (default: False)

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.cp_deterministic_truncated_xor_differential_constraints()
([],
 ['constraint not_0_8[0] = xor_0_6[0];',
 ...
  'constraint not_0_8[31] = xor_0_6[31];'])
cp_deterministic_truncated_xor_differential_trail_constraints()
cp_wordwise_deterministic_truncated_xor_differential_constraints(model)
cp_xor_differential_first_step_constraints(model)

Return lists of declarations and constraints for NOT component for the CP xor differential first step model.

INPUT:

  • modelmodel 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.not_component import NOT
sage: aes = AESBlockCipher()
sage: cp = MznModel(aes)
sage: not_component = NOT(0, 18, ['sbox_0_2', 'sbox_0_6', 'sbox_0_10', 'sbox_0_14'], [[0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7]], 32)
sage: not_component.cp_xor_differential_first_step_constraints(cp)
(['array[0..3] of var 0..1: not_0_18;'],
 ['constraint not_0_18[0] = sbox_0_2[0];',
  'constraint not_0_18[1] = sbox_0_6[0];',
  'constraint not_0_18[2] = sbox_0_10[0];',
  'constraint not_0_18[3] = sbox_0_14[0];'])
cp_xor_differential_propagation_constraints(model=None)

Return lists of declarations and constraints for NOT component for CP xor differential.

INPUT:

  • modelmodel object (default: None); a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.cp_xor_differential_propagation_constraints()
([],
 ['constraint not_0_8[0] = xor_0_6[0];',
 ...
  'constraint not_0_8[31] = xor_0_6[31];'])
cp_xor_differential_propagation_first_step_constraints(model)
cp_xor_linear_mask_propagation_constraints(model=None)

Return lists of declarations and constraints for NOT component for CP xor linear model.

INPUT:

  • modelmodel object (default: None); a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: ascon = AsconPermutation(number_of_rounds=1)
sage: not_component = ascon.component_from(0, 5)
sage: not_component.cp_xor_linear_mask_propagation_constraints()
(['array[0..63] of var 0..1:not_0_5_i;',
  'array[0..63] of var 0..1:not_0_5_o;'],
 ['constraint not_0_5_o[0]=not_0_5_i[0];',
  ...
  'constraint not_0_5_o[63]=not_0_5_i[63];'])
property description
generic_sign_linear_constraints(inputs)

Return the constraints for finding the sign of an NOT component.

INPUT:

  • inputslist; the input of the NOT component

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: from claasp.components.not_component import NOT
sage: gift = GiftPermutation(number_of_rounds=1)
sage: not_component = gift.component_from(0, 8)
sage: inputs = [0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0]
sage: not_component.generic_sign_linear_constraints(inputs)
1
get_bit_based_vectorized_python_code(params, convert_output_to_bytes)
get_byte_based_vectorized_python_code(params)
get_graph_representation()
get_word_operation_sign(sign, solution)
property id
property input_bit_positions
property input_bit_size
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 for NOT component in deterministic truncated XOR differential model.

INPUTS:

  • componentdict, the NOT component in Graph Representation

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: cipher = GiftPermutation()
sage: from claasp.cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model import MilpBitwiseDeterministicTruncatedXorDifferentialModel
sage: milp = MilpBitwiseDeterministicTruncatedXorDifferentialModel(cipher)
sage: milp.init_model_in_sage_milp_class()
sage: not_component = cipher.component_from(0,8)
sage: variables, constraints = not_component.milp_bitwise_deterministic_truncated_xor_differential_constraints(milp)
sage: variables
[('x_class[xor_0_6_0]', x_0),
 ('x_class[xor_0_6_1]', x_1),
 ...
 ('x_class[not_0_8_30]', x_62),
 ('x_class[not_0_8_31]', x_63)]
sage: constraints
[x_32 == x_0,
 x_33 == x_1,
 ...
 x_62 == x_30,
 x_63 == x_31]
milp_constraints(model)

Return lists of variables and constraints for the NOT component for MILP CIPHER model.

INPUT:

  • modelmodel object; a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: from claasp.cipher_modules.models.milp.milp_model import MilpModel
sage: ascon = AsconPermutation()
sage: milp = MilpModel(ascon)
sage: milp.init_model_in_sage_milp_class()
sage: not_component = ascon.component_from(0,5)
sage: variables, constraints = not_component.milp_constraints(milp)
sage: variables
[('x[xor_0_2_0]', x_0),
('x[xor_0_2_1]', x_1),
...
('x[not_0_5_62]', x_126),
('x[not_0_5_63]', x_127)]
sage: constraints
[x_0 + x_64 == 1,
x_1 + x_65 == 1,
...
x_62 + x_126 == 1,
x_63 + x_127 == 1]
milp_xor_differential_propagation_constraints(model)

Return a list of variables and a list of constraints for the NOT component for MILP xor differential.

INPUT:

  • modelmodel object; a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: from claasp.cipher_modules.models.milp.milp_model import MilpModel
sage: ascon = AsconPermutation()
sage: milp = MilpModel(ascon)
sage: milp.init_model_in_sage_milp_class()
sage: not_component = ascon.component_from(0,5)
sage: variables, constraints = not_component.milp_xor_differential_propagation_constraints(milp)
sage: variables
[('x[xor_0_2_0]', x_0),
('x[xor_0_2_1]', x_1),
...
 ('x[not_0_5_62]', x_126),
 ('x[not_0_5_63]', x_127)]
sage: constraints
[x_64 == x_0,
 x_65 == x_1,
...
 x_126 == x_62,
 x_127 == x_63]
milp_xor_linear_mask_propagation_constraints(model)

Return a list of variables and a list of constraints for the NOT component for MILP xor linear.

INPUT:

  • modelmodel object; a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: from claasp.cipher_modules.models.milp.milp_model import MilpModel
sage: ascon = AsconPermutation()
sage: milp = MilpModel(ascon)
sage: milp.init_model_in_sage_milp_class()
sage: not_component = ascon.component_from(0,5)
sage: variables, constraints = not_component.milp_xor_linear_mask_propagation_constraints(milp)
sage: variables
[('x[not_0_5_0_i]', x_0),
 ('x[not_0_5_1_i]', x_1),
...
 ('x[not_0_5_62_o]', x_126),
 ('x[not_0_5_63_o]', x_127)]
sage: constraints
[x_64 == x_0,
 x_65 == x_1,
...
 x_126 == x_62,
 x_127 == x_63]
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 NOT for SAT DETERMINISTIC TRUNCATED XOR DIFFERENTIAL model

The list of clauses encodes equalities ensuring that input variables are correctly mapped in the output ones during the NOT operation. Note that when performing XOR differential analysis we need equalities. 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.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.sat_bitwise_deterministic_truncated_xor_differential_constraints()
(['not_0_8_0_0',
  'not_0_8_1_0',
  ...
  'not_0_8_30_1',
  'not_0_8_31_1'],
 ['not_0_8_0_0 -xor_0_6_0_0',
  'xor_0_6_0_0 -not_0_8_0_0',
  ...
  'xor_0_6_31_0 xor_0_6_31_1 not_0_8_31_1',
  'xor_0_6_31_0 -xor_0_6_31_1 -not_0_8_31_1'])
sat_constraints()

Return a list of variables and a list of clauses representing NOT for SAT CIPHER model

The list of clauses encodes inequalities ensuring that input variables are correctly negated in the output during the NOT operation. Each clause represents a logical condition where the output variable is the inverse of the corresponding input variable, enforcing the correct negation. These constraints ensure that the output accurately reflects the NOT operation applied to the input.

See also

SAT standard of Cipher for the format.

INPUT:

  • None

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.sat_constraints()
(['not_0_8_0',
  'not_0_8_1',
  ...
  'not_0_8_30',
  'not_0_8_31'],
 ['not_0_8_0 xor_0_6_0',
  '-not_0_8_0 -xor_0_6_0',
  ...
  'not_0_8_31 xor_0_6_31',
  '-not_0_8_31 -xor_0_6_31'])
sat_xor_differential_propagation_constraints(model=None)

Return a list of variables and a list of clauses representing NOT for SAT XOR DIFFERENTIAL model

The list of clauses encodes equalities ensuring that input variables are correctly mapped in the output ones during the NOT operation. Note that when performing XOR differential analysis we need equalities.

See also

SAT standard of Cipher for the format.

INPUT:

  • modelmodel object (default: None); a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.sat_xor_differential_propagation_constraints()
(['not_0_8_0',
  'not_0_8_1',
  ...
  'not_0_8_30',
  'not_0_8_31'],
 ['not_0_8_0 -xor_0_6_0',
  'xor_0_6_0 -not_0_8_0',
  ...
  'not_0_8_31 -xor_0_6_31',
  'xor_0_6_31 -not_0_8_31'])
sat_xor_linear_mask_propagation_constraints(model=None)

Return a list of variables and a list of clauses representing NOT for SAT XOR LINEAR model

The list of clauses encodes equalities ensuring that input variables are correctly mapped in the output ones during the NOT operation. Note that when performing XOR linear analysis we need equalities. Note that encoding symbols for deterministic truncated XOR differential model requires different encodings for input and ouput variables.

See also

SAT standard of Cipher for the format.

INPUT:

  • modelmodel object (default: None); a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.gift_permutation import GiftPermutation
sage: gift = GiftPermutation(number_of_rounds=3)
sage: not_component = gift.component_from(0, 8)
sage: not_component.sat_xor_linear_mask_propagation_constraints()
(['not_0_8_0_i',
  'not_0_8_1_i',
  ...
  'not_0_8_30_o',
  'not_0_8_31_o'],
 ['not_0_8_0_i -not_0_8_0_o',
  'not_0_8_0_o -not_0_8_0_i',
  ...
  'not_0_8_31_i -not_0_8_31_o',
  'not_0_8_31_o -not_0_8_31_i'])
select_bits(code)
select_words(code, word_size, input=True)
set_description(description)
set_id(id_string)
set_input_bit_positions(bit_positions)
smt_constraints()

Return a variable list and SMT-LIB list asserts representing NOT for SMT CIPHER model

The list of asserts encodes inequalities ensuring that input variables are correctly negated in the output during the NOT operation. Each clause represents a logical condition where the output variable is the inverse of the corresponding input variable, enforcing the correct negation. These constraints ensure that the output accurately reflects the NOT operation applied to the input.

INPUT:

  • None

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: ascon = AsconPermutation(number_of_rounds=3)
sage: not_component = ascon.component_from(0, 5)
sage: not_component.smt_constraints()
(['not_0_5_0',
  'not_0_5_1',
  ...
  'not_0_5_62',
  'not_0_5_63'],
 ['(assert (distinct not_0_5_0 xor_0_2_0))',
  '(assert (distinct not_0_5_1 xor_0_2_1))',
  ...
  '(assert (distinct not_0_5_62 xor_0_2_62))',
  '(assert (distinct not_0_5_63 xor_0_2_63))'])
smt_xor_differential_propagation_constraints(model=None)

Return a variable list and SMT-LIB list asserts representing NOT for SMT XOR DIFFERENTIAL model

The list of clauses encodes equalities ensuring that input variables are correctly mapped in the output ones during the NOT operation. Note that when performing XOR differential analysis we need equalities.

INPUT:

  • modelmodel object (default: None); a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: ascon = AsconPermutation(number_of_rounds=3)
sage: not_component = ascon.component_from(0, 5)
sage: not_component.smt_xor_differential_propagation_constraints()
(['not_0_5_0',
  'not_0_5_1',
  ...
  'not_0_5_62',
  'not_0_5_63'],
 ['(assert (= not_0_5_0 xor_0_2_0))',
  '(assert (= not_0_5_1 xor_0_2_1))',
  ...
  '(assert (= not_0_5_62 xor_0_2_62))',
  '(assert (= not_0_5_63 xor_0_2_63))'])
smt_xor_linear_mask_propagation_constraints(model=None)

Return a variable list and SMT-LIB list asserts representing NOT for SMT XOR LINEAR model

The list of clauses encodes equalities ensuring that input variables are correctly mapped in the output ones during the NOT operation. Note that when performing XOR linear analysis we need equalities.

INPUT:

  • modelmodel object (default: None); a model instance

EXAMPLES:

sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation
sage: ascon = AsconPermutation(number_of_rounds=3)
sage: not_component = ascon.component_from(0, 5)
sage: not_component.smt_xor_linear_mask_propagation_constraints()
(['not_0_5_0_i',
  'not_0_5_1_i',
  ...
  'not_0_5_62_o',
  'not_0_5_63_o'],
 ['(assert (= not_0_5_0_i not_0_5_0_o))',
  '(assert (= not_0_5_1_i not_0_5_1_o))',
  ...
  '(assert (= not_0_5_62_i not_0_5_62_o))',
  '(assert (= not_0_5_63_i not_0_5_63_o))'])
property suffixes
property type