PostgreSQL Source Code: contrib/pgcrypto/pgp-s2k.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
33
35#include "px.h"
36
37static int
39 unsigned key_len)
40{
41 unsigned md_rlen;
43 unsigned preload;
44 unsigned remain;
46
48
50 preload = 0;
51 while (remain > 0)
52 {
54
55 if (preload)
56 {
57 memset(buf, 0, preload);
59 }
60 preload++;
61
64
65 if (remain > md_rlen)
66 {
67 memcpy(dst, buf, md_rlen);
68 dst += md_rlen;
69 remain -= md_rlen;
70 }
71 else
72 {
73 memcpy(dst, buf, remain);
74 remain = 0;
75 }
76 }
78 return 0;
79}
80
81static int
83{
84 unsigned md_rlen;
86 unsigned preload = 0;
88 unsigned remain;
89
91
92 dst = s2k->key;
94 while (remain > 0)
95 {
97
98 if (preload > 0)
99 {
100 memset(buf, 0, preload);
102 }
103 preload++;
104
108
109 if (remain > md_rlen)
110 {
111 memcpy(dst, buf, md_rlen);
112 remain -= md_rlen;
113 dst += md_rlen;
114 }
115 else
116 {
117 memcpy(dst, buf, remain);
118 remain = 0;
119 }
120 }
122 return 0;
123}
124
125static int
127 unsigned key_len)
128{
129 unsigned md_rlen;
132 unsigned preload = 0;
133 unsigned remain,
134 c,
135 curcnt,
136 count;
137
139
141
143 dst = s2k->key;
144 while (remain > 0)
145 {
147
148 if (preload)
149 {
150 memset(buf, 0, preload);
152 }
153 preload++;
154
158
159 while (curcnt < count)
160 {
163 else
164 c = count - curcnt;
166 curcnt += c;
167
168 if (curcnt + key_len < count)
169 c = key_len;
170 else if (curcnt < count)
171 c = count - curcnt;
172 else
173 break;
175 curcnt += c;
176 }
178
179 if (remain > md_rlen)
180 {
181 memcpy(dst, buf, md_rlen);
182 remain -= md_rlen;
183 dst += md_rlen;
184 }
185 else
186 {
187 memcpy(dst, buf, remain);
188 remain = 0;
189 }
190 }
192 return 0;
193}
194
195
196
197
198
199
200
201
202
203
204
205
206
207
210{
211 int iter;
212
213 if (count == -1)
214 return 96 + (rand_byte & 0x1F);
215
216 for (iter = 0; iter <= 255; iter++)
218 return iter;
219 return 255;
220}
221
222int
224{
225 int res = 0;
227
230
231 switch (s2k->mode)
232 {
234 break;
238 break;
245 break;
246 default:
248 }
249 return res;
250}
251
252int
254{
255 int res = 0;
256
259 switch (s2k->mode)
260 {
261 case 0:
262 break;
263 case 1:
265 break;
266 case 3:
268 if (res < 0)
269 break;
271 break;
272 default:
274 }
275 return res;
276}
277
278int
280{
281 int res;
283
287
289 if (res < 0)
290 return res;
291
292 switch (s2k->mode)
293 {
294 case 0:
296 break;
297 case 1:
299 break;
300 case 3:
302 break;
303 default:
305 }
307 return res;
308}
int pullf_read_fixed(PullFilter *src, int len, uint8 *dst)
static PgChecksumMode mode
int pgp_s2k_process(PGP_S2K *s2k, int cipher, const uint8 *key, int key_len)
static int calc_s2k_salted(PGP_S2K *s2k, PX_MD *md, const uint8 *key, unsigned key_len)
int pgp_s2k_fill(PGP_S2K *s2k, int mode, int digest_algo, int count)
int pgp_s2k_read(PullFilter *src, PGP_S2K *s2k)
static uint8 decide_s2k_iter(unsigned rand_byte, int count)
static int calc_s2k_simple(PGP_S2K *s2k, PX_MD *md, const uint8 *key, unsigned key_len)
static int calc_s2k_iter_salted(PGP_S2K *s2k, PX_MD *md, const uint8 *key, unsigned key_len)
int pgp_get_cipher_key_size(int code)
int pgp_load_digest(int code, PX_MD **res)
#define s2k_decode_count(cval)
bool pg_strong_random(void *buf, size_t len)
void px_memset(void *ptr, int c, size_t len)
#define PXE_PGP_BAD_S2K_MODE
#define px_md_finish(md, buf)
#define px_md_update(md, data, dlen)
#define PXE_PGP_UNSUPPORTED_CIPHER
#define px_md_result_size(md)