python bindings: export public keys
authorBen McGinnes <ben@adversary.org>
Wed, 27 Jun 2018 08:51:09 +0000 (18:51 +1000)
committerBen McGinnes <ben@adversary.org>
Thu, 28 Jun 2018 08:48:05 +0000 (18:48 +1000)
* Added functions for exporting public keys to gpg.core in both
  complete form and in minimised form.
* Rather than letting people need to worry about the export modes we
  are simply separating the functions as people would be more familiar
  with from the command line usage anyway.
* Functions added for Context are: ctx.key_export_minimal and
  ctx.key_export as the default or full export.

Signed-off-by: Ben McGinnes <ben@adversary.org>
lang/python/src/core.py

index 8f2e9d8..86a62b5 100644 (file)
@@ -537,7 +537,7 @@ class Context(GpgmeWrapper):
                           managed to run the function without any
                           arguments, while an argument of None triggers
                           the first NODATA of errors.GPGME in the
-                           exception.
+                          exception.
         """
         try:
             self.op_import(data)
@@ -566,6 +566,63 @@ class Context(GpgmeWrapper):
 
         return import_result
 
+    def key_export(self, pattern=None):
+        """Export keys.
+
+        Exports public keys matching the pattern specified.  If no
+        pattern is specified then exports all available keys.
+
+        Keyword arguments:
+        pattern        -- return keys matching pattern (default: all keys)
+
+        Returns:
+                -- A key block containing one or more OpenPGP keys in
+                   either ASCII armoured or binary format as determined
+                   by the Context().
+
+        Raises:
+        GPGMEError     -- as signaled by the underlying library.
+        """
+        data = Data()
+        mode = 0
+        try:
+            self.op_export(pattern, mode, data)
+            data.seek(0, os.SEEK_SET)
+            result = data.read()
+        except GPGMEError as e:
+            result = e
+
+        return result
+
+    def key_export_minimal(self, pattern=None):
+        """Export keys.
+
+        Exports public keys matching the pattern specified in a
+        minimised format.  If no pattern is specified then exports all
+        available keys.
+
+        Keyword arguments:
+        pattern        -- return keys matching pattern (default: all keys)
+
+        Returns: 
+                -- A key block containing one or more minimised OpenPGP
+                   keys in either ASCII armoured or binary format as 
+                   determined by the Context().
+
+        Raises:
+        GPGMEError     -- as signaled by the underlying library.
+"""
+        data = Data()
+        mode = gpgme.GPGME_EXPORT_MODE_MINIMAL
+        try:
+            self.op_export(pattern, mode, data)
+            data.seek(0, os.SEEK_SET)
+            result = data.read()
+        except GPGMEError as e:
+            result = e
+
+        return result
+
     def keylist(self, pattern=None, secret=False,
                 mode=constants.keylist.mode.LOCAL,
                 source=None):