|
25 | 25 | #include <string.h>
|
26 | 26 |
|
27 | 27 | #define NAMES "PBES2-HS256+A128KW", "PBES2-HS384+A192KW", "PBES2-HS512+A256KW"
|
| 28 | +#define P2C_MIN_ITERATIONS 1000 |
| 29 | +#define P2C_MAX_ITERATIONS 32768 |
28 | 30 |
|
29 | 31 | static json_t *
|
30 | 32 | pbkdf2(const char *alg, jose_cfg_t *cfg, const json_t *jwk, int iter,
|
@@ -193,7 +195,7 @@ alg_wrap_wrp(const jose_hook_alg_t *alg, jose_cfg_t *cfg, json_t *jwe,
|
193 | 195 | json_auto_t *hdr = NULL;
|
194 | 196 | const char *aes = NULL;
|
195 | 197 | json_t *h = NULL;
|
196 |
| - int p2c = 10000; |
| 198 | + int p2c = P2C_MAX_ITERATIONS; |
197 | 199 | size_t stl = 0;
|
198 | 200 |
|
199 | 201 | if (!json_object_get(cek, "k") && !jose_jwk_gen(cfg, cek))
|
@@ -226,7 +228,7 @@ alg_wrap_wrp(const jose_hook_alg_t *alg, jose_cfg_t *cfg, json_t *jwe,
|
226 | 228 | json_object_set_new(h, "p2c", json_integer(p2c)) < 0)
|
227 | 229 | return false;
|
228 | 230 |
|
229 |
| - if (p2c < 1000) |
| 231 | + if (p2c < P2C_MIN_ITERATIONS || p2c > P2C_MAX_ITERATIONS) |
230 | 232 | return false;
|
231 | 233 |
|
232 | 234 | if (json_object_set_new(h, "p2s", jose_b64_enc(st, stl)) == -1)
|
@@ -268,6 +270,9 @@ alg_wrap_unw(const jose_hook_alg_t *alg, jose_cfg_t *cfg, const json_t *jwe,
|
268 | 270 | if (json_unpack(hdr, "{s:I}", "p2c", &p2c) == -1)
|
269 | 271 | return false;
|
270 | 272 |
|
| 273 | + if (p2c > P2C_MAX_ITERATIONS) |
| 274 | + return false; |
| 275 | + |
271 | 276 | stl = jose_b64_dec(json_object_get(hdr, "p2s"), NULL, 0);
|
272 | 277 | if (stl < 8 || stl > sizeof(st))
|
273 | 278 | return false;
|
|
0 commit comments