1<?php
2
3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5/**
6 * Key import tests for the Crypt_GPG package.
7 *
8 * These tests require the PHPUnit 3.6 or greater package to be installed.
9 * PHPUnit is installable using PEAR. See the
10 * {@link http://www.phpunit.de/manual/3.6/en/installation.html manual}
11 * for detailed installation instructions.
12 *
13 * To run these tests, use:
14 * <code>
15 * $ phpunit ImportKeyTestCase
16 * </code>
17 *
18 * LICENSE:
19 *
20 * This library is free software; you can redistribute it and/or modify
21 * it under the terms of the GNU Lesser General Public License as
22 * published by the Free Software Foundation; either version 2.1 of the
23 * License, or (at your option) any later version.
24 *
25 * This library is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, see
32 * <http://www.gnu.org/licenses/>
33 *
34 * @category  Encryption
35 * @package   Crypt_GPG
36 * @author    Michael Gauthier <mike@silverorange.com>
37 * @copyright 2005-2008 silverorange
38 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
39 * @version   CVS: $Id$
40 * @link      http://pear.php.net/package/Crypt_GPG
41 */
42
43/**
44 * Base test case.
45 */
46require_once 'TestCase.php';
47
48/**
49 * Tests key import abilities of Crypt_GPG.
50 *
51 * @category  Encryption
52 * @package   Crypt_GPG
53 * @author    Michael Gauthier <mike@silverorange.com>
54 * @copyright 2005-2008 silverorange
55 * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
56 * @link      http://pear.php.net/package/Crypt_GPG
57 */
58class ImportKeyTest extends Crypt_GPG_TestCase
59{
60    public function setUp(): void
61    {
62        parent::setUp();
63
64        // In GnuPG 2.1 first operation on a keyring in v1 format
65        // will cause format update and several IMPORT_OK responses
66        // This way we clean the state first
67        $this->gpg->getKeys();
68    }
69
70    /**
71     * @group string
72     */
73    public function testImportKey_private()
74    {
75        // Note: Some of GnuPG 2.1.x versions return different private_imported
76        // and private_uchanged values, bug? GnuPG 2.1.15 returns 1 as expected.
77
78        $expectedResult = array(
79            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
80            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
81            'public_imported'   => 0,
82            'public_unchanged'  => 1,
83            'private_imported'  => 1,
84            'private_unchanged' => 0
85        );
86
87        // {{{ private key data
88        $privateKeyData = <<<TEXT
89-----BEGIN PGP PRIVATE KEY BLOCK-----
90Version: GnuPG v1.4.6 (GNU/Linux)
91
92lQHhBEjS+OIRBACPl023p+jInWiUtc7zSBU1D4mv42zSOwPdC37Pn/4x9FyhIOXE
93LCRTpsnAw9rT6R3BvAC4uO68fxjxFCwTpsa60RsHw4bwpSAYuf0t5Xg+GQIritlm
94XHVYwku3Hkh4Svv0quemooGuJ9lLwIHacL/4W1dTHLB2rzon0T4kx7ExZwCg/XKl
95RD9zbbnQOgjn0EaS8fcSm+ED/1IMfkCz5ac9Y3jBUlcArOZcOlTrzxst+iMZm4f0
96fh8dFCCaRN0iaVLSdCNaFvbKbJYZad1w3jFAMU9bX83flqgV1wMPO/NenfMidBIq
97sKzgttaQo5VmjWPtwyOJXODR2lHKQR2hFCkIKlHMPLV3awCGV8iTyiTZMJirdtvf
98s26oA/9STYro+yB9yrHufdfjM1u8SbSIhK6jUoq2ajLPHaLF2nRZZyv1gnkzRFd+
99/Vxcx6cwp8Qd6L4z+0sU3pMS4X8rt2vqilK2msg1VrHnjGgFIfmfIvY5EmrhNzEx
1006X82fbR9f8lwLy5N/gPm326e0xSw1rWdR15VukJPbmK6nf/pL/4DAwIZF3WLmXaM
101DGCHa6b36T1VZ+bgYYcoQUanh3OSfLO0NwJ5ywFiML26DYZ7M3aivlfXj/8lOKy0
1028tcg/rRcUHVibGljIE9ubHkgVGVzdCBLZXkgKGRvIG5vdCBlbmNyeXB0IGltcG9y
103dGFudCBkYXRhIHdpdGggdGhpcyBrZXkpIDxwdWJsaWMtb25seUBleGFtcGxlLmNv
104bT6IYAQTEQIAIAUCSNL44gIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKuo
105HvVOjA3r8DYAn1/DrF5jw31P3L6MlWdelLuR4POnAJ9It7IynfJalYIHoAWtY2xk
106kTsT+p0CYgRI0vjoEAgAp65R578Es8qtASDAgIbYfJlJTwMovEnA4KJ69mpVt3mz
107cFWMtJCvuilvwSQQ+VfKxjemtbe/IbMe9ssj4nTSLw/mweUB89tRj8ZzaS+/9312
108AS8ra/xIDr6kTSfKcRKjXgMzkJ+A13rYwG5LFWnyumg36xglmzXKhecEkRVPfWn3
109ISoq3zirZlQOWcKYdyA2Z685SKJC/N+3nUqKOJ7qrA7eT608LFksytBHeOfNf5m7
110CC4wAE3RAz+ZkJvWRbE2G5pUalZktq8uKMT5WQgvuFP3hnvku5yilpo2ELTnYkO3
111ltc3NHCc9v+jhikayPr7RvUdVPbaITT80yYKBPygCwADBggApzR1vW/fvzmrO5pW
112zAvd4umVh/Yp34n3vWyXMu+JIHA7s08rkTzlMXzamICQmkjwAuCwJt0t7BA28Lny
113goh2joxo8tE/OowFk+IzbeA2Vrz71d/T5SMDtC2mePE0m3bmCOLBscu5aJIfgi1X
114/fzr44f4i+6hqVDCuOOmnVtbL4xBBnS6KXdcWP7QbVhxG3SpH9Agd/QXvSQm0Obz
1159iKZ11FEXzgnVZGXaCM0GBsFE9JuNY5+hi6A72rccjhC0V1Cy43veeIhOE+v3pK0
116a/BGUlgDSdgVopE9zUSQwzuo87UbY3EoDWBqDRSRCRMfmv8S2b9VJIRPdCOHZGCI
117R49/0f4DAwIZF3WLmXaMDGCvSMKxFAt3zGZVEsfwS67ilWw0kq9wgmDpTmbrz1pe
1188tUgmHxgiVc3Xo86ItXGr69udzSODYw2wO6JGdgOKsZDKAv7zJHi+3GISAQYEQIA
119CQUCSNL46AIbDAAKCRCrqB71TowN6zbAAJ4qBrdmAYuAbY5txsc+Tmv9quOpzwCW
120NN5B7Vl2JdxBuwWJrdfUb9UQzw==
121=51qc
122-----END PGP PRIVATE KEY BLOCK-----
123
124TEXT;
125        // }}}
126
127        $result = $this->gpg->importKey($privateKeyData);
128        $this->assertEquals($expectedResult, $result);
129    }
130
131    /**
132     * @group string
133     */
134    public function testImportKey_public()
135    {
136        $expectedResult = array(
137            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
138            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
139            'public_imported'   => 1,
140            'public_unchanged'  => 0,
141            'private_imported'  => 0,
142            'private_unchanged' => 0
143        );
144
145        // {{{ public key data
146        $publicKeyData = <<<TEXT
147-----BEGIN PGP PUBLIC KEY BLOCK-----
148Version: GnuPG v1.4.6 (GNU/Linux)
149
150mQGiBEjS+PgRBADbDdRN9iwESSyJvjnfgk7ZWUYKdHdSER7yJ0aM4LQjVDdw9y/f
151QGidipXxVD2lW28gRtzcmLufxv3DzjZp83VaXvlJs9jbTtHDIYFyDW9kH1HTRbZT
152WKWfuInd0AXzHy5o77qQ+mW0AIXbyke5suSHdvcmv1hiWI9OnXcIHpmavwCgt4Hm
153+j3FpRo9qs4fJM887c796qUD/iPkStU9sM/0KCJFZNaPCGBaamCEi7UoAHNlim+B
154dv3rfSQ2VcDRq9/3GoCEJ2c62XpgQxt79mojJLdWZsTWvr6ESnWOm7W6GIjv/Zc3
155+OXgi7QdH5nwpZl6kBMkuzZxczFuwh9dqlXml+bND0JawS38MvQpDUkwMb592v5U
156i9WIBADBacg6nixiTR+4kaHFE1Ww8QxT+vQ4S1SOx47cm8R6FxTRQA7FvK+vMxCt
157Ps9GOzhjrCgIoF/6X10IZ7qB5jCYIH+kvHrp90ZbNwJ4pIa7phCPhqUF9mEyMbC2
158AEIGp/Aw26yXKskQJJ3vFji+VaeCui21sXjg5EHfoayt79xT8bRfRXh0ZXJuYWwg
159UHVibGljIEtleSAoZG8gbm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEgd2l0aCB0
160aGlzIGtleSkgPGV4dGVybmFsLXB1YmxpY0BleGFtcGxlLmNvbT6IYAQTEQIAIAUC
161SNL4+AIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJECaKtxA0NeZdqHwAn3AF
162EEhX1Tyba0ovCV2DwUytKM0CAKCnu6VzRy1Y8jp9fiy3ScwmaCI3FbkCDQRI0vj8
163EAgArBRh0YpPhE1vvKoPuhGDa//96YqrYt9rmBo3AR1WmF3CKtspjXdOK2bCqdJh
164H6kaoNi+0Ors00n2NfPj9Am2cTV3h2/KpAWOxQGfkmpzU3xXTVCUo/HoKDXIfWqk
165/TPXRqbwFV489GRBtVov4IoZM0KqZXhaFD6cXBsEl/BVSvVdBqmBzUoJ2bOzYiSW
166eg/ml65jbtxjDYMbxTLi7xRcTSAsareoN6/PcbAvcCE5UeCMu8p52wxHOTrAkI4/
1676elpziVpIGn07zJb//4qIoZdhIzwfsMl73tPfdoL9jEC66SiWAN+BEDxceGR5E15
1682WsT5tkxuz/pQUC1L3JW4WCC/wADBwf8CsevcPsk2XxT2XZj0lfmAOuhXxuqBczW
169TXCimnRxvC8+uAacv1RgVRH6emW3BVjt0dr9vwRT0n54JA+7ZwXVMOo4/tqNwmJs
170C6SThBXGBQxEaZwv19WC58DjblbvYa81cUaXrUdHi1OyoHwgalx0xZQ57IUXW6+7
171qdLRfzyqbDBph9ogB0ta3AhSikAqqYImTrI650v/KWBLjrI+N925r0TvnfSOsru7
172JrftccY2LntVnQUcXjuaFViZ7y8ocW8f92zmGj2zUN8z2GsMKiGQtNNmoX51TcQl
173sJPsZF0RKduVkNUQa9cfzSIMjjhUSzspA2qHLUKafrS3e38s2Y4CNIhJBBgRAgAJ
174BQJI0vj8AhsMAAoJECaKtxA0NeZdOFQAn15X+eYzFgVERrFkddsHvAE00OnSAJ9h
175A7Lcv7M+9WeZ6cjeHkZfLB6LLA==
176=AV/P
177-----END PGP PUBLIC KEY BLOCK-----
178
179TEXT;
180        // }}}
181
182        $result = $this->gpg->importKey($publicKeyData);
183        $this->assertEquals($expectedResult, $result);
184    }
185
186    /**
187     * @group string
188     */
189    public function testImportKeyAlreadyImported_private()
190    {
191        // {{{ private key data
192        $privateKeyData = <<<TEXT
193-----BEGIN PGP PRIVATE KEY BLOCK-----
194Version: GnuPG v1.4.6 (GNU/Linux)
195
196lQHhBEjS+OIRBACPl023p+jInWiUtc7zSBU1D4mv42zSOwPdC37Pn/4x9FyhIOXE
197LCRTpsnAw9rT6R3BvAC4uO68fxjxFCwTpsa60RsHw4bwpSAYuf0t5Xg+GQIritlm
198XHVYwku3Hkh4Svv0quemooGuJ9lLwIHacL/4W1dTHLB2rzon0T4kx7ExZwCg/XKl
199RD9zbbnQOgjn0EaS8fcSm+ED/1IMfkCz5ac9Y3jBUlcArOZcOlTrzxst+iMZm4f0
200fh8dFCCaRN0iaVLSdCNaFvbKbJYZad1w3jFAMU9bX83flqgV1wMPO/NenfMidBIq
201sKzgttaQo5VmjWPtwyOJXODR2lHKQR2hFCkIKlHMPLV3awCGV8iTyiTZMJirdtvf
202s26oA/9STYro+yB9yrHufdfjM1u8SbSIhK6jUoq2ajLPHaLF2nRZZyv1gnkzRFd+
203/Vxcx6cwp8Qd6L4z+0sU3pMS4X8rt2vqilK2msg1VrHnjGgFIfmfIvY5EmrhNzEx
2046X82fbR9f8lwLy5N/gPm326e0xSw1rWdR15VukJPbmK6nf/pL/4DAwIZF3WLmXaM
205DGCHa6b36T1VZ+bgYYcoQUanh3OSfLO0NwJ5ywFiML26DYZ7M3aivlfXj/8lOKy0
2068tcg/rRcUHVibGljIE9ubHkgVGVzdCBLZXkgKGRvIG5vdCBlbmNyeXB0IGltcG9y
207dGFudCBkYXRhIHdpdGggdGhpcyBrZXkpIDxwdWJsaWMtb25seUBleGFtcGxlLmNv
208bT6IYAQTEQIAIAUCSNL44gIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKuo
209HvVOjA3r8DYAn1/DrF5jw31P3L6MlWdelLuR4POnAJ9It7IynfJalYIHoAWtY2xk
210kTsT+p0CYgRI0vjoEAgAp65R578Es8qtASDAgIbYfJlJTwMovEnA4KJ69mpVt3mz
211cFWMtJCvuilvwSQQ+VfKxjemtbe/IbMe9ssj4nTSLw/mweUB89tRj8ZzaS+/9312
212AS8ra/xIDr6kTSfKcRKjXgMzkJ+A13rYwG5LFWnyumg36xglmzXKhecEkRVPfWn3
213ISoq3zirZlQOWcKYdyA2Z685SKJC/N+3nUqKOJ7qrA7eT608LFksytBHeOfNf5m7
214CC4wAE3RAz+ZkJvWRbE2G5pUalZktq8uKMT5WQgvuFP3hnvku5yilpo2ELTnYkO3
215ltc3NHCc9v+jhikayPr7RvUdVPbaITT80yYKBPygCwADBggApzR1vW/fvzmrO5pW
216zAvd4umVh/Yp34n3vWyXMu+JIHA7s08rkTzlMXzamICQmkjwAuCwJt0t7BA28Lny
217goh2joxo8tE/OowFk+IzbeA2Vrz71d/T5SMDtC2mePE0m3bmCOLBscu5aJIfgi1X
218/fzr44f4i+6hqVDCuOOmnVtbL4xBBnS6KXdcWP7QbVhxG3SpH9Agd/QXvSQm0Obz
2199iKZ11FEXzgnVZGXaCM0GBsFE9JuNY5+hi6A72rccjhC0V1Cy43veeIhOE+v3pK0
220a/BGUlgDSdgVopE9zUSQwzuo87UbY3EoDWBqDRSRCRMfmv8S2b9VJIRPdCOHZGCI
221R49/0f4DAwIZF3WLmXaMDGCvSMKxFAt3zGZVEsfwS67ilWw0kq9wgmDpTmbrz1pe
2228tUgmHxgiVc3Xo86ItXGr69udzSODYw2wO6JGdgOKsZDKAv7zJHi+3GISAQYEQIA
223CQUCSNL46AIbDAAKCRCrqB71TowN6zbAAJ4qBrdmAYuAbY5txsc+Tmv9quOpzwCW
224NN5B7Vl2JdxBuwWJrdfUb9UQzw==
225=51qc
226-----END PGP PRIVATE KEY BLOCK-----
227
228TEXT;
229        // }}}
230
231        $result = $this->gpg->importKey($privateKeyData);
232
233        $expectedResult = array(
234            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
235            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
236            'public_imported'   => 0,
237            'public_unchanged'  => 1,
238            'private_imported'  => 1,
239            'private_unchanged' => 0
240        );
241
242        $this->assertEquals($expectedResult, $result);
243
244        $result = $this->gpg->importKey($privateKeyData);
245
246        $expectedResult = array(
247            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
248            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
249            'public_imported'   => 0,
250            'public_unchanged'  => version_compare($this->gpg->getVersion(), '2.1.0', 'ge') ? 1 : 0,
251            'private_imported'  => 0,
252            'private_unchanged'  => 1,
253        );
254
255        $this->assertEquals($expectedResult, $result);
256    }
257
258    /**
259     * @group string
260     */
261    public function testImportKeyAlreadyImported_public()
262    {
263        // {{{ public key data
264        $publicKeyData = <<<TEXT
265-----BEGIN PGP PUBLIC KEY BLOCK-----
266Version: GnuPG v1.4.6 (GNU/Linux)
267
268mQGiBEjS+PgRBADbDdRN9iwESSyJvjnfgk7ZWUYKdHdSER7yJ0aM4LQjVDdw9y/f
269QGidipXxVD2lW28gRtzcmLufxv3DzjZp83VaXvlJs9jbTtHDIYFyDW9kH1HTRbZT
270WKWfuInd0AXzHy5o77qQ+mW0AIXbyke5suSHdvcmv1hiWI9OnXcIHpmavwCgt4Hm
271+j3FpRo9qs4fJM887c796qUD/iPkStU9sM/0KCJFZNaPCGBaamCEi7UoAHNlim+B
272dv3rfSQ2VcDRq9/3GoCEJ2c62XpgQxt79mojJLdWZsTWvr6ESnWOm7W6GIjv/Zc3
273+OXgi7QdH5nwpZl6kBMkuzZxczFuwh9dqlXml+bND0JawS38MvQpDUkwMb592v5U
274i9WIBADBacg6nixiTR+4kaHFE1Ww8QxT+vQ4S1SOx47cm8R6FxTRQA7FvK+vMxCt
275Ps9GOzhjrCgIoF/6X10IZ7qB5jCYIH+kvHrp90ZbNwJ4pIa7phCPhqUF9mEyMbC2
276AEIGp/Aw26yXKskQJJ3vFji+VaeCui21sXjg5EHfoayt79xT8bRfRXh0ZXJuYWwg
277UHVibGljIEtleSAoZG8gbm90IGVuY3J5cHQgaW1wb3J0YW50IGRhdGEgd2l0aCB0
278aGlzIGtleSkgPGV4dGVybmFsLXB1YmxpY0BleGFtcGxlLmNvbT6IYAQTEQIAIAUC
279SNL4+AIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJECaKtxA0NeZdqHwAn3AF
280EEhX1Tyba0ovCV2DwUytKM0CAKCnu6VzRy1Y8jp9fiy3ScwmaCI3FbkCDQRI0vj8
281EAgArBRh0YpPhE1vvKoPuhGDa//96YqrYt9rmBo3AR1WmF3CKtspjXdOK2bCqdJh
282H6kaoNi+0Ors00n2NfPj9Am2cTV3h2/KpAWOxQGfkmpzU3xXTVCUo/HoKDXIfWqk
283/TPXRqbwFV489GRBtVov4IoZM0KqZXhaFD6cXBsEl/BVSvVdBqmBzUoJ2bOzYiSW
284eg/ml65jbtxjDYMbxTLi7xRcTSAsareoN6/PcbAvcCE5UeCMu8p52wxHOTrAkI4/
2856elpziVpIGn07zJb//4qIoZdhIzwfsMl73tPfdoL9jEC66SiWAN+BEDxceGR5E15
2862WsT5tkxuz/pQUC1L3JW4WCC/wADBwf8CsevcPsk2XxT2XZj0lfmAOuhXxuqBczW
287TXCimnRxvC8+uAacv1RgVRH6emW3BVjt0dr9vwRT0n54JA+7ZwXVMOo4/tqNwmJs
288C6SThBXGBQxEaZwv19WC58DjblbvYa81cUaXrUdHi1OyoHwgalx0xZQ57IUXW6+7
289qdLRfzyqbDBph9ogB0ta3AhSikAqqYImTrI650v/KWBLjrI+N925r0TvnfSOsru7
290JrftccY2LntVnQUcXjuaFViZ7y8ocW8f92zmGj2zUN8z2GsMKiGQtNNmoX51TcQl
291sJPsZF0RKduVkNUQa9cfzSIMjjhUSzspA2qHLUKafrS3e38s2Y4CNIhJBBgRAgAJ
292BQJI0vj8AhsMAAoJECaKtxA0NeZdOFQAn15X+eYzFgVERrFkddsHvAE00OnSAJ9h
293A7Lcv7M+9WeZ6cjeHkZfLB6LLA==
294=AV/P
295-----END PGP PUBLIC KEY BLOCK-----
296
297TEXT;
298        // }}}
299
300        $result = $this->gpg->importKey($publicKeyData);
301
302        $expectedResult = array(
303            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
304            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
305            'public_imported'   => 1,
306            'public_unchanged'  => 0,
307            'private_imported'  => 0,
308            'private_unchanged' => 0
309        );
310
311        $this->assertEquals($expectedResult, $result);
312
313        $result = $this->gpg->importKey($publicKeyData);
314
315        $expectedResult = array(
316            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
317            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
318            'public_imported'   => 0,
319            'public_unchanged'  => 1,
320            'private_imported'  => 0,
321            'private_unchanged' => 0
322        );
323
324        $this->assertEquals($expectedResult, $result);
325    }
326
327    /**
328     * @group string
329     */
330    public function testImportKeyNoDataException_invalid()
331    {
332        $this->expectException('Crypt_GPG_NoDataException');
333
334        $keyData = 'Invalid OpenPGP data.';
335        $this->gpg->importKey($keyData);
336    }
337
338    /**
339     * @group string
340     */
341    public function testImportKeyNoDataException_empty()
342    {
343        $this->expectException('Crypt_GPG_NoDataException');
344
345        $keyData = '';
346        $this->gpg->importKey($keyData);
347    }
348
349    /**
350     * @group file
351     */
352    public function testImportKeyFile_private()
353    {
354        $expectedResult = array(
355            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
356            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
357            'public_imported'   => 0,
358            'public_unchanged'  => 1,
359            'private_imported'  => 1,
360            'private_unchanged' => 0
361        );
362
363        $filename = $this->getDataFilename('testImportKeyFile_private.asc');
364        $result   = $this->gpg->importKeyFile($filename);
365
366        $this->assertEquals($expectedResult, $result);
367    }
368
369    /**
370     * @group file
371     */
372    public function testImportKeyFile_public()
373    {
374        $expectedResult = array(
375            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
376            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
377            'public_imported'   => 1,
378            'public_unchanged'  => 0,
379            'private_imported'  => 0,
380            'private_unchanged' => 0
381        );
382
383        $filename = $this->getDataFilename('testImportKeyFile_public.asc');
384        $result   = $this->gpg->importKeyFile($filename);
385
386        $this->assertEquals($expectedResult, $result);
387    }
388
389    /**
390     * @group file
391     */
392    public function testImportKeyFileAlreadyImported_private()
393    {
394        $filename = $this->getDataFilename('testImportKeyFile_private.asc');
395        $result   = $this->gpg->importKeyFile($filename);
396
397        $expectedResult = array(
398            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
399            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
400            'public_imported'   => 0,
401            'public_unchanged'  => 1,
402            'private_imported'  => 1,
403            'private_unchanged' => 0
404        );
405
406        $this->assertEquals($expectedResult, $result);
407
408        $result = $this->gpg->importKeyFile($filename);
409
410        $expectedResult = array(
411            'fingerprint'       => 'F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB',
412            'fingerprints'      => array('F83118CB6F5892DC1C3E936DABA81EF54E8C0DEB'),
413            'public_imported'   => 0,
414            'public_unchanged'  => version_compare($this->gpg->getVersion(), '2.1.0', 'ge') ? 1 : 0,
415            'private_imported'  => 0,
416            'private_unchanged'  => 1,
417        );
418
419        $this->assertEquals($expectedResult, $result);
420    }
421
422    /**
423     * @group file
424     */
425    public function testImportKeyFileAlreadyImported_public()
426    {
427        $filename = $this->getDataFilename('testImportKeyFile_public.asc');
428        $result = $this->gpg->importKeyFile($filename);
429
430        $expectedResult = array(
431            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
432            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
433            'public_imported'   => 1,
434            'public_unchanged'  => 0,
435            'private_imported'  => 0,
436            'private_unchanged' => 0
437        );
438
439        $this->assertEquals($expectedResult, $result);
440
441        $result = $this->gpg->importKeyFile($filename);
442
443        $expectedResult = array(
444            'fingerprint'       => '948F9835FF09F5F91CFF2AC1268AB7103435E65D',
445            'fingerprints'      => array('948F9835FF09F5F91CFF2AC1268AB7103435E65D'),
446            'public_imported'   => 0,
447            'public_unchanged'  => 1,
448            'private_imported'  => 0,
449            'private_unchanged' => 0
450        );
451
452        $this->assertEquals($expectedResult, $result);
453    }
454
455    /**
456     * @group file
457     */
458    public function testImportKeyFileFileException()
459    {
460        $this->expectException('Crypt_GPG_FileException');
461
462        // input file does not exist
463        $filename =
464            $this->getDataFilename('testImportKeyFileFileException.asc');
465
466        $this->gpg->importKeyFile($filename);
467    }
468
469    /**
470     * @group file
471     */
472    public function testImportKeyFileNoDataException()
473    {
474        $this->expectException('Crypt_GPG_NoDataException');
475
476        $filename = $this->getDataFilename('testFileEmpty.plain');
477        $this->gpg->importKeyFile($filename);
478    }
479}
480