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 /* Global key flags. */
112 fprintf (stderr, "Key unexpectedly revoked\n");
117 fprintf (stderr, "Key unexpectedly expired\n");
122 fprintf (stderr, "Key unexpectedly disabled\n");
127 fprintf (stderr, "Key unexpectedly invalid\n");
130 if (key->can_encrypt != keys[i].secret)
132 fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
133 key->can_encrypt ? "" : " not");
136 if (key->can_sign != keys[i].secret)
138 fprintf (stderr, "Key unexpectedly%s usable for signing\n",
139 key->can_sign ? "" : " not");
142 if (!key->can_certify)
144 fprintf (stderr, "Key unexpectedly unusable for certifications\n");
147 if (key->secret != keys[i].secret)
149 fprintf (stderr, "Key unexpectedly%s secret\n",
150 key->secret ? "" : " not");
153 if (key->protocol != GPGME_PROTOCOL_CMS)
155 fprintf (stderr, "Key has unexpected protocol: %s\n",
156 gpgme_get_protocol_name (key->protocol));
159 if (!key->issuer_serial)
161 fprintf (stderr, "Key unexpectedly misses issuer serial\n");
164 if (strcmp (key->issuer_serial, keys[i].issuer_serial))
166 fprintf (stderr, "Key has unexpected issuer serial: %s\n",
170 if (!key->issuer_name)
172 fprintf (stderr, "Key unexpectedly misses issuer name\n");
175 if (strcmp (key->issuer_name, keys[i].issuer_name))
177 fprintf (stderr, "Key has unexpected issuer name: %s\n",
181 if (key->chain_id && !keys[i].chain_id)
183 fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
187 if (!key->chain_id && keys[i].chain_id)
189 fprintf (stderr, "Key unexpectedly carries no chain ID\n");
192 if (key->chain_id && strcmp (key->chain_id, keys[i].chain_id))
194 fprintf (stderr, "Key carries unexpected chain ID: %s\n",
198 if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
200 fprintf (stderr, "Key has unexpected owner trust: %i\n",
204 if (!key->subkeys || key->subkeys->next)
206 fprintf (stderr, "Key has unexpected number of subkeys\n");
211 if (key->subkeys->revoked)
213 fprintf (stderr, "Primary key unexpectedly revoked\n");
216 if (key->subkeys->expired)
218 fprintf (stderr, "Primary key unexpectedly expired\n");
221 if (key->subkeys->disabled)
223 fprintf (stderr, "Primary key unexpectedly disabled\n");
226 if (key->subkeys->invalid)
228 fprintf (stderr, "Primary key unexpectedly invalid\n");
231 if (key->subkeys->can_encrypt != keys[i].secret)
233 fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
234 key->subkeys->can_encrypt ? "" : " not");
237 if (key->subkeys->can_sign != keys[i].secret)
239 fprintf (stderr, "Key unexpectedly%s usable for signing\n",
240 key->subkeys->can_sign ? "" : " not");
243 if (!key->subkeys->can_certify)
245 fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
248 if (key->subkeys->secret != keys[i].secret)
250 fprintf (stderr, "Primary Key unexpectedly%s secret\n",
251 key->secret ? "" : " not");
254 if (key->subkeys->pubkey_algo != GPGME_PK_RSA)
256 fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
257 gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
260 if (key->subkeys->length != keys[i].key_length)
262 fprintf (stderr, "Primary key has unexpected length: %i\n",
263 key->subkeys->length);
266 if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
268 fprintf (stderr, "Primary key has unexpected key ID: %s\n",
269 key->subkeys->keyid);
272 if (strcmp (key->subkeys->fpr, keys[i].fpr))
274 fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
278 if (key->subkeys->timestamp != keys[i].timestamp)
280 fprintf (stderr, "Primary key unexpected timestamp: %lu\n",
281 key->subkeys->timestamp);
284 if (key->subkeys->expires != keys[i].expires)
286 fprintf (stderr, "Primary key unexpectedly expires: %lu\n",
287 key->subkeys->expires);
291 /* Be tolerant against a missing email (ie, older gpgsm versions). */
292 if (!key->uids || (key->uids->next && !keys[i].email))
294 fprintf (stderr, "Key has unexpected number of user IDs\n");
297 if (key->uids->revoked)
299 fprintf (stderr, "User ID unexpectedly revoked\n");
302 if (key->uids->invalid)
304 fprintf (stderr, "User ID unexpectedly invalid\n");
307 if (key->uids->validity != keys[i].validity)
309 fprintf (stderr, "User ID unexpectedly validity: %i\n",
310 key->uids->validity);
313 if (key->uids->signatures)
315 fprintf (stderr, "User ID unexpectedly signed\n");
318 if (!key->uids->name || key->uids->name[0])
320 fprintf (stderr, "Unexpected name in user ID: %s\n",
324 if (!key->uids->comment || key->uids->comment[0])
326 fprintf (stderr, "Unexpected comment in user ID: %s\n",
330 if (!key->uids->email || key->uids->email[0])
332 fprintf (stderr, "Unexpected email in user ID: %s\n",
336 if (!key->uids->uid || strcmp (key->uids->uid, keys[i].uid))
338 fprintf (stderr, "Unexpected uid in user ID: %s\n",
342 if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
344 fprintf (stderr, "Unexpected email in user ID: %s\n",
345 key->uids->next->uid);
348 if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
350 fprintf (stderr, "Unexpected email in user ID: %s\n",
351 key->uids->next->uid);
357 gpgme_key_unref (key);
360 if (gpg_err_code (err) != GPG_ERR_EOF)
362 err = gpgme_op_keylist_end (ctx);
365 result = gpgme_op_keylist_result (ctx);
366 if (result->truncated)
368 fprintf (stderr, "Key listing unexpectedly truncated\n");
374 fprintf (stderr, "Less keys returned than expected\n");