[git] GPGME - branch, aheinecke/json-test, updated. gpgme-1.12.0-61-gdd4b80a

by Andre Heinecke cvs at cvs.gnupg.org
Wed Nov 14 15:16:02 CET 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, aheinecke/json-test has been updated
       via  dd4b80a5f640232bb44eb825ff5a74ec295fad10 (commit)
       via  9a31fdcb11d04d47dfcc38a8409b84436c549108 (commit)
       via  e55e467d5ffb32c428566a876616d309ef2d15cd (commit)
       via  ca2e2b3d6973b1f942571ba65bd8b57153847777 (commit)
       via  5b61c092e7444749b08e39ac5aa9fb0818e1a076 (commit)
       via  9933641cce595ba308d0f3a1f3ae8f13a9743dd1 (commit)
       via  3e5684d99b881787f9739e53fd8e8c22eadc2146 (commit)
      from  0c31837766e016227b3c8dfd44c476949cd4741e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit dd4b80a5f640232bb44eb825ff5a74ec295fad10
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 15:15:21 2018 +0100

    tests,json: Add the bulk of tests
    
    * t-json.c (tests): Register new tests.
    * t-createkey.in.json,
      t-createkey.out.json,
      t-decrypt-verify.in.json,
      t-decrypt-verify.out.json,
      t-decrypt.in.json,
      t-decrypt.out.json,
      t-delete.in.json,
      t-delete.out.json,
      t-encrypt-sign.in.json,
      t-encrypt-sign.out.json,
      t-encrypt.in.json,
      t-encrypt.out.json,
      t-export-secret-info.in.json,
      t-export-secret-info.out.json,
      t-export.in.json,
      t-export.out.json,
      t-json.c,
      t-keylist-secret.in.json,
      t-keylist-secret.out.json,
      t-keylist.in.json,
      t-keylist.out.json,
      t-verify.in.json,
      t-verify.out.json,
      t-version.in.json,
      t-version.out.json: New.
    
    --
    Except for help and getmore there is now a test for each command.

diff --git a/tests/json/t-createkey.in.json b/tests/json/t-createkey.in.json
new file mode 100644
index 0000000..95dc92a
--- /dev/null
+++ b/tests/json/t-createkey.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "createkey",
+    "userid": "foo at bar.baz",
+    "algo": "rsa1024"
+}
diff --git a/tests/json/t-createkey.out.json b/tests/json/t-createkey.out.json
new file mode 100644
index 0000000..eb88671
--- /dev/null
+++ b/tests/json/t-createkey.out.json
@@ -0,0 +1,3 @@
+{
+   "fingerprint":  "*"
+}
diff --git a/tests/json/t-decrypt-verify.in.json b/tests/json/t-decrypt-verify.in.json
new file mode 100644
index 0000000..c907106
--- /dev/null
+++ b/tests/json/t-decrypt-verify.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "decrypt",
+    "base64": true,
+    "data": "hQEOA2rm1+5GqHH4EAP+NCYW3vVuCLDTUYhBaKHNgp4fMq9TNACH2NiZyVSaYLe0VE+2LLurHN/XLwlP7xhl2XijBUe6Q7M+KyoPd9iNIgX9q914dPUN0Q3sJinSbujnFzsy0L2x6kgUJCK/XA7rp0VpmJGUWIQYAET8Xx6SaWd2XxIdIITUz2MqrTzWrgED/iOuRxuT4loNJ/DM2YrOZr0He25SxJskg0t1bik2nM+wHAbJrSa6BqPJYU4scnG6AH0RRxFV177ADjOcBLeutXw7DE+6YOExWZD2Fb0oax/ppDulMudrJnj6Wg5/EHbBLDF96Xd6vQX1rcHmrxImvaQNbavEKswlDZgoYwaV7PYPhQEOAwQHH7gHKHE0EAP/So0a3deCbXVSPkABRO3yZa6kHcVuO5+lTsunfxav1TwaMkBOiK6usRz2zt3rjozNrh3vXn3o2WpFKebwhIUF0q2qPw3OKIGq9jFT63t+DPjpbSorAevmVqXWdmaqDPJZ/QIY6NkBhprTdIGPSTFh66eggQLz+BBUVx2myM7AqgcD/3PnOGIiqINQzFkfa6lHiV/TZ8AaMNfvyx4FFG4Zi45ZnDwLCJZ+J7ATXzECauEDLzhjk8M9OP0PwFT1WsnWefKDSLzbO5hEnf8NYdY6i8f2MJKYcnpeI4PZA3OK9ovmAoJl31K+/vBJRP4kiJ4Weu7fzMi6Zz87tfHDEpbRR7N80qoBTlT7I044LG5OJKgQukb7HOv+c668i56UzZVgz+LCsFpjYEFTlrPVR5Me3PjSSb8M+tt9NUjenNnghJEcxeD902YJcqgRWPotouzx5fKDTay/LofFqckEWGlP5pnkeNfYIBIaSSrG/KcdQ0rPOAxKrZzIifYVwnJm/ISxU6uMpNfDJGOJppf4xqXgTKBdIsCljg5LlgNvGhNMYaXQkGQInzXvLSUbxLerWw=="
+}
diff --git a/tests/json/t-decrypt-verify.out.json b/tests/json/t-decrypt-verify.out.json
new file mode 100644
index 0000000..fc60327
--- /dev/null
+++ b/tests/json/t-decrypt-verify.out.json
@@ -0,0 +1,56 @@
+{
+    "dec_info":     {
+        "symkey_algo":  "TWOFISH.CFB",
+        "wrong_key_usage":      false,
+        "is_de_vs":     false,
+        "is_mime":      false,
+        "legacy_cipher_nomdc":  false,
+        "recipients":   [{
+            "keyid":        "6AE6D7EE46A871F8",
+            "pubkey_algo_name":     "ELG-E",
+            "status_string":        "Success",
+            "status_code":  0
+        }, {
+        "keyid":        "04071FB807287134",
+        "pubkey_algo_name":     "ELG-E",
+        "status_string":        "No secret key",
+        "status_code":  117440529
+        }]
+    },
+    "info": {
+        "is_mime":      false,
+        "signatures":   [{
+            "summary":      {
+                "sigsum":       [],
+                "valid":        false,
+                "green":        false,
+                "red":  false,
+                "revoked":      false,
+                "key-expired":  false,
+                "sig-expired":  false,
+                "key-missing":  false,
+                "crl-missing":  false,
+                "crl-too-old":  false,
+                "bad-policy":   false,
+                "sys-error":    false
+            },
+            "wrong_key_usage":      false,
+            "chain_model":  false,
+            "is_de_vs":     false,
+            "status_string":        "Success",
+            "fingerprint":  "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+            "validity_string":      "unknown",
+            "pubkey_algo_name":     "DSA",
+            "hash_algo_name":       "RIPEMD160",
+            "status_code":  0,
+            "timestamp":    1542200353,
+            "exp_timestamp":        0,
+            "pka_trust":    0,
+            "validity":     0,
+            "validity_reason":      0
+        }]
+    },
+    "type": "plaintext",
+    "base64":       false,
+    "data": "Hello world"
+}
diff --git a/tests/json/t-decrypt.in.json b/tests/json/t-decrypt.in.json
new file mode 100644
index 0000000..52987d7
--- /dev/null
+++ b/tests/json/t-decrypt.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "decrypt",
+    "data": "hQEOA2rm1+5GqHH4EAQAhzzu7VYpE9vFVdqkAALRHSyz8698b8MES7j5ldzXGVnGSWmN0+YXGyWyeB5tnAXAvUiV10tzoiNaPXoNeOFrHQOWrDsQ1vYukdtblDc3FW/Ywf7aelcFIGh9qydmkPX/EPeULsbgdZp6sybGoPpEuxzb4CYeRjogB9VvPCRAPb4D/1hRdpoVgWI78JvaeI+xwrP71RuHggZEsM8FSYFBD8c5dY+iAHbPSBI6QSZMvMHCu8YVlV40rHFjjoKQ1ox9DHHyvaZkwAZbI/U7+CYZoPoXMAARjCCCW4TIB3VrM70QLjnLSVfWaCtTnYp2KWaRae0Ze7yPt/h1dYe4ofn/O3UH0kEBqJ99Srtrmr9UWdgikgrWCz5TAV27g2vsZubfMe8vC1QnqASazyBy74ibvrXrIvHnhHQvPCkZFRdbgYhV/+KQIQ==",
+    "base64": true
+}
diff --git a/tests/json/t-decrypt.out.json b/tests/json/t-decrypt.out.json
new file mode 100644
index 0000000..eb52dc8
--- /dev/null
+++ b/tests/json/t-decrypt.out.json
@@ -0,0 +1,16 @@
+{
+    "dec_info":     {
+        "wrong_key_usage":      false,
+            "is_de_vs":     false,
+            "is_mime":      false,
+            "legacy_cipher_nomdc":  false,
+            "recipients":   [{
+                "pubkey_algo_name":     "ELG-E",
+                "status_string":        "Success",
+                "status_code":  0
+            }]
+    },
+    "type": "plaintext",
+    "base64": false,
+    "data": "Hello\n"
+}
diff --git a/tests/json/t-delete.in.json b/tests/json/t-delete.in.json
new file mode 100644
index 0000000..a1e7d3d
--- /dev/null
+++ b/tests/json/t-delete.in.json
@@ -0,0 +1,4 @@
+{
+    "op": "delete",
+    "key": "E8143C489C8D41124DC40D0B47AF4B6961F04784"
+}
diff --git a/tests/json/t-delete.out.json b/tests/json/t-delete.out.json
new file mode 100644
index 0000000..3041e49
--- /dev/null
+++ b/tests/json/t-delete.out.json
@@ -0,0 +1,3 @@
+{
+   "success":      true
+}
diff --git a/tests/json/t-encrypt-sign.in.json b/tests/json/t-encrypt-sign.in.json
new file mode 100644
index 0000000..45e1d0b
--- /dev/null
+++ b/tests/json/t-encrypt-sign.in.json
@@ -0,0 +1,8 @@
+{
+    "op": "encrypt",
+    "keys": ["alpha at example.net", "victor at example.org"],
+    "signing_keys": ["A0FF4590BB6122EDEF6E3C542D727CC768697734"],
+    "data": "Hello world",
+    "armor": true,
+    "always-trust": true
+}
diff --git a/tests/json/t-encrypt-sign.out.json b/tests/json/t-encrypt-sign.out.json
new file mode 100644
index 0000000..875ad08
--- /dev/null
+++ b/tests/json/t-encrypt-sign.out.json
@@ -0,0 +1,4 @@
+{
+   "type": "ciphertext",
+   "base64":       false
+}
diff --git a/tests/json/t-encrypt.in.json b/tests/json/t-encrypt.in.json
new file mode 100644
index 0000000..35dc2c9
--- /dev/null
+++ b/tests/json/t-encrypt.in.json
@@ -0,0 +1,8 @@
+{
+    "op": "encrypt",
+    "keys": ["bravo at example.net", "alpha at example.net"],
+    "data": "Hello world",
+    "file_name": "test.txt",
+    "armor": false,
+    "always-trust": true
+}
diff --git a/tests/json/t-encrypt.out.json b/tests/json/t-encrypt.out.json
new file mode 100644
index 0000000..6fc4158
--- /dev/null
+++ b/tests/json/t-encrypt.out.json
@@ -0,0 +1,4 @@
+{
+   "type": "ciphertext",
+   "base64":       true
+}
diff --git a/tests/json/t-export-secret-info.in.json b/tests/json/t-export-secret-info.in.json
new file mode 100644
index 0000000..d5c37f5
--- /dev/null
+++ b/tests/json/t-export-secret-info.in.json
@@ -0,0 +1,6 @@
+{
+    "op": "export",
+    "keys": "alpha at example.net",
+    "armor": true,
+    "with-sec-fprs":true
+}
diff --git a/tests/json/t-export-secret-info.out.json b/tests/json/t-export-secret-info.out.json
new file mode 100644
index 0000000..32ee650
--- /dev/null
+++ b/tests/json/t-export-secret-info.out.json
@@ -0,0 +1,6 @@
+{
+   "type": "keys",
+   "base64":       false,
+   "data": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp\nctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy\nhOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj\nVeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU\n/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p\n+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5\ncjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS\n09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+\nlPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5arQpQWxwaGEgVGVz\ndCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOOngML\nCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AKCBLmRplv/8ZfSqep5IjqEAuaXv\nWwCgl6NEzT+/WewPTGcwZY+pLkycLv2IVQQTEQIAFQUCNuOOngMLCgMDFQMCAxYC\nAQIXgAAKCRAtcnzHaGl3NDl4AJ4rouHB+LpCkNi5C59jHEa1kbANzACgmddtrNSj\n1yPyTCwUwRghPUomECS0EEFsaWNlIChkZW1vIGtleSmIVQQTEQIAFQUCNuO2qwML\nCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NCeMAJ9MeUVrago5Jc6PdwdeN5OMwby3\n7QCghW65cZTQlD1bBlIq/QM8bz9AN4G0J0FsZmEgVGVzdCAoZGVtbyBrZXkpIDxh\nbGZhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247hYAwsKAwMVAwIDFgIBAheAAAoJ\nEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nvuo8JZri4PJ/DAJ9dqbmaJdB8FdJnHfGh\n1rXK3y/JcrkBDQQ2448PEAQAnI3XH1f0uyN9fZnw72zsHMw706g7EW29nD4UDQG4\nOzRZViSrUa5n39eI7QrfTO+1meVvs0y8F/PvFst5jH68rPLnGSrXz4sTl1T4cop1\nFBkquvCAKwPLy0lE7jjtCyItOSwIOo8xoTfY4JEEXmcqsbm+KHv9yYSF/YK4Cf7b\nIzcAAwcD/Rnl5jKxoucDA96pD2829TKsLFQSau+Xiy8bvOSSDdlyABsOkNBSaeKO\n3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxOWYEQYlaMrnRBC4DZ2IadzEhLlIOz5BVp\n/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siUUvlei9boD9L2ZgSOHakPiEYEGBECAAYF\nAjbjjw8ACgkQLXJ8x2hpdzQgqQCfcDXmD8uNVdKg/C9vqI3JSndqknsAnRxzVeHi\n/iJ73OCKtvFrHbV9Gogq\n=6f6v\n-----END PGP PUBLIC KEY BLOCK-----\n",
+   "sec-fprs":     ["A0FF4590BB6122EDEF6E3C542D727CC768697734"]
+}
diff --git a/tests/json/t-export.in.json b/tests/json/t-export.in.json
new file mode 100644
index 0000000..831369e
--- /dev/null
+++ b/tests/json/t-export.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "export",
+    "keys": "victor at example.org",
+    "armor": true
+}
diff --git a/tests/json/t-export.out.json b/tests/json/t-export.out.json
new file mode 100644
index 0000000..104fa43
--- /dev/null
+++ b/tests/json/t-export.out.json
@@ -0,0 +1,5 @@
+{
+   "type": "keys",
+   "base64": false,
+   "data": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQGiBDbjs5oRBACjAxqGzA6j190iiN/1vJvS5jYLQ1H3xxhzXdZ6ZxjPJkslX1ox\nFqBINhjzBJnV9/7b1FFe5089NiCcGUVZa2xD3Vu+niLTAGNTQeNy6Y0E6wEfvplQ\nLJbpVGOmuVeZyShHNCKjrsZFtS1mr7o19SUb5QWS3gZHabFTbmhibcFBXwCg36qG\nVAnGcZzvnUTGpRy3xjp+zuED/2qTJNpnPhicKSksVwb6EJFXH7mQSZlyblAnOAVF\nMx19GUijW4MWP5FUdcTd5KzIDgkenRLBrpCLIFVkQ4/baP/hOiCLOmCoRu3xnFyo\nRPM/Jn94Qy3Jo2wigwkhQU+zyOU5C85QBD9ctkbYp/0mu9bpxmYTchHwD1v3dXUX\nEVajA/9lnEz1GiI0bwKpm8VKXp0YYP5hea8Jh5fNVb1QW2QqGd+XNHnRGSqX5smG\nyrs+xoYxD8+jv1FhmGaSv+6+n+JBVK4TuWrQpZ0cgZL5jZnX27TOYXeY4d5YKgE+\n7ZO57TwCIfF/P6puflGm+t5GcFwj4kkfohMEaeNhm1S+xf29q7QrVmljdG9yIFRl\nc3QgKGRlbW8ga2V5KSA8dmljdG9yQGV4YW1wbGUub3JnPohVBBMRAgAVBQI247Oa\nAwsKAwMVAwIDFgIBAheAAAoJEEevS2lh8EeEzEkAoMA+KfY9bA8EdfvWwa8zUM1S\nMs5rAKDS+6X3HVuCaLtVxzXOob+DKbB7b7kBDQQ247O+EAQAh5FAgdvaTJL3jBGc\njYiiJosxeTWf3L/dUY99fZN8R39DSVoUKf9Rt/EsS5DywXVnKAeJiUTYw8lbMRVF\n70VhSDHpMC9KtbB0lk3CcAqULPiyirT5g9ywN24W7k0naWIJisttUh+Hqbm6gc5P\nz9Nfd5ll8x4Ehi3lKE6Nze3gUNMAAwUD/AtUN1hqwWTTphVZctHq3JaUEb9agmu/\nOcsf24/bq9i8R8FaMwBF4fI5qIimcqAM+2BZ6dvZEdqrVaZR9aHjzchcHmaiI7Zm\nW4gmk+LHFFWf9y7mG8YDKFBXkaBuJpxFb1FIfJpmaLzJmRa76dLqI3A7H2E8dFQa\n/MGsYCa4NmILiEUEGBECAAYFAjbjs74ACgkQR69LaWHwR4RT3QCgnMlRAiGtvL5l\nD4Gdo5F0KEP5zZEAlA6Ri9WmZ9Xiqw5R3Bsg+As8sJ4=\n=FRd4\n-----END PGP PUBLIC KEY BLOCK-----\n"
+}
diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index f5b2793..1f45feb 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -36,7 +36,15 @@
 #include "../../src/cJSON.h"
 
 /* Register tests here */
-static const char*tests[] = { "t-keylist", "t-config", "t-keylist", NULL };
+static const char*tests[] = { "t-config", "t-version",
+    "t-keylist", "t-keylist-secret", "t-decrypt", "t-config-opt",
+    "t-encrypt", "t-encrypt-sign", "t-sign", "t-verify",
+    "t-decrypt-verify", "t-export", "t-createkey",
+    "t-export-secret-info",
+    /* For these two the order is important
+     * as t-import imports the deleted key from t-delete */
+    "t-delete", "t-import",
+    NULL };
 
 static int verbose = 0;
 
diff --git a/tests/json/t-keylist-secret.in.json b/tests/json/t-keylist-secret.in.json
new file mode 100644
index 0000000..22292a7
--- /dev/null
+++ b/tests/json/t-keylist-secret.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "keylist",
+    "keys": [ "bravo at example.net", "alpha at example.net" ],
+    "with-secret": true
+}
diff --git a/tests/json/t-keylist-secret.out.json b/tests/json/t-keylist-secret.out.json
new file mode 100644
index 0000000..5da20db
--- /dev/null
+++ b/tests/json/t-keylist-secret.out.json
@@ -0,0 +1,163 @@
+{
+    "keys": [{
+        "revoked":      false,
+            "expired":      false,
+            "disabled":     false,
+            "invalid":      false,
+            "can_encrypt":  true,
+            "can_sign":     true,
+            "can_certify":  true,
+            "can_authenticate":     true,
+            "secret":       true,
+            "is_qualified": false,
+            "protocol":     "OpenPGP",
+            "fingerprint":  "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+            "subkeys":      [{
+                "revoked":      false,
+                "expired":      false,
+                "disabled":     false,
+                "invalid":      false,
+                "can_encrypt":  false,
+                "can_sign":     true,
+                "can_certify":  true,
+                "can_authenticate":     true,
+                "is_qualified": false,
+                "is_cardkey":   false,
+                "is_de_vs":     false,
+                "pubkey_algo_name":     "DSA",
+                "pubkey_algo_string":   "dsa1024",
+                "keyid":        "2D727CC768697734",
+                "keygrip":      "76F7E2B35832976B50A27A282D9B87E44577EB66",
+                "pubkey_algo":  17,
+                "length":       1024,
+                "timestamp":    920882846,
+                "expires":      0
+            }, {
+                "revoked":      false,
+                    "expired":      false,
+                    "disabled":     false,
+                    "invalid":      false,
+                    "can_encrypt":  true,
+                    "can_sign":     false,
+                    "can_certify":  false,
+                    "can_authenticate":     false,
+                    "is_qualified": false,
+                    "is_cardkey":   false,
+                    "is_de_vs":     false,
+                    "pubkey_algo_name":     "ELG-E",
+                    "pubkey_algo_string":   "elg1024",
+                    "keyid":        "6AE6D7EE46A871F8",
+                    "keygrip":      "A0747D5F9425E6664F4FFBEED20FBCA79FDED2BD",
+                    "pubkey_algo":  16,
+                    "length":       1024,
+                    "timestamp":    920882959,
+                    "expires":      0
+            }],
+            "userids":      [{
+                "revoked":      false,
+                "invalid":      false,
+                "validity":     "unknown",
+                "uid":  "Alfa Test (demo key) <alfa at example.net>",
+                "name": "Alfa Test",
+                "email":        "alfa at example.net",
+                "comment":      "demo key",
+                "address":      "alfa at example.net"
+            }, {
+                "revoked":      false,
+                "invalid":      false,
+                "validity":     "unknown",
+                "uid":  "Alpha Test (demo key) <alpha at example.net>",
+                "name": "Alpha Test",
+                "email":        "alpha at example.net",
+                "comment":      "demo key",
+                "address":      "alpha at example.net"
+            }, {
+                "revoked":      false,
+                    "invalid":      false,
+                    "validity":     "unknown",
+                    "uid":  "Alice (demo key)",
+                    "name": "Alice",
+                    "email":        "",
+                    "comment":      "demo key",
+                    "origin":       0,
+                    "last_update":  0
+            }]
+    }, {
+        "revoked":      false,
+            "expired":      false,
+            "disabled":     false,
+            "invalid":      false,
+            "can_encrypt":  true,
+            "can_sign":     true,
+            "can_certify":  true,
+            "can_authenticate":     true,
+            "secret":       true,
+            "is_qualified": false,
+            "protocol":     "OpenPGP",
+            "fingerprint":  "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
+            "owner_trust":  "unknown",
+            "origin":       0,
+            "last_update":  0,
+            "subkeys":      [{
+                "revoked":      false,
+                "expired":      false,
+                "disabled":     false,
+                "invalid":      false,
+                "can_encrypt":  false,
+                "can_sign":     true,
+                "can_certify":  true,
+                "can_authenticate":     true,
+                "secret":       false,
+                "is_qualified": false,
+                "is_cardkey":   false,
+                "is_de_vs":     false,
+                "pubkey_algo_name":     "DSA",
+                "pubkey_algo_string":   "dsa1024",
+                "keyid":        "FE180B1DA9E3B0B2",
+                "keygrip":      "6D62909991D2331E5F4F605BC4DD738F30E6D26B",
+                "pubkey_algo":  17,
+                "length":       1024,
+                "timestamp":    920888034,
+                "expires":      0
+            }, {
+                "revoked":      false,
+                    "expired":      false,
+                    "disabled":     false,
+                    "invalid":      false,
+                    "can_encrypt":  true,
+                    "can_sign":     false,
+                    "can_certify":  false,
+                    "can_authenticate":     false,
+                    "secret":       false,
+                    "is_qualified": false,
+                    "is_cardkey":   false,
+                    "is_de_vs":     false,
+                    "pubkey_algo_name":     "ELG-E",
+                    "pubkey_algo_string":   "elg1024",
+                    "keyid":        "5381EA4EE29BA37F",
+                    "keygrip":      "6BBF325FADDC1109AE36CD535CA77AB9CFADD1F2",
+                    "pubkey_algo":  16,
+                    "length":       1024,
+                    "timestamp":    920888071,
+                    "expires":      0
+            }],
+            "userids":      [{
+                "revoked":      false,
+                "invalid":      false,
+                "validity":     "unknown",
+                "uid":  "Bob (demo key)",
+                "name": "Bob",
+                "email":        "",
+                "comment":      "demo key"
+            }, {
+                "revoked":      false,
+                "invalid":      false,
+                "validity":     "unknown",
+                "uid":  "Bravo Test (demo key) <bravo at example.net>",
+                "name": "Bravo Test",
+                "email":        "bravo at example.net",
+                "comment":      "demo key",
+                "address":      "bravo at example.net"
+            }]
+    }]
+}
diff --git a/tests/json/t-keylist.in.json b/tests/json/t-keylist.in.json
new file mode 100644
index 0000000..6537709
--- /dev/null
+++ b/tests/json/t-keylist.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "keylist",
+    "keys": [ "zulu at example.net" ],
+    "with-secret": false
+}
diff --git a/tests/json/t-keylist.out.json b/tests/json/t-keylist.out.json
new file mode 100644
index 0000000..eb85867
--- /dev/null
+++ b/tests/json/t-keylist.out.json
@@ -0,0 +1,65 @@
+{
+    "keys": [{
+        "revoked":      false,
+            "expired":      false,
+            "disabled":     false,
+            "invalid":      false,
+            "can_encrypt":  true,
+            "can_sign":     true,
+            "can_certify":  true,
+            "can_authenticate":     true,
+            "secret":       false,
+            "is_qualified": false,
+            "protocol":     "OpenPGP",
+            "fingerprint":  "23FD347A419429BACCD5E72D6BC4778054ACD246",
+            "subkeys":      [{
+                "revoked":      false,
+                "expired":      false,
+                "disabled":     false,
+                "invalid":      false,
+                "can_encrypt":  false,
+                "can_sign":     true,
+                "can_certify":  true,
+                "can_authenticate":     true,
+                "secret":       false,
+                "is_qualified": false,
+                "is_cardkey":   false,
+                "is_de_vs":     false,
+                "pubkey_algo_name":     "DSA",
+                "pubkey_algo_string":   "dsa1024",
+                "pubkey_algo":  17,
+                "length":       1024,
+                "timestamp":    920892875,
+                "expires":      0
+            }, {
+                "revoked":      false,
+                    "expired":      false,
+                    "disabled":     false,
+                    "invalid":      false,
+                    "can_encrypt":  true,
+                    "can_sign":     false,
+                    "can_certify":  false,
+                    "can_authenticate":     false,
+                    "secret":       false,
+                    "is_qualified": false,
+                    "is_cardkey":   false,
+                    "is_de_vs":     false,
+                    "pubkey_algo_name":     "ELG-E",
+                    "pubkey_algo_string":   "elg1024",
+                    "pubkey_algo":  16,
+                    "length":       1024,
+                    "timestamp":    920892914,
+                    "expires":      0
+            }],
+            "userids":      [{
+                "revoked":      false,
+                "invalid":      false,
+                "validity":     "unknown",
+                "uid":  "Zulu Test (demo key) <zulu at example.net>",
+                "name": "Zulu Test",
+                "email":        "zulu at example.net",
+                "comment":      "demo key",
+                "address":      "zulu at example.net"
+            }]
+    }]
+}
diff --git a/tests/json/t-verify.in.json b/tests/json/t-verify.in.json
new file mode 100644
index 0000000..1aa1639
--- /dev/null
+++ b/tests/json/t-verify.in.json
@@ -0,0 +1,5 @@
+{
+    "op": "verify",
+    "data": "Hello world",
+    "signature": "-----BEGIN PGP SIGNATURE-----\n\niHAEABECADAWIQSg/0WQu2Ei7e9uPFQtcnzHaGl3NAUCW+we3RIcYWxwaGFAZXhh\nbXBsZS5uZXQACgkQLXJ8x2hpdzSwIgCfdfk+n6SsYwa9SYfBwr/o4FmWsa8Anj3V\n8p3ahr3rxNbK7cDbSk/p1zD0\n=oS5d\n-----END PGP SIGNATURE-----"
+}
diff --git a/tests/json/t-verify.out.json b/tests/json/t-verify.out.json
new file mode 100644
index 0000000..e7d7c52
--- /dev/null
+++ b/tests/json/t-verify.out.json
@@ -0,0 +1,35 @@
+{
+    "info": {
+        "is_mime":      false,
+        "signatures":   [{
+            "summary":      {
+                "sigsum":       [],
+                "valid":        false,
+                "green":        false,
+                "red":  false,
+                "revoked":      false,
+                "key-expired":  false,
+                "sig-expired":  false,
+                "key-missing":  false,
+                "crl-missing":  false,
+                "crl-too-old":  false,
+                "bad-policy":   false,
+                "sys-error":    false
+            },
+            "wrong_key_usage":      false,
+            "chain_model":  false,
+            "is_de_vs":     false,
+            "status_string":        "Success",
+            "fingerprint":  "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+            "validity_string":      "unknown",
+            "pubkey_algo_name":     "DSA",
+            "hash_algo_name":       "SHA1",
+            "status_code":  0,
+            "timestamp":    1542201053,
+            "exp_timestamp":        0,
+            "pka_trust":    0,
+            "validity":     0,
+            "validity_reason":      0
+        }]
+    }
+}
diff --git a/tests/json/t-version.in.json b/tests/json/t-version.in.json
new file mode 100644
index 0000000..08c96e5
--- /dev/null
+++ b/tests/json/t-version.in.json
@@ -0,0 +1,3 @@
+{
+    "op": "version"
+}
diff --git a/tests/json/t-version.out.json b/tests/json/t-version.out.json
new file mode 100644
index 0000000..1e418f3
--- /dev/null
+++ b/tests/json/t-version.out.json
@@ -0,0 +1,10 @@
+{
+   "info": [{
+                   "protocol":     "OpenPGP"
+           }, {
+                   "protocol":     "spawn",
+                   "fname":        "/nonexistent",
+                   "version":      "1.0.0",
+                   "req_version":  "1.0.0"
+           }]
+}

commit 9a31fdcb11d04d47dfcc38a8409b84436c549108
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 14:57:40 2018 +0100

    tests,json: Add wildcard string matching
    
    * tests/json/t-json.c (test_contains): When searching for "*" accept
    every string.
    
    --
    This allows it to write tests that check for the existence of
    a string value but don't care about the contents. E.g. for Data.

diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index 07b9984..f5b2793 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -125,7 +125,9 @@ test_contains (cjson_t needle, cjson_t hay)
     }
   if (cjson_is_string (needle))
     {
-      if (strcmp (needle->valuestring, hay->valuestring))
+      if (strcmp (needle->valuestring, hay->valuestring) &&
+          /* Use * as a general don't care placeholder */
+          strcmp (needle->valuestring, "*"))
         {
           if (verbose)
             fprintf (stderr, "%s: string mismatch Expected '%s' got '%s'\n",

commit e55e467d5ffb32c428566a876616d309ef2d15cd
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 14:55:09 2018 +0100

    tests,json: Skip tests for older GnuPG versions
    
    * tests/json/t-json.c (main): Skip if version is not at least
    2.2.0
    
    --
    In the past new tests often failed when a modern GPGME was
    used with old GnuPG's.
    This should avoid the hassle for packagers without the
    requirement that we test against old versions.

diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index 26f870c..07b9984 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -350,6 +350,14 @@ main (int argc, char *argv[])
         }
     }
 
+  if (!check_gpg_version ("2.2.0"))
+    {
+      /* Lets not break too much or have to test all combinations */
+      printf ("Testsuite skipped. Minimum GnuPG version (2.2.0) "
+              "not found.\n");
+      exit(0);
+    }
+
   init_gpgme (GPGME_PROTOCOL_SPAWN);
 
   for (const char **test = tests; *test; test++)

commit ca2e2b3d6973b1f942571ba65bd8b57153847777
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 14:53:28 2018 +0100

    tests,json: Suffix .json to test pattern
    
    * tests/json/t-config.in, tests/json/t-config.out: Renamed.
    * t-json.c (run_test): Use new naming pattern.

diff --git a/tests/json/t-config.in b/tests/json/t-config.in.json
similarity index 100%
rename from tests/json/t-config.in
rename to tests/json/t-config.in.json
diff --git a/tests/json/t-config.out b/tests/json/t-config.out.json
similarity index 100%
rename from tests/json/t-config.out
rename to tests/json/t-config.out.json
diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index 0bd35b5..26f870c 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -261,9 +261,9 @@ run_test (const char *test, const char *gpgme_json)
       exit(1);
     }
 
-  gpgrt_asprintf (&test_in, "%s/tests/json/%s.in",
+  gpgrt_asprintf (&test_in, "%s/tests/json/%s.in.json",
                   top_srcdir, test);
-  gpgrt_asprintf (&test_out, "%s/tests/json/%s.out",
+  gpgrt_asprintf (&test_out, "%s/tests/json/%s.out.json",
                   top_srcdir, test);
 
   printf ("Running %s...\n", test);

commit 5b61c092e7444749b08e39ac5aa9fb0818e1a076
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 14:50:57 2018 +0100

    tests,gpg: Add version check hlp to t-support
    
    * t-support.h (parse_version_number, parse_version_string)
    (compare_versions): New. Copy&Paste from src/version.c
    (check_gpg_version): New helper to check for a gpg version.
    
    --
    This should make it easier to write tests that e.g.
    rely on modern gnupg features.

diff --git a/tests/gpg/t-support.h b/tests/gpg/t-support.h
index ef5766a..a1536c1 100644
--- a/tests/gpg/t-support.h
+++ b/tests/gpg/t-support.h
@@ -23,6 +23,8 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <locale.h>
+#include <limits.h>
+#include <ctype.h>
 
 #ifdef HAVE_W32_SYSTEM
 #include <windows.h>
@@ -215,3 +217,105 @@ print_import_result (gpgme_import_result_t r)
           r->skipped_v3_keys);
 }
 
+
+/* Read the next number in the version string STR and return it in
+   *NUMBER.  Return a pointer to the tail of STR after parsing, or
+   *NULL if the version string was invalid.  */
+static const char *
+parse_version_number (const char *str, int *number)
+{
+#define MAXVAL ((INT_MAX - 10) / 10)
+  int val = 0;
+
+  /* Leading zeros are not allowed.  */
+  if (*str == '0' && isdigit(str[1]))
+    return NULL;
+
+  while (isdigit (*str) && val <= MAXVAL)
+    {
+      val *= 10;
+      val += *(str++) - '0';
+    }
+  *number = val;
+  return val > MAXVAL ? NULL : str;
+}
+
+
+/* Parse the version string STR in the format MAJOR.MINOR.MICRO (for
+   example, 9.3.2) and return the components in MAJOR, MINOR and MICRO
+   as integers.  The function returns the tail of the string that
+   follows the version number.  This might be the empty string if there
+   is nothing following the version number, or a patchlevel.  The
+   function returns NULL if the version string is not valid.  */
+static const char *
+parse_version_string (const char *str, int *major, int *minor, int *micro)
+{
+  str = parse_version_number (str, major);
+  if (!str || *str != '.')
+    return NULL;
+  str++;
+
+  str = parse_version_number (str, minor);
+  if (!str || *str != '.')
+    return NULL;
+  str++;
+
+  str = parse_version_number (str, micro);
+  if (!str)
+    return NULL;
+
+  /* A patchlevel might follow.  */
+  return str;
+}
+
+
+/* Return true if MY_VERSION is at least REQ_VERSION, and false
+   otherwise.  */
+static int
+compare_versions (const char *my_version,
+                  const char *rq_version)
+{
+  int my_major, my_minor, my_micro;
+  int rq_major, rq_minor, rq_micro;
+  const char *my_plvl, *rq_plvl;
+
+  if (!rq_version)
+    return 1;
+  if (!my_version)
+    return 0;
+
+  my_plvl = parse_version_string (my_version, &my_major, &my_minor, &my_micro);
+  if (!my_plvl)
+    return 0;
+
+  rq_plvl = parse_version_string (rq_version, &rq_major, &rq_minor, &rq_micro);
+  if (!rq_plvl)
+    return 0;
+
+  if (my_major > rq_major
+      || (my_major == rq_major && my_minor > rq_minor)
+      || (my_major == rq_major && my_minor == rq_minor
+	  && my_micro > rq_micro)
+      || (my_major == rq_major && my_minor == rq_minor
+	  && my_micro == rq_micro && strcmp (my_plvl, rq_plvl) >= 0))
+    return 1;
+
+  return 0;
+}
+
+/* Return true if we have the required gpg version. */
+static int
+check_gpg_version (const char *req_version)
+{
+  gpgme_engine_info_t engine_info;
+  init_gpgme (GPGME_PROTOCOL_OpenPGP);
+
+  fail_if_err (gpgme_get_engine_info (&engine_info));
+  for (; engine_info; engine_info = engine_info->next)
+    if (engine_info->protocol == GPGME_PROTOCOL_OpenPGP)
+      break;
+
+  test (engine_info);
+
+  return compare_versions (engine_info->version, req_version);
+}

commit 9933641cce595ba308d0f3a1f3ae8f13a9743dd1
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 13:14:52 2018 +0100

    tests,json: Improve verbose mode and add verbose 2
    
    * tests/json/t-json.c (main): Handle multiple verbose args.
    (test-contains): Improve verbose output

diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index 53a5743..0bd35b5 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -36,7 +36,7 @@
 #include "../../src/cJSON.h"
 
 /* Register tests here */
-static const char*tests[] = { "t-config", NULL };
+static const char*tests[] = { "t-keylist", "t-config", "t-keylist", NULL };
 
 static int verbose = 0;
 
@@ -95,14 +95,18 @@ get_file (const char *fname)
 int
 test_contains (cjson_t needle, cjson_t hay)
 {
-  /*fprintf (stderr, "checking \n%s\n -------against-------- \n%s\n",
-           cJSON_Print (needle), cJSON_Print (hay)); */
+  if (verbose == 2)
+    fprintf (stderr, "%s: -------checking-------- "
+                     "\n%s\n -------against-------- \n%s\n",
+             nonnull (needle->string), cJSON_Print (needle),
+             cJSON_Print (hay));
 
   /* Type check. This automatically checks bool vals and NULL */
   if (needle->type != hay->type)
     {
       if (verbose)
-        fprintf (stderr, "type mismatch expected %i got %i\n", needle->type,
+        fprintf (stderr, "%s: type mismatch expected %i got %i\n",
+                 nonnull (needle->string), needle->type,
                  hay->type);
       return 1;
     }
@@ -113,8 +117,9 @@ test_contains (cjson_t needle, cjson_t hay)
       if (needle->valueint != hay->valueint)
         {
           if (verbose)
-            fprintf (stderr, "Value mismatch. Expected %i got %i\n",
-                     needle->valueint, hay->valueint);
+            fprintf (stderr, "%s: value mismatch. Expected %i got %i\n",
+                     nonnull (needle->string), needle->valueint,
+                     hay->valueint);
           return 1;
         }
     }
@@ -123,8 +128,8 @@ test_contains (cjson_t needle, cjson_t hay)
       if (strcmp (needle->valuestring, hay->valuestring))
         {
           if (verbose)
-            fprintf (stderr, "String mismatch Expected '%s' got '%s'\n",
-                     needle->valuestring, hay->valuestring);
+            fprintf (stderr, "%s: string mismatch Expected '%s' got '%s'\n",
+                     needle->string, needle->valuestring, hay->valuestring);
           return 1;
         }
     }
@@ -329,15 +334,22 @@ int
 main (int argc, char *argv[])
 {
   const char *gpgme_json = getenv ("gpgme_json");
+  int last_argc = -1;
 
-  if (argc == 2 && !strcmp (argv[1], "--verbose"))
+  if (argc)
+    { argc--; argv++; }
+
+
+  while (argc && last_argc != argc )
     {
-      /* Note that verbose will print out lots of mismatchs
-         because we have to try trough anonymous objects */
-      verbose = 1;
+      last_argc = argc;
+      if (!strcmp (*argv, "--verbose"))
+        {
+          verbose++;
+          argc--; argv++;
+        }
     }
 
-
   init_gpgme (GPGME_PROTOCOL_SPAWN);
 
   for (const char **test = tests; *test; test++)

commit 3e5684d99b881787f9739e53fd8e8c22eadc2146
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Wed Nov 14 13:05:36 2018 +0100

    tests,json: Fix and improve t-json
    
    * tests/json/t-json.c (run_test): Terminate argv array correctly.
    (run_test): Note and handle empty response.

diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index ec294f7..53a5743 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -243,9 +243,9 @@ run_test (const char *test, const char *gpgme_json)
   gpgme_data_t json_stderr = NULL;
   char *test_in;
   char *test_out;
-  const char *argv[2];
+  const char *argv[3];
   char *response;
-  char *expected;
+  char *expected = NULL;
   size_t response_size;
   int rc = 0;
   const char *top_srcdir = getenv ("top_srcdir");
@@ -256,9 +256,9 @@ run_test (const char *test, const char *gpgme_json)
       exit(1);
     }
 
-  gpgrt_asprintf (&test_in, "%s//tests//json//%s.in",
+  gpgrt_asprintf (&test_in, "%s/tests/json/%s.in",
                   top_srcdir, test);
-  gpgrt_asprintf (&test_out, "%s//tests//json//%s.out",
+  gpgrt_asprintf (&test_out, "%s/tests/json/%s.out",
                   top_srcdir, test);
 
   printf ("Running %s...\n", test);
@@ -273,6 +273,7 @@ run_test (const char *test, const char *gpgme_json)
 
   argv[0] = gpgme_json;
   argv[1] = "-s";
+  argv[2] = NULL;
 
   fail_if_err (gpgme_op_spawn (ctx, gpgme_json, argv,
                                json_stdin,
@@ -281,13 +282,18 @@ run_test (const char *test, const char *gpgme_json)
                                0));
   response = gpgme_data_release_and_get_mem (json_stdout,
                                              &response_size);
-  test (response_size);
-
-  expected = get_file (test_out);
+  if (response_size)
+    {
+      expected = get_file (test_out);
 
-  test (expected);
+      test (expected);
 
-  rc = check_response (response, expected);
+      rc = check_response (response, expected);
+    }
+  else
+    {
+      rc = 1;
+    }
 
   if (!rc)
     {
@@ -300,7 +306,8 @@ run_test (const char *test, const char *gpgme_json)
       size_t size;
 
       buf = gpgme_data_release_and_get_mem (json_stderr, &size);
-      printf (" failed\n");
+      printf (" failed%s\n", response_size ? "" :
+                             ", no response from gpgme-json");
       if (size)
         {
           printf ("gpgme-json stderr:\n%.*s\n", (int)size, buf);

-----------------------------------------------------------------------

Summary of changes:
 tests/gpg/t-support.h                          | 104 ++++++++++++++++
 tests/json/{t-config.in => t-config.in.json}   |   0
 tests/json/{t-config.out => t-config.out.json} |   0
 tests/json/t-createkey.in.json                 |   5 +
 tests/json/t-createkey.out.json                |   3 +
 tests/json/t-decrypt-verify.in.json            |   5 +
 tests/json/t-decrypt-verify.out.json           |  56 +++++++++
 tests/json/t-decrypt.in.json                   |   5 +
 tests/json/t-decrypt.out.json                  |  16 +++
 tests/json/t-delete.in.json                    |   4 +
 tests/json/t-delete.out.json                   |   3 +
 tests/json/t-encrypt-sign.in.json              |   8 ++
 tests/json/t-encrypt-sign.out.json             |   4 +
 tests/json/t-encrypt.in.json                   |   8 ++
 tests/json/t-encrypt.out.json                  |   4 +
 tests/json/t-export-secret-info.in.json        |   6 +
 tests/json/t-export-secret-info.out.json       |   6 +
 tests/json/t-export.in.json                    |   5 +
 tests/json/t-export.out.json                   |   5 +
 tests/json/t-json.c                            |  83 +++++++++----
 tests/json/t-keylist-secret.in.json            |   5 +
 tests/json/t-keylist-secret.out.json           | 163 +++++++++++++++++++++++++
 tests/json/t-keylist.in.json                   |   5 +
 tests/json/t-keylist.out.json                  |  65 ++++++++++
 tests/json/t-verify.in.json                    |   5 +
 tests/json/t-verify.out.json                   |  35 ++++++
 tests/json/t-version.in.json                   |   3 +
 tests/json/t-version.out.json                  |  10 ++
 28 files changed, 598 insertions(+), 23 deletions(-)
 rename tests/json/{t-config.in => t-config.in.json} (100%)
 rename tests/json/{t-config.out => t-config.out.json} (100%)
 create mode 100644 tests/json/t-createkey.in.json
 create mode 100644 tests/json/t-createkey.out.json
 create mode 100644 tests/json/t-decrypt-verify.in.json
 create mode 100644 tests/json/t-decrypt-verify.out.json
 create mode 100644 tests/json/t-decrypt.in.json
 create mode 100644 tests/json/t-decrypt.out.json
 create mode 100644 tests/json/t-delete.in.json
 create mode 100644 tests/json/t-delete.out.json
 create mode 100644 tests/json/t-encrypt-sign.in.json
 create mode 100644 tests/json/t-encrypt-sign.out.json
 create mode 100644 tests/json/t-encrypt.in.json
 create mode 100644 tests/json/t-encrypt.out.json
 create mode 100644 tests/json/t-export-secret-info.in.json
 create mode 100644 tests/json/t-export-secret-info.out.json
 create mode 100644 tests/json/t-export.in.json
 create mode 100644 tests/json/t-export.out.json
 create mode 100644 tests/json/t-keylist-secret.in.json
 create mode 100644 tests/json/t-keylist-secret.out.json
 create mode 100644 tests/json/t-keylist.in.json
 create mode 100644 tests/json/t-keylist.out.json
 create mode 100644 tests/json/t-verify.in.json
 create mode 100644 tests/json/t-verify.out.json
 create mode 100644 tests/json/t-version.in.json
 create mode 100644 tests/json/t-version.out.json


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list