code: def encrypt_ige(plain_text, key, iv):
          
          padding = len(plain_text) % 16
          if padding:
              plain_text += os.urandom(16 - padding)
  
          if cryptg:
              return cryptg.encrypt_ige(plain_text, key, iv)
          if libssl.encrypt_ige:
              return libssl.encrypt_ige(plain_text, key, iv)
  
          iv1 = iv[:len(iv) // 2]
          iv2 = iv[len(iv) // 2:]
  
          aes = pyaes.AES(key)
  
          cipher_text = []
          blocks_count = len(plain_text) // 16
  
          for block_index in range(blocks_count):
              plain_text_block = list(
                  plain_text[block_index * 16:block_index * 16 + 16]
              )
              for i in range(16):
                  plain_text_block[i] ^= iv1[i]
  
              cipher_text_block = aes.encrypt(plain_text_block)
  
              for i in range(16):
                  cipher_text_block[i] ^= iv2[i]
  
              iv1 = cipher_text_block
              iv2 = plain_text[block_index * 16:block_index * 16 + 16]
  
              cipher_text.extend(cipher_text_block)
  
          return bytes(cipher_text)
docs: Encrypts the given text in 16-bytes blocks by using the
          given key and 32-bytes initialization vector.