On 5/9/06, Joe Kramer <[EMAIL PROTECTED]> wrote:
On 5/9/06, Marko Kreen <[EMAIL PROTECTED]> wrote:
> The fact that Fedora pgcrypto is linked with OpenSSL that does not
> support SHA256 is not a bug, just a fact.
It's not Fedora only, same problem with Gentoo/portage.
I think it's problem for all distros. You need recompile pgcrypto or install
openssl 0.9.8 which is considered as "unstable" by most distros.
Maybe pgcrypto should use built-in algorithms until OpenSSL 0.9.8 is
mainstream/default install.
To be honest, pgcrypto actually falls back on built-in code for AES,
in case old OpenSSL that does not have AES. Thats because AES
should be "always there", together with md5/sha1/blowfish.
I do not consider SHA2 that important (yet?), so they don't
get same treatment.
> OTOH, the nicest solution to your problem would be self-compiled
> pgcrypto, that would work with stock PostgreSQL. As the conflict
> happens with only (new) SHA2 functions, I can prepare a patch for
> symbol conflict, would that be satisfactory for you?
Ideally, would be great if pgcrypto could fallback to built-in algorithm of
OpenSSL don't support it.
But since it's compile switch, completely seld-compiled pgcrypto would be
great.
Attached is a patch that re-defines SHA2 symbols so that they would not
conflict with OpenSSL.
Now that I think about it, if your OpenSSL does not contain SHA2, then
there should be no conflict. But ofcourse, if someone upgrades OpenSSL,
server starts crashing. So I think its best to always apply this patch.
I think I'll send the patch to 8.2 later, not sure if it's important
enough for 8.1.
--
marko
Index: contrib/pgcrypto/sha2.c
===================================================================
RCS file: /opt/cvs/pgsql/contrib/pgcrypto/sha2.c,v
retrieving revision 1.5
diff -u -c -r1.5 sha2.c
*** contrib/pgcrypto/sha2.c 15 Oct 2005 02:49:06 -0000 1.5
--- contrib/pgcrypto/sha2.c 9 May 2006 14:09:12 -0000
***************
*** 163,171 ****
* library -- they are intended for private internal visibility/use
* only.
*/
! void SHA512_Last(SHA512_CTX *);
! void SHA256_Transform(SHA256_CTX *, const uint8 *);
! void SHA512_Transform(SHA512_CTX *, const uint8 *);
/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
--- 163,171 ----
* library -- they are intended for private internal visibility/use
* only.
*/
! static void SHA512_Last(SHA512_CTX *);
! static void SHA256_Transform(SHA256_CTX *, const uint8 *);
! static void SHA512_Transform(SHA512_CTX *, const uint8 *);
/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
***************
*** 307,313 ****
j++; \
} while(0)
! void
SHA256_Transform(SHA256_CTX * context, const uint8 *data)
{
uint32 a,
--- 307,313 ----
j++; \
} while(0)
! static void
SHA256_Transform(SHA256_CTX * context, const uint8 *data)
{
uint32 a,
***************
*** 378,384 ****
}
#else /* SHA2_UNROLL_TRANSFORM */
! void
SHA256_Transform(SHA256_CTX * context, const uint8 *data)
{
uint32 a,
--- 378,384 ----
}
#else /* SHA2_UNROLL_TRANSFORM */
! static void
SHA256_Transform(SHA256_CTX * context, const uint8 *data)
{
uint32 a,
***************
*** 631,637 ****
j++; \
} while(0)
! void
SHA512_Transform(SHA512_CTX * context, const uint8 *data)
{
uint64 a,
--- 631,637 ----
j++; \
} while(0)
! static void
SHA512_Transform(SHA512_CTX * context, const uint8 *data)
{
uint64 a,
***************
*** 699,705 ****
}
#else /* SHA2_UNROLL_TRANSFORM */
! void
SHA512_Transform(SHA512_CTX * context, const uint8 *data)
{
uint64 a,
--- 699,705 ----
}
#else /* SHA2_UNROLL_TRANSFORM */
! static void
SHA512_Transform(SHA512_CTX * context, const uint8 *data)
{
uint64 a,
***************
*** 842,848 ****
usedspace = freespace = 0;
}
! void
SHA512_Last(SHA512_CTX * context)
{
unsigned int usedspace;
--- 842,848 ----
usedspace = freespace = 0;
}
! static void
SHA512_Last(SHA512_CTX * context)
{
unsigned int usedspace;
Index: contrib/pgcrypto/sha2.h
===================================================================
RCS file: /opt/cvs/pgsql/contrib/pgcrypto/sha2.h,v
retrieving revision 1.2
diff -u -c -r1.2 sha2.h
*** contrib/pgcrypto/sha2.h 15 Oct 2005 02:49:06 -0000 1.2
--- contrib/pgcrypto/sha2.h 9 May 2006 11:43:13 -0000
***************
*** 38,43 ****
--- 38,53 ----
#ifndef _SHA2_H
#define _SHA2_H
+ /* avoid conflict with OpenSSL */
+ #define SHA256_Init pg_SHA256_Init
+ #define SHA256_Update pg_SHA256_Update
+ #define SHA256_Final pg_SHA256_Final
+ #define SHA384_Init pg_SHA384_Init
+ #define SHA384_Update pg_SHA384_Update
+ #define SHA384_Final pg_SHA384_Final
+ #define SHA512_Init pg_SHA512_Init
+ #define SHA512_Update pg_SHA512_Update
+ #define SHA512_Final pg_SHA512_Final
/*** SHA-256/384/512 Various Length Definitions ***********************/
#define SHA256_BLOCK_LENGTH 64
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend