[gmime] Fixed CryptoContext::encrypt() to take a hash arg
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Fixed CryptoContext::encrypt() to take a hash arg
- Date: Tue, 23 Nov 2010 03:04:26 +0000 (UTC)
commit bc584f5121d0db3ca4dd8a7153fab87b37b4ac2d
Author: Jeffrey Stedfast <fejj gnome org>
Date: Mon Nov 22 22:07:13 2010 -0500
Fixed CryptoContext::encrypt() to take a hash arg
2010-11-22 Jeffrey Stedfast <fejj novell com>
* gmime/gmime-multipart-encrypted.c
* (g_mime_multipart_encrypted_encrypt):
Now takes a hash algorithm argument which it passes along to
g_mime_crypto_context_encrypt().
* gmime/gmime-gpg-context.c (gpg_ctx_get_argv): When signing and
encrypting, pass the digest algorithm to gpg on the
command-line.
(gpg_encrypt): Set the hash id on the GpgCtx.
* gmime/gmime-crypto-context.c (g_mime_crypto_context_encrypt):
Now takes a hash algorithm argument.
ChangeLog | 13 +++++++++++++
gmime/gmime-crypto-context.c | 21 +++++++++++----------
gmime/gmime-crypto-context.h | 12 ++++++------
gmime/gmime-gpg-context.c | 18 ++++++++++--------
gmime/gmime-multipart-encrypted.c | 7 ++++---
gmime/gmime-multipart-encrypted.h | 4 ++--
gmime/gmime-pkcs7-context.c | 11 +++++------
mono/gmime-api.raw | 3 +++
tests/test-pgp.c | 4 ++--
tests/test-pgpmime.c | 3 ++-
tests/test-pkcs7.c | 3 ++-
tests/test-smime.c | 3 ++-
12 files changed, 62 insertions(+), 40 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index f998884..2e3cfdd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
2010-11-22 Jeffrey Stedfast <fejj novell com>
+ * gmime/gmime-multipart-encrypted.c (g_mime_multipart_encrypted_encrypt):
+ Now takes a hash algorithm argument which it passes along to
+ g_mime_crypto_context_encrypt().
+
+ * gmime/gmime-gpg-context.c (gpg_ctx_get_argv): When signing and
+ encrypting, pass the digest algorithm to gpg on the command-line.
+ (gpg_encrypt): Set the hash id on the GpgCtx.
+
+ * gmime/gmime-crypto-context.c (g_mime_crypto_context_encrypt):
+ Now takes a hash algorithm argument.
+
+2010-11-22 Jeffrey Stedfast <fejj novell com>
+
Fixes bug #635492.
* gmime/gmime-gpg-context.c (gpg_hash_from_id): New function
diff --git a/gmime/gmime-crypto-context.c b/gmime/gmime-crypto-context.c
index 75b87ea..ea4211c 100644
--- a/gmime/gmime-crypto-context.c
+++ b/gmime/gmime-crypto-context.c
@@ -55,9 +55,9 @@ static GMimeSignatureValidity *crypto_verify (GMimeCryptoContext *ctx, GMimeCryp
GError **err);
static int crypto_encrypt (GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream,
- GError **err);
+ const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err);
static GMimeSignatureValidity *crypto_decrypt (GMimeCryptoContext *ctx, GMimeStream *istream,
GMimeStream *ostream, GError **err);
@@ -232,7 +232,7 @@ crypto_sign (GMimeCryptoContext *ctx, const char *userid, GMimeCryptoHash hash,
* g_mime_crypto_context_sign:
* @ctx: a #GMimeCryptoContext
* @userid: private key to use to sign the stream
- * @hash: preferred Message-Integrity-Check hash algorithm
+ * @hash: digest algorithm to use
* @istream: input stream
* @ostream: output stream
* @err: a #GError
@@ -268,7 +268,7 @@ crypto_verify (GMimeCryptoContext *ctx, GMimeCryptoHash hash, GMimeStream *istre
/**
* g_mime_crypto_context_verify:
* @ctx: a #GMimeCryptoContext
- * @hash: secure hash used
+ * @hash: digest algorithm used, if known
* @istream: input stream
* @sigstream: optional detached-signature stream
* @err: a #GError
@@ -294,8 +294,8 @@ g_mime_crypto_context_verify (GMimeCryptoContext *ctx, GMimeCryptoHash hash, GMi
static int
-crypto_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream, GError **err)
+crypto_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GMimeStream *istream, GMimeStream *ostream, GError **err)
{
g_set_error (err, GMIME_ERROR, GMIME_ERROR_NOT_SUPPORTED,
"Encryption is not supported by this crypto context");
@@ -309,6 +309,7 @@ crypto_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid, GPtr
* @ctx: a #GMimeCryptoContext
* @sign: sign as well as encrypt
* @userid: key id (or email address) to use when signing (assuming @sign is %TRUE)
+ * @hash: digest algorithm to use when signing
* @recipients: an array of recipient key ids and/or email addresses
* @istream: cleartext input stream
* @ostream: cryptotext output stream
@@ -320,14 +321,14 @@ crypto_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid, GPtr
* Returns: %0 on success or %-1 on fail.
**/
int
-g_mime_crypto_context_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream, GError **err)
+g_mime_crypto_context_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GMimeStream *istream, GMimeStream *ostream, GError **err)
{
g_return_val_if_fail (GMIME_IS_CRYPTO_CONTEXT (ctx), -1);
g_return_val_if_fail (GMIME_IS_STREAM (istream), -1);
g_return_val_if_fail (GMIME_IS_STREAM (ostream), -1);
- return GMIME_CRYPTO_CONTEXT_GET_CLASS (ctx)->encrypt (ctx, sign, userid, recipients, istream, ostream, err);
+ return GMIME_CRYPTO_CONTEXT_GET_CLASS (ctx)->encrypt (ctx, sign, userid, hash, recipients, istream, ostream, err);
}
diff --git a/gmime/gmime-crypto-context.h b/gmime/gmime-crypto-context.h
index 71e347e..7d87296 100644
--- a/gmime/gmime-crypto-context.h
+++ b/gmime/gmime-crypto-context.h
@@ -131,9 +131,9 @@ struct _GMimeCryptoContextClass {
GError **err);
int (* encrypt) (GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream,
- GError **err);
+ const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err);
GMimeSignatureValidity * (* decrypt) (GMimeCryptoContext *ctx, GMimeStream *istream,
GMimeStream *ostream, GError **err);
@@ -165,9 +165,9 @@ GMimeSignatureValidity *g_mime_crypto_context_verify (GMimeCryptoContext *ctx, G
GError **err);
int g_mime_crypto_context_encrypt (GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream,
- GError **err);
+ const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err);
GMimeSignatureValidity *g_mime_crypto_context_decrypt (GMimeCryptoContext *ctx, GMimeStream *istream,
GMimeStream *ostream, GError **err);
diff --git a/gmime/gmime-gpg-context.c b/gmime/gmime-gpg-context.c
index 96a0960..a73c5c4 100644
--- a/gmime/gmime-gpg-context.c
+++ b/gmime/gmime-gpg-context.c
@@ -86,10 +86,9 @@ static GMimeSignatureValidity *gpg_verify (GMimeCryptoContext *ctx, GMimeCryptoH
GMimeStream *istream, GMimeStream *sigstream,
GError **err);
-static int gpg_encrypt (GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream,
- GError **err);
+static int gpg_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid,
+ GMimeCryptoHash hash, GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err);
static GMimeSignatureValidity *gpg_decrypt (GMimeCryptoContext *ctx, GMimeStream *istream,
GMimeStream *ostream, GError **err);
@@ -608,8 +607,7 @@ gpg_ctx_get_argv (struct _GpgCtx *gpg, int status_fd, int secret_fd, char ***str
g_ptr_array_add (args, "--detach");
if (gpg->armor)
g_ptr_array_add (args, "--armor");
- hash_str = gpg_hash_str (gpg->hash);
- if (hash_str)
+ if ((hash_str = gpg_hash_str (gpg->hash)))
g_ptr_array_add (args, (char *) hash_str);
if (gpg->userid) {
g_ptr_array_add (args, "-u");
@@ -638,6 +636,9 @@ gpg_ctx_get_argv (struct _GpgCtx *gpg, int status_fd, int secret_fd, char ***str
case GPG_CTX_MODE_SIGN_ENCRYPT:
g_ptr_array_add (args, "--sign");
+ if ((hash_str = gpg_hash_str (gpg->hash)))
+ g_ptr_array_add (args, (char *) hash_str);
+
/* fall thru... */
case GPG_CTX_MODE_ENCRYPT:
g_ptr_array_add (args, "--encrypt");
@@ -1786,8 +1787,8 @@ gpg_verify (GMimeCryptoContext *context, GMimeCryptoHash hash,
static int
gpg_encrypt (GMimeCryptoContext *context, gboolean sign, const char *userid,
- GPtrArray *recipients, GMimeStream *istream, GMimeStream *ostream,
- GError **err)
+ GMimeCryptoHash hash, GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err)
{
GMimeGpgContext *ctx = (GMimeGpgContext *) context;
struct _GpgCtx *gpg;
@@ -1798,6 +1799,7 @@ gpg_encrypt (GMimeCryptoContext *context, gboolean sign, const char *userid,
gpg_ctx_set_mode (gpg, GPG_CTX_MODE_SIGN_ENCRYPT);
else
gpg_ctx_set_mode (gpg, GPG_CTX_MODE_ENCRYPT);
+ gpg_ctx_set_hash (gpg, hash);
gpg_ctx_set_armor (gpg, TRUE);
gpg_ctx_set_userid (gpg, userid);
gpg_ctx_set_istream (gpg, istream);
diff --git a/gmime/gmime-multipart-encrypted.c b/gmime/gmime-multipart-encrypted.c
index fbd110c..98c17cd 100644
--- a/gmime/gmime-multipart-encrypted.c
+++ b/gmime/gmime-multipart-encrypted.c
@@ -148,6 +148,7 @@ g_mime_multipart_encrypted_new (void)
* @ctx: encryption crypto context
* @sign: %TRUE if the content should also be signed or %FALSE otherwise
* @userid: user id to use for signing (only used if @sign is %TRUE)
+ * @hash: digest algorithm to use when signing
* @recipients: an array of recipients to encrypt to
* @err: a #GError
*
@@ -163,8 +164,8 @@ g_mime_multipart_encrypted_new (void)
int
g_mime_multipart_encrypted_encrypt (GMimeMultipartEncrypted *mpe, GMimeObject *content,
GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GError **err)
+ const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GError **err)
{
GMimeStream *filtered_stream, *ciphertext, *stream;
GMimePart *version_part, *encrypted_part;
@@ -194,7 +195,7 @@ g_mime_multipart_encrypted_encrypt (GMimeMultipartEncrypted *mpe, GMimeObject *c
/* encrypt the content stream */
ciphertext = g_mime_stream_mem_new ();
- if (g_mime_crypto_context_encrypt (ctx, sign, userid, recipients, stream, ciphertext, err) == -1) {
+ if (g_mime_crypto_context_encrypt (ctx, sign, userid, hash, recipients, stream, ciphertext, err) == -1) {
g_object_unref (ciphertext);
g_object_unref (stream);
return -1;
diff --git a/gmime/gmime-multipart-encrypted.h b/gmime/gmime-multipart-encrypted.h
index 12446b8..e037512 100644
--- a/gmime/gmime-multipart-encrypted.h
+++ b/gmime/gmime-multipart-encrypted.h
@@ -70,8 +70,8 @@ GMimeMultipartEncrypted *g_mime_multipart_encrypted_new (void);
int g_mime_multipart_encrypted_encrypt (GMimeMultipartEncrypted *mpe, GMimeObject *content,
GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GError **err);
+ const char *userid, GMimeCryptoHash hash,
+ GPtrArray *recipients, GError **err);
GMimeObject *g_mime_multipart_encrypted_decrypt (GMimeMultipartEncrypted *mpe,
GMimeCryptoContext *ctx,
diff --git a/gmime/gmime-pkcs7-context.c b/gmime/gmime-pkcs7-context.c
index e8f0bbb..034ce53 100644
--- a/gmime/gmime-pkcs7-context.c
+++ b/gmime/gmime-pkcs7-context.c
@@ -84,10 +84,9 @@ static GMimeSignatureValidity *pkcs7_verify (GMimeCryptoContext *ctx, GMimeCrypt
GMimeStream *istream, GMimeStream *sigstream,
GError **err);
-static int pkcs7_encrypt (GMimeCryptoContext *ctx, gboolean sign,
- const char *userid, GPtrArray *recipients,
- GMimeStream *istream, GMimeStream *ostream,
- GError **err);
+static int pkcs7_encrypt (GMimeCryptoContext *ctx, gboolean sign, const char *userid,
+ GMimeCryptoHash hash, GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err);
static GMimeSignatureValidity *pkcs7_decrypt (GMimeCryptoContext *ctx, GMimeStream *istream,
GMimeStream *ostream, GError **err);
@@ -649,8 +648,8 @@ key_list_free (gpgme_key_t *keys)
static int
pkcs7_encrypt (GMimeCryptoContext *context, gboolean sign, const char *userid,
- GPtrArray *recipients, GMimeStream *istream, GMimeStream *ostream,
- GError **err)
+ GMimeCryptoHash hash, GPtrArray *recipients, GMimeStream *istream,
+ GMimeStream *ostream, GError **err)
{
#ifdef ENABLE_SMIME
GMimePkcs7Context *ctx = (GMimePkcs7Context *) context;
diff --git a/mono/gmime-api.raw b/mono/gmime-api.raw
index 710ea75..48ae0fb 100644
--- a/mono/gmime-api.raw
+++ b/mono/gmime-api.raw
@@ -181,6 +181,7 @@
<parameter type="GMimeCryptoContext*" name="ctx" />
<parameter type="gboolean" name="sign" />
<parameter type="const-char*" name="userid" />
+ <parameter type="GMimeCryptoHash" name="hash" />
<parameter type="GPtrArray*" name="recipients" />
<parameter type="GMimeStream*" name="istream" />
<parameter type="GMimeStream*" name="ostream" />
@@ -226,6 +227,7 @@
<parameters>
<parameter type="gboolean" name="sign" />
<parameter type="const-char*" name="userid" />
+ <parameter type="GMimeCryptoHash" name="hash" />
<parameter type="GPtrArray*" name="recipients" />
<parameter type="GMimeStream*" name="istream" />
<parameter type="GMimeStream*" name="ostream" />
@@ -1021,6 +1023,7 @@
<parameter type="GMimeCryptoContext*" name="ctx" />
<parameter type="gboolean" name="sign" />
<parameter type="const-char*" name="userid" />
+ <parameter type="GMimeCryptoHash" name="hash" />
<parameter type="GPtrArray*" name="recipients" />
<parameter type="GError**" name="err" />
</parameters>
diff --git a/tests/test-pgp.c b/tests/test-pgp.c
index d1bc897..34b9c52 100644
--- a/tests/test-pgp.c
+++ b/tests/test-pgp.c
@@ -103,8 +103,8 @@ test_encrypt (GMimeCryptoContext *ctx, gboolean sign, GMimeStream *cleartext, GM
recipients = g_ptr_array_new ();
g_ptr_array_add (recipients, "no user no domain");
- g_mime_crypto_context_encrypt (ctx, sign, "no user no domain", recipients,
- cleartext, ciphertext, &err);
+ g_mime_crypto_context_encrypt (ctx, sign, "no user no domain", GMIME_CRYPTO_HASH_SHA256,
+ recipients, cleartext, ciphertext, &err);
g_ptr_array_free (recipients, TRUE);
diff --git a/tests/test-pgpmime.c b/tests/test-pgpmime.c
index 2784e7f..734288e 100644
--- a/tests/test-pgpmime.c
+++ b/tests/test-pgpmime.c
@@ -285,7 +285,8 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
recipients = g_ptr_array_new ();
g_ptr_array_add (recipients, "no user no domain");
g_mime_multipart_encrypted_encrypt (mpe, GMIME_OBJECT (part), ctx, sign,
- "no user no domain", recipients, &err);
+ "no user no domain", GMIME_CRYPTO_HASH_SHA256,
+ recipients, &err);
g_ptr_array_free (recipients, TRUE);
g_object_unref (part);
diff --git a/tests/test-pkcs7.c b/tests/test-pkcs7.c
index a9c69e9..8c4db4f 100644
--- a/tests/test-pkcs7.c
+++ b/tests/test-pkcs7.c
@@ -104,7 +104,8 @@ test_encrypt (GMimeCryptoContext *ctx, gboolean sign, GMimeStream *cleartext, GM
recipients = g_ptr_array_new ();
g_ptr_array_add (recipients, "no user no domain");
- g_mime_crypto_context_encrypt (ctx, sign, "no user no domain", recipients,
+ g_mime_crypto_context_encrypt (ctx, sign, "no user no domain",
+ GMIME_CRYPTO_HASH_SHA256, recipients,
cleartext, ciphertext, &err);
g_ptr_array_free (recipients, TRUE);
diff --git a/tests/test-smime.c b/tests/test-smime.c
index b72f74d..db1d93f 100644
--- a/tests/test-smime.c
+++ b/tests/test-smime.c
@@ -286,7 +286,8 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
recipients = g_ptr_array_new ();
g_ptr_array_add (recipients, "no user no domain");
g_mime_multipart_encrypted_encrypt (mpe, GMIME_OBJECT (part), ctx, sign,
- "no user no domain", recipients, &err);
+ "no user no domain", GMIME_CRYPTO_HASH_SHA256,
+ recipients, &err);
g_ptr_array_free (recipients, TRUE);
g_object_unref (part);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]