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",
116 printf ("Checking key %s\n", key->subkeys->fpr);
118 /* Global key flags. */
121 fprintf (stderr, "Key unexpectedly revoked\n");
126 fprintf (stderr, "Key unexpectedly expired\n");
131 fprintf (stderr, "Key unexpectedly disabled\n");
136 fprintf (stderr, "Key unexpectedly invalid\n");
139 if (key->can_encrypt != keys[i].secret)
141 fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
142 key->can_encrypt ? "" : " not");
145 if (key->can_sign != keys[i].secret)
147 fprintf (stderr, "Key unexpectedly%s usable for signing\n",
148 key->can_sign ? "" : " not");
151 if (!key->can_certify)
153 fprintf (stderr, "Key unexpectedly unusable for certifications\n");
156 if (key->secret != keys[i].secret)
158 fprintf (stderr, "Key unexpectedly%s secret\n",
159 key->secret ? "" : " not");
162 if (key->protocol != GPGME_PROTOCOL_CMS)
164 fprintf (stderr, "Key has unexpected protocol: %s\n",
165 gpgme_get_protocol_name (key->protocol));
168 if (!key->issuer_serial)
170 fprintf (stderr, "Key unexpectedly misses issuer serial\n");
173 if (strcmp (key->issuer_serial, keys[i].issuer_serial))
175 fprintf (stderr, "Key has unexpected issuer serial: %s\n",
179 if (!key->issuer_name)
181 fprintf (stderr, "Key unexpectedly misses issuer name\n");
184 if (strcmp (key->issuer_name, keys[i].issuer_name))
186 fprintf (stderr, "Key has unexpected issuer name: %s\n",
190 if (key->chain_id && !keys[i].chain_id)
192 fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
196 if (!key->chain_id && keys[i].chain_id)
198 fprintf (stderr, "Key unexpectedly carries no chain ID\n");
201 if (key->chain_id && strcmp (key->chain_id, keys[i].chain_id))
203 fprintf (stderr, "Key carries unexpected chain ID: %s\n",
207 if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
209 fprintf (stderr, "Key has unexpected owner trust: %i\n",
213 if (!key->subkeys || key->subkeys->next)
215 fprintf (stderr, "Key has unexpected number of subkeys\n");
220 if (key->subkeys->revoked)
222 fprintf (stderr, "Primary key unexpectedly revoked\n");
225 if (key->subkeys->expired)
227 fprintf (stderr, "Primary key unexpectedly expired\n");
230 if (key->subkeys->disabled)
232 fprintf (stderr, "Primary key unexpectedly disabled\n");
235 if (key->subkeys->invalid)
237 fprintf (stderr, "Primary key unexpectedly invalid\n");
240 if (key->subkeys->can_encrypt != keys[i].secret)
242 fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
243 key->subkeys->can_encrypt ? "" : " not");
246 if (key->subkeys->can_sign != keys[i].secret)
248 fprintf (stderr, "Key unexpectedly%s usable for signing\n",
249 key->subkeys->can_sign ? "" : " not");
252 if (!key->subkeys->can_certify)
254 fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
257 if (key->subkeys->secret != keys[i].secret)
259 fprintf (stderr, "Primary Key unexpectedly%s secret\n",
260 key->secret ? "" : " not");
263 if (key->subkeys->pubkey_algo != GPGME_PK_RSA)
265 fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
266 gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
269 if (key->subkeys->length != keys[i].key_length)
271 fprintf (stderr, "Primary key has unexpected length: %i\n",
272 key->subkeys->length);
275 if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
277 fprintf (stderr, "Primary key has unexpected key ID: %s\n",
278 key->subkeys->keyid);
281 if (strcmp (key->subkeys->fpr, keys[i].fpr))
283 fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
287 if (key->subkeys->timestamp != keys[i].timestamp)
289 fprintf (stderr, "Primary key unexpected timestamp: %lu\n",
290 key->subkeys->timestamp);
293 if (key->subkeys->expires != keys[i].expires)
295 fprintf (stderr, "Primary key unexpectedly expires: %lu\n",
296 key->subkeys->expires);
300 /* Be tolerant against a missing email (ie, older gpgsm versions). */
301 if (!key->uids || (key->uids->next && !keys[i].email))
303 fprintf (stderr, "Key has unexpected number of user IDs\n");
306 if (key->uids->revoked)
308 fprintf (stderr, "User ID unexpectedly revoked\n");
311 if (key->uids->invalid)
313 fprintf (stderr, "User ID unexpectedly invalid\n");
316 if (key->uids->validity != keys[i].validity)
318 fprintf (stderr, "User ID unexpectedly validity: %i\n",
319 key->uids->validity);
322 if (key->uids->signatures)
324 fprintf (stderr, "User ID unexpectedly signed\n");
327 if (!key->uids->name || key->uids->name[0])
329 fprintf (stderr, "Unexpected name in user ID: %s\n",
333 if (!key->uids->comment || key->uids->comment[0])
335 fprintf (stderr, "Unexpected comment in user ID: %s\n",
339 if (!key->uids->email || key->uids->email[0])
341 fprintf (stderr, "Unexpected email in user ID: %s\n",
345 if (!key->uids->uid || strcmp (key->uids->uid, keys[i].uid))
347 fprintf (stderr, "Unexpected uid in user ID: %s\n",
351 if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
353 fprintf (stderr, "Unexpected email in user ID: %s\n",
354 key->uids->next->uid);
357 if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
359 fprintf (stderr, "Unexpected email in user ID: %s\n",
360 key->uids->next->uid);
366 gpgme_key_unref (key);
369 if (gpg_err_code (err) != GPG_ERR_EOF)
371 err = gpgme_op_keylist_end (ctx);
374 result = gpgme_op_keylist_result (ctx);
375 if (result->truncated)
377 fprintf (stderr, "Key listing unexpectedly truncated\n");
383 fprintf (stderr, "Less keys returned than expected\n");