- const char *key, const char *pass,
- TS_RESP_CTX *ctx)
- {
- int ret = 0;
- EVP_PKEY *key_obj = NULL;
- if (!key)
- key = NCONF_get_string(conf, section, ENV_SIGNER_KEY);
- if (!key)
- {
- TS_CONF_lookup_fail(section, ENV_SIGNER_KEY);
- goto err;
- }
- if (!(key_obj = TS_CONF_load_key(key, pass))) goto err;
- if (!TS_RESP_CTX_set_signer_key(ctx, key_obj)) goto err;
-
- ret = 1;
+ const char *key, const char *pass,
+ TS_RESP_CTX *ctx)
+{
+ int ret = 0;
+ EVP_PKEY *key_obj = NULL;
+ if (!key)
+ key = NCONF_get_string(conf, section, ENV_SIGNER_KEY);
+ if (!key) {
+ ts_CONF_lookup_fail(section, ENV_SIGNER_KEY);
+ goto err;
+ }
+ if ((key_obj = TS_CONF_load_key(key, pass)) == NULL)
+ goto err;
+ if (!TS_RESP_CTX_set_signer_key(ctx, key_obj))
+ goto err;
+
+ ret = 1;
+ err:
+ EVP_PKEY_free(key_obj);
+ return ret;
+}
+
+int TS_CONF_set_signer_digest(CONF *conf, const char *section,
+ const char *md, TS_RESP_CTX *ctx)
+{
+ int ret = 0;
+ const EVP_MD *sign_md = NULL;
+ if (md == NULL)
+ md = NCONF_get_string(conf, section, ENV_SIGNER_DIGEST);
+ if (md == NULL) {
+ ts_CONF_lookup_fail(section, ENV_SIGNER_DIGEST);
+ goto err;
+ }
+ sign_md = EVP_get_digestbyname(md);
+ if (sign_md == NULL) {
+ ts_CONF_invalid(section, ENV_SIGNER_DIGEST);
+ goto err;
+ }
+ if (!TS_RESP_CTX_set_signer_digest(ctx, sign_md))
+ goto err;
+
+ ret = 1;