Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 273c458

Browse files
committed
Refactor SHA2 functions and move them to src/common/.
This way both frontend and backends can use them. The functions are taken from pgcrypto, which now fetches the source files it needs from src/common/. A new interface is designed for the SHA2 functions, which allow linking to either OpenSSL or the in-core stuff taken from KAME as needed. Michael Paquier, reviewed by Robert Haas. Discussion: https://www.postgresql.org/message-id/CAB7nPqTGKuTM5jiZriHrNaQeVqp5e_iT3X4BFLWY_HyHxLvySQ%40mail.gmail.com
1 parent 330b84d commit 273c458

File tree

9 files changed

+385
-227
lines changed

9 files changed

+385
-227
lines changed

contrib/pgcrypto/.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Source file copied from src/common
2+
/sha2.c
3+
/sha2_openssl.c
4+
15
# Generated subdirectories
26
/log/
37
/results/

contrib/pgcrypto/Makefile

+8-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ INT_SRCS = md5.c sha1.c sha2.c internal.c internal-sha2.c blf.c rijndael.c \
44
pgp-mpi-internal.c imath.c
55
INT_TESTS = sha2
66

7-
OSSL_SRCS = openssl.c pgp-mpi-openssl.c
7+
OSSL_SRCS = openssl.c pgp-mpi-openssl.c sha2_openssl.c
88
OSSL_TESTS = sha2 des 3des cast5
99

1010
ZLIB_TST = pgp-compression
@@ -59,6 +59,13 @@ SHLIB_LINK += $(filter -leay32, $(LIBS))
5959
SHLIB_LINK += -lws2_32
6060
endif
6161

62+
# Compiling pgcrypto with those two raw files is necessary as long
63+
# as none of their routines are used by the backend code. Note doing
64+
# so can either result in library loading failures or linking resolution
65+
# failures at compilation depending on the environment used.
66+
sha2.c sha2_openssl.c: % : $(top_srcdir)/src/common/%
67+
rm -f $@ && $(LN_S) $< .
68+
6269
rijndael.o: rijndael.tbl
6370

6471
rijndael.tbl:

contrib/pgcrypto/internal-sha2.c

+41-41
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333

3434
#include <time.h>
3535

36+
#include "common/sha2.h"
3637
#include "px.h"
37-
#include "sha2.h"
3838

3939
void init_sha224(PX_MD *h);
4040
void init_sha256(PX_MD *h);
@@ -46,43 +46,43 @@ void init_sha512(PX_MD *h);
4646
static unsigned
4747
int_sha224_len(PX_MD *h)
4848
{
49-
return SHA224_DIGEST_LENGTH;
49+
return PG_SHA224_DIGEST_LENGTH;
5050
}
5151

5252
static unsigned
5353
int_sha224_block_len(PX_MD *h)
5454
{
55-
return SHA224_BLOCK_LENGTH;
55+
return PG_SHA224_BLOCK_LENGTH;
5656
}
5757

5858
static void
5959
int_sha224_update(PX_MD *h, const uint8 *data, unsigned dlen)
6060
{
61-
SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
61+
pg_sha224_ctx *ctx = (pg_sha224_ctx *) h->p.ptr;
6262

63-
SHA224_Update(ctx, data, dlen);
63+
pg_sha224_update(ctx, data, dlen);
6464
}
6565

6666
static void
6767
int_sha224_reset(PX_MD *h)
6868
{
69-
SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
69+
pg_sha224_ctx *ctx = (pg_sha224_ctx *) h->p.ptr;
7070

71-
SHA224_Init(ctx);
71+
pg_sha224_init(ctx);
7272
}
7373

7474
static void
7575
int_sha224_finish(PX_MD *h, uint8 *dst)
7676
{
77-
SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
77+
pg_sha224_ctx *ctx = (pg_sha224_ctx *) h->p.ptr;
7878

79-
SHA224_Final(dst, ctx);
79+
pg_sha224_final(ctx, dst);
8080
}
8181

8282
static void
8383
int_sha224_free(PX_MD *h)
8484
{
85-
SHA224_CTX *ctx = (SHA224_CTX *) h->p.ptr;
85+
pg_sha224_ctx *ctx = (pg_sha224_ctx *) h->p.ptr;
8686

8787
px_memset(ctx, 0, sizeof(*ctx));
8888
px_free(ctx);
@@ -94,43 +94,43 @@ int_sha224_free(PX_MD *h)
9494
static unsigned
9595
int_sha256_len(PX_MD *h)
9696
{
97-
return SHA256_DIGEST_LENGTH;
97+
return PG_SHA256_DIGEST_LENGTH;
9898
}
9999

100100
static unsigned
101101
int_sha256_block_len(PX_MD *h)
102102
{
103-
return SHA256_BLOCK_LENGTH;
103+
return PG_SHA256_BLOCK_LENGTH;
104104
}
105105

106106
static void
107107
int_sha256_update(PX_MD *h, const uint8 *data, unsigned dlen)
108108
{
109-
SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
109+
pg_sha256_ctx *ctx = (pg_sha256_ctx *) h->p.ptr;
110110

111-
SHA256_Update(ctx, data, dlen);
111+
pg_sha256_update(ctx, data, dlen);
112112
}
113113

114114
static void
115115
int_sha256_reset(PX_MD *h)
116116
{
117-
SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
117+
pg_sha256_ctx *ctx = (pg_sha256_ctx *) h->p.ptr;
118118

119-
SHA256_Init(ctx);
119+
pg_sha256_init(ctx);
120120
}
121121

122122
static void
123123
int_sha256_finish(PX_MD *h, uint8 *dst)
124124
{
125-
SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
125+
pg_sha256_ctx *ctx = (pg_sha256_ctx *) h->p.ptr;
126126

127-
SHA256_Final(dst, ctx);
127+
pg_sha256_final(ctx, dst);
128128
}
129129

130130
static void
131131
int_sha256_free(PX_MD *h)
132132
{
133-
SHA256_CTX *ctx = (SHA256_CTX *) h->p.ptr;
133+
pg_sha256_ctx *ctx = (pg_sha256_ctx *) h->p.ptr;
134134

135135
px_memset(ctx, 0, sizeof(*ctx));
136136
px_free(ctx);
@@ -142,43 +142,43 @@ int_sha256_free(PX_MD *h)
142142
static unsigned
143143
int_sha384_len(PX_MD *h)
144144
{
145-
return SHA384_DIGEST_LENGTH;
145+
return PG_SHA384_DIGEST_LENGTH;
146146
}
147147

148148
static unsigned
149149
int_sha384_block_len(PX_MD *h)
150150
{
151-
return SHA384_BLOCK_LENGTH;
151+
return PG_SHA384_BLOCK_LENGTH;
152152
}
153153

154154
static void
155155
int_sha384_update(PX_MD *h, const uint8 *data, unsigned dlen)
156156
{
157-
SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
157+
pg_sha384_ctx *ctx = (pg_sha384_ctx *) h->p.ptr;
158158

159-
SHA384_Update(ctx, data, dlen);
159+
pg_sha384_update(ctx, data, dlen);
160160
}
161161

162162
static void
163163
int_sha384_reset(PX_MD *h)
164164
{
165-
SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
165+
pg_sha384_ctx *ctx = (pg_sha384_ctx *) h->p.ptr;
166166

167-
SHA384_Init(ctx);
167+
pg_sha384_init(ctx);
168168
}
169169

170170
static void
171171
int_sha384_finish(PX_MD *h, uint8 *dst)
172172
{
173-
SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
173+
pg_sha384_ctx *ctx = (pg_sha384_ctx *) h->p.ptr;
174174

175-
SHA384_Final(dst, ctx);
175+
pg_sha384_final(ctx, dst);
176176
}
177177

178178
static void
179179
int_sha384_free(PX_MD *h)
180180
{
181-
SHA384_CTX *ctx = (SHA384_CTX *) h->p.ptr;
181+
pg_sha384_ctx *ctx = (pg_sha384_ctx *) h->p.ptr;
182182

183183
px_memset(ctx, 0, sizeof(*ctx));
184184
px_free(ctx);
@@ -190,43 +190,43 @@ int_sha384_free(PX_MD *h)
190190
static unsigned
191191
int_sha512_len(PX_MD *h)
192192
{
193-
return SHA512_DIGEST_LENGTH;
193+
return PG_SHA512_DIGEST_LENGTH;
194194
}
195195

196196
static unsigned
197197
int_sha512_block_len(PX_MD *h)
198198
{
199-
return SHA512_BLOCK_LENGTH;
199+
return PG_SHA512_BLOCK_LENGTH;
200200
}
201201

202202
static void
203203
int_sha512_update(PX_MD *h, const uint8 *data, unsigned dlen)
204204
{
205-
SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
205+
pg_sha512_ctx *ctx = (pg_sha512_ctx *) h->p.ptr;
206206

207-
SHA512_Update(ctx, data, dlen);
207+
pg_sha512_update(ctx, data, dlen);
208208
}
209209

210210
static void
211211
int_sha512_reset(PX_MD *h)
212212
{
213-
SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
213+
pg_sha512_ctx *ctx = (pg_sha512_ctx *) h->p.ptr;
214214

215-
SHA512_Init(ctx);
215+
pg_sha512_init(ctx);
216216
}
217217

218218
static void
219219
int_sha512_finish(PX_MD *h, uint8 *dst)
220220
{
221-
SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
221+
pg_sha512_ctx *ctx = (pg_sha512_ctx *) h->p.ptr;
222222

223-
SHA512_Final(dst, ctx);
223+
pg_sha512_final(ctx, dst);
224224
}
225225

226226
static void
227227
int_sha512_free(PX_MD *h)
228228
{
229-
SHA512_CTX *ctx = (SHA512_CTX *) h->p.ptr;
229+
pg_sha512_ctx *ctx = (pg_sha512_ctx *) h->p.ptr;
230230

231231
px_memset(ctx, 0, sizeof(*ctx));
232232
px_free(ctx);
@@ -238,7 +238,7 @@ int_sha512_free(PX_MD *h)
238238
void
239239
init_sha224(PX_MD *md)
240240
{
241-
SHA224_CTX *ctx;
241+
pg_sha224_ctx *ctx;
242242

243243
ctx = px_alloc(sizeof(*ctx));
244244
memset(ctx, 0, sizeof(*ctx));
@@ -258,7 +258,7 @@ init_sha224(PX_MD *md)
258258
void
259259
init_sha256(PX_MD *md)
260260
{
261-
SHA256_CTX *ctx;
261+
pg_sha256_ctx *ctx;
262262

263263
ctx = px_alloc(sizeof(*ctx));
264264
memset(ctx, 0, sizeof(*ctx));
@@ -278,7 +278,7 @@ init_sha256(PX_MD *md)
278278
void
279279
init_sha384(PX_MD *md)
280280
{
281-
SHA384_CTX *ctx;
281+
pg_sha384_ctx *ctx;
282282

283283
ctx = px_alloc(sizeof(*ctx));
284284
memset(ctx, 0, sizeof(*ctx));
@@ -298,7 +298,7 @@ init_sha384(PX_MD *md)
298298
void
299299
init_sha512(PX_MD *md)
300300
{
301-
SHA512_CTX *ctx;
301+
pg_sha512_ctx *ctx;
302302

303303
ctx = px_alloc(sizeof(*ctx));
304304
memset(ctx, 0, sizeof(*ctx));

contrib/pgcrypto/sha2.h

-100
This file was deleted.

0 commit comments

Comments
 (0)