aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2020-12-14 12:38:13 +0900
committerMichael Paquier <michael@paquier.xyz>2020-12-14 12:38:13 +0900
commit9b584953e7bf91e342af87ef44606acd6206cd1c (patch)
tree878bf508cb9e6c6f484ea502ad3f383783d89120
parentdf9274adf3096feafbbde2562311c8ab80405267 (diff)
downloadpostgresql-9b584953e7bf91e342af87ef44606acd6206cd1c.tar.gz
postgresql-9b584953e7bf91e342af87ef44606acd6206cd1c.zip
Improve some code around cryptohash functions
This adjusts some code related to recent changes for cryptohash functions: - Add a variable in md5.h to track down the size of a computed result, moved from pgcrypto. Note that pg_md5_hash() assumed a result of this size already. - Call explicit_bzero() on the hashed data when freeing the context for fallback implementations. For MD5, particularly, it would be annoying to leave some non-zeroed data around. - Clean up some code related to recent changes of uuid-ossp. .gitignore still included md5.c and a comment was incorrect. Discussion: https://postgr.es/m/X9HXKTgrvJvYO7Oh@paquier.xyz
-rw-r--r--contrib/pgcrypto/internal.c4
-rw-r--r--contrib/uuid-ossp/.gitignore1
-rw-r--r--contrib/uuid-ossp/uuid-ossp.c4
-rw-r--r--src/common/cryptohash.c20
-rw-r--r--src/common/md5_common.c2
-rw-r--r--src/include/common/md5.h4
6 files changed, 27 insertions, 8 deletions
diff --git a/contrib/pgcrypto/internal.c b/contrib/pgcrypto/internal.c
index e6d90c56567..ea377bdf83a 100644
--- a/contrib/pgcrypto/internal.c
+++ b/contrib/pgcrypto/internal.c
@@ -41,10 +41,6 @@
#include "common/cryptohash.h"
#include "common/md5.h"
-#ifndef MD5_DIGEST_LENGTH
-#define MD5_DIGEST_LENGTH 16
-#endif
-
#ifndef SHA1_DIGEST_LENGTH
#ifdef SHA1_RESULTLEN
#define SHA1_DIGEST_LENGTH SHA1_RESULTLEN
diff --git a/contrib/uuid-ossp/.gitignore b/contrib/uuid-ossp/.gitignore
index 6c989c78729..d7260edc610 100644
--- a/contrib/uuid-ossp/.gitignore
+++ b/contrib/uuid-ossp/.gitignore
@@ -1,4 +1,3 @@
-/md5.c
/sha1.c
# Generated subdirectories
/log/
diff --git a/contrib/uuid-ossp/uuid-ossp.c b/contrib/uuid-ossp/uuid-ossp.c
index 8f81c94e725..2ff7d9448bc 100644
--- a/contrib/uuid-ossp/uuid-ossp.c
+++ b/contrib/uuid-ossp/uuid-ossp.c
@@ -41,8 +41,8 @@
#undef uuid_hash
/*
- * Some BSD variants offer md5 and sha1 implementations but Linux does not,
- * so we use a copy of the ones from pgcrypto. Not needed with OSSP, though.
+ * Some BSD variants offer sha1 implementation but Linux does not, so we use
+ * a copy from pgcrypto. Not needed with OSSP, though.
*/
#ifndef HAVE_UUID_OSSP
#include "sha1.h"
diff --git a/src/common/cryptohash.c b/src/common/cryptohash.c
index 5cc2572eb6e..cf4588bad72 100644
--- a/src/common/cryptohash.c
+++ b/src/common/cryptohash.c
@@ -197,6 +197,26 @@ pg_cryptohash_free(pg_cryptohash_ctx *ctx)
{
if (ctx == NULL)
return;
+
+ switch (ctx->type)
+ {
+ case PG_MD5:
+ explicit_bzero(ctx->data, sizeof(pg_md5_ctx));
+ break;
+ case PG_SHA224:
+ explicit_bzero(ctx->data, sizeof(pg_sha224_ctx));
+ break;
+ case PG_SHA256:
+ explicit_bzero(ctx->data, sizeof(pg_sha256_ctx));
+ break;
+ case PG_SHA384:
+ explicit_bzero(ctx->data, sizeof(pg_sha384_ctx));
+ break;
+ case PG_SHA512:
+ explicit_bzero(ctx->data, sizeof(pg_sha512_ctx));
+ break;
+ }
+
FREE(ctx->data);
explicit_bzero(ctx, sizeof(pg_cryptohash_ctx));
FREE(ctx);
diff --git a/src/common/md5_common.c b/src/common/md5_common.c
index 74c274175fe..abf79e5918f 100644
--- a/src/common/md5_common.c
+++ b/src/common/md5_common.c
@@ -69,7 +69,7 @@ bytesToHex(uint8 b[16], char *s)
bool
pg_md5_hash(const void *buff, size_t len, char *hexsum)
{
- uint8 sum[16];
+ uint8 sum[MD5_DIGEST_LENGTH];
pg_cryptohash_ctx *ctx;
ctx = pg_cryptohash_create(PG_MD5);
diff --git a/src/include/common/md5.h b/src/include/common/md5.h
index 53036d2d17e..5dac70cbc50 100644
--- a/src/include/common/md5.h
+++ b/src/include/common/md5.h
@@ -16,6 +16,10 @@
#ifndef PG_MD5_H
#define PG_MD5_H
+/* Size of result generated by MD5 computation */
+#define MD5_DIGEST_LENGTH 16
+
+/* password-related data */
#define MD5_PASSWD_CHARSET "0123456789abcdef"
#define MD5_PASSWD_LEN 35