aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorDaiki Ueno2013-10-03 16:11:27 +0900
committerDaiki Ueno2013-10-03 16:11:27 +0900
commitacbadd0046cb1643eeaf8595ede1a69cc25d3158 (patch)
treef1b7ffc2d37226d1f20d53b879e008b400f545ae /test
parent0a858ebfc57a072ae8ab65f509d8a4901a2ec073 (diff)
downloademacs-acbadd0046cb1643eeaf8595ede1a69cc25d3158.tar.gz
emacs-acbadd0046cb1643eeaf8595ede1a69cc25d3158.zip
Add support for package signature checking.
* lisp/emacs-lisp/package.el (url-http-file-exists-p) (epg-make-context, epg-context-set-home-directory) (epg-verify-string, epg-context-result-for) (epg-signature-status, epg-signature-to-string) (epg-check-configuration, epg-configuration) (epg-import-keys-from-file): Declare. (package-check-signature): New user option. (package-unsigned-archives): New user option. (package-desc): Add `signed' field. (package-load-descriptor): Set `signed' field if .signed file exists. (package--archive-file-exists-p): New function. (package--check-signature): New function. (package-install-from-archive): Check package signature. (package--download-one-archive): Check archive signature. (package-delete): Remove .signed file. (package-import-keyring): New command. (package-refresh-contents): Import default keyring. (package-desc-status): Add "unsigned" status. (describe-package-1, package-menu--print-info) (package-menu-mark-delete, package-menu--find-upgrades) (package-menu--status-predicate): Support "unsigned" status. * test/automated/data/package/signed/archive-contents: * test/automated/data/package/signed/archive-contents.sig: * test/automated/data/package/signed/signed-good-1.0.el: * test/automated/data/package/signed/signed-good-1.0.el.sig: * test/automated/data/package/signed/signed-bad-1.0.el: * test/automated/data/package/signed/signed-bad-1.0.el.sig: * test/automated/data/package/key.pub: * test/automated/data/package/key.sec: New files. * test/automated/package-test.el (package-test-update-listing) (package-test-update-archives, package-test-describe-package): Adjust to package.el change. (package-test-signed): New test.
Diffstat (limited to 'test')
-rw-r--r--test/ChangeLog16
-rw-r--r--test/automated/data/package/key.pub18
-rw-r--r--test/automated/data/package/key.sec33
-rw-r--r--test/automated/data/package/signed/archive-contents7
-rw-r--r--test/automated/data/package/signed/archive-contents.sigbin0 -> 287 bytes
-rw-r--r--test/automated/data/package/signed/signed-bad-1.0.el33
-rw-r--r--test/automated/data/package/signed/signed-bad-1.0.el.sigbin0 -> 287 bytes
-rw-r--r--test/automated/data/package/signed/signed-good-1.0.el33
-rw-r--r--test/automated/data/package/signed/signed-good-1.0.el.sigbin0 -> 287 bytes
-rw-r--r--test/automated/package-test.el39
10 files changed, 175 insertions, 4 deletions
diff --git a/test/ChangeLog b/test/ChangeLog
index bf8ecbcb9eb..00a49eea936 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,19 @@
12013-10-03 Daiki Ueno <ueno@gnu.org>
2
3 * automated/data/package/signed/archive-contents:
4 * automated/data/package/signed/archive-contents.sig:
5 * automated/data/package/signed/signed-good-1.0.el:
6 * automated/data/package/signed/signed-good-1.0.el.sig:
7 * automated/data/package/signed/signed-bad-1.0.el:
8 * automated/data/package/signed/signed-bad-1.0.el.sig:
9 * automated/data/package/key.pub:
10 * automated/data/package/key.sec: New files.
11
12 * automated/package-test.el (package-test-update-listing)
13 (package-test-update-archives, package-test-describe-package):
14 Adjust to package.el change.
15 (package-test-signed): New test.
16
12013-10-01 Dmitry Gutov <dgutov@yandex.ru> 172013-10-01 Dmitry Gutov <dgutov@yandex.ru>
2 18
3 * automated/package-test.el: Update all cases to use :url instead 19 * automated/package-test.el: Update all cases to use :url instead
diff --git a/test/automated/data/package/key.pub b/test/automated/data/package/key.pub
new file mode 100644
index 00000000000..a326d34e54f
--- /dev/null
+++ b/test/automated/data/package/key.pub
@@ -0,0 +1,18 @@
1-----BEGIN PGP PUBLIC KEY BLOCK-----
2Version: GnuPG v1.4.14 (GNU/Linux)
3
4mQENBFJNB8gBCACfbtpvYrM8V1HM0KFlIwatcEJugHqwOHpr/Z9mrCW0fxyQAW/d
52L+3QVNsN9Tz/K9lLcBUgeR7rhVEzHNqhmhNj/HnikwGqXbIofhp+QbZmBKnAlCz
6d77kg8K9lozHtfTkm1gX/7DdPzQKmgi7WOzzi2395wGubeqJLvYaEcqVbI0Eob+E
73CzRjNy/e/Tf3TJRW5etTcdZN6LVuIY7tNCHqlQZTwyycON/hfLTX6cLCnzDsqm/
8NxCuwn9aqP9aGRGfIu7Y+If3zTymvrXEPUN98OEID814bOKdx0uVTZRiSMbvuTGI
98uMa/kpGX/78rqI61gbZV51RFoU7pT2tzwY/ABEBAAG0HkouIFIuIEhhY2tlciA8
10anJoQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUk0HyAIbAwYLCQgHAwIGFQgCCQoL
11BBYCAwECHgECF4AACgkQtpVAhgkYletuhQf+JAyHYhTZNxjq0UYlikuLX8EtYbXX
12PB+03J0B73SMzEai5XsiTU2ADxqxwr7pveVK1INf+IGLiiXBlQq+4DSOvQY4xLfp
1358jTOYRV1ECvlXK/JtvVOwufXREADaydf9l/MUxA5G2PPBWIuQknh3ysPSsx68OJ
14SzNHFwklLn0DKc4WloE/GLDpTzimnCg7QGzuUo3Iilpjdy8EvTdI5d3jx/mGJIwI
15goB+YZgyxSPM+GjDwh5DEwD7OexNqqa7RynnmU0epmlYyi9UufCHLwgiiEIzjpWi
166+iF+CQ45ZAKncovByenIUv73J3ImOudrsskeAHBmahljv1he6uV9Egj2Q==
17=b5Kg
18-----END PGP PUBLIC KEY BLOCK-----
diff --git a/test/automated/data/package/key.sec b/test/automated/data/package/key.sec
new file mode 100644
index 00000000000..d21e6ae9a45
--- /dev/null
+++ b/test/automated/data/package/key.sec
@@ -0,0 +1,33 @@
1-----BEGIN PGP PRIVATE KEY BLOCK-----
2Version: GnuPG v1.4.14 (GNU/Linux)
3
4lQO+BFJNB8gBCACfbtpvYrM8V1HM0KFlIwatcEJugHqwOHpr/Z9mrCW0fxyQAW/d
52L+3QVNsN9Tz/K9lLcBUgeR7rhVEzHNqhmhNj/HnikwGqXbIofhp+QbZmBKnAlCz
6d77kg8K9lozHtfTkm1gX/7DdPzQKmgi7WOzzi2395wGubeqJLvYaEcqVbI0Eob+E
73CzRjNy/e/Tf3TJRW5etTcdZN6LVuIY7tNCHqlQZTwyycON/hfLTX6cLCnzDsqm/
8NxCuwn9aqP9aGRGfIu7Y+If3zTymvrXEPUN98OEID814bOKdx0uVTZRiSMbvuTGI
98uMa/kpGX/78rqI61gbZV51RFoU7pT2tzwY/ABEBAAH+AwMCKCCpPNXkXuVgF7cz
10eByuvgIO7wImDYGOdJqsASSzV4q0u1acnGtlxg7WphKDF9RnC5+1ZZ1ZcrBcv2uJ
11xZm2jHdjqM3FmgQTN70GVzO1nKEur2wxlKotG4Q+8BtaRDwHdKpQFk+QW9aInH3C
12BkNWTK97iFwZaoUGxKuRJb35qjMe3SsDE7kdbtOqO+tOeppRVeOOZCn7F33ir/6i
13j2gmIME6LFDzvBi6YAyMBSh90Ak70HJINt0QfXlZf5MtX1NaxaEcnsRmwwcNqxh9
14JvcC9q4WrR92NhHCHI+lOsAe7hbwo/VkwRjSSx0HdKkx6kvdcNj/9LeX/jykzLvg
15kEqvAqT4Jmk57W2seqvpNcAO+eUVrJ5D1OR6khsUtikPp2pQH5MDXJDGcie+ZAFb
16w6BwoWBDBjooKtfuP0LKqrdtJG2JLe6yhBhWvfqHPBlUU1SsA7a5aTCLo8FiqgEI
17Kyy60zMx/2Mi48oN1a/mAoV1MTWLhOVUWJlIHM7nVLj1OaX0316LcLX/uTLTq40p
18apHKwERanzY7f8ROiv/Fa/J+9cCsfOLKfjFAjpBVUVoOb39HsyS/vvkGMY4kgaD6
19K6r9JPdsaoYvsLkxk5HyHF7Mk2uS1z1EIArD2/3lRiX6ag+IU1Nl3XDkgfZj06K3
20juS84dGF8CmN49uOEjzAJAQZH9jTs5OKzUuZhGJF+gt0L78vLOoKRr8bu1N1GPqU
21wnS908HWruXzjJl1CAhnuCa8FnDaU+tmEKjYpWuelx85kolpMW7LT5gOFZr84MIj
22Kq3Rt2hU6qQ7Cdy1ep531YKkmyh9Y4l/Tgir1OtnQQqtNuwHI497l7qAUnKZBBHZ
23guApjS9BoHsRXkw2mgDssZ+khOwj/xJm876nFSiQeCD0aIbU/4zJ9e2HUOJAZI1r
24d7QeSi4gUi4gSGFja2VyIDxqcmhAZXhhbXBsZS5jb20+iQE4BBMBAgAiBQJSTQfI
25AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRC2lUCGCRiV626FB/4kDIdi
26FNk3GOrRRiWKS4tfwS1htdc8H7TcnQHvdIzMRqLleyJNTYAPGrHCvum95UrUg1/4
27gYuKJcGVCr7gNI69BjjEt+nnyNM5hFXUQK+Vcr8m29U7C59dEQANrJ1/2X8xTEDk
28bY88FYi5CSeHfKw9KzHrw4lLM0cXCSUufQMpzhaWgT8YsOlPOKacKDtAbO5SjciK
29WmN3LwS9N0jl3ePH+YYkjAiCgH5hmDLFI8z4aMPCHkMTAPs57E2qprtHKeeZTR6m
30aVjKL1S58IcvCCKIQjOOlaLr6IX4JDjlkAqdyi8HJ6chS/vcnciY652uyyR4AcGZ
31qGWO/WF7q5X0SCPZ
32=5FZK
33-----END PGP PRIVATE KEY BLOCK-----
diff --git a/test/automated/data/package/signed/archive-contents b/test/automated/data/package/signed/archive-contents
new file mode 100644
index 00000000000..2a773ecba6a
--- /dev/null
+++ b/test/automated/data/package/signed/archive-contents
@@ -0,0 +1,7 @@
1(1
2 (signed-good .
3 [(1 0)
4 nil "A package with good signature" single])
5 (signed-bad .
6 [(1 0)
7 nil "A package with bad signature" single]))
diff --git a/test/automated/data/package/signed/archive-contents.sig b/test/automated/data/package/signed/archive-contents.sig
new file mode 100644
index 00000000000..658edd3f60e
--- /dev/null
+++ b/test/automated/data/package/signed/archive-contents.sig
Binary files differ
diff --git a/test/automated/data/package/signed/signed-bad-1.0.el b/test/automated/data/package/signed/signed-bad-1.0.el
new file mode 100644
index 00000000000..3734823876e
--- /dev/null
+++ b/test/automated/data/package/signed/signed-bad-1.0.el
@@ -0,0 +1,33 @@
1;;; signed-bad.el --- A single-file package with bad signature
2
3;; Author: J. R. Hacker <jrh@example.com>
4;; Version: 1.0
5;; Keywords: frobnicate
6;; URL: http://doodles.au
7
8;;; Commentary:
9
10;; This package provides a minor mode to frobnicate and/or bifurcate
11;; any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
12;; and all your dreams will come true.
13
14;;; Code:
15
16(defgroup signed-bad nil "Simply a file"
17 :group 'lisp)
18
19(defcustom signed-bad-super-sunday t
20 "How great is this?"
21 :type 'boolean
22 :group 'signed-bad)
23
24(defvar signed-bad-sudo-sandwich nil
25 "Make a sandwich?")
26
27;;;###autoload
28(define-minor-mode signed-bad-mode
29 "It does good things to stuff")
30
31(provide 'signed-bad)
32
33;;; signed-bad.el ends here
diff --git a/test/automated/data/package/signed/signed-bad-1.0.el.sig b/test/automated/data/package/signed/signed-bad-1.0.el.sig
new file mode 100644
index 00000000000..747918794ca
--- /dev/null
+++ b/test/automated/data/package/signed/signed-bad-1.0.el.sig
Binary files differ
diff --git a/test/automated/data/package/signed/signed-good-1.0.el b/test/automated/data/package/signed/signed-good-1.0.el
new file mode 100644
index 00000000000..22718df2763
--- /dev/null
+++ b/test/automated/data/package/signed/signed-good-1.0.el
@@ -0,0 +1,33 @@
1;;; signed-good.el --- A single-file package with good signature
2
3;; Author: J. R. Hacker <jrh@example.com>
4;; Version: 1.0
5;; Keywords: frobnicate
6;; URL: http://doodles.au
7
8;;; Commentary:
9
10;; This package provides a minor mode to frobnicate and/or bifurcate
11;; any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
12;; and all your dreams will come true.
13
14;;; Code:
15
16(defgroup signed-good nil "Simply a file"
17 :group 'lisp)
18
19(defcustom signed-good-super-sunday t
20 "How great is this?"
21 :type 'boolean
22 :group 'signed-good)
23
24(defvar signed-good-sudo-sandwich nil
25 "Make a sandwich?")
26
27;;;###autoload
28(define-minor-mode signed-good-mode
29 "It does good things to stuff")
30
31(provide 'signed-good)
32
33;;; signed-good.el ends here
diff --git a/test/automated/data/package/signed/signed-good-1.0.el.sig b/test/automated/data/package/signed/signed-good-1.0.el.sig
new file mode 100644
index 00000000000..747918794ca
--- /dev/null
+++ b/test/automated/data/package/signed/signed-good-1.0.el.sig
Binary files differ
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index 84f520df9bc..ec85432b637 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -254,7 +254,7 @@ Must called from within a `tar-mode' buffer."
254 (should (package-installed-p 'simple-single)) 254 (should (package-installed-p 'simple-single))
255 (switch-to-buffer "*Packages*") 255 (switch-to-buffer "*Packages*")
256 (goto-char (point-min)) 256 (goto-char (point-min))
257 (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+installed" nil t)) 257 (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+unsigned" nil t))
258 (goto-char (point-min)) 258 (goto-char (point-min))
259 (should-not (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+\\(available\\|new\\)" nil t)) 259 (should-not (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+\\(available\\|new\\)" nil t))
260 (kill-buffer buf)))) 260 (kill-buffer buf))))
@@ -276,7 +276,7 @@ Must called from within a `tar-mode' buffer."
276 ;; New version should be available and old version should be installed 276 ;; New version should be available and old version should be installed
277 (goto-char (point-min)) 277 (goto-char (point-min))
278 (should (re-search-forward "^\\s-+simple-single\\s-+1.4\\s-+new" nil t)) 278 (should (re-search-forward "^\\s-+simple-single\\s-+1.4\\s-+new" nil t))
279 (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+installed" nil t)) 279 (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+unsigned" nil t))
280 280
281 (goto-char (point-min)) 281 (goto-char (point-min))
282 (should (re-search-forward "^\\s-+new-pkg\\s-+1.0\\s-+\\(available\\|new\\)" nil t)) 282 (should (re-search-forward "^\\s-+new-pkg\\s-+1.0\\s-+\\(available\\|new\\)" nil t))
@@ -307,9 +307,9 @@ Must called from within a `tar-mode' buffer."
307 (with-fake-help-buffer 307 (with-fake-help-buffer
308 (describe-package 'simple-single) 308 (describe-package 'simple-single)
309 (goto-char (point-min)) 309 (goto-char (point-min))
310 (should (search-forward "simple-single is an installed package." nil t)) 310 (should (search-forward "simple-single is an unsigned package." nil t))
311 (should (search-forward 311 (should (search-forward
312 (format "Status: Installed in `%s/'." 312 (format "Status: Installed in `%s/' (unsigned)."
313 (expand-file-name "simple-single-1.3" package-user-dir)) 313 (expand-file-name "simple-single-1.3" package-user-dir))
314 nil t)) 314 nil t))
315 (should (search-forward "Version: 1.3" nil t)) 315 (should (search-forward "Version: 1.3" nil t))
@@ -347,6 +347,37 @@ Must called from within a `tar-mode' buffer."
347 (should (search-forward "This is a bare-bones readme file for the multi-file" 347 (should (search-forward "This is a bare-bones readme file for the multi-file"
348 nil t))))) 348 nil t)))))
349 349
350(ert-deftest package-test-signed ()
351 "Test verifying package signature."
352 :expected-result (condition-case nil
353 (progn
354 (epg-check-configuration (epg-configuration))
355 :passed)
356 (error :failed))
357 (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
358 (package-test-data-dir
359 (expand-file-name "data/package/signed" package-test-file-dir)))
360 (with-package-test ()
361 (package-initialize)
362 (package-import-keyring keyring)
363 (package-refresh-contents)
364 (should (package-install 'signed-good))
365 (should-error (package-install 'signed-bad))
366 ;; Check if the installed package status is updated.
367 (let ((buf (package-list-packages)))
368 (package-menu-refresh)
369 (should (re-search-forward "^\\s-+signed-good\\s-+1\\.0\\s-+installed"
370 nil t)))
371 ;; Check if the package description is updated.
372 (with-fake-help-buffer
373 (describe-package 'signed-good)
374 (goto-char (point-min))
375 (should (search-forward "signed-good is an installed package." nil t))
376 (should (search-forward
377 (format "Status: Installed in `%s/'."
378 (expand-file-name "signed-good-1.0" package-user-dir))
379 nil t))))))
380
350(provide 'package-test) 381(provide 'package-test)
351 382
352;;; package-test.el ends here 383;;; package-test.el ends here