code: def encrypt_PBEWithSHAAndTwofishCBC(plaintext_data, password, salt, iteration_count):
      
      iv  = derive_key(hashlib.sha1, PURPOSE_IV_MATERIAL,  password, salt, iteration_count, 16)
      key = derive_key(hashlib.sha1, PURPOSE_KEY_MATERIAL, password, salt, iteration_count, 256//8)
  
      plaintext_data = add_pkcs7_padding(plaintext_data, 16)
      plaintext_data = bytearray(plaintext_data)
      plaintext_len = len(plaintext_data)
      assert plaintext_len % 16 == 0
  
      ciphertext = bytearray()
  
      from twofish import Twofish
      cipher = Twofish(key)
  
      last_cipher_block = bytearray(iv)
      for block_offset in range(0, plaintext_len, 16):
          plaintext_block = plaintext_data[block_offset:block_offset+16]
          cipher_block = bytearray(cipher.encrypt(bytes(xor_bytearrays(plaintext_block, last_cipher_block))))
          ciphertext.extend(cipher_block)
          last_cipher_block = cipher_block
  
      return bytes(ciphertext)
docs: Encrypts a value with PBEWithSHAAndTwofishCBC, assuming PKCS#12-generated PBE parameters.
      (Not explicitly defined as an algorithm in RFC 7292, but defined here nevertheless because of the assumption of PKCS#12 parameters).