1 /* t-keylist.c - regression test
2 Copyright (C) 2000 Werner Koch (dd9jn)
3 Copyright (C) 2001, 2003, 2004 g10 Code GmbH
5 This file is part of GPGME.
7 GPGME is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Lesser General Public License as
9 published by the Free Software Foundation; either version 2.1 of
10 the License, or (at your option) any later version.
12 GPGME is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
22 /* We need to include config.h so that we know whether we are building
23 with large file system (LFS) support. */
34 #include "t-support.h"
48 gpgme_validity_t validity;
49 unsigned int key_length;
53 { "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E", 1, 1007372198, 1038908198, "00",
54 "CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=D\xc3\xbcsseldorf,C=DE",
55 "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
56 "CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=D\xc3\xbcsseldorf,C=DE",
57 NULL, GPGME_VALIDITY_ULTIMATE, 1024
59 { "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD", 0, 909684190, 1009821790, "01",
60 "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
61 "CN=DFN Top Level Certification Authority,OU=DFN-PCA,"
62 "O=Deutsches Forschungsnetz,C=DE",
63 "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD",
64 "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
65 "CN=DFN Top Level Certification Authority,OU=DFN-PCA,"
66 "O=Deutsches Forschungsnetz,C=DE",
67 "<certify@pca.dfn.de>", GPGME_VALIDITY_NEVER, 2048
69 { "2C8F3C356AB761CB3674835B792CDA52937F9285", 0, 973183644, 1009735200, "15",
70 "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
71 "CN=DFN Top Level Certification Authority,OU=DFN-PCA,"
72 "O=Deutsches Forschungsnetz,C=DE",
73 "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD",
74 "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
75 "CN=DFN Server Certification Authority,OU=DFN-PCA,"
76 "O=Deutsches Forschungsnetz,C=DE",
77 "<certify@pca.dfn.de>", GPGME_VALIDITY_UNKNOWN, 2048
84 main (int argc, char **argv)
89 gpgme_keylist_result_t result;
92 init_gpgme (GPGME_PROTOCOL_CMS);
94 err = gpgme_new (&ctx);
96 gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
98 err = gpgme_op_keylist_start (ctx, NULL, 0);
101 while (!(err = gpgme_op_keylist_next (ctx, &key)))
105 fprintf (stderr, "More keys returned than expected\n");
109 if (strcmp (key->subkeys->fpr, keys[i].fpr))
111 fprintf (stderr, "Warning: Skipping unknown key %s\n",
113 gpgme_key_unref (key);
117 printf ("Checking key %s\n", key->subkeys->fpr);
119 /* Global key flags. */
122 fprintf (stderr, "Key unexpectedly revoked\n");
127 fprintf (stderr, "Key unexpectedly expired\n");
132 fprintf (stderr, "Key unexpectedly disabled\n");
137 fprintf (stderr, "Key unexpectedly invalid\n");
140 if (key->can_encrypt != keys[i].secret)
142 fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
143 key->can_encrypt ? "" : " not");
146 if (key->can_sign != keys[i].secret)
148 fprintf (stderr, "Key unexpectedly%s usable for signing\n",
149 key->can_sign ? "" : " not");
152 if (!key->can_certify)
154 fprintf (stderr, "Key unexpectedly unusable for certifications\n");
157 if (key->secret != keys[i].secret)
159 fprintf (stderr, "Key unexpectedly%s secret\n",
160 key->secret ? "" : " not");
163 if (key->protocol != GPGME_PROTOCOL_CMS)
165 fprintf (stderr, "Key has unexpected protocol: %s\n",
166 gpgme_get_protocol_name (key->protocol));
169 if (!key->issuer_serial)
171 fprintf (stderr, "Key unexpectedly misses issuer serial\n");
174 if (strcmp (key->issuer_serial, keys[i].issuer_serial))
176 fprintf (stderr, "Key has unexpected issuer serial: %s\n",
180 if (!key->issuer_name)
182 fprintf (stderr, "Key unexpectedly misses issuer name\n");
185 if (strcmp (key->issuer_name, keys[i].issuer_name))
187 fprintf (stderr, "Key has unexpected issuer name: %s\n",
191 if (key->chain_id && !keys[i].chain_id)
193 fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
197 if (!key->chain_id && keys[i].chain_id)
199 fprintf (stderr, "Key unexpectedly carries no chain ID\n");
202 if (key->chain_id && strcmp (key->chain_id, keys[i].chain_id))
204 fprintf (stderr, "Key carries unexpected chain ID: %s\n",
208 if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
210 fprintf (stderr, "Key has unexpected owner trust: %i\n",
214 if (!key->subkeys || key->subkeys->next)
216 fprintf (stderr, "Key has unexpected number of subkeys\n");
221 if (key->subkeys->revoked)
223 fprintf (stderr, "Primary key unexpectedly revoked\n");
226 if (key->subkeys->expired)
228 fprintf (stderr, "Primary key unexpectedly expired\n");
231 if (key->subkeys->disabled)
233 fprintf (stderr, "Primary key unexpectedly disabled\n");
236 if (key->subkeys->invalid)
238 fprintf (stderr, "Primary key unexpectedly invalid\n");
241 if (key->subkeys->can_encrypt != keys[i].secret)
243 fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
244 key->subkeys->can_encrypt ? "" : " not");
247 if (key->subkeys->can_sign != keys[i].secret)
249 fprintf (stderr, "Key unexpectedly%s usable for signing\n",
250 key->subkeys->can_sign ? "" : " not");
253 if (!key->subkeys->can_certify)
255 fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
258 if (key->subkeys->secret != keys[i].secret)
260 fprintf (stderr, "Primary Key unexpectedly%s secret\n",
261 key->secret ? "" : " not");
264 if (key->subkeys->pubkey_algo != GPGME_PK_RSA)
266 fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
267 gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
270 if (key->subkeys->length != keys[i].key_length)
272 fprintf (stderr, "Primary key has unexpected length: %i\n",
273 key->subkeys->length);
276 if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
278 fprintf (stderr, "Primary key has unexpected key ID: %s\n",
279 key->subkeys->keyid);
282 if (strcmp (key->subkeys->fpr, keys[i].fpr))
284 fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
288 if (key->subkeys->timestamp != keys[i].timestamp)
290 fprintf (stderr, "Primary key unexpected timestamp: %lu\n",
291 key->subkeys->timestamp);
294 if (key->subkeys->expires != keys[i].expires)
296 fprintf (stderr, "Primary key unexpectedly expires: %lu\n",
297 key->subkeys->expires);
301 /* Be tolerant against a missing email (ie, older gpgsm versions). */
302 if (!key->uids || (key->uids->next && !keys[i].email))
304 fprintf (stderr, "Key has unexpected number of user IDs\n");
307 if (key->uids->revoked)
309 fprintf (stderr, "User ID unexpectedly revoked\n");
312 if (key->uids->invalid)
314 fprintf (stderr, "User ID unexpectedly invalid\n");
317 if (key->uids->validity != keys[i].validity)
319 fprintf (stderr, "User ID unexpectedly validity: %i\n",
320 key->uids->validity);
323 if (key->uids->signatures)
325 fprintf (stderr, "User ID unexpectedly signed\n");
328 if (!key->uids->name || key->uids->name[0])
330 fprintf (stderr, "Unexpected name in user ID: %s\n",
334 if (!key->uids->comment || key->uids->comment[0])
336 fprintf (stderr, "Unexpected comment in user ID: %s\n",
340 if (!key->uids->email || key->uids->email[0])
342 fprintf (stderr, "Unexpected email in user ID: %s\n",
346 if (!key->uids->uid || strcmp (key->uids->uid, keys[i].uid))
348 fprintf (stderr, "Unexpected uid in user ID: %s\n",
352 if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
354 fprintf (stderr, "Unexpected email in user ID: %s\n",
355 key->uids->next->uid);
358 if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
360 fprintf (stderr, "Unexpected email in user ID: %s\n",
361 key->uids->next->uid);
367 gpgme_key_unref (key);
370 if (gpgme_err_code (err) != GPG_ERR_EOF)
372 err = gpgme_op_keylist_end (ctx);
375 result = gpgme_op_keylist_result (ctx);
376 if (result->truncated)
378 fprintf (stderr, "Key listing unexpectedly truncated\n");
384 fprintf (stderr, "Less keys returned than expected\n");