aboutsummaryrefslogtreecommitdiff
path: root/src/rfc2015.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-09-27 07:32:26 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-09-27 07:32:26 +0000
commitd3841401b2350e9b4b28f6b943f5cda262076101 (patch)
tree06a0eea2f982a7517f5629b0b4f17e2a55828f84 /src/rfc2015.c
parent69592b82abe009675df6f8000ca3e30113349721 (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.c36
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)