+ # Convert a list of keyring filenames into GPG keyring arguments
+ def WKD.keyring_args(args)
+ return [ "--no-default-keyring",
+ *args.map { |x| "--keyring=" + (x['/'] ? x : "./" + x) } ]
+ end
+
+ # Helper for implementing export filters below
+ def WKD.export(item, id, *args)
+ data, result = Open3.capture2(@@gpg2, "--export", *args,
+ *WKD.keyring_args(item[:keyrings]), id.chomp)
+ raise "gpg failed" unless result.success?
+ return data
+ end
+
+ # Return a list of all key fingerprints known from the given GPG keyrings.
+ def WKD.keys_from_keyrings(*args)
+ fps = {}
+
+ Open3.popen2(@@gpg2,
+ "--with-colons", "--list-keys", *WKD.keyring_args(args)
+ ) do |stdin, stdout, result|
+ stdin.close
+ stdout.each do |line|
+ fields = line.split(":")
+ next if fields[0] != "fpr"
+ fps[fields[9]] = true
+ end
+ stdout.close
+
+ raise "gpg failed" unless result.value.success?
+ end
+
+ return fps.keys
+ end
+
+ # Return a list of all UIDs known from the given GPG keyrings.