Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb67b57a

Browse files
committed
Refactor MD5 implementations according to new cryptohash infrastructure
This commit heavily reorganizes the MD5 implementations that exist inthe tree in various aspects.First, MD5 is added to the list of options available in cryptohash.c andcryptohash_openssl.c. This means that if building with OpenSSL, EVP isused for MD5 instead of the fallback implementation that Postgres hadfor ages. With the recent refactoring work for cryptohash functions,this change is straight-forward. If not building with OpenSSL, afallback implementation internal to src/common/ is used.Second, this reduces the number of MD5 implementations present in thetree from two to one, by moving the KAME implementation from pgcrypto tosrc/common/, and by removing the implementation that existed insrc/common/. KAME was already structured with an init/update/final setof routines by pgcrypto (see original pgcrypto/md5.h) for compatibilitywith OpenSSL, so moving it to src/common/ has proved to be astraight-forward move, requiring no actual manipulation of the internalsof each routine. Some benchmarking has not shown any performance gapbetween both implementations.Similarly to the fallback implementation used for SHA2, the fallbackimplementation of MD5 is moved to src/common/md5.c with an internalheader called md5_int.h for the init, update and final routines. Thisgets then consumed by cryptohash.c.The original routines used for MD5-hashed passwords are moved to aseparate file called md5_common.c, also in src/common/, aimed at beingshared between all MD5 implementations as utility routines to keepcompatibility with any code relying on them.Like the SHA2 changes, this commit had its round of tests on both Linuxand Windows, across all versions of OpenSSL supported on HEAD, with andeven without OpenSSL.Author: Michael PaquierReviewed-by: Daniel GustafssonDiscussion:https://postgr.es/m/20201106073434.GA4961@paquier.xyz
1 parentc7aba7c commitb67b57a

File tree

13 files changed

+613
-743
lines changed

13 files changed

+613
-743
lines changed

‎contrib/pgcrypto/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# contrib/pgcrypto/Makefile
22

3-
INT_SRCS =md5.csha1.c internal.c internal-sha2.c blf.c rijndael.c\
3+
INT_SRCS = sha1.c internal.c internal-sha2.c blf.c rijndael.c\
44
pgp-mpi-internal.c imath.c
55
INT_TESTS = sha2
66

‎contrib/pgcrypto/internal.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@
3434
#include<time.h>
3535

3636
#include"blf.h"
37-
#include"md5.h"
3837
#include"px.h"
3938
#include"rijndael.h"
4039
#include"sha1.h"
4140

41+
#include"common/cryptohash.h"
42+
#include"common/md5.h"
43+
4244
#ifndefMD5_DIGEST_LENGTH
4345
#defineMD5_DIGEST_LENGTH 16
4446
#endif
@@ -96,34 +98,33 @@ int_md5_block_len(PX_MD *h)
9698
staticvoid
9799
int_md5_update(PX_MD*h,constuint8*data,unsigneddlen)
98100
{
99-
MD5_CTX*ctx= (MD5_CTX*)h->p.ptr;
101+
pg_cryptohash_ctx*ctx= (pg_cryptohash_ctx*)h->p.ptr;
100102

101-
MD5Update(ctx,data,dlen);
103+
pg_cryptohash_update(ctx,data,dlen);
102104
}
103105

104106
staticvoid
105107
int_md5_reset(PX_MD*h)
106108
{
107-
MD5_CTX*ctx= (MD5_CTX*)h->p.ptr;
109+
pg_cryptohash_ctx*ctx= (pg_cryptohash_ctx*)h->p.ptr;
108110

109-
MD5Init(ctx);
111+
pg_cryptohash_init(ctx);
110112
}
111113

112114
staticvoid
113115
int_md5_finish(PX_MD*h,uint8*dst)
114116
{
115-
MD5_CTX*ctx= (MD5_CTX*)h->p.ptr;
117+
pg_cryptohash_ctx*ctx= (pg_cryptohash_ctx*)h->p.ptr;
116118

117-
MD5Final(dst,ctx);
119+
pg_cryptohash_final(ctx,dst);
118120
}
119121

120122
staticvoid
121123
int_md5_free(PX_MD*h)
122124
{
123-
MD5_CTX*ctx= (MD5_CTX*)h->p.ptr;
125+
pg_cryptohash_ctx*ctx= (pg_cryptohash_ctx*)h->p.ptr;
124126

125-
px_memset(ctx,0,sizeof(*ctx));
126-
pfree(ctx);
127+
pg_cryptohash_free(ctx);
127128
pfree(h);
128129
}
129130

@@ -180,9 +181,9 @@ int_sha1_free(PX_MD *h)
180181
staticvoid
181182
init_md5(PX_MD*md)
182183
{
183-
MD5_CTX*ctx;
184+
pg_cryptohash_ctx*ctx;
184185

185-
ctx=palloc0(sizeof(*ctx));
186+
ctx=pg_cryptohash_create(PG_MD5);
186187

187188
md->p.ptr=ctx;
188189

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp