⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgpringui.c

📁 著名的加密软件的应用于电子邮件中
💻 C
📖 第 1 页 / 共 4 页
字号:

static const char *
getKeyAlg (union RingObject *key, struct RingSet const *set)
{
	byte pkalg;

	ringKeyID8 (set, key, &pkalg, NULL);
	return pkalg_list[pkalg];
}

static const char *keyuse_list[] =
{NULL, "Sign only", "Encrypt only", "Sign and Encrypt"};

static const char *
getKeyUse (union RingObject *key, struct RingSet const *set)
{
	if (ringKeySubkey(set, key))
		return keyuse_list[PGP_PKUSE_SIGN];
	return keyuse_list[ringKeyUse (set, key) & PGP_PKUSE_SIGN_ENCRYPT];
}

static char statement[11];
static char *
getTrustStatement (word16 trust)
{
	int d = trust - PGP_TRUST_DECADE - PGP_TRUST_OCTAVE;
	int i;
	unsigned long l;
	int wid = 9;
	char number[10];

	if (trust == PGP_TRUST_INFINITE)
		strcpy (statement, "  maximum ");
	else if (trust == 0)
		strcpy (statement, "     none ");
	else {
		if (d < 0)
			d = 0;

		/*
		 * Note: The following was taken from Colin's
		 * prettyprint routine.
		 */

		d -= d % PGP_TRUST_DECADE;
		i = d / PGP_TRUST_DECADE;
		l = ringTrustToInt(trust - d);
		if (i)
			wid -= sprintf(number, "%lu%0*u ", l, i, 0);
		else
			wid -= sprintf(number, "%lu ", l);
		sprintf (statement, "%*s%s", wid, "", number);
	}
	return statement;
}


/* This function displays a single signature. */
int
ringTtyShowSig(union RingObject *sig,
	       struct RingSet const *set,
	       Boolean DisplayHeader,
	       PgpOutputType OutputType,
	       int check)
{
	union RingObject	*sigkey, *signame;
	word32			creation;
	char			datestring[11];
	char const		*namestring;
	size_t			len;
	byte			trust;

	sigkey = ringSigMaker (set, sig, set);

	/* Output "sig" followed by key bits and key id. */
   		   	
	trust = ringSigTrust (set, sig);

	if (ringSigType (set, sig) == PGP_SIGTYPE_KEY_UID_REVOKE)
	    SpecifiedOutputString(DisplayHeader, OutputType, 0, "ret");
	else
	    SpecifiedOutputString(DisplayHeader, OutputType, 0, "sig");

	if (ringSigError (set, sig) < 0)
	    SpecifiedOutputString(FALSE, OutputType, 0, "%%");
	else if (!sigkey)
	    SpecifiedOutputString(FALSE, OutputType, 0, "?");
	else if (check && (ringSigChecked(set, sig)))
	    SpecifiedOutputString(FALSE, OutputType, 0, "!");
	else if (check && (ringSigTried(set, sig)))
	    SpecifiedOutputString(FALSE, OutputType, 0, "*");
	else
	    SpecifiedOutputString(FALSE, OutputType, 0, " ");

	SpecifiedOutputString(FALSE, OutputType, 0, "      ");
	ringTtyPutSigID (FALSE, OutputType, set, sig);
	SpecifiedOutputString(FALSE, OutputType, 0, " ");

	/* Signature date */

	creation = ringSigTimestamp (set, sig);
	if (creation > 0) {
	    pgpDateString (creation, datestring);
	    SpecifiedOutputString(FALSE, OutputType, 0, datestring);
	}
	else
	    SpecifiedOutputString(FALSE, OutputType, 0, "----------");

	if (sigkey) {
	    signame = getFirstName (set, sigkey);
	    if (signame) {
		SpecifiedOutputString(FALSE, OutputType, 0, "   ");
		namestring = ringNameName (set, signame, &len);
		ringTtyPutString (namestring,
				  len,
				  (unsigned) len,
				  FALSE,
				  OutputType,
				  0,
				  0);
		}
	    SpecifiedOutputString(FALSE, OutputType, 0, "\n");
	}
	else
	    SpecifiedOutput(FALSE, OutputType, 0, "UNKNOWN_SIGNATOR");

	ringObjectRelease (sigkey);
	return 0;
}

/* This function displays a set of signatures attached to a name. */

int
ringTtyShowSigs (Boolean DisplayHeaders,
		 PgpOutputType OutputType,
		 union RingObject *name,
		 struct RingSet const *set,
		 int mode)
{
	struct RingIterator	*iter = ringIterCreate (set);
	int	 	         status;
	union RingObject	*sig;
	int			 check;

	pgpAssert (name != NULL);
	pgpAssert (set != NULL);
	pgpAssert (ringObjectType (name) == RINGTYPE_NAME);

	check = (mode == 3 || mode == 4);

	/* Display sigs attached to the Name */

	ringIterSeekTo (iter, name);

	while ((status = ringIterNextObject (iter, 3)) > 0) {
	    sig = ringIterCurrentObject (iter, 3);
	    pgpAssert (sig != NULL);
	    ringTtyShowSig(sig, set, DisplayHeaders, OutputType, check);
	}

	ringIterDestroy (iter);
	return 0;
}




int
ringTtyCheckSigs (Boolean DisplayHeaders,
		  PgpOutputType OutputType,
		  union RingObject *name,
		  struct RingSet const *set,
		  int mode)
{
    struct RingIterator	*iter = ringIterCreate (set);
    int			 status;
    union RingObject	*sig, *sigkey, *signame;
    size_t		    len;
    char const      *output;
    char const		*namestring;
    byte			 sigtrust;
    unsigned         confidence;
    PgpTrustModel    pgptrustmodel;

    pgpAssert (name != NULL);
    pgpAssert (set != NULL);
    pgpAssert (mode == 4 || mode == 5);
    pgpAssert (ringObjectType (name) == RINGTYPE_NAME);

    pgptrustmodel = pgpTrustModel (ringSetPool (set));

    /* Display sigs attached to the Name */

    ringIterSeekTo (iter, name);

    while ((status = ringIterNextObject (iter, 3)) > 0) {
	sig = ringIterCurrentObject (iter, 3);
	pgpAssert (sig != NULL);
	if (ringSigType (set, sig) == PGP_SIGTYPE_KEY_UID_REVOKE)
	    continue;
	sigkey = ringSigMaker (set, sig, set);
	SpecifiedOutputString(DisplayHeaders,
			      OutputType,
			      0,
			      "%*s",
			      11, "");
	if (pgptrustmodel == PGPTRUST0) {
	    if (!sigkey || sigkey ==
		ringIterCurrentObject (iter, 1))
		sigtrust = PGP_SIGTRUST_NOKEY;
	    else
		if (sigRetired (set, sig))
		    sigtrust = PGP_SIGTRUST_RETIRED;
	    else
		if (ringKeyRevoked (set, sigkey))
		    sigtrust = PGP_SIGTRUST_REVOKED;
	    else
		sigtrust = ringSigTrust (set, sig);
	    output = keyTrustTable[sigtrust];
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "%-10s%*s",
				  output, 12, "");
	}
	else {				/* new trust model */
	    if (!sigkey || sigkey ==
		ringIterCurrentObject (iter, 1))
		output = " ";
	    else
		if (sigRetired (set, sig))
		    output = "retired ";
	    else
		if (ringKeyRevoked (set, sigkey))
		    output = "revoked ";
		else {
		    confidence = ringSigConfidence (set, sig);
		    output = getTrustStatement (confidence);
		}
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "%10s%*s",
				  output, 12, "");
	}
	
	if (sigkey) {
	    signame = getFirstName (set, sigkey);
	    if (signame) {
		namestring = ringNameName (set, signame, &len);
		ringTtyPutString (namestring,
				  len,
				  (unsigned) len,
				  FALSE,
				  OutputType,
				  0,
				  0);
	    }
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "\n");
	}
	else {
	    SpecifiedOutput(FALSE, OutputType, 0, "OPEN_PAREN_KEYID");
	    ringTtyPutSigID (FALSE, OutputType, set, sig);
	    SpecifiedOutputString(FALSE, OutputType, 0, "\n");
	}
	ringObjectRelease (sigkey);
    }

    ringIterDestroy (iter);
    return 0;
}


/*  This function displays a key in -kv, -kvv, -kvc, or the first section
    of a -kc format. */

int
ringTtyShowKey (Boolean DisplayHeaders,
		PgpOutputType OutputType,
		union RingObject *key,
		struct RingSet const *set,
		int mode)
{
    struct RingIterator	*iter = ringIterCreate (set);
    union RingObject	*name;
    union RingObject	*subkey = NULL;
    size_t		 len;
    int			 status;
    word32		 creation, expiration;
    char			 datestring[11];
    char const 		*namestring;

    pgpAssert (key != NULL);
    pgpAssert (set != NULL);
    pgpAssert (mode <= 5);
    pgpAssert (ringObjectType (key) == RINGTYPE_KEY);

    if (ringKeyIsSec (set, key))
	SpecifiedOutputString(DisplayHeaders, OutputType, 0, "sec");
    else
	SpecifiedOutputString(DisplayHeaders, OutputType, 0, "pub");

    if (ringKeyError (set, key) != 0) {
	SpecifiedOutputString(FALSE, OutputType, 0, "? \n");
	/* return, otherwise some strange behaviour occurs */
	return 0;
    }
    else if (ringKeyDisabled(set, key))
	SpecifiedOutputString(FALSE, OutputType, 0, "@ ");
    else
	SpecifiedOutputString(FALSE, OutputType, 0, "  ");

    SpecifiedOutputString(FALSE,
			  OutputType,
			  0,
			  "%4u",
			  (unsigned) ringKeyBits (set, key));
    ringTtyPutKeyID(FALSE, OutputType, set, key);
    SpecifiedOutputString(FALSE, OutputType, 0, " ");
    creation = ringKeyCreation (set, key);
    if (creation > 0) {
	pgpDateString (creation, datestring);
	SpecifiedOutputString(FALSE, OutputType, 0, "%s ", datestring);
    }
    else
	SpecifiedOutputString(FALSE,
			      OutputType,
			      0,
			      "---------- ");

    if (ringKeyRevoked (set, key))
	SpecifiedOutput(FALSE,
			OutputType,
			0,
			"REVOKED");
    else {
	expiration = ringKeyExpiration (set, key);
	if (expiration > 0) {
	    pgpDateString (expiration, datestring);
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "%s ",
				  datestring);
	}
	else
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "---------- ");
    }

    SpecifiedOutputString(FALSE,
			  OutputType,
			  0,
			  "%-8s  %-15s\n",
			  getKeyAlg (key, set),
			  getKeyUse (key, set));

    if (mode == 2) {
	byte        pkalg;
	ringKeyID8 (set, key, &pkalg, NULL);
	if (pkalg > PGP_PKALG_RSA_ENC) {
	    SpecifiedOutputString(DisplayHeaders,
				  OutputType,
				  0,
				  "     Fingerprint20 = ");
	    ringTtyPutFingerprint20 (OutputType,
				     set,
				     key,
				     50);
	} else {
	    SpecifiedOutputString(DisplayHeaders,
				  OutputType,
				  0,
				  "     Fingerprint16 = ");
	    ringTtyPutFingerprint16 (OutputType,
				     set,
				     key,
				     48);
	}
	SpecifiedOutputString(FALSE, OutputType, 0, "\n");
    }

    if ((subkey=ringKeySubkey(set, key)) != NULL) {
	/* Print out its status */
	SpecifiedOutputString(DisplayHeaders,
			      OutputType,
			      0,
			      " sub %4u",
			      (unsigned) ringKeyBits (set, subkey));
	ringTtyPutKeyID(FALSE, OutputType, set, subkey);
	SpecifiedOutputString(FALSE, OutputType, 0, " ");
	creation = ringKeyCreation (set, subkey);
	if (creation > 0) {
	    pgpDateString (creation, datestring);
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "%s ",
				  datestring);
	}
	else
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "---------- ");
	
	/* If superkey revoked, don't print expiration */
	if (ringKeyRevoked (set, key))
	    SpecifiedOutputString(FALSE,
				  OutputType,
				  0,
				  "           ");
	else {
	    expiration = ringKeyExpiration (set, subkey);
	    if (expiration > 0) {
		pgpDateString (expiration, datestring);
		SpecifiedOutputString(FALSE,
				      OutputType,
				      0,
				      "%s ",
				      datestring);
	    }
	    else
		SpecifiedOutputString(FALSE,
				      OutputType,
				      0,
				      "---------- ");
	}
	SpecifiedOutputString(DisplayHeaders,
			      OutputType,
			      0,
			      "%-8s  %-15s\n",
			      getKeyAlg (subkey, set),
			      getKeyUse (subkey, set));

	if (mode == 2) {
	    SpecifiedOutputString(DisplayHeaders,
				  OutputType,
				  0,
				  "     Fingerprint20 = ");
	    ringTtyPutFingerprint20(OutputType,
				    set,
				    subkey,
				    50);
	    SpecifiedOutputString(FALSE, OutputType, 0, "\n");
	}
    }

    SpecifiedOutputString(DisplayHeaders,
			  OutputType,
			  0,
			  "%*s",
			  name_indent,
			  "");

    if ((name = getFirstName (set, key)) != NULL)
	ringIterSeekTo (iter, name);
    else
	SpecifiedOutputString(FALSE,
			      OutputType,
			      0,
			      "*** This key is unnamed ***\n");

    while (name != NULL) {
	namestring = ringNameName (set, name, &len);
	ringTtyPutString (namestring,
			  len,
			  (unsigned) len,
			  FALSE,
			  OutputType,
			  0,
			  0);
	SpecifiedOutputString(FALSE,
			      OutputType,
			      0,
			      "\n");
	
	if (mode > 0)
	    ringTtyShowSigs (DisplayHeaders, OutputType, name, set, mode);
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -