
"""simple docstring"""



import sys

from .dependency_versions_table import deps
from .utils.versions import require_version, require_version_core


# define which module versions we always want to check at run time
# (usually the ones defined in `install_requires` in setup.py)
#
# order specific notes:
# - tqdm must be checked before tokenizers

UpperCamelCase__          =	'python tqdm regex requests packaging filelock numpy tokenizers'.split()
if sys.version_info < (3, 7):
    pkgs_to_check_at_runtime.append('dataclasses')
if sys.version_info < (3, 8):
    pkgs_to_check_at_runtime.append('importlib_metadata')

for pkg in pkgs_to_check_at_runtime:
    if pkg in deps:
        if pkg == "tokenizers":
            # must be loaded here, or else tqdm check may fail
            from .utils import is_tokenizers_available

            if not is_tokenizers_available():
                continue  # not required, check version only if installed

        require_version_core(deps[pkg])
    else:
        raise ValueError(f'can\'t find {pkg} in {deps.keys()}, check dependency_versions_table.py')
def 					lowerCamelCase   (     _snake_case    ,_snake_case=None ):
    require_version(deps[pkg]    ,_snake_case )



"""simple docstring"""



def 					lowerCamelCase   (     _snake_case    ,_snake_case ):
    UpperCAmelCase__	:      Optional[int]     							=					''
    for i in table:
        res += inp[i - 1]
    return res
def 					lowerCamelCase   (     _snake_case ):
    return data[1:] + data[0]
def 					lowerCamelCase   (     _snake_case    ,_snake_case ):
    UpperCAmelCase__	:      str     							=					''
    for i in range(len(_snake_case ) ):
        if a[i] == b[i]:
            res += "0"
        else:
            res += "1"
    return res
def 					lowerCamelCase   (     _snake_case    ,_snake_case ):
    UpperCAmelCase__	:      str     							=					int('0b' + data[0] + data[-1]    ,2 )
    UpperCAmelCase__	:      Optional[Any]     							=					int('0b' + data[1:3]    ,2 )
    return bin(s[row][col] )[2:]
def 					lowerCamelCase   (     _snake_case    ,_snake_case    ,_snake_case    ,_snake_case    ,_snake_case ):
    UpperCAmelCase__	:      Any     							=					message[:4]
    UpperCAmelCase__	:      Optional[Any]     							=					message[4:]
    UpperCAmelCase__	:      Dict     							=					apply_table(_snake_case    ,_snake_case )
    UpperCAmelCase__	:      Optional[Any]     							=					xor(_snake_case    ,_snake_case )
    UpperCAmelCase__	:      Dict     							=					apply_sbox(_snake_case    ,temp[:4] )  # noqa: E741
    UpperCAmelCase__	:      Tuple     							=					apply_sbox(_snake_case    ,temp[4:] )
    UpperCAmelCase__	:      List[str]     							=					'0' * (2 - len(_snake_case )) + l  # noqa: E741
    UpperCAmelCase__	:      Optional[Any]     							=					'0' * (2 - len(_snake_case )) + r
    UpperCAmelCase__	:      Optional[int]     							=					apply_table(l + r    ,_snake_case )
    UpperCAmelCase__	:      Any     							=					xor(_snake_case    ,_snake_case )
    return temp + right


if __name__ == "__main__":
    UpperCamelCase__          =	input('Enter 10 bit key: ')
    UpperCamelCase__          =	input('Enter 8 bit message: ')

    UpperCamelCase__          =	[6, 3, 7, 4, 8, 5, 10, 9]
    UpperCamelCase__          =	[3, 5, 2, 7, 4, 10, 1, 9, 8, 6]
    UpperCamelCase__          =	[2, 4, 3, 1]
    UpperCamelCase__          =	[2, 6, 3, 1, 4, 8, 5, 7]
    UpperCamelCase__          =	[4, 1, 3, 5, 7, 2, 8, 6]
    UpperCamelCase__          =	[4, 1, 2, 3, 2, 3, 4, 1]
    UpperCamelCase__          =	[[1, 0, 3, 2], [3, 2, 1, 0], [0, 2, 1, 3], [3, 1, 3, 2]]
    UpperCamelCase__          =	[[0, 1, 2, 3], [2, 0, 1, 3], [3, 0, 1, 0], [2, 1, 0, 3]]

    # key generation
    UpperCamelCase__          =	apply_table(key, paa_table)
    UpperCamelCase__          =	temp[:5]
    UpperCamelCase__          =	temp[5:]
    UpperCamelCase__          =	left_shift(left)
    UpperCamelCase__          =	left_shift(right)
    UpperCamelCase__          =	apply_table(left + right, pa_table)
    UpperCamelCase__          =	left_shift(left)
    UpperCamelCase__          =	left_shift(right)
    UpperCamelCase__          =	left_shift(left)
    UpperCamelCase__          =	left_shift(right)
    UpperCamelCase__          =	apply_table(left + right, pa_table)

    # encryption
    UpperCamelCase__          =	apply_table(message, IP)
    UpperCamelCase__          =	function(expansion, sa, sa, keya, temp)
    UpperCamelCase__          =	temp[4:] + temp[:4]
    UpperCamelCase__          =	function(expansion, sa, sa, keya, temp)
    UpperCamelCase__          =	apply_table(temp, IP_inv)
    print('Cipher text is:', CT)

    # decryption
    UpperCamelCase__          =	apply_table(CT, IP)
    UpperCamelCase__          =	function(expansion, sa, sa, keya, temp)
    UpperCamelCase__          =	temp[4:] + temp[:4]
    UpperCamelCase__          =	function(expansion, sa, sa, keya, temp)
    UpperCamelCase__          =	apply_table(temp, IP_inv)
    print('Plain text after decypting is:', PT)

