tests: Add test for gpgv.
[gnupg.git] / tests / openpgp / verify.scm
1 #!/usr/bin/env gpgscm
2
3 ;; Copyright (C) 2016 g10 Code GmbH
4 ;;
5 ;; This file is part of GnuPG.
6 ;;
7 ;; GnuPG is free software; you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation; either version 3 of the License, or
10 ;; (at your option) any later version.
11 ;;
12 ;; GnuPG is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 ;; GNU General Public License for more details.
16 ;;
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with this program; if not, see <http://www.gnu.org/licenses/>.
19
20 (load (in-srcdir "tests" "openpgp" "defs.scm"))
21 (load (in-srcdir "tests" "openpgp" "signed-messages.scm"))
22 (setup-legacy-environment)
23
24 ;;
25 ;; Two simple tests to check that verify fails for bad input data
26 ;;
27 (for-each-p
28  "Checking bogus signature"
29  (lambda (char)
30    (lettmp (x)
31      (call-with-binary-output-file
32       x
33       (lambda (port)
34         (display (make-string 64 (integer->char (string->number char)))
35                  port)))
36      (if (= 0 (call `(,@GPG --verify ,x data-500)))
37          (fail "no error code from verify"))))
38  '("#x2d" "#xca"))
39
40 ;; Fixme:  We need more tests with manipulated cleartext signatures.
41
42 ;;
43 ;; Now run the tests.
44 ;;
45 (for-each-p
46  "Checking that a valid signature is verified as such"
47  (lambda (armored-file)
48    (pipe:do
49     (pipe:echo (eval armored-file (current-environment)))
50     (pipe:spawn `(,@GPG --verify))))
51  '(msg_ols_asc msg_cols_asc msg_sl_asc msg_oolss_asc msg_cls_asc msg_clss_asc))
52
53 (for-each-p
54  "Checking that a valid signature over multiple messages is verified as such"
55  (lambda (armored-file)
56    (pipe:do
57     (pipe:echo (eval armored-file (current-environment)))
58     (pipe:spawn `(,@GPG --verify --allow-multiple-messages)))
59    (catch '()
60           (pipe:do
61            (pipe:defer (lambda (sink)
62                          (display armored-file (fdopen sink "w"))))
63            (pipe:spawn `(,@GPG --verify)))
64           (fail "verification succeeded but should not")))
65  '(msg_olsols_asc_multiple msg_clsclss_asc_multiple))
66
67 (for-each-p
68  "Checking that an invalid signature is verified as such"
69  (lambda (armored-file)
70    (catch '()
71           (pipe:do
72            (pipe:echo (eval armored-file (current-environment)))
73            (pipe:spawn `(,@GPG --verify)))
74           (fail "verification succeeded but should not")))
75  '(bad_ls_asc bad_fols_asc bad_olsf_asc bad_ools_asc))
76
77
78 ;;; Need to import the ed25519 sample key used for
79 ;;; the next two tests.
80 (call-check `(,@GPG --quiet --yes --import ,(in-srcdir "tests" "openpgp" key-file2)))
81 (for-each-p
82  "Checking that a valid Ed25519 signature is verified as such"
83  (lambda (armored-file)
84    (pipe:do
85     (pipe:echo (eval armored-file (current-environment)))
86     (pipe:spawn `(,@GPG --verify))))
87  '(msg_ed25519_rshort msg_ed25519_sshort))