aboutsummaryrefslogtreecommitdiffstats
path: root/dirmngr/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'dirmngr/server.c')
-rw-r--r--dirmngr/server.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/dirmngr/server.c b/dirmngr/server.c
index 1dbc87878..db77116b1 100644
--- a/dirmngr/server.c
+++ b/dirmngr/server.c
@@ -64,6 +64,7 @@
#include "../common/mbox-util.h"
#include "../common/zb32.h"
#include "../common/server-help.h"
+#include "rfc3161.h"
/* To avoid DoS attacks we limit the size of a certificate to
something reasonable. The DoS was actually only an issue back when
@@ -655,6 +656,29 @@ option_handler (assuan_context_t ctx, const char *key, const char *value)
return err;
}
+static gpg_error_t
+cmd_tsa (assuan_context_t ctx, char *line)
+{
+ gpg_error_t err = 0;
+ unsigned char *digest;
+ ksba_cms_t cms;
+ ctrl_t ctrl = assuan_get_pointer(ctx);
+ gcry_md_hd_t hd;
+ const char *oid = "2.16.840.1.101.3.4.2.1";
+ gcry_md_open(&hd, gcry_md_map_name(oid), 0);
+ gcry_md_write(hd, line, strlen(line));
+ digest = gcry_md_read(hd, 0);
+ err = dirmngr_get_timestamp(ctrl, oid, digest, 32, &cms);
+ if (err)
+ goto leave;
+ gnupg_isotime_t time;
+ ksba_cms_get_signing_time(cms, 0, &time);
+ ksba_cms_release(cms);
+leave:
+ gcry_md_close(hd);
+ return leave_cmd (ctx, 0);
+}
+
static const char hlp_dns_cert[] =
@@ -3049,6 +3073,7 @@ register_commands (assuan_context_t ctx)
assuan_handler_t handler;
const char * const help;
} table[] = {
+ { "TSA", cmd_tsa, hlp_dns_cert },
{ "DNS_CERT", cmd_dns_cert, hlp_dns_cert },
{ "WKD_GET", cmd_wkd_get, hlp_wkd_get },
{ "LDAPSERVER", cmd_ldapserver, hlp_ldapserver },