Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/add alternative impossible differential model #288

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions claasp/cipher.py
Original file line number Diff line number Diff line change
Expand Up @@ -1381,6 +1381,8 @@ def polynomial_system_at_round(self, r):
algebraic_model = AlgebraicModel(self)
return algebraic_model.polynomial_system_at_round(r)

def get_key_schedule(self):
return editor.get_key_schedule(self)
def remove_key_schedule(self):
return editor.remove_key_schedule(self)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
from claasp.cipher_modules.models.cp.solvers import MODEL_DEFAULT_PATH, SOLVER_DEFAULT


class MznDeterministicTruncatedXorDifferentialModel(MznModel):
class MznBitwiseDeterministicTruncatedXorDifferentialModel(MznModel):

def __init__(self, cipher):
super().__init__(cipher)
Expand Down Expand Up @@ -86,11 +86,11 @@ def build_deterministic_truncated_xor_differential_trail_model(self, fixed_varia

EXAMPLES::

sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: from claasp.cipher_modules.models.utils import set_fixed_variables, integer_to_bit_list
sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: fixed_variables = [set_fixed_variables('key', 'equal', range(64), integer_to_bit_list(0, 64, 'little'))]
sage: cp.build_deterministic_truncated_xor_differential_trail_model(fixed_variables)
"""
Expand Down Expand Up @@ -132,9 +132,9 @@ def final_deterministic_truncated_xor_differential_constraints(self, minimize=Fa
EXAMPLES::

sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: speck = SpeckBlockCipher(number_of_rounds=2)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: cp.final_deterministic_truncated_xor_differential_constraints()[:-1]
['solve satisfy;']
"""
Expand Down Expand Up @@ -173,11 +173,11 @@ def find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential

EXAMPLES::

sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.utils import set_fixed_variables
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: speck = SpeckBlockCipher(number_of_rounds=1)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: plaintext = set_fixed_variables(
....: component_id='plaintext',
....: constraint_type='not_equal',
Expand Down Expand Up @@ -233,11 +233,11 @@ def find_all_deterministic_truncated_xor_differential_trails(self, number_of_rou

EXAMPLES::

sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.utils import set_fixed_variables
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: speck = SpeckBlockCipher(number_of_rounds=3)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: plaintext = set_fixed_variables(
....: component_id='plaintext',
....: constraint_type='not_equal',
Expand Down Expand Up @@ -285,11 +285,11 @@ def find_one_deterministic_truncated_xor_differential_trail(self, number_of_roun

EXAMPLES::

sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.utils import set_fixed_variables
sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: speck = SpeckBlockCipher(number_of_rounds=1)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: plaintext = set_fixed_variables(
....: component_id='plaintext',
....: constraint_type='not_equal',
Expand Down Expand Up @@ -340,9 +340,9 @@ def input_deterministic_truncated_xor_differential_constraints(self):
EXAMPLES::

sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: aes = AESBlockCipher()
sage: cp = MznDeterministicTruncatedXorDifferentialModel(aes)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(aes)
sage: cp.input_deterministic_truncated_xor_differential_constraints()
(['array[0..127] of var 0..2: key;',
'array[0..127] of var 0..2: plaintext;',
Expand Down Expand Up @@ -379,9 +379,9 @@ def output_constraints(self, component):
EXAMPLES::

sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: speck = SpeckBlockCipher(number_of_rounds=3)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: output_component = speck.component_from(0, 5)
sage: cp.output_constraints(output_component)
([],
Expand Down Expand Up @@ -412,9 +412,9 @@ def output_inverse_constraints(self, component):
EXAMPLES::

sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model import MznDeterministicTruncatedXorDifferentialModel
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model import MznBitwiseDeterministicTruncatedXorDifferentialModel
sage: speck = SpeckBlockCipher(number_of_rounds=3)
sage: cp = MznDeterministicTruncatedXorDifferentialModel(speck)
sage: cp = MznBitwiseDeterministicTruncatedXorDifferentialModel(speck)
sage: output_component = speck.component_from(0, 5)
sage: cp.output_inverse_constraints(output_component)
([],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
CIPHER_OUTPUT, WORD_OPERATION)


class MznDeterministicTruncatedXorDifferentialModelARXOptimized(MznModel):
class MznBitwiseDeterministicTruncatedXorDifferentialModelARXOptimized(MznModel):

def __init__(self, cipher, window_size_list=None, probability_weight_per_round=None, sat_or_milp='sat'):
super().__init__(cipher, window_size_list, probability_weight_per_round, sat_or_milp)
Expand All @@ -42,9 +42,9 @@ def build_deterministic_truncated_xor_differential_trail_model(self, fixed_varia
EXAMPLES::

sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_deterministic_truncated_xor_differential_model_arx_optimized import MznDeterministicTruncatedXorDifferentialModelARXOptimized
sage: from claasp.cipher_modules.models.cp.mzn_models.mzn_bitwise_deterministic_truncated_xor_differential_model_arx_optimized import MznBitwiseDeterministicTruncatedXorDifferentialModelARXOptimized
sage: speck = SpeckBlockCipher(number_of_rounds=22)
sage: minizinc = MznDeterministicTruncatedXorDifferentialModelARXOptimized(speck)
sage: minizinc = MznBitwiseDeterministicTruncatedXorDifferentialModelARXOptimized(speck)
sage: minizinc.build_deterministic_truncated_xor_differential_trail_model()
...
"""
Expand Down
Loading
Loading