code: def aes_cbc_pkcs7_encrypt(key, data, iv):
      
  
      if len(key) not in [16, 24, 32]:
          raise ValueError(pretty_message(
              '''
              key must be either 16, 24 or 32 bytes (128, 192 or 256 bits) long - is %s
              ''',
              len(key)
          ))
  
      if not iv:
          iv = rand_bytes(16)
      elif len(iv) != 16:
          raise ValueError(pretty_message(
              '''
              iv must be 16 bytes long - is %s
              ''',
              len(iv)
          ))
  
      return (iv, _encrypt(Security.kSecAttrKeyTypeAES, key, data, iv, Security.kSecPaddingPKCS7Key))
docs: Encrypts plaintext using AES in CBC mode with a 128, 192 or 256 bit key and
      PKCS#7 padding.
  
      :param key:
          The encryption key - a byte string either 16, 24 or 32 bytes long
  
      :param data:
          The plaintext - a byte string
  
      :param iv:
          The initialization vector - either a byte string 16-bytes long or None
          to generate an IV
  
      :raises:
          ValueError - when any of the parameters contain an invalid value
          TypeError - when any of the parameters are of the wrong type
          OSError - when an error is returned by the OS crypto library
  
      :return:
          A tuple of two byte strings (iv, ciphertext)