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

📄 pgplib.c

📁 mutt-1.5.12 源代码。linux 下邮件接受的工具。
💻 C
字号:
/* * Copyright (C) 1997-2000 Thomas Roessler <roessler@does-not-exist.org> *  *     This program is free software; you can redistribute it *     and/or modify it under the terms of the GNU General Public *     License as published by the Free Software Foundation; either *     version 2 of the License, or (at your option) any later *     version. *  *     This program is distributed in the hope that it will be *     useful, but WITHOUT ANY WARRANTY; without even the implied *     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR *     PURPOSE.  See the GNU General Public License for more *     details. *  *     You should have received a copy of the GNU General Public *     License along with this program; if not, write to the Free *     Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *     Boston, MA  02110-1301, USA. *//* Generally useful, pgp-related functions. */#if HAVE_CONFIG_H# include "config.h"#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <time.h>#include "mutt.h"#include "lib.h"#include "pgplib.h"const char *pgp_pkalgbytype (unsigned char type){  switch (type)  {  case 1:    return "RSA";  case 2:    return "RSA";  case 3:    return "RSA";  case 16:    return "ElG";  case 17:    return "DSA";  case 20:    return "ElG";  default:    return "unk";  }}/* unused */#if 0static const char *hashalgbytype (unsigned char type){  switch (type)  {  case 1:    return "MD5";  case 2:    return "SHA1";  case 3:    return "RIPE-MD/160";  case 4:    return "HAVAL";  default:    return "unknown";  }}#endifshort pgp_canencrypt (unsigned char type){  switch (type)  {  case 1:  case 2:  case 16:  case 20:    return 1;  default:    return 0;  }}short pgp_cansign (unsigned char type){  switch (type)  {  case 1:  case 3:  case 17:  case 20:    return 1;  default:    return 0;  }}/* return values:  * 1 = sign only * 2 = encrypt only * 3 = both */short pgp_get_abilities (unsigned char type){  return (pgp_canencrypt (type) << 1) | pgp_cansign (type);}void pgp_free_sig (pgp_sig_t **sigp){  pgp_sig_t *sp, *q;    if (!sigp || !*sigp)    return;    for (sp = *sigp; sp; sp = q)  {    q = sp->next;    FREE (&sp);  }    *sigp = NULL;}void pgp_free_uid (pgp_uid_t ** upp){  pgp_uid_t *up, *q;  if (!upp || !*upp)    return;  for (up = *upp; up; up = q)  {    q = up->next;    pgp_free_sig (&up->sigs);    FREE (&up->addr);    FREE (&up);  }  *upp = NULL;}pgp_uid_t *pgp_copy_uids (pgp_uid_t *up, pgp_key_t parent){  pgp_uid_t *l = NULL;  pgp_uid_t **lp = &l;  for (; up; up = up->next)  {    *lp = safe_calloc (1, sizeof (pgp_uid_t));    (*lp)->trust  = up->trust;    (*lp)->flags  = up->flags;    (*lp)->addr   = safe_strdup (up->addr);    (*lp)->parent = parent;    lp = &(*lp)->next;  }  return l;}static void _pgp_free_key (pgp_key_t *kpp){  pgp_key_t kp;  if (!kpp || !*kpp)    return;  kp = *kpp;  pgp_free_uid (&kp->address);  FREE (&kp->keyid);  /* mutt_crypt.h: 'typedef struct pgp_keyinfo *pgp_key_t;' */  FREE (kpp);		/* __FREE_CHECKED__ */}pgp_key_t pgp_remove_key (pgp_key_t *klist, pgp_key_t key){  pgp_key_t *last;  pgp_key_t p, q, r;  if (!klist || !*klist || !key)    return NULL;  if (key->parent && key->parent != key)    key = key->parent;  last = klist;  for (p = *klist; p && p != key; p = p->next)    last = &p->next;  if (!p)    return NULL;  for (q = p->next, r = p; q && q->parent == p; q = q->next)    r = q;  if (r)    r->next = NULL;  *last = q;  return q;}void pgp_free_key (pgp_key_t *kpp){  pgp_key_t p, q, r;  if (!kpp || !*kpp)    return;  if ((*kpp)->parent && (*kpp)->parent != *kpp)    *kpp = (*kpp)->parent;    /* Order is important here:   *   * - First free all children.   * - If we are an orphan (i.e., our parent was not in the key list),   *   free our parent.   * - free ourselves.   */  for (p = *kpp; p; p = q)  {    for (q = p->next; q && q->parent == p; q = r)    {      r = q->next;      _pgp_free_key (&q);    }    if (p->parent)      _pgp_free_key (&p->parent);    _pgp_free_key (&p);  }  *kpp = NULL;}

⌨️ 快捷键说明

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