gpgme/lang/python/docs/dita/howto/part04/decryption.dita

50 lines
2.3 KiB
Plaintext
Raw Normal View History

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dita PUBLIC "-//OASIS//DTD DITA Composite//EN" "ditabase.dtd">
<dita xml:lang="en-GB">
<topic id="topic_vqx_tqy_5db">
<title>Decryption</title>
<body>
<p>Decrypting something encrypted to a key in one's secret keyring is fairly straight
forward.</p>
<p>In this example code, however, preconfiguring either <codeph>gpg.Context()</codeph> or
<codeph>gpg.core.Context()</codeph> as <codeph>c</codeph> is unnecessary because there is
no need to modify the Context prior to conducting the decryption and since the Context is
only used once, setting it to c simply adds lines for no gain.</p>
<p>
<codeblock id="decry-1" outputclass="language-python">import gpg
ciphertext = input("Enter path and filename of encrypted file: ")
newfile = input("Enter path and filename of file to save decrypted data to: ")
with open(ciphertext, "rb") as cfile:
try:
plaintext, result, verify_result = gpg.Context().decrypt(cfile)
except gpg.errors.GPGMEError as e:
plaintext = None
print(e)
if plaintext is not None:
with open(newfile, "wb") as nfile:
nfile.write(plaintext)
else:
pass
</codeblock>
</p>
<p>The data available in <codeph>plaintext</codeph> following a successful decryption in this
example is the decrypted content as a byte object, the recipient key IDs and algorithms in
<codeph>result</codeph> and the results of verifying any signatures of the data in
<codeph>verify_result</codeph>.</p>
<p>
<note>The graceful handling of <codeph>GPGMEError</codeph> with the try/except statement is
to handle the decryption error message produced if the file <codeph>ciphertext</codeph>,
and thus <codeph>cfile</codeph>, are encrypted with deprecated and insecure methods.
Particularly without MDC integrity checks or utilising deprecated encryption algorithms.
Messages and files encrypted with these are not decrypted with GPGME at all and any user
requiring archival access will need to access it manually with pre-GnuPG 2.3 versions of
the software which meets the requirements of the specific use case.</note>
</p>
<p/>
</body>
</topic>
</dita>