1
1
/* sig-check.c - Check signatures
2
* Copyright (C) 1998-2002, 2003, 2007, 2008 Free Software Foundation, Inc.
2
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2010
3
* Free Software Foundation, Inc.
4
5
* Author: Timo Schulz
545
_cdk_log_debug ("signature %s: signer %08lX keyid %08lX\n",
546
rc == CDK_Bad_Sig ? "BAD" : "good", sig->keyid[1],
546
_cdk_log_debug ("signature %s: signer %08X keyid %08X\n",
547
rc == CDK_Bad_Sig ? "BAD" : "good",
548
(unsigned int) sig->keyid[1], (unsigned int) keyid);
549
550
if (IS_UID_SIG (sig) && uid_name != NULL)
551
552
/* add every uid in the uid list. Only consider valid:
552
553
* - verification was ok
556
557
uid_list_add_sig (&uid_list, uid_name,
603
604
while ((p = cdk_kbnode_walk (key, &ctx, 0)))
605
606
pkt = cdk_kbnode_get_packet (p);
606
if (pkt->pkttype != CDK_PKT_PUBLIC_SUBKEY && pkt->pkttype != CDK_PKT_PUBLIC_KEY)
607
if (pkt->pkttype != CDK_PKT_PUBLIC_SUBKEY
608
&& pkt->pkttype != CDK_PKT_PUBLIC_KEY)
609
611
/* FIXME: we should set expire/revoke here also but callers
610
612
expect CDK_KEY_VALID=0 if the key is okay. */
612
614
for (node = p; node; node = node->next)
614
if (node->pkt->pkttype != CDK_PKT_SIGNATURE)
616
sig = node->pkt->pkt.signature;
616
if (node->pkt->pkttype != CDK_PKT_SIGNATURE)
618
sig = node->pkt->pkt.signature;
618
cdk_sig_get_keyid (sig, sigid);
619
if (sigid[0] != keyid[0] || sigid[1] != keyid[1])
620
cdk_sig_get_keyid (sig, sigid);
621
if (sigid[0] != keyid[0] || sigid[1] != keyid[1])
621
/* FIXME: Now we check all self signatures. */
622
rc = _cdk_pk_check_sig (NULL, p, node, &is_selfsig, NULL);
623
/* FIXME: Now we check all self signatures. */
624
rc = _cdk_pk_check_sig (NULL, p, node, &is_selfsig, NULL);
625
*r_status = CDK_KEY_INVALID;
627
*r_status = CDK_KEY_INVALID;
628
else /* For each valid self sig we increase this counter. */
630
else /* For each valid self sig we increase this counter. */
632
634
/* A key without a self signature is not valid. At least one
633
635
* signature for the given key has to be found.
637
*r_status = CDK_KEY_INVALID;
638
return CDK_General_Error;
639
*r_status = CDK_KEY_INVALID;
640
return CDK_General_Error;
643
/* No flags indicate a valid key. */
644
*r_status = CDK_KEY_VALID;
644
/* No flags indicate a valid key. */
645
*r_status = CDK_KEY_VALID;