SecurityInnovation / PGPy

Pretty Good Privacy for Python
BSD 3-Clause "New" or "Revised" License
313 stars 98 forks source link

method "pgpy.PGPMessage.from_file" failed to load encrypted file, generated from Kleopatra Tool #441

Open singhrajndr opened 1 year ago

singhrajndr commented 1 year ago

Hi , I am decrypting a csv file using pgpy library in databrick(Python). File I am using for test is Kleopatra tool encrypted file.

But the code fails at PGPY method pgpy.PGPMessage.from_file('/dbfs/FileStore/flct/file1_RSA_csv.gpg') And throws error: NotImplementedError: <class 'pgpy.packet.types.Opaque'>

Does not matter I use RSA or ECDSA in Kleopatra to encrypt the file, error remain same. So here is the complete flow.

Registered/Generated Key in Kleopatra based on RSA ( Without +RSA) --> Manually uploaded encrypted file in databrick HDFS file folder --> Called method pgpy.PGPMessage.from_file('/dbfs/FileStore/flct/file1_RSA_csv.gpg') to read the file --> Error

About Kleopatra:
Download Link: https://www.gpg4win.de/index.html Uses: GnuPG 2.4.0 Libgcrypt 1.10.1

CODE STARTS HERE

decrypt_key = """-----BEGIN PGP PRIVATE KEY BLOCK-----

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
=phIl
-----END PGP PRIVATE KEY BLOCK-----
"""
priv_key = pgpy.PGPKey()
priv_key.parse(decrypt_key)
pass

#PGP Deryption start
message_from_file = pgpy.PGPMessage.from_file('/dbfs/FileStore/flct/file1_RSA_csv.gpg')
raw_message = priv_key.decrypt(message_from_file).message
with open('/dbfs/FileStore/flct/file1_RSA_output.csv', "w") as csv_file:
  csv_file.write(raw_message)
print("Decryption Complete :" + str(timer()-t0))