tests,json: Add the bulk of tests
authorAndre Heinecke <aheinecke@intevation.de>
Wed, 14 Nov 2018 14:15:21 +0000 (15:15 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Wed, 14 Nov 2018 14:15:21 +0000 (15:15 +0100)
* 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.

25 files changed:
tests/json/t-createkey.in.json [new file with mode: 0644]
tests/json/t-createkey.out.json [new file with mode: 0644]
tests/json/t-decrypt-verify.in.json [new file with mode: 0644]
tests/json/t-decrypt-verify.out.json [new file with mode: 0644]
tests/json/t-decrypt.in.json [new file with mode: 0644]
tests/json/t-decrypt.out.json [new file with mode: 0644]
tests/json/t-delete.in.json [new file with mode: 0644]
tests/json/t-delete.out.json [new file with mode: 0644]
tests/json/t-encrypt-sign.in.json [new file with mode: 0644]
tests/json/t-encrypt-sign.out.json [new file with mode: 0644]
tests/json/t-encrypt.in.json [new file with mode: 0644]
tests/json/t-encrypt.out.json [new file with mode: 0644]
tests/json/t-export-secret-info.in.json [new file with mode: 0644]
tests/json/t-export-secret-info.out.json [new file with mode: 0644]
tests/json/t-export.in.json [new file with mode: 0644]
tests/json/t-export.out.json [new file with mode: 0644]
tests/json/t-json.c
tests/json/t-keylist-secret.in.json [new file with mode: 0644]
tests/json/t-keylist-secret.out.json [new file with mode: 0644]
tests/json/t-keylist.in.json [new file with mode: 0644]
tests/json/t-keylist.out.json [new file with mode: 0644]
tests/json/t-verify.in.json [new file with mode: 0644]
tests/json/t-verify.out.json [new file with mode: 0644]
tests/json/t-version.in.json [new file with mode: 0644]
tests/json/t-version.out.json [new file with mode: 0644]

diff --git a/tests/json/t-createkey.in.json b/tests/json/t-createkey.in.json
new file mode 100644 (file)
index 0000000..95dc92a
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "op": "createkey",
+    "userid": "foo@bar.baz",
+    "algo": "rsa1024"
+}
diff --git a/tests/json/t-createkey.out.json b/tests/json/t-createkey.out.json
new file mode 100644 (file)
index 0000000..eb88671
--- /dev/null
@@ -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 (file)
index 0000000..c907106
--- /dev/null
@@ -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 (file)
index 0000000..fc60327
--- /dev/null
@@ -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 (file)
index 0000000..52987d7
--- /dev/null
@@ -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 (file)
index 0000000..eb52dc8
--- /dev/null
@@ -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 (file)
index 0000000..a1e7d3d
--- /dev/null
@@ -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 (file)
index 0000000..3041e49
--- /dev/null
@@ -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 (file)
index 0000000..45e1d0b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "op": "encrypt",
+    "keys": ["alpha@example.net", "victor@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 (file)
index 0000000..875ad08
--- /dev/null
@@ -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 (file)
index 0000000..35dc2c9
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "op": "encrypt",
+    "keys": ["bravo@example.net", "alpha@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 (file)
index 0000000..6fc4158
--- /dev/null
@@ -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 (file)
index 0000000..d5c37f5
--- /dev/null
@@ -0,0 +1,6 @@
+{
+    "op": "export",
+    "keys": "alpha@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 (file)
index 0000000..32ee650
--- /dev/null
@@ -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 (file)
index 0000000..831369e
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "op": "export",
+    "keys": "victor@example.org",
+    "armor": true
+}
diff --git a/tests/json/t-export.out.json b/tests/json/t-export.out.json
new file mode 100644 (file)
index 0000000..104fa43
--- /dev/null
@@ -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"
+}
index f5b2793..1f45feb 100644 (file)
 #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 (file)
index 0000000..22292a7
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "op": "keylist",
+    "keys": [ "bravo@example.net", "alpha@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 (file)
index 0000000..5da20db
--- /dev/null
@@ -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@example.net>",
+                "name": "Alfa Test",
+                "email":        "alfa@example.net",
+                "comment":      "demo key",
+                "address":      "alfa@example.net"
+            }, {
+                "revoked":      false,
+                "invalid":      false,
+                "validity":     "unknown",
+                "uid":  "Alpha Test (demo key) <alpha@example.net>",
+                "name": "Alpha Test",
+                "email":        "alpha@example.net",
+                "comment":      "demo key",
+                "address":      "alpha@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@example.net>",
+                "name": "Bravo Test",
+                "email":        "bravo@example.net",
+                "comment":      "demo key",
+                "address":      "bravo@example.net"
+            }]
+    }]
+}
diff --git a/tests/json/t-keylist.in.json b/tests/json/t-keylist.in.json
new file mode 100644 (file)
index 0000000..6537709
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "op": "keylist",
+    "keys": [ "zulu@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 (file)
index 0000000..eb85867
--- /dev/null
@@ -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@example.net>",
+                "name": "Zulu Test",
+                "email":        "zulu@example.net",
+                "comment":      "demo key",
+                "address":      "zulu@example.net"
+            }]
+    }]
+}
diff --git a/tests/json/t-verify.in.json b/tests/json/t-verify.in.json
new file mode 100644 (file)
index 0000000..1aa1639
--- /dev/null
@@ -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 (file)
index 0000000..e7d7c52
--- /dev/null
@@ -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 (file)
index 0000000..08c96e5
--- /dev/null
@@ -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 (file)
index 0000000..1e418f3
--- /dev/null
@@ -0,0 +1,10 @@
+{
+   "info": [{
+                   "protocol":     "OpenPGP"
+           }, {
+                   "protocol":     "spawn",
+                   "fname":        "/nonexistent",
+                   "version":      "1.0.0",
+                   "req_version":  "1.0.0"
+           }]
+}