aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Conway <neilc@samurai.com>2005-03-12 06:54:31 +0000
committerNeil Conway <neilc@samurai.com>2005-03-12 06:54:31 +0000
commit8806b09b822238d448f9bd4900307b101fccd2ff (patch)
treee1080ac09236a2bfb445b0f7d79792451000191f
parentbdcf632d623f4234d6067d30a004ea1b22ad7a30 (diff)
downloadpostgresql-8806b09b822238d448f9bd4900307b101fccd2ff.tar.gz
postgresql-8806b09b822238d448f9bd4900307b101fccd2ff.zip
Some builds (depends on crypto engine support?) of OpenSSL
0.9.7x have EVP_DigestFinal function which which clears all of EVP_MD_CTX. This makes pgcrypto crash in functions which re-use one digest context several times: hmac() and crypt() with md5 algorithm. Following patch fixes it by carring the digest info around EVP_DigestFinal and re-initializing cipher. Marko Kreen.
-rw-r--r--contrib/pgcrypto/openssl.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c
index af72586d075..71a18dfddac 100644
--- a/contrib/pgcrypto/openssl.c
+++ b/contrib/pgcrypto/openssl.c
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $PostgreSQL: pgsql/contrib/pgcrypto/openssl.c,v 1.13 2003/11/29 22:39:28 pgsql Exp $
+ * $PostgreSQL: pgsql/contrib/pgcrypto/openssl.c,v 1.13.4.1 2005/03/12 06:54:31 neilc Exp $
*/
#include <postgres.h>
@@ -73,8 +73,15 @@ static void
digest_finish(PX_MD * h, uint8 *dst)
{
EVP_MD_CTX *ctx = (EVP_MD_CTX *) h->p.ptr;
+ const EVP_MD *md = EVP_MD_CTX_md(ctx);
EVP_DigestFinal(ctx, dst, NULL);
+
+ /*
+ * Some builds of 0.9.7x clear all of ctx in EVP_DigestFinal.
+ * Fix it by reinitializing ctx.
+ */
+ EVP_DigestInit(ctx, md);
}
static void