/* determines the validity of a series of email addresses, writing the results out to the screen. */ int main() { const int length = 5; char * terminators[length]; char * address1, * address2, * address3, * address4; terminators[0] = "com"; terminators[1] = "net"; terminators[2] = "edu"; terminators[3] = "ie"; terminators[4] = "tv"; address1 = "*****@*****.**"; address2 = "*****@*****.**"; address3 = "lorcanreidy@[email protected]"; address4 = "*****@*****.**"; print_validity(address1, terminators, length); print_validity(address2, terminators, length); print_validity(address3, terminators, length); print_validity(address4, terminators, length); return 0; }
static void print_result (gpgme_verify_result_t result) { gpgme_signature_t sig; gpgme_sig_notation_t nt; gpgme_tofu_info_t ti; int count = 0; printf ("Original file name: %s\n", nonnull(result->file_name)); for (sig = result->signatures; sig; sig = sig->next) { printf ("Signature %d\n", count++); printf (" status ....: %s\n", gpgme_strerror (sig->status)); printf (" summary ...:"); print_summary (sig->summary); putchar ('\n'); printf (" fingerprint: %s\n", nonnull (sig->fpr)); printf (" created ...: %lu\n", sig->timestamp); printf (" expires ...: %lu\n", sig->exp_timestamp); printf (" validity ..: "); print_validity (sig->validity); putchar ('\n'); printf (" val.reason : %s\n", gpgme_strerror (sig->status)); printf (" pubkey algo: %d (%s)\n", sig->pubkey_algo, nonnull(gpgme_pubkey_algo_name (sig->pubkey_algo))); printf (" digest algo: %d (%s)\n", sig->hash_algo, nonnull(gpgme_hash_algo_name (sig->hash_algo))); printf (" pka address: %s\n", nonnull (sig->pka_address)); printf (" pka trust .: %s\n", sig->pka_trust == 0? "n/a" : sig->pka_trust == 1? "bad" : sig->pka_trust == 2? "okay": "RFU"); printf (" other flags:%s%s\n", sig->wrong_key_usage? " wrong-key-usage":"", sig->chain_model? " chain-model":"" ); for (nt = sig->notations; nt; nt = nt->next) { printf (" notation ..: '%s'\n", nt->name); if (strlen (nt->name) != nt->name_len) printf (" warning : name larger (%d)\n", nt->name_len); printf (" flags ...:%s%s (0x%02x)\n", nt->critical? " critical":"", nt->human_readable? " human":"", nt->flags); if (nt->value) printf (" value ...: '%s'\n", nt->value); if ((nt->value?strlen (nt->value):0) != nt->value_len) printf (" warning : value larger (%d)\n", nt->value_len); } for (ti = sig->tofu; ti; ti = ti->next) { printf (" tofu addr .: %s\n", ti->address); if (!sig->fpr || strcmp (sig->fpr, ti->fpr)) printf (" WARNING .: fpr mismatch (%s)\n", ti->fpr); printf (" validity : %u (%s)\n", ti->validity, ti->validity == 0? "conflict" : ti->validity == 1? "no history" : ti->validity == 2? "little history" : ti->validity == 3? "enough history" : ti->validity == 4? "lot of history" : "?"); printf (" policy ..: %u (%s)\n", ti->policy, ti->policy == GPGME_TOFU_POLICY_NONE? "none" : ti->policy == GPGME_TOFU_POLICY_AUTO? "auto" : ti->policy == GPGME_TOFU_POLICY_GOOD? "good" : ti->policy == GPGME_TOFU_POLICY_UNKNOWN? "unknown" : ti->policy == GPGME_TOFU_POLICY_BAD? "bad" : ti->policy == GPGME_TOFU_POLICY_ASK? "ask" : "?"); printf (" sigcount : %hu\n", ti->signcount); printf (" firstseen: %u\n", ti->firstseen); printf (" lastseen : %u\n", ti->lastseen); printf (" desc ....: "); print_description (nonnull (ti->description), 15); } } }