summaryrefslogtreecommitdiff
path: root/cipher
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@unixuser.org>2011-05-24 12:25:51 +0900
committerDaiki Ueno <ueno@unixuser.org>2011-05-24 15:11:08 +0900
commit3b12b9152ac81b756c23a487ae7922fdb310e738 (patch)
treecb746dd0b0540f8d8491a6e9defc82505aa3920c /cipher
parent2d559392b5d2044fc780bfec211f1af9317a5b8f (diff)
downloadlibgcrypt-3b12b9152ac81b756c23a487ae7922fdb310e738.tar.gz
Simplify MGF1 by initializing MD handle at once.
Diffstat (limited to 'cipher')
-rw-r--r--cipher/ChangeLog4
-rw-r--r--cipher/pubkey.c9
2 files changed, 7 insertions, 6 deletions
diff --git a/cipher/ChangeLog b/cipher/ChangeLog
index c5477587..05ada481 100644
--- a/cipher/ChangeLog
+++ b/cipher/ChangeLog
@@ -1,3 +1,7 @@
+2011-05-24 Daiki Ueno <ueno@unixuser.org>
+
+ * pubkey.c (mgf1): Simplify initializing MD handle.
+
2011-05-23 Daiki Ueno <ueno@unixuser.org>
* pubkey.c (pkcs1_decode_for_encryption, oaep_decode): Fix memleak
diff --git a/cipher/pubkey.c b/cipher/pubkey.c
index ba888f3d..c1b42874 100644
--- a/cipher/pubkey.c
+++ b/cipher/pubkey.c
@@ -1000,7 +1000,7 @@ mgf1 (unsigned char *output, size_t outlen, unsigned char *seed, size_t seedlen,
gcry_error_t err;
unsigned char *p;
- err = gcry_md_test_algo (algo);
+ err = gcry_md_open (&hd, algo, 0);
if (err)
return gpg_err_code (err);
@@ -1015,10 +1015,7 @@ mgf1 (unsigned char *output, size_t outlen, unsigned char *seed, size_t seedlen,
c[2] = (idx >> 8) & 0xFF;
c[3] = idx & 0xFF;
- err = gcry_md_open (&hd, algo, 0);
- if (err)
- return gpg_err_code (err);
-
+ gcry_md_reset (hd);
gcry_md_write (hd, seed, seedlen);
gcry_md_write (hd, c, 4);
digest = gcry_md_read (hd, 0);
@@ -1026,8 +1023,8 @@ mgf1 (unsigned char *output, size_t outlen, unsigned char *seed, size_t seedlen,
memcpy (p, digest, dlen);
else
memcpy (p, digest, outlen - (p - output));
- gcry_md_close (hd);
}
+ gcry_md_close (hd);
return GPG_ERR_NO_ERROR;
}