diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-09-27 07:32:26 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-09-27 07:32:26 +0000 |
commit | d3841401b2350e9b4b28f6b943f5cda262076101 (patch) | |
tree | 06a0eea2f982a7517f5629b0b4f17e2a55828f84 /src/rfc2015.c | |
parent | 69592b82abe009675df6f8000ca3e30113349721 (diff) |
verify PKCS#7 (S/MIME) signature.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@605 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/rfc2015.c')
-rw-r--r-- | src/rfc2015.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/rfc2015.c b/src/rfc2015.c index 8708dc81..a71f5333 100644 --- a/src/rfc2015.c +++ b/src/rfc2015.c @@ -202,6 +202,11 @@ static void check_signature(MimeInfo *mimeinfo, MimeInfo *partinfo, FILE *fp) goto leave; } + if (rfc2015_is_pkcs7_signature_part(partinfo)) { + debug_print("pkcs7 signature detected\n"); + gpgme_set_protocol(ctx, GPGME_PROTOCOL_CMS); + } + /* don't include the last empty line. It does not belong to the signed text */ if (mimeinfo->children->size > 0) { @@ -412,8 +417,7 @@ MimeInfo **rfc2015_find_signature(MimeInfo *mimeinfo) /* check that we have at least 2 parts of the correct type */ for (partinfo = mimeinfo->children; partinfo != NULL; partinfo = partinfo->next) { - if (++n > 1 && !g_ascii_strcasecmp(partinfo->content_type, - "application/pgp-signature")) + if (++n > 1 && rfc2015_is_signature_part(partinfo)) break; } @@ -451,6 +455,34 @@ void rfc2015_check_signature(MimeInfo *mimeinfo, FILE *fp) g_free(signedinfo); } +gboolean rfc2015_is_pgp_signature_part(MimeInfo *mimeinfo) +{ + if (!mimeinfo || !mimeinfo->content_type) + return FALSE; + + return !g_ascii_strcasecmp(mimeinfo->content_type, + "application/pgp-signature"); +} + +gboolean rfc2015_is_pkcs7_signature_part(MimeInfo *mimeinfo) +{ + const gchar *c_type; + + if (!mimeinfo || !mimeinfo->content_type) + return FALSE; + + c_type = mimeinfo->content_type; + + return (!g_ascii_strcasecmp(c_type, "application/pkcs7-signature") || + !g_ascii_strcasecmp(c_type, "application/x-pkcs7-signature")); +} + +gboolean rfc2015_is_signature_part(MimeInfo *mimeinfo) +{ + return (rfc2015_is_pgp_signature_part(mimeinfo) || + rfc2015_is_pkcs7_signature_part(mimeinfo)); +} + gint rfc2015_is_encrypted(MimeInfo *mimeinfo) { if (!mimeinfo || mimeinfo->mime_type != MIME_MULTIPART) |