📄 pgpringui.c
字号:
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 + -