Пример #1
0
/* Return the key ID from the given packet.
   If this is not possible, 0 is returned */
u32
_cdk_pkt_get_keyid (cdk_packet_t pkt, u32 * keyid)
{
    u32 lowbits;

    if (!pkt)
        return 0;

    switch (pkt->pkttype)
    {
    case CDK_PKT_PUBLIC_KEY:
    case CDK_PKT_PUBLIC_SUBKEY:
        lowbits = cdk_pk_get_keyid (pkt->pkt.public_key, keyid);
        break;

    case CDK_PKT_SECRET_KEY:
    case CDK_PKT_SECRET_SUBKEY:
        lowbits = cdk_sk_get_keyid (pkt->pkt.secret_key, keyid);
        break;

    case CDK_PKT_SIGNATURE:
        lowbits = cdk_sig_get_keyid (pkt->pkt.signature, keyid);
        break;

    default:
        lowbits = 0;
        break;
    }

    return lowbits;
}
Пример #2
0
static int
xml_add_sig (gnutls_string * xmlkey, int ext, cdk_pkt_signature_t sig)
{
  const char *algo, *s;
  char tmp[32], keyid[16];
  unsigned int kid[2];
  int rc = 0;

  if (!xmlkey || !sig)
    {
      gnutls_assert ();
      return GNUTLS_E_INVALID_REQUEST;
    }

  s = "  <SIGNATURE>\n";
  _gnutls_string_append_str (xmlkey, s);

  sprintf (tmp, "%d", sig->version);
  rc = xml_add_tag (xmlkey, "VERSION", tmp);
  if (rc)
    return rc;

  if (ext)
    {
      sprintf (tmp, "%d", sig->sig_class);
      rc = xml_add_tag (xmlkey, "SIGCLASS", tmp);
      if (rc)
	return rc;
    }

  sprintf (tmp, "%d", sig->flags.expired);
  rc = xml_add_tag (xmlkey, "EXPIRED", tmp);
  if (rc)
    return rc;

  if (ext)
    {
      switch (sig->pubkey_algo)
	{
	case GCRY_PK_DSA:
	  algo = "DSA";
	  break;
	case GCRY_PK_ELG:
	case GCRY_PK_ELG_E:
	  algo = "ELG";
	  break;
	case GCRY_PK_RSA:
	case GCRY_PK_RSA_E:
	case GCRY_PK_RSA_S:
	  algo = "RSA";
	  break;
	default:
	  algo = "???";		/* unknown algorithm */
	}
      rc = xml_add_tag (xmlkey, "PKALGO", algo);
      if (rc)
	return rc;

      switch (sig->digest_algo)
	{
	case GCRY_MD_SHA1:
	  algo = "SHA1";
	  break;
	case GCRY_MD_RMD160:
	  algo = "RMD160";
	  break;
	case GCRY_MD_MD5:
	  algo = "MD5";
	  break;
	default:
	  algo = "???";
	}
      rc = xml_add_tag (xmlkey, "MDALGO", algo);
      if (rc)
	return rc;
    }

  sprintf (tmp, "%lu", sig->timestamp);
  rc = xml_add_tag (xmlkey, "CREATED", tmp);
  if (rc)
    return rc;

  cdk_sig_get_keyid (sig, kid);
  snprintf (keyid, 16, "%08lX%08lX", kid[0], kid[1]);
  rc = xml_add_tag (xmlkey, "KEYID", keyid);
  if (rc)
    return rc;

  s = "  </SIGNATURE>\n";
  _gnutls_string_append_str (xmlkey, s);

  return 0;
}