1 Return-Path: <bremner@tethera.net>
\r
2 X-Original-To: notmuch@notmuchmail.org
\r
3 Delivered-To: notmuch@notmuchmail.org
\r
4 Received: from localhost (localhost [127.0.0.1])
\r
5 by arlo.cworth.org (Postfix) with ESMTP id 20DDB6DE1617
\r
6 for <notmuch@notmuchmail.org>; Mon, 14 Dec 2015 05:39:15 -0800 (PST)
\r
7 X-Virus-Scanned: Debian amavisd-new at cworth.org
\r
11 X-Spam-Status: No, score=-0.315 tagged_above=-999 required=5 tests=[AWL=0.236,
\r
12 RP_MATCHES_RCVD=-0.55, SPF_PASS=-0.001] autolearn=disabled
\r
13 Received: from arlo.cworth.org ([127.0.0.1])
\r
14 by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024)
\r
15 with ESMTP id 04ClzJ5-R_4j for <notmuch@notmuchmail.org>;
\r
16 Mon, 14 Dec 2015 05:39:13 -0800 (PST)
\r
17 Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197])
\r
18 by arlo.cworth.org (Postfix) with ESMTPS id 565B16DE02CE
\r
19 for <notmuch@notmuchmail.org>; Mon, 14 Dec 2015 05:39:12 -0800 (PST)
\r
20 Received: from remotemail by fethera.tethera.net with local (Exim 4.84)
\r
21 (envelope-from <bremner@tethera.net>)
\r
22 id 1a8TLH-0008F3-Ii; Mon, 14 Dec 2015 08:39:07 -0500
\r
23 Received: (nullmailer pid 31800 invoked by uid 1000);
\r
24 Mon, 14 Dec 2015 13:39:05 -0000
\r
25 From: David Bremner <david@tethera.net>
\r
26 To: notmuch@notmuchmail.org
\r
27 Subject: [Patch v3 4/8] test: initial tests for S/MIME and notmuch-emacs
\r
28 Date: Mon, 14 Dec 2015 09:38:53 -0400
\r
29 Message-Id: <1450100337-31655-5-git-send-email-david@tethera.net>
\r
30 X-Mailer: git-send-email 2.6.2
\r
31 In-Reply-To: <1450100337-31655-1-git-send-email-david@tethera.net>
\r
32 References: <1450100337-31655-1-git-send-email-david@tethera.net>
\r
33 X-BeenThere: notmuch@notmuchmail.org
\r
34 X-Mailman-Version: 2.1.20
\r
36 List-Id: "Use and development of the notmuch mail system."
\r
37 <notmuch.notmuchmail.org>
\r
38 List-Unsubscribe: <https://notmuchmail.org/mailman/options/notmuch>,
\r
39 <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
\r
40 List-Archive: <http://notmuchmail.org/pipermail/notmuch/>
\r
41 List-Post: <mailto:notmuch@notmuchmail.org>
\r
42 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
\r
43 List-Subscribe: <https://notmuchmail.org/mailman/listinfo/notmuch>,
\r
44 <mailto:notmuch-request@notmuchmail.org?subject=subscribe>
\r
45 X-List-Received-Date: Mon, 14 Dec 2015 13:39:15 -0000
\r
47 Test the ability of notmuch-mua-mail to send S/MIME signed (and
\r
48 encrypted) messages; this really relies on existing functionality in
\r
51 The generated keys and messages will later be useful for testing the
\r
54 test/T355-smime.sh | 42 +++++++++++++++++++++++++++++++++++++
\r
55 test/smime/README | 7 +++++++
\r
56 test/smime/key+cert.pem | 56 +++++++++++++++++++++++++++++++++++++++++++++++++
\r
57 test/smime/test.crt | 19 +++++++++++++++++
\r
58 test/test-lib.el | 10 +++++++++
\r
59 test/test-lib.sh | 1 +
\r
60 6 files changed, 135 insertions(+)
\r
61 create mode 100755 test/T355-smime.sh
\r
62 create mode 100644 test/smime/README
\r
63 create mode 100644 test/smime/key+cert.pem
\r
64 create mode 100644 test/smime/test.crt
\r
66 diff --git a/test/T355-smime.sh b/test/T355-smime.sh
\r
67 new file mode 100755
\r
68 index 0000000..e3419d6
\r
70 +++ b/test/T355-smime.sh
\r
72 +#!/usr/bin/env bash
\r
74 +test_description='S/MIME signature verification and decryption'
\r
77 +test_require_external_prereq openssl
\r
78 +test_require_external_prereq gpgsm
\r
80 +cp $TEST_DIRECTORY/smime/key+cert.pem test_suite.pem
\r
82 +FINGERPRINT=$(openssl x509 -fingerprint -in test_suite.pem -noout | sed -e 's/^.*=//' -e s/://g)
\r
84 +test_expect_success 'emacs delivery of S/MIME signed message' \
\r
85 + 'emacs_fcc_message \
\r
86 + "test signed message 001" \
\r
87 + "This is a test signed message." \
\r
88 + "(mml-secure-message-sign \"smime\")"'
\r
90 +# Hard code the MML to avoid several interactive questions
\r
91 +test_expect_success 'emacs delivery of S/MIME encrypted + signed message' \
\r
92 +'emacs_fcc_message \
\r
93 + "test encrypted message 001" \
\r
94 + "<#secure method=smime mode=signencrypt keyfile=\\\"test_suite.pem\\\" certfile=\\\"test_suite.pem\\\">\nThis is a test encrypted message.\n"'
\r
96 +test_begin_subtest "Signature verification (openssl)"
\r
97 +notmuch show --format=raw subject:"test signed message 001" |\
\r
98 + openssl smime -verify -CAfile $TEST_DIRECTORY/smime/test.crt 2>OUTPUT
\r
99 +cat <<EOF > EXPECTED
\r
100 +Verification successful
\r
102 +test_expect_equal_file EXPECTED OUTPUT
\r
104 +test_begin_subtest "Decryption and signature verification (openssl)"
\r
105 +notmuch show --format=raw subject:"test encrypted message 001" |\
\r
106 + openssl smime -decrypt -recip test_suite.pem |\
\r
107 + openssl smime -verify -CAfile $TEST_DIRECTORY/smime/test.crt 2>OUTPUT
\r
108 +cat <<EOF > EXPECTED
\r
109 +Verification successful
\r
111 +test_expect_equal_file EXPECTED OUTPUT
\r
114 diff --git a/test/smime/README b/test/smime/README
\r
115 new file mode 100644
\r
116 index 0000000..92803c7
\r
118 +++ b/test/smime/README
\r
120 +test.crt: self signed certificated
\r
121 + % gpgsm --gen-key # needs gpgsm 2.1
\r
123 +key+cert.pem: cert + unencryped private
\r
124 + % gpsm --import test.crt
\r
125 + % gpgsm --export-private-key-p12 -out foo.p12 (no passphrase)
\r
126 + % openssl pkcs12 -in ns.p12 -clcerts -nodes > key+cert.pem
\r
127 diff --git a/test/smime/key+cert.pem b/test/smime/key+cert.pem
\r
128 new file mode 100644
\r
129 index 0000000..6ee30cf
\r
131 +++ b/test/smime/key+cert.pem
\r
134 + friendlyName: GnuPG exported certificate e0972a47
\r
135 + localKeyID: 61 6F 46 CD 73 83 4C 63 84 77 56 AF 0D FB 64 A6 E0 97 2A 47
\r
136 +subject=/CN=Notmuch Test Suite
\r
137 +issuer=/CN=Notmuch Test Suite
\r
138 +-----BEGIN CERTIFICATE-----
\r
139 +MIIDCzCCAfOgAwIBAgIIb3SMlL0MZ6kwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UE
\r
140 +AxMSTm90bXVjaCBUZXN0IFN1aXRlMCAXDTE1MTIxNDAyMDgxMFoYDzIwNjMwNDA1
\r
141 +MTcwMDAwWjAdMRswGQYDVQQDExJOb3RtdWNoIFRlc3QgU3VpdGUwggEiMA0GCSqG
\r
142 +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7vH1/lkENTAJRbyq2036K7Pw+imSIhB5T
\r
143 +U0WnAgVGWOemY1Eppi9Dk6rjDxuuUKOCQ5el2wmFZN57Fi/4leBH7x217BnnqWNU
\r
144 +QV88DxEfV+sk8dSb4a5FOOyfhFJmZso/0lK8x0fBcCNjmRFIjB1afSSXWnCvRpAR
\r
145 +v+O9trLJuIjbbmXg1gltjuB5yDw8/OLEI7G7YSIop9FxopWJL5rW/o2WEfRPGpYe
\r
146 +HNRLObCRIvbyDd6XjaCrKBuIrhN7R7mmIa9PUyl8TiY+pCMWs9dHmOsiC73/+P6E
\r
147 +AhsTOY1bfbGQXBAGZ/FL+SgC5wEcPr2u3+y8y5gw2bpaVhQnu6YLAgMBAAGjTTBL
\r
148 +MCUGA1UdEQQeMByBGnRlc3Rfc3VpdGVAbm90bXVjaG1haWwub3JnMBEGCisGAQQB
\r
149 +2kcCAgEEAwEB/zAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBb
\r
150 +XP5OnRVplrEdlnivx3CbCLWO13fcMWXfvKxLGsKFwKuxtpvINFUKM+jDr0kVdQ3d
\r
151 +u3DJe2hNFQMILK/KrGyN5qEz2YBdHNvdkkvWA+3WHr/tiNr6Rly6QuxBzouxzmRu
\r
152 +MmnUhsOzZaHT3GmLSVJlwie8KqSfKVGwyBmCyHbUQkMrSEV6QDESN6KyWt85gokB
\r
153 +56Bc/wVq073xS1nFbfF1M3Z5q5BlLZK4IOerKTQx/oSfR4EX6B7rW2pttWsUCyEj
\r
154 +LljaA8ehxR9B29m08IGGl43pHEpC1WnOHvsEGs99mPpjWbUgVv5KY7OuS/8iVw6v
\r
155 +/Yy5Z+JBwlMzTBaUXXl3
\r
156 +-----END CERTIFICATE-----
\r
158 + friendlyName: GnuPG exported certificate e0972a47
\r
159 + localKeyID: 61 6F 46 CD 73 83 4C 63 84 77 56 AF 0D FB 64 A6 E0 97 2A 47
\r
160 +Key Attributes: <No Attributes>
\r
161 +-----BEGIN PRIVATE KEY-----
\r
162 +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7vH1/lkENTAJR
\r
163 +byq2036K7Pw+imSIhB5TU0WnAgVGWOemY1Eppi9Dk6rjDxuuUKOCQ5el2wmFZN57
\r
164 +Fi/4leBH7x217BnnqWNUQV88DxEfV+sk8dSb4a5FOOyfhFJmZso/0lK8x0fBcCNj
\r
165 +mRFIjB1afSSXWnCvRpARv+O9trLJuIjbbmXg1gltjuB5yDw8/OLEI7G7YSIop9Fx
\r
166 +opWJL5rW/o2WEfRPGpYeHNRLObCRIvbyDd6XjaCrKBuIrhN7R7mmIa9PUyl8TiY+
\r
167 +pCMWs9dHmOsiC73/+P6EAhsTOY1bfbGQXBAGZ/FL+SgC5wEcPr2u3+y8y5gw2bpa
\r
168 +VhQnu6YLAgMBAAECggEAVhtHCHz3C01Ahu9RDRgGI1w8+cZqA/9tFVTNTqNrne9r
\r
169 +GHLXKB4z8W/KYmhsjtAnnri31neXb1prfNMZX5AGlZfD7cwDubCEgYGWV6qldNXT
\r
170 +YVeV54VkdBV+2k9Lp/Ifc5RZJILWk4+Ge8kaF0dEs1tQrCbsJkhcDfgQUdR5PnGe
\r
171 +6cKv/8HJo0ep6u5cJloIluit8yF3z4+aHixMQBvQKm/8tug+EsrQZ3IVXbh1hONO
\r
172 +AZ68z9CrU2pJ/0w/jwwcM5feRfTMC7bZ3vkQb1mQKYFJrvN77TGroUtAZFWqJw7M
\r
173 +r0f2MShdVjfEdJ1ySnCyKF24cSSPSQsLZUe4UlFyQQKBgQDlqr9ajaUzc6Lyma2e
\r
174 +Q1IJapbX2OZQtf5tlKVCVtZOlu5r97YMOK96XsQFKtdxhAhrGvvTJwPmwhj+fqfR
\r
175 +XltNrmUBpHCMsm9nloADvBS83KTP5tw9TMT0VZpt+m5XmvutdyQbSKwy+KMy+GZz
\r
176 +/XBQCfTEoiDS4grGFftvZuRB4QKBgQDRQvsVFMh2NOnVGqczHJNGjvbDueUJmPUN
\r
177 +3VxZc/FpBGLRSoN7uxQ4dGNnwyvXHs+pLAAC6xZpFCos9c3R8EPvoMyUehoDSAKW
\r
178 +CMD4C+K8z7n4ducE5a0NrGIgQvnXtteKr3ZwK8V7cscyTCyjXdrQmQ5XHeue8asR
\r
179 +758g+dG9awKBgEWuZJho2XKe5xWMIu0dp8pLmLCsklRyo1tD+lACYMs/Z99CLO3Q
\r
180 +VQ1fq0GWGf/K+3LjoPwTnk9pHIQ6kVgotLMA8oxpA+zsRni7ZOO9MN2MZETf2nqO
\r
181 +zEMFpfEwRkI2N54Nw9qzVeuxHHLegtc2Udk27BisyCCzjGlFSiAmq6KBAoGAFGfE
\r
182 +RXjcvT65HX8Gaya+wtugFB8BRx0JX7dI6OLk5ZKLmq0ykH2bQepgnWermmU4we77
\r
183 +0Dvtfa3u0YjZ/24XXg2YbSpWiWps0Y2/C7AyAAzq12/1OGcX5qk4Tbd0f+QkIset
\r
184 +qxzmt4XcAKw50J+Vf3DmbYQ1M/BftCZcTm0ShHcCgYEAxp8mjE8iIHxFrm7nHMS0
\r
185 +2/iWxO8DYaAZ0OLfjaZELHchVvTwa+DynbkwvOc3l4cbNTVaf9O6nmHTkLyBLBNr
\r
186 +2htPKm1vi9TzNdvGqobFO3ijfvdGvq1rjQl86ns0cf395REmEaVX3zcw2v+GyC5n
\r
187 +qE6Aa5bvdZ9Yykg6aoFo1mY=
\r
188 +-----END PRIVATE KEY-----
\r
189 diff --git a/test/smime/test.crt b/test/smime/test.crt
\r
190 new file mode 100644
\r
191 index 0000000..e5d1e82
\r
193 +++ b/test/smime/test.crt
\r
195 +-----BEGIN CERTIFICATE-----
\r
196 +MIIDCzCCAfOgAwIBAgIIb3SMlL0MZ6kwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UE
\r
197 +AxMSTm90bXVjaCBUZXN0IFN1aXRlMCAXDTE1MTIxNDAyMDgxMFoYDzIwNjMwNDA1
\r
198 +MTcwMDAwWjAdMRswGQYDVQQDExJOb3RtdWNoIFRlc3QgU3VpdGUwggEiMA0GCSqG
\r
199 +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7vH1/lkENTAJRbyq2036K7Pw+imSIhB5T
\r
200 +U0WnAgVGWOemY1Eppi9Dk6rjDxuuUKOCQ5el2wmFZN57Fi/4leBH7x217BnnqWNU
\r
201 +QV88DxEfV+sk8dSb4a5FOOyfhFJmZso/0lK8x0fBcCNjmRFIjB1afSSXWnCvRpAR
\r
202 +v+O9trLJuIjbbmXg1gltjuB5yDw8/OLEI7G7YSIop9FxopWJL5rW/o2WEfRPGpYe
\r
203 +HNRLObCRIvbyDd6XjaCrKBuIrhN7R7mmIa9PUyl8TiY+pCMWs9dHmOsiC73/+P6E
\r
204 +AhsTOY1bfbGQXBAGZ/FL+SgC5wEcPr2u3+y8y5gw2bpaVhQnu6YLAgMBAAGjTTBL
\r
205 +MCUGA1UdEQQeMByBGnRlc3Rfc3VpdGVAbm90bXVjaG1haWwub3JnMBEGCisGAQQB
\r
206 +2kcCAgEEAwEB/zAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBb
\r
207 +XP5OnRVplrEdlnivx3CbCLWO13fcMWXfvKxLGsKFwKuxtpvINFUKM+jDr0kVdQ3d
\r
208 +u3DJe2hNFQMILK/KrGyN5qEz2YBdHNvdkkvWA+3WHr/tiNr6Rly6QuxBzouxzmRu
\r
209 +MmnUhsOzZaHT3GmLSVJlwie8KqSfKVGwyBmCyHbUQkMrSEV6QDESN6KyWt85gokB
\r
210 +56Bc/wVq073xS1nFbfF1M3Z5q5BlLZK4IOerKTQx/oSfR4EX6B7rW2pttWsUCyEj
\r
211 +LljaA8ehxR9B29m08IGGl43pHEpC1WnOHvsEGs99mPpjWbUgVv5KY7OuS/8iVw6v
\r
212 +/Yy5Z+JBwlMzTBaUXXl3
\r
213 +-----END CERTIFICATE-----
\r
214 diff --git a/test/test-lib.el b/test/test-lib.el
\r
215 index 04c8d63..596a705 100644
\r
216 --- a/test/test-lib.el
\r
217 +++ b/test/test-lib.el
\r
218 @@ -188,3 +188,13 @@ nothing."
\r
221 (setq mm-text-html-renderer 'html2text)
\r
223 +;; Set some variables for S/MIME tests.
\r
225 +(setq smime-keys '(("" "test_suite.pem" nil)))
\r
227 +(setq mml-smime-use 'openssl)
\r
229 +;; all test keys are without passphrase
\r
230 +(eval-after-load 'smime
\r
231 + '(defun smime-ask-passphrase (cache) nil))
\r
232 diff --git a/test/test-lib.sh b/test/test-lib.sh
\r
233 index 126911f..2e9a499 100644
\r
234 --- a/test/test-lib.sh
\r
235 +++ b/test/test-lib.sh
\r
236 @@ -1325,4 +1325,5 @@ test_declare_external_prereq emacs
\r
237 test_declare_external_prereq ${TEST_EMACSCLIENT}
\r
238 test_declare_external_prereq gdb
\r
239 test_declare_external_prereq gpg
\r
240 +test_declare_external_prereq openssl
\r
241 test_declare_external_prereq ${NOTMUCH_PYTHON}
\r