tests: New test for --{show,override}-session-key.
authorJustus Winter <justus@g10code.com>
Thu, 5 Jan 2017 16:05:59 +0000 (17:05 +0100)
committerJustus Winter <justus@g10code.com>
Thu, 5 Jan 2017 16:05:59 +0000 (17:05 +0100)
* tests/openpgp/Makefile.am (XTESTS): Add new test.
* tests/openpgp/decrypt-session-key.scm: New file.

Signed-off-by: Justus Winter <justus@g10code.com>
tests/openpgp/Makefile.am
tests/openpgp/decrypt-session-key.scm [new file with mode: 0755]

index c7ef5e6..c93857f 100644 (file)
@@ -50,6 +50,7 @@ XTESTS = \
        decrypt.scm \
        decrypt-multifile.scm \
        decrypt-dsa.scm \
+       decrypt-session-key.scm \
        sigs.scm \
        sigs-dsa.scm \
        encrypt.scm \
diff --git a/tests/openpgp/decrypt-session-key.scm b/tests/openpgp/decrypt-session-key.scm
new file mode 100755 (executable)
index 0000000..771b53d
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2017 g10 Code GmbH
+;;
+;; This file is part of GnuPG.
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (with-path "defs.scm"))
+(setup-legacy-environment)
+
+(define (get-session-key filename)
+  (lettmp (sink)
+    (let* ((status' (call-popen `(,@gpg --status-fd=1 --decrypt
+                                       --show-session-key
+                                       --output ,sink ,filename) ""))
+          (status (map (lambda (l)
+                         (assert (string-prefix? l "[GNUPG:] "))
+                         (string-splitp (substring l 9 (string-length l))
+                                        char-whitespace? -1))
+                       (string-split-newlines status'))))
+      (cadr (assoc "SESSION_KEY" status)))))
+
+(for-each-p
+ "Checking decryption of supplied files using the session key."
+ (lambda (name)
+   (let* ((source (in-srcdir (string-append name ".asc")))
+         (key (get-session-key source)))
+     (with-ephemeral-home-directory
+      (tr:do
+       (tr:open source)
+       (tr:gpg "" `(--yes --decrypt --override-session-key ,key))
+       (tr:assert-identity name)))))
+ plain-files)