From: Neil Conway Date: Sat, 12 Mar 2005 06:55:14 +0000 (+0000) Subject: Some builds (depends on crypto engine support?) of OpenSSL X-Git-Tag: REL7_4_8~30 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2450224e6bd10563188985a26d54c2c3d091a223;p=postgresql 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. --- diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c index 4b3dc593ce..0095454cca 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. * - * $Id: openssl.c,v 1.12 2003/08/04 00:43:11 momjian Exp $ + * $Id: openssl.c,v 1.12.4.1 2005/03/12 06:55:14 neilc Exp $ */ #include @@ -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