diff options
Diffstat (limited to 'tests/openpgp')
-rw-r--r-- | tests/openpgp/Makefile.am | 9 | ||||
-rw-r--r-- | tests/openpgp/defs.scm | 27 | ||||
-rw-r--r-- | tests/openpgp/gpgconf.scm | 17 | ||||
-rw-r--r-- | tests/openpgp/issue2929.scm | 32 | ||||
-rwxr-xr-x | tests/openpgp/issue2941.scm | 34 | ||||
-rwxr-xr-x | tests/openpgp/quick-key-manipulation.scm | 57 | ||||
-rw-r--r-- | tests/openpgp/samplekeys/README | 2 | ||||
-rw-r--r-- | tests/openpgp/samplekeys/rsa-primary-auth-only.pub.asc | 23 | ||||
-rw-r--r-- | tests/openpgp/samplekeys/rsa-primary-auth-only.sec.asc | 38 | ||||
-rwxr-xr-x | tests/openpgp/ssh-import.scm | 33 | ||||
-rwxr-xr-x | tests/openpgp/tofu.scm | 51 | ||||
-rwxr-xr-x | tests/openpgp/verify.scm | 3 |
12 files changed, 267 insertions, 59 deletions
diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am index 05341fb..afac58f 100644 --- a/tests/openpgp/Makefile.am +++ b/tests/openpgp/Makefile.am @@ -92,14 +92,13 @@ XTESTS = \ quick-key-manipulation.scm \ key-selection.scm \ delete-keys.scm \ + gpgconf.scm \ issue2015.scm \ issue2346.scm \ issue2417.scm \ - issue2419.scm - -# Fixme: gpgconf.scm does not yet work with make distcheck. -# gpgconf.scm - + issue2419.scm \ + issue2929.scm \ + issue2941.scm # XXX: Currently, one cannot override automake's 'check' target. As a # workaround, we avoid defining 'TESTS', thus automake will not emit diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm index 1d8173d..a06a570 100644 --- a/tests/openpgp/defs.scm +++ b/tests/openpgp/defs.scm @@ -29,7 +29,7 @@ (define usrpass3 "") (define dsa-usrname1 "pgp5") -;; we use the sub key because we do not yet have the logic to to derive +;; we use the sub key because we do not yet have the logic to derive ;; the first encryption key from a keyblock (I guess) (Well of course ;; we have this by now and the notation below will lookup the primary ;; first and then search for the encryption subkey.) @@ -149,14 +149,33 @@ (define :gc:c:name car) (define :gc:c:description cadr) (define :gc:c:pgmname caddr) +(define (:gc:o:name x) (list-ref x 0)) +(define (:gc:o:flags x) (string->number (list-ref x 1))) +(define (:gc:o:level x) (string->number (list-ref x 2))) +(define (:gc:o:description x) (list-ref x 3)) +(define (:gc:o:type x) (string->number (list-ref x 4))) +(define (:gc:o:alternate-type x) (string->number (list-ref x 5))) +(define (:gc:o:argument-name x) (list-ref x 6)) +(define (:gc:o:default-value x) (list-ref x 7)) +(define (:gc:o:default-argument x) (list-ref x 8)) +(define (:gc:o:value x) (if (< (length x) 10) "" (list-ref x 9))) (define (gpg-config component key) (package (define (value) - (assoc key (gpg-conf '--list-options component))) + (let* ((conf (assoc key (gpg-conf '--list-options component))) + (type (:gc:o:type conf)) + (value (:gc:o:value conf))) + (case type + ((0 2 3) (string->number value)) + ((1 32) (substring value 1 (string-length value)))))) (define (update value) - (gpg-conf' (string-append key ":0:" (percent-encode value)) - `(--change-options ,component))) + (let ((value' (cond + ((string? value) (string-append "\"" value)) + ((number? value) (number->string value)) + (else (throw "Unsupported value" value))))) + (gpg-conf' (string-append key ":0:" (percent-encode value')) + `(--change-options ,component)))) (define (clear) (gpg-conf' (string-append key ":16:") `(--change-options ,component))))) diff --git a/tests/openpgp/gpgconf.scm b/tests/openpgp/gpgconf.scm index b4cc9cb..33d04d8 100644 --- a/tests/openpgp/gpgconf.scm +++ b/tests/openpgp/gpgconf.scm @@ -31,21 +31,18 @@ (if value (begin (opt::update value) - (assert (string=? value (list-ref (opt::value) 9)))) + (assert (equal? value (opt::value)))) (begin (opt::clear) - (let ((v (opt::value))) - (assert (or (< (length v) 10) - (string=? "" (list-ref v 9)))))))) + (assert (or (not (opt::value)) (string=? "" (opt::value))))))) (progress "."))))) (lambda (name . rest) name) (list "keyserver" "verbose" "quiet") (list (gpg-config 'gpg "keyserver") (gpg-config 'gpg "verbose") (gpg-config 'gpg "quiet")) - (list (lambda (i) (if (even? i) "\"hkp://foo.bar" "\"hkps://bar.baz")) - (lambda (i) (number->string - ;; gpgconf: argument for option verbose of type 0 - ;; (none) must be positive - (+ 1 i))) - (lambda (i) (if (even? i) #f "1")))) + (list (lambda (i) (if (even? i) "hkp://foo.bar" "hkps://bar.baz")) + ;; gpgconf: argument for option verbose of type 0 (none) must + ;; be positive + (lambda (i) (+ 1 i)) + (lambda (i) (if (even? i) #f 1)))) diff --git a/tests/openpgp/issue2929.scm b/tests/openpgp/issue2929.scm new file mode 100644 index 0000000..121103b --- /dev/null +++ b/tests/openpgp/issue2929.scm @@ -0,0 +1,32 @@ +#!/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-environment) + +(catch (skip "Tofu not supported") + (call-check `(,@gpg --trust-model=tofu --list-config))) + +;; Redefine GPG without --always-trust and TOFU trust model. +(define gpg `(,(tool 'gpg) --no-permission-warning --trust-model=tofu)) + +(info "Checking TOFU trust model with ultimately trusted keys (issue2929).") +(call-check `(,@gpg --quick-generate-key frob@example.org)) +(call-check `(,@gpg --sign gpg.conf)) +(call-check `(,@gpg --verify gpg.conf.gpg)) diff --git a/tests/openpgp/issue2941.scm b/tests/openpgp/issue2941.scm new file mode 100755 index 0000000..d7220e0 --- /dev/null +++ b/tests/openpgp/issue2941.scm @@ -0,0 +1,34 @@ +#!/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 (check-failure options) + (let ((command `(,@gpg ,@options))) + (catch '() + (call-check command) + (error "Expected an error, but got none when executing" command)))) + +(for-each-p + "Checking invocation with invalid file descriptors (issue2941)." + (lambda (option) + (check-failure `(,(string-append "--" option "=23") --sign gpg.conf))) + '("status-fd" "attribute-fd" "logger-fd" + "override-session-key-fd" "passphrase-fd" "command-fd")) diff --git a/tests/openpgp/quick-key-manipulation.scm b/tests/openpgp/quick-key-manipulation.scm index d43f7b5..7ede5e9 100755 --- a/tests/openpgp/quick-key-manipulation.scm +++ b/tests/openpgp/quick-key-manipulation.scm @@ -1,6 +1,6 @@ #!/usr/bin/env gpgscm -;; Copyright (C) 2016 g10 Code GmbH +;; Copyright (C) 2016-2017 g10 Code GmbH ;; ;; This file is part of GnuPG. ;; @@ -18,6 +18,7 @@ ;; along with this program; if not, see <http://www.gnu.org/licenses/>. (load (with-path "defs.scm")) +(load (with-path "time.scm")) (setup-environment) ;; XXX because of --always-trust, the trustdb is not created. @@ -91,8 +92,9 @@ ;; Make the key expire in one year. (call-check `(,@gpg --quick-set-expire ,fpr "1y")) -;; XXX It'd be nice to check that the value is right. -(assert (not (equal? "" (expiration-time fpr)))) +(assert (time-matches? (+ (get-time) (years->seconds 1)) + (string->number (expiration-time fpr)) + (minutes->seconds 5))) ;; @@ -119,6 +121,10 @@ '(() (- - -) (default default never) + (rsa "sign auth encr" "seconds=600") ;; GPGME uses this + (rsa "auth,encr" "2") ;; "without a letter, days is assumed" + (rsa "sign" "2105-01-01") ;; "last year GnuPG can represent is 2105" + (rsa "sign" "21050101T115500") ;; "last year GnuPG can represent is 2105" (rsa sign "2d") (rsa1024 sign "2w") (rsa2048 encr "2m") @@ -134,21 +140,58 @@ (lambda (subkey) (assert (= 1 (:alg subkey))) (assert (string-contains? (:cap subkey) "s")) - (assert (not (equal? "" (:expire subkey))))) + (assert (string-contains? (:cap subkey) "a")) + (assert (string-contains? (:cap subkey) "e")) + (assert (time-matches? (+ (get-time) 600) + (string->number (:expire subkey)) + (minutes->seconds 5)))) + (lambda (subkey) + (assert (= 1 (:alg subkey))) + (assert (string-contains? (:cap subkey) "a")) + (assert (string-contains? (:cap subkey) "e")) + (assert (time-matches? (+ (get-time) (days->seconds 2)) + (string->number (:expire subkey)) + (minutes->seconds 5)))) + (lambda (subkey) + (assert (= 1 (:alg subkey))) + (assert (string-contains? (:cap subkey) "s")) + (assert (time-matches? 4260207600 ;; 2105-01-01 + (string->number (:expire subkey)) + ;; This is off by 12h, but I guess it just + ;; choses the middle of the day. + (days->seconds 1)))) + (lambda (subkey) + (assert (= 1 (:alg subkey))) + (assert (string-contains? (:cap subkey) "s")) + (assert (time-matches? 4260254100 ;; UTC 2105-01-01 11:55:00 + (string->number (:expire subkey)) + (minutes->seconds 5)))) + (lambda (subkey) + (assert (= 1 (:alg subkey))) + (assert (string-contains? (:cap subkey) "s")) + (assert (time-matches? (+ (get-time) (days->seconds 2)) + (string->number (:expire subkey)) + (minutes->seconds 5)))) (lambda (subkey) (assert (= 1 (:alg subkey))) (assert (= 1024 (:length subkey))) (assert (string-contains? (:cap subkey) "s")) - (assert (not (equal? "" (:expire subkey))))) + (assert (time-matches? (+ (get-time) (weeks->seconds 2)) + (string->number (:expire subkey)) + (minutes->seconds 5)))) (lambda (subkey) (assert (= 1 (:alg subkey))) (assert (= 2048 (:length subkey))) (assert (string-contains? (:cap subkey) "e")) - (assert (not (equal? "" (:expire subkey))))) + (assert (time-matches? (+ (get-time) (months->seconds 2)) + (string->number (:expire subkey)) + (minutes->seconds 5)))) (lambda (subkey) (assert (= 1 (:alg subkey))) (assert (= 4096 (:length subkey))) (assert (string-contains? (:cap subkey) "s")) (assert (string-contains? (:cap subkey) "a")) - (assert (not (equal? "" (:expire subkey))))) + (assert (time-matches? (+ (get-time) (years->seconds 2)) + (string->number (:expire subkey)) + (minutes->seconds 5)))) #f)) diff --git a/tests/openpgp/samplekeys/README b/tests/openpgp/samplekeys/README index 29524d5..6f2399f 100644 --- a/tests/openpgp/samplekeys/README +++ b/tests/openpgp/samplekeys/README @@ -17,3 +17,5 @@ E657FB607BB4F21C90BB6651BC067AF28BC90111.asc Key with subkeys (no protection) rsa-rsa-sample-1.asc RSA+RSA sample key (no passphrase) ed25519-cv25519-sample-1.asc Ed25519+CV25519 sample key (no passphrase) silent-running.asc Collection of sample secret keys (no passphrases) +rsa-primary-auth-only.pub.asc rsa2408 primary only, usage: cert,auth +rsa-primary-auth-only.sec.asc Ditto but the secret keyblock. diff --git a/tests/openpgp/samplekeys/rsa-primary-auth-only.pub.asc b/tests/openpgp/samplekeys/rsa-primary-auth-only.pub.asc new file mode 100644 index 0000000..f34999e --- /dev/null +++ b/tests/openpgp/samplekeys/rsa-primary-auth-only.pub.asc @@ -0,0 +1,23 @@ +pub rsa2048 2017-02-14 [CA] + F74B4029E6906D12EBDA8EE3BD7744900FDABC8D + Keygrip = AB1BB1843677AF7CC4D6C14444320C3FF4147E98 +uid [ unknown] ssh://host.example.net + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFiizWgBCACi28riS0AaC7UvXaZfoafEvcXq/MAq6akiowPf3eY4zz5DkBPf +Ep3kGuDMAFqULvchIt9vpg719Zar/Xldi+UG+/KsDz+TT5k+nP6CwvBHbAXXtISv +S51TKKnTFpvjcgJc1BMFN0pGf7JnZx1QfRfsZO2BvS4qVzYCWbSS9hlpMq4aIgOc +ERBMsZYMPnI4ijbXysksecDC91kbJH0q5j8aGir5sDyrDwfVLp0SUAubRFU5gXuZ +SEv9QmeV7XoXKXzk9KEYy7GUgoAJzabvbF0rVXqd3DE8KFkwK7rKBe8sGC04DWlK +j/sHJcAfMSqCi/SZyYpO+FSfnB+uJ1BNc05hABEBAAG0FnNzaDovL2hvc3QuZXhh +bXBsZS5uZXSJAU4EEwEIADgWIQT3S0Ap5pBtEuvajuO9d0SQD9q8jQUCWKLNaAIb +IQULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRC9d0SQD9q8jZBrB/41MJWUeclV +tM60+ydPNgUJwyRXpKdLIm/AtM1zOijlFkwsaMmzbFSFJJX98HGASHdU5OpL2Lv3 +1NNDNMbUuFumApVrLzJUBugFRb+8/uY7H3Z0/YKQ9g9OC3z7+uqFFv/+/wA+VdYX +Zy6uim8E4OlJ41S68fQcMiTxbLTCDkvBbpf505t6JhNqF6JB+SBFQJXvRqjoydXf +dyoiDz9N1V0ERzmGEiPewvHg2zWcVia07NGhxN3slQ3klOfYJQ8Ye72feNq1zKCy +AyU3X8fL10XKWooCAU+t4hR5hXYxYTSZse5q0FHZ38Lt9c3ApMSZ2+ueeOtGbsH9 +kV8icGkI6KXp +=zMXp +-----END PGP PUBLIC KEY BLOCK----- diff --git a/tests/openpgp/samplekeys/rsa-primary-auth-only.sec.asc b/tests/openpgp/samplekeys/rsa-primary-auth-only.sec.asc new file mode 100644 index 0000000..9d72421 --- /dev/null +++ b/tests/openpgp/samplekeys/rsa-primary-auth-only.sec.asc @@ -0,0 +1,38 @@ +sec rsa2048 2017-02-14 [CA] + F74B4029E6906D12EBDA8EE3BD7744900FDABC8D + Keygrip = AB1BB1843677AF7CC4D6C14444320C3FF4147E98 +uid [ unknown] ssh://host.example.net + +Passprase: none + +-----BEGIN PGP PRIVATE KEY BLOCK----- + +lQOYBFiizWgBCACi28riS0AaC7UvXaZfoafEvcXq/MAq6akiowPf3eY4zz5DkBPf +Ep3kGuDMAFqULvchIt9vpg719Zar/Xldi+UG+/KsDz+TT5k+nP6CwvBHbAXXtISv +S51TKKnTFpvjcgJc1BMFN0pGf7JnZx1QfRfsZO2BvS4qVzYCWbSS9hlpMq4aIgOc +ERBMsZYMPnI4ijbXysksecDC91kbJH0q5j8aGir5sDyrDwfVLp0SUAubRFU5gXuZ +SEv9QmeV7XoXKXzk9KEYy7GUgoAJzabvbF0rVXqd3DE8KFkwK7rKBe8sGC04DWlK +j/sHJcAfMSqCi/SZyYpO+FSfnB+uJ1BNc05hABEBAAEAB/wN0yan4HIdQ+fU5i2c +v0uknI9+i9zW8mWUi84Puks0K15CZ1VTLHC8JQ6hgq4twhw3HeS7GkJO3X2K4BuQ +tggdIv94slqtQKaQ9XbNgYraz/AMXZtIiNy0FdGaGmM6rY+ccwxM9w1BFXn+48v4 +lzCUCq/2wX53wwDSC5dpRPw8km6+uksFh3dfY8kgfpjU/lUCCwQiooYrQhut1EGB +lDLRHp2ntC1xsnowtdPzluIHFetFSnmn2ehGqXqXtXLAMF0HOirViO5dUVMuj2Pe +ra3IYVYANYK/7FEsRXHxU6aB/BSnubb5EiqB1Oi1JNyMrvYZnRsoRUaMjVgjA4ne +RwD5BADBZN2USYGgciDVh7kvTbrtS1igPhoe3xUUQsM0hVIEwBzG4A4pWXznIQyW +BziVTnRNp953EbHJIYdn7vmJzdiRKI+hOvrF8dfvVsq+fp4pWxrc+zrC6qptpo6H +IhkHWUpyfIPuTI8d+glIUIuDshwKau0UZ8VDTOYuRYEZX9PrAwQA15RdS3geA1cf +UK/ZaKs5VnohcLtEE/z3BlvlQaEdHxSQJSLYC4By7zKVOFZlZkHk36IPikwYNTgc +P57aLe7rwNZqPhADue1ZN6Ypetvrek55lAYL9XoPJ/mWaYz6oDWWW8vHYqEPk8OL +N8/8a6DhK0iydXi9/ztHQllbOt0EUcsEAJBjX84FgIi3VRotRSEDN/tIhekNo8p6 +Pl8YF4V8A1hCVBEKRIcsPVx603DFiGFRcQQcBbblqVG4fpOYYgiBtEgJksRiMg/o +kmVkl8BPrIhBGe2ez7byhhFvJDAoOWCdH0MWGaPGUoCGTDvd046GE8B3UWN9TSmo +qAqfrUG0hQVQLEa0FnNzaDovL2hvc3QuZXhhbXBsZS5uZXSJAU4EEwEIADgWIQT3 +S0Ap5pBtEuvajuO9d0SQD9q8jQUCWKLNaAIbIQULCQgHAgYVCAkKCwIEFgIDAQIe +AQIXgAAKCRC9d0SQD9q8jZBrB/41MJWUeclVtM60+ydPNgUJwyRXpKdLIm/AtM1z +OijlFkwsaMmzbFSFJJX98HGASHdU5OpL2Lv31NNDNMbUuFumApVrLzJUBugFRb+8 +/uY7H3Z0/YKQ9g9OC3z7+uqFFv/+/wA+VdYXZy6uim8E4OlJ41S68fQcMiTxbLTC +DkvBbpf505t6JhNqF6JB+SBFQJXvRqjoydXfdyoiDz9N1V0ERzmGEiPewvHg2zWc +Via07NGhxN3slQ3klOfYJQ8Ye72feNq1zKCyAyU3X8fL10XKWooCAU+t4hR5hXYx +YTSZse5q0FHZ38Lt9c3ApMSZ2+ueeOtGbsH9kV8icGkI6KXp +=3QG9 +-----END PGP PRIVATE KEY BLOCK----- diff --git a/tests/openpgp/ssh-import.scm b/tests/openpgp/ssh-import.scm index ad5acc5..7a4364c 100755 --- a/tests/openpgp/ssh-import.scm +++ b/tests/openpgp/ssh-import.scm @@ -24,10 +24,35 @@ (call-check `(,(tool 'gpgconf) --null --list-dirs agent-ssh-socket)) #t) -(define SSH-ADD #f) +(define path (string-split (getenv "PATH") *pathsep*)) +(define ssh #f) +(catch (skip "ssh not found") (set! ssh (path-expand "ssh" path))) + +(define ssh-add #f) (catch (skip "ssh-add not found") - (set! SSH-ADD - (path-expand "ssh-add" (string-split (getenv "PATH") *pathsep*)))) + (set! ssh-add (path-expand "ssh-add" path))) + +(define ssh-keygen #f) +(catch (skip "ssh-keygen not found") + (set! ssh-keygen (path-expand "ssh-keygen" path))) + +(define ssh-version + (let ((tmp (:stderr (call-with-io `(,ssh "-V") ""))) + (prefix "OpenSSH_")) + (unless (string-prefix? tmp prefix) + (skip "This doesn't look like OpenSSH:" tmp)) + (string->number (substring tmp (string-length prefix) + (+ 3 (string-length prefix)))))) + +(define (ssh-supports? algorithm) + (cond + ((equal? algorithm "ed25519") + (>= ssh-version 6.5)) + (else + (not (string-contains? (:stderr (call-with-io `(,ssh-keygen + -t ,algorithm + -b "1009") "")) + "unknown key type"))))) (define keys '(("dsa" "9a:e1:f1:5f:46:ea:a5:06:e1:e2:f8:38:8e:06:54:58") @@ -48,7 +73,7 @@ (pipe:spawn `(,SSH-ADD -))) (unless (string-contains? (call-popen `(,SSH-ADD -l "-E" md5) "") hash) (fail "key not added")))) - car keys) + car (filter (lambda (x) (ssh-supports? (car x))) keys)) (info "Checking for issue2316...") (unlink (path-join GNUPGHOME "sshcontrol")) diff --git a/tests/openpgp/tofu.scm b/tests/openpgp/tofu.scm index ca5786b..f4eab41 100755 --- a/tests/openpgp/tofu.scm +++ b/tests/openpgp/tofu.scm @@ -18,6 +18,7 @@ ;; along with this program; if not, see <http://www.gnu.org/licenses/>. (load (with-path "defs.scm")) +(load (with-path "time.scm")) (setup-environment) (define GPGTIME 1480943782) @@ -25,8 +26,6 @@ ;; Generate a --faked-system-time parameter for a particular offset. (define (faketime delta) (string-append "--faked-system-time=" (number->string (+ GPGTIME delta)))) -;; A convenience function for the above. -(define (days->seconds days) (* days 24 60 60)) ;; Redefine GPG without --always-trust and a fixed time. (define GPG `(,(tool 'gpg) --no-permission-warning ,(faketime 0))) @@ -34,6 +33,9 @@ (catch (skip "Tofu not supported") (call-check `(,@GPG --trust-model=tofu --list-config))) +(let ((trust-model (gpg-config 'gpg "trust-model"))) + (trust-model::update "tofu")) + (define KEYS '("1C005AF3" "BE04EB2B" "B662E42F")) ;; Import the test keys. @@ -52,7 +54,7 @@ (define (getpolicy keyid . args) (let ((policy (list-ref (assoc "tfs" (gpg-with-colons - `(--trust-model=tofu --with-tofu-info + `(--with-tofu-info ,@args --list-keys ,keyid))) 5))) (unless (member policy '("auto" "good" "unknown" "bad" "ask")) @@ -76,8 +78,7 @@ (define (gettrust keyid . args) (let ((trust (list-ref (assoc "pub" (gpg-with-colons - `(--trust-model=tofu - ,@args + `(,@args --list-keys ,keyid))) 1))) (unless (and (= 1 (string-length trust)) (member (string-ref trust 0) (string->list "oidreqnmfuws-"))) @@ -97,7 +98,7 @@ ;; Set key KEYID's policy to POLICY. Any remaining arguments are ;; passed as options to gpg. (define (setpolicy keyid policy . args) - (call-check `(,@GPG --trust-model=tofu ,@args + (call-check `(,@GPG ,@args --tofu-policy ,policy ,keyid))) (info "Checking tofu policies and trust...") @@ -107,8 +108,7 @@ ;; Verify a message. There should be no conflict and the trust ;; policy should be set to auto. -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/1C005AF3-1.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/1C005AF3-1.txt"))) (checkpolicy "1C005AF3" "auto") ;; Check default trust. @@ -162,8 +162,7 @@ ;; auto), but not affect 1C005AF3's policy. (setpolicy "BE04EB2B" "auto") (checkpolicy "BE04EB2B" "ask") -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/B662E42F-1.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/B662E42F-1.txt"))) (checkpolicy "BE04EB2B" "ask") (checkpolicy "1C005AF3" "bad") (checkpolicy "B662E42F" "ask") @@ -177,8 +176,7 @@ (let* ((tfs (assoc "tfs" (gpg-with-colons - `(--trust-model=tofu --with-tofu-info - ,@args --list-keys ,keyid)))) + `(--with-tofu-info ,@args --list-keys ,keyid)))) (sigs (string->number (list-ref tfs 3))) (sig-days (string->number (list-ref tfs 11))) (encs (string->number (list-ref tfs 4))) @@ -209,31 +207,26 @@ (check-counts "B662E42F" 0 0 0 0) ;; Verify a message. The signature count should increase by 1. -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/1C005AF3-1.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/1C005AF3-1.txt"))) (check-counts "1C005AF3" 1 1 0 0) ;; Verify the same message. The signature count should remain the ;; same. -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/1C005AF3-1.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/1C005AF3-1.txt"))) (check-counts "1C005AF3" 1 1 0 0) ;; Verify another message. -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/1C005AF3-2.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/1C005AF3-2.txt"))) (check-counts "1C005AF3" 2 1 0 0) ;; Verify another message. -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/1C005AF3-3.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/1C005AF3-3.txt"))) (check-counts "1C005AF3" 3 1 0 0) ;; Verify a message from a different sender. The signature count ;; should increase by 1 for that key. -(call-check `(,@GPG --trust-model=tofu - --verify ,(in-srcdir "tofu/conflicting/BE04EB2B-1.txt"))) +(call-check `(,@GPG --verify ,(in-srcdir "tofu/conflicting/BE04EB2B-1.txt"))) (check-counts "1C005AF3" 3 1 0 0) (check-counts "BE04EB2B" 1 1 0 0) (check-counts "B662E42F" 0 0 0 0) @@ -241,34 +234,34 @@ ;; Verify another message on a new day. (Recall: we are interested in ;; when the message was first verified, not when the signer claimed ;; that it was signed.) -(call-check `(,@GPG --trust-model=tofu ,(faketime (days->seconds 2)) +(call-check `(,@GPG ,(faketime (days->seconds 2)) --verify ,(in-srcdir "tofu/conflicting/1C005AF3-4.txt"))) (check-counts "1C005AF3" 4 2 0 0) (check-counts "BE04EB2B" 1 1 0 0) (check-counts "B662E42F" 0 0 0 0) ;; And another. -(call-check `(,@GPG --trust-model=tofu ,(faketime (days->seconds 2)) +(call-check `(,@GPG ,(faketime (days->seconds 2)) --verify ,(in-srcdir "tofu/conflicting/1C005AF3-5.txt"))) (check-counts "1C005AF3" 5 2 0 0) (check-counts "BE04EB2B" 1 1 0 0) (check-counts "B662E42F" 0 0 0 0) ;; Another, but for a different key. -(call-check `(,@GPG --trust-model=tofu ,(faketime (days->seconds 2)) +(call-check `(,@GPG ,(faketime (days->seconds 2)) --verify ,(in-srcdir "tofu/conflicting/BE04EB2B-2.txt"))) (check-counts "1C005AF3" 5 2 0 0) (check-counts "BE04EB2B" 2 2 0 0) (check-counts "B662E42F" 0 0 0 0) ;; And add a third day. -(call-check `(,@GPG --trust-model=tofu ,(faketime (days->seconds 4)) +(call-check `(,@GPG ,(faketime (days->seconds 4)) --verify ,(in-srcdir "tofu/conflicting/BE04EB2B-3.txt"))) (check-counts "1C005AF3" 5 2 0 0) (check-counts "BE04EB2B" 3 3 0 0) (check-counts "B662E42F" 0 0 0 0) -(call-check `(,@GPG --trust-model=tofu ,(faketime (days->seconds 4)) +(call-check `(,@GPG ,(faketime (days->seconds 4)) --verify ,(in-srcdir "tofu/conflicting/BE04EB2B-4.txt"))) (check-counts "1C005AF3" 5 2 0 0) (check-counts "BE04EB2B" 4 3 0 0) @@ -300,7 +293,7 @@ (for-each (lambda (i) (let ((fn (in-srcdir DIR (string-append key "-" i ".txt")))) - (call-check `(,@GPG --trust-model=tofu --verify ,fn)))) + (call-check `(,@GPG --verify ,fn)))) (list "1" "2"))) (list KEYIDA KEYIDB))) @@ -392,7 +385,7 @@ (for-each (lambda (i) (let ((fn (in-srcdir DIR (string-append key "-" i ".txt")))) - (call-check `(,@GPG --trust-model=tofu --verify ,fn)))) + (call-check `(,@GPG --verify ,fn)))) (list "1" "2"))) (list KEYIDA KEYIDB))) diff --git a/tests/openpgp/verify.scm b/tests/openpgp/verify.scm index a398a14..d3bd763 100755 --- a/tests/openpgp/verify.scm +++ b/tests/openpgp/verify.scm @@ -243,6 +243,9 @@ FWIAQUplk7JWbyRKAJ92ZJyJpWfzb0yc1s7MY65r2qEHrg== ;; An Ed25519 cleartext message with an R parameter of only 247 bits ;; so that the code to re-insert the stripped zero byte kicks in. The ;; S parameter has 253 bits but that does not strip a full byte. +;; +;; Note that the message has a typo ("the the"), but this should not +;; be fixed because it breaks this test. (define msg_ed25519_rshort " -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 |