def _cases_cipher(key_size, mult_keys, mult_state, mode='encrypt'): # noqa if mult_keys: keys = np.random.randint(0, 255, (number_of_keys, key_size), dtype='uint8') if mult_state: state = np.random.randint(0, 255, (number_of_keys, 8), dtype='uint8') expected = np.empty((number_of_keys, 8), dtype='uint8') for i, key in enumerate(keys): if key_size == 8: ciphertext = crypto_des.DESCipher(key) elif key_size == 16 or key_size == 24: ciphertext = crypto_des3.DES3Cipher(key) expected[i] = np.frombuffer(getattr(ciphertext, mode)(state[i]), dtype='uint8') else: state = np.random.randint(0, 255, (8), dtype='uint8') expected = np.empty((number_of_keys, 8), dtype='uint8') for i, key in enumerate(keys): if key_size == 8: ciphertext = crypto_des.DESCipher(key) elif key_size == 16 or key_size == 24: ciphertext = crypto_des3.DES3Cipher(key) expected[i] = np.frombuffer(getattr(ciphertext, mode)(state), dtype='uint8') else: keys = np.random.randint(0, 255, (key_size), dtype='uint8') if key_size == 8: ciphertext = crypto_des.DESCipher(keys) elif key_size == 16 or key_size == 24: ciphertext = crypto_des3.DES3Cipher(keys) if mult_state: state = np.random.randint(0, 255, (number_of_keys, 8), dtype='uint8') expected = np.empty((number_of_keys, 8), dtype='uint8') for i, s in enumerate(state): expected[i] = np.frombuffer(getattr(ciphertext, mode)(s), dtype='uint8') else: state = np.random.randint(0, 255, (8), dtype='uint8') expected = np.frombuffer(getattr(ciphertext, mode)(state), dtype='uint8') return { 'keys': keys, 'state': state, 'key_size': key_size, 'expected': expected }