code: def encryption_iv(self):
          
  
          encryption_algo = self['algorithm'].native
  
          if encryption_algo in set(['rc2', 'rc5']):
              return self['parameters'].parsed['iv'].native
  
          # For DES/Triple DES and AES the IV is the entirety of the parameters
          octet_string_iv_oids = set([
              'des',
              'tripledes_3key',
              'aes128_cbc',
              'aes192_cbc',
              'aes256_cbc',
              'aes128_ofb',
              'aes192_ofb',
              'aes256_ofb',
          ])
          if encryption_algo in octet_string_iv_oids:
              return self['parameters'].native
  
          if encryption_algo == 'pbes2':
              return self['parameters']['encryption_scheme'].encryption_iv
  
          # All of the PBES1 algos use their KDF to create the IV. For the pbkdf1,
          # the KDF is told to generate a key that is an extra 8 bytes long, and
          # that is used for the IV. For the PKCS#12 KDF, it is called with an id
          # of 2 to generate the IV. In either case, we can't return the IV
          # without knowing the user's password.
          if encryption_algo.find('.') == -1:
              return None
  
          raise ValueError(unwrap(
              '''
              Unrecognized encryption algorithm "%s"
              ''',
              encryption_algo
          ))
docs: Returns the byte string of the initialization vector for the encryption
          scheme. Only the PBES2 stores the IV in the params. For PBES1, the IV
          is derived from the KDF and this property will return None.
  
          :return:
              A byte string or None