aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/docs/dita/howto/part03
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/docs/dita/howto/part03')
-rw-r--r--lang/python/docs/dita/howto/part03/get-key.dita37
-rw-r--r--lang/python/docs/dita/howto/part03/key-counting.dita31
-rw-r--r--lang/python/docs/dita/howto/part03/key-selection.dita53
3 files changed, 121 insertions, 0 deletions
diff --git a/lang/python/docs/dita/howto/part03/get-key.dita b/lang/python/docs/dita/howto/part03/get-key.dita
new file mode 100644
index 00000000..1e3309c2
--- /dev/null
+++ b/lang/python/docs/dita/howto/part03/get-key.dita
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dita PUBLIC "-//OASIS//DTD DITA Composite//EN" "ditabase.dtd">
+<dita>
+ <topic id="topic_j3h_5my_5db">
+ <title>Get Key</title>
+ <body>
+ <p>An alternative method of getting a single key via its fingerprint is available
+ directly within a Context with Context().get_key. This is the preferred method of selecting
+ a key in order to modify it, sign or certify it and for obtaining relevant data about a
+ single key as a part of other functions; when verifying a signature made by that key, for
+ instance.</p>
+ <p>By default this method will select public keys, but it can select secret keys as well.</p>
+ <p>This first example demonstrates selecting the current key of Werner Koch, which is due to
+ expire at the end of 2018:</p>
+ <p>
+ <codeblock id="getkey-1" outputclass="language-python">import gpg
+
+fingerprint = "80615870F5BAD690333686D0F2AD85AC1E42B367"
+key = gpg.Context().get_key(fingerprint)
+ </codeblock>
+ </p>
+ <p>Whereas this example demonstrates selecting the author's current key with the secret key
+ word argument set to True:</p>
+ <p>
+ <codeblock id="getkey-2" outputclass="language-python">import gpg
+
+fingerprint = "DB4724E6FA4286C92B4E55C4321E4E2373590E5D"
+key = gpg.Context().get_key(fingerprint, secret=True)
+ </codeblock>
+ </p>
+ <p>It is, of course, quite possible to select expired, disabled and revoked keys with this
+ function, but only to effectively display information about those keys.</p>
+ <p>It is also possible to use both unicode or string literals and byte literals with the
+ fingerprint when getting a key in this way.</p>
+ </body>
+ </topic>
+</dita>
diff --git a/lang/python/docs/dita/howto/part03/key-counting.dita b/lang/python/docs/dita/howto/part03/key-counting.dita
new file mode 100644
index 00000000..b26fbd2d
--- /dev/null
+++ b/lang/python/docs/dita/howto/part03/key-counting.dita
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dita PUBLIC "-//OASIS//DTD DITA Composite//EN" "ditabase.dtd">
+<dita>
+ <topic id="topic_jgw_wly_5db">
+ <title>Counting Keys</title>
+ <body>
+ <p>Counting the number of keys in your public keybox (<filepath>pubring.kbx</filepath>), the
+ format which has superseded the old keyring format (<filepath>pubring.gpg</filepath> and
+ <filepath>secring.gpg</filepath>), or the number of secret keys is a very simple task.</p>
+ <p>
+ <codeblock id="kc" outputclass="language-python">import gpg
+
+c = gpg.Context()
+seckeys = c.keylist(pattern=None, secret=True)
+pubkeys = c.keylist(pattern=None, secret=False)
+
+seclist = list(seckeys)
+secnum = len(seclist)
+
+publist = list(pubkeys)
+pubnum = len(publist)
+
+print("""
+Number of secret keys: {0}
+Number of public keys: {1}
+""".format(secnum, pubnum))
+</codeblock>
+ </p>
+ </body>
+ </topic>
+</dita>
diff --git a/lang/python/docs/dita/howto/part03/key-selection.dita b/lang/python/docs/dita/howto/part03/key-selection.dita
new file mode 100644
index 00000000..3e51a4da
--- /dev/null
+++ b/lang/python/docs/dita/howto/part03/key-selection.dita
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dita PUBLIC "-//OASIS//DTD DITA Composite//EN" "ditabase.dtd">
+<dita>
+ <topic id="topic_flg_p3y_5db">
+ <title>Key Selection</title>
+ <body>
+ <p>Selecting keys to encrypt to or to sign with will be a common occurrence when working with
+ GPGMe and the means available for doing so are quite simple.</p>
+ <p>They do depend on utilising a Context; however once the data is recorded in another
+ variable, that Context does not need to be the same one which subsequent operations are
+ performed.</p>
+ <p>The easiest way to select a specific key is by searching for that key's key ID or
+ fingerprint, preferably the full fingerprint without any spaces in it. A long key ID will
+ probably be okay, but is not advised and short key IDs are already a problem with some being
+ generated to match specific patterns. It does not matter whether the pattern is upper or
+ lower case.</p>
+ <p>So this is the best method:</p>
+ <p>
+ <codeblock id="keysel-01" outputclass="language-python">import gpg
+
+k = gpg.Context().keylist(pattern="258E88DCBD3CD44D8E7AB43F6ECB6AF0DEADBEEF")
+keys = list(k)
+ </codeblock>
+ </p>
+ <p>This is passable and very likely to be common:</p>
+ <p>
+ <codeblock id="keysel-02" outputclass="language-python">import gpg
+
+k = gpg.Context().keylist(pattern="0x6ECB6AF0DEADBEEF")
+keys = list(k)
+ </codeblock>
+ </p>
+ <p>And this is a really bad idea:</p>
+ <p>
+ <codeblock id="keysel-03" outputclass="language-python">import gpg
+
+k = gpg.Context().keylist(pattern="0xDEADBEEF")
+keys = list(k)
+ </codeblock>
+ </p>
+ <p>Alternatively it may be that the intention is to create a list of keys which all match a
+ particular search string. For instance all the addresses at a particular domain, like
+ this:</p>
+ <p>
+ <codeblock id="keysel-04" outputclass="language-python">import gpg
+
+ncsc = gpg.Context().keylist(pattern="ncsc.mil")
+nsa = list(ncsc)
+ </codeblock>
+ </p>
+ </body>
+ </topic>
+</dita>