def test_pse_v2_lps_off_pbes1_3des_sha1_decrypt(self): """Test decryption of a v2 PBES1 encrypted PSE with LPS off""" with open(data_filename("pse_v2_lps_off_pbes1_3des_sha1.pse"), "rb") as fd: s = fd.read() pse = SAPPSEFile(s) self.assertRaisesRegexp(ValueError, "Invalid PIN supplied", pse.decrypt, "Some Invalid PIN") pse.decrypt(self.decrypt_pin)
def parse_pse(filename): """Parses a PSE file and produces """ with open(filename, "rb") as f: data = f.read() pse_file = SAPPSEFile(data) if pse_file.enc_cont.algorithm_identifier.alg_id == PKCS12_ALGORITHM_PBE1_SHA_3DES_CBC: pbe_algo = 1 salt = hexlify( pse_file.enc_cont.algorithm_identifier.parameters.salt.val) salt_size = len( pse_file.enc_cont.algorithm_identifier.parameters.salt.val) iterations = pse_file.enc_cont.algorithm_identifier.parameters.iterations.val iv = "" iv_size = len(iv) else: raise Exception("Unsupported encryption algorithm") encrypted_pin = hexlify(pse_file.enc_cont.encrypted_pin.val) encrypted_pin_length = len(pse_file.enc_cont.encrypted_pin.val) return "{}:$pse${}${}${}${}${}${}${}${}:::::\n".format( filename, pbe_algo, iterations, salt_size, salt, iv_size, iv, encrypted_pin_length, encrypted_pin, )
def test_pse_v4_lps_off_pbes1_3des_sha1(self): """Test parsing of a v4 PBES1 encrypted PSE with LPS off""" with open(data_filename("pse_v4_lps_off_pbes1_3des_sha1.pse"), "rb") as fd: s = fd.read() pse = SAPPSEFile(s) self.assertEqual(pse.version, 4) self.assertEqual(pse.enc_cont.algorithm_identifier.alg_id.val, PKCS12_ALGORITHM_PBE1_SHA_3DES_CBC) self.assertEqual(pse.enc_cont.algorithm_identifier.parameters.iterations, self.iterations) self.assertEqual(len(pse.enc_cont.algorithm_identifier.parameters.salt.val), 8)