Updated header comment and fixed some ref/unref count problems in the

2001-01-21  Jeffrey Stedfast  <fejj@ximian.com>

	* mail-crypto.c: Updated header comment and fixed some ref/unref
	count problems in the various functions. Also fixed some other
	little things.
	(pgp_mime_part_encrypt): Do some canonical CRLF action before
	encrypting.

svn path=/trunk/; revision=7680
This commit is contained in:
Jeffrey Stedfast
2001-01-21 06:24:39 +00:00
committed by Jeffrey Stedfast
parent 9b32e9ad62
commit c8a418fefb
2 changed files with 33 additions and 25 deletions

View File

@ -1,3 +1,11 @@
2001-01-21 Jeffrey Stedfast <fejj@ximian.com>
* mail-crypto.c: Updated header comment and fixed some ref/unref
count problems in the various functions. Also fixed some other
little things.
(pgp_mime_part_encrypt): Do some canonical CRLF action before
encrypting.
2001-01-21 Christopher James Lahey <clahey@helixcode.com>
* message-list.c (message_list_get_layout): Added

View File

@ -1,20 +1,8 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* mail-crypto.c: OpenPGP en/decryption & signature code
* Authors: Jeffrey Stedfast <fejj@ximian.com>
*
* FIXME FIXME FIXME: This should be in its own library or component
*/
/*
* Authors:
* Nathan Thompson-Amato <ndt@jps.net>
* Dan Winship <danw@helixcode.com>
* Jeffrey Stedfast <fejj@helixcode.com>
*
* Copyright 2000, Helix Code, Inc. (http://www.helixcode.com)
* Copyright 2000, Nathan Thompson-Amato
* Copyright 1999, 2000, Anthony Mulcahy
* Copyright 2001 Ximian, Inc. (www.ximian.com)
*
* 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
@ -32,6 +20,7 @@
*
*/
#include <config.h>
#include <stdlib.h>
@ -77,7 +66,7 @@ mail_crypto_is_rfc2015_signed (CamelMimePart *mime_part)
/* check that we have a protocol param with the value: "application/pgp-signed" */
param = header_content_type_param (type, "protocol");
if (!param || g_strcasecmp (param, "\"application/pgp-signed\""))
if (!param || g_strcasecmp (param, "application/pgp-signed"))
return FALSE;
/* check that we have exactly 2 subparts */
@ -122,7 +111,7 @@ mail_crypto_is_rfc2015_encrypted (CamelMimePart *mime_part)
/* check that we have a protocol param with the value: "application/pgp-encrypted" */
param = header_content_type_param (type, "protocol");
if (!param || g_strcasecmp (param, "\"application/pgp-encrypted\""))
if (!param || g_strcasecmp (param, "application/pgp-encrypted"))
return FALSE;
/* check that we have at least 2 subparts */
@ -135,14 +124,14 @@ mail_crypto_is_rfc2015_encrypted (CamelMimePart *mime_part)
/* The first part should be application/pgp-encrypted */
part = camel_multipart_get_part (mp, 0);
type = camel_mime_part_get_content_type (part);
if (!header_content_type_is (type, "application","pgp-encrypted"))
if (!header_content_type_is (type, "application", "pgp-encrypted"))
return FALSE;
/* The second part should be application/octet-stream - this
is the one we care most about */
part = camel_multipart_get_part (mp, 1);
type = camel_mime_part_get_content_type (part);
if (!header_content_type_is (type, "application","octet-stream"))
if (!header_content_type_is (type, "application", "octet-stream"))
return FALSE;
return TRUE;
@ -171,10 +160,11 @@ pgp_mime_part_sign (CamelMimePart **mime_part, const gchar *userid, PgpHashType
CamelStream *stream;
GByteArray *array;
gchar *cleartext, *signature;
gchar *hash_type;
gchar *hash_type = NULL;
gint clearlen;
g_return_if_fail (*mime_part != NULL);
g_return_if_fail (CAMEL_IS_MIME_PART (*mime_part));
g_return_if_fail (userid != NULL);
g_return_if_fail (hash != PGP_HASH_TYPE_NONE);
@ -229,8 +219,9 @@ pgp_mime_part_sign (CamelMimePart **mime_part, const gchar *userid, PgpHashType
hash_type = "pgp-sha1";
break;
default:
hash_type = NULL;
g_assert_not_reached ();
}
mime_type = camel_data_wrapper_get_mime_type_field (CAMEL_DATA_WRAPPER (multipart));
header_content_type_set_param (mime_type, "micalg", hash_type);
header_content_type_set_param (mime_type, "protocol", "application/pgp-signature");
@ -243,6 +234,7 @@ pgp_mime_part_sign (CamelMimePart **mime_part, const gchar *userid, PgpHashType
camel_object_unref (CAMEL_OBJECT (signed_part));
/* replace the input part with the output part */
camel_object_unref (CAMEL_OBJECT (*mime_part));
*mime_part = camel_mime_part_new ();
camel_medium_set_content_object (CAMEL_MEDIUM (*mime_part),
CAMEL_DATA_WRAPPER (multipart));
@ -274,6 +266,7 @@ pgp_mime_part_verify (CamelMimePart *mime_part, CamelException *ex)
gboolean valid = FALSE;
g_return_val_if_fail (mime_part != NULL, FALSE);
g_return_val_if_fail (CAMEL_IS_MIME_PART (mime_part), FALSE);
if (!mail_crypto_is_rfc2015_signed (mime_part))
return FALSE;
@ -327,19 +320,27 @@ pgp_mime_part_encrypt (CamelMimePart **mime_part, const GPtrArray *recipients, C
CamelMultipart *multipart;
CamelMimePart *part, *version_part, *encrypted_part;
CamelContentType *mime_type;
CamelStreamFilter *filtered_stream;
CamelMimeFilter *crlf_filter;
CamelStream *stream;
GByteArray *contents;
gchar *ciphertext;
g_return_if_fail (*mime_part != NULL);
g_return_if_fail (CAMEL_IS_MIME_PART (*mime_part));
g_return_if_fail (recipients != NULL);
part = *mime_part;
/* get the contents */
contents = g_byte_array_new ();
contents = g_byte_array_new ();
stream = camel_stream_mem_new_with_byte_array (contents);
camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (part), stream);
crlf_filter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_ENCODE,
CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
filtered_stream = camel_stream_filter_new_with_stream (stream);
camel_stream_filter_add (filtered_stream, CAMEL_MIME_FILTER (crlf_filter));
camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (part), CAMEL_STREAM (filtered_stream));
camel_object_unref (CAMEL_OBJECT (filtered_stream));
camel_object_unref (CAMEL_OBJECT (stream));
/* pgp encrypt */
@ -377,13 +378,11 @@ pgp_mime_part_encrypt (CamelMimePart **mime_part, const GPtrArray *recipients, C
camel_object_unref (CAMEL_OBJECT (encrypted_part));
/* replace the input part with the output part */
camel_object_unref (CAMEL_OBJECT (*mime_part));
*mime_part = camel_mime_part_new ();
camel_medium_set_content_object (CAMEL_MEDIUM (*mime_part),
CAMEL_DATA_WRAPPER (multipart));
camel_object_unref (CAMEL_OBJECT (multipart));
/* destroy the original part */
camel_object_unref (CAMEL_OBJECT (part));
}
@ -408,6 +407,7 @@ pgp_mime_part_decrypt (CamelMimePart *mime_part, CamelException *ex)
int cipherlen, clearlen;
g_return_val_if_fail (mime_part != NULL, NULL);
g_return_val_if_fail (CAMEL_IS_MIME_PART (mime_part), NULL);
/* make sure the mime part is a multipart/encrypted */
if (!mail_crypto_is_rfc2015_encrypted (mime_part))