| 425 | } |
| 426 | |
| 427 | md_pkey_spec_t *md_pkey_spec_from_json(struct md_json_t *json, apr_pool_t *p) |
| 428 | { |
| 429 | md_pkey_spec_t *spec = apr_pcalloc(p, sizeof(*spec)); |
| 430 | const char *s; |
| 431 | long l; |
| 432 | |
| 433 | if (spec) { |
| 434 | s = md_json_gets(json, MD_KEY_TYPE, NULL); |
| 435 | if (!s || !apr_cstr_casecmp("Default", s)) { |
| 436 | spec->type = MD_PKEY_TYPE_DEFAULT; |
| 437 | } |
| 438 | else if (!apr_cstr_casecmp("RSA", s)) { |
| 439 | spec->type = MD_PKEY_TYPE_RSA; |
| 440 | l = md_json_getl(json, MD_KEY_BITS, NULL); |
| 441 | if (l >= MD_PKEY_RSA_BITS_MIN) { |
| 442 | spec->params.rsa.bits = (unsigned int)l; |
| 443 | } |
| 444 | else { |
| 445 | spec->params.rsa.bits = MD_PKEY_RSA_BITS_DEF; |
| 446 | } |
| 447 | } |
| 448 | else if (!apr_cstr_casecmp("EC", s)) { |
| 449 | spec->type = MD_PKEY_TYPE_EC; |
| 450 | s = md_json_gets(json, MD_KEY_CURVE, NULL); |
| 451 | if (s) { |
| 452 | spec->params.ec.curve = apr_pstrdup(p, s); |
| 453 | } |
| 454 | else { |
| 455 | spec->params.ec.curve = NULL; |
| 456 | } |
| 457 | } |
| 458 | } |
| 459 | return spec; |
| 460 | } |
| 461 | |
| 462 | static apr_status_t spec_from_json(void **pvalue, md_json_t *json, apr_pool_t *p, void *baton) |
| 463 | { |
no test coverage detected