From 7fd5df6b12321054bde3c9de73be71d7917e19da Mon Sep 17 00:00:00 2001 From: Ben Laurie Date: Tue, 13 Dec 2011 14:38:12 +0000 Subject: [PATCH 1/1] Make it possible to set a time for verification. --- CHANGES | 3 +++ apps/verify.c | 33 +++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 96b95565a6..d6ad39f95e 100644 --- a/CHANGES +++ b/CHANGES @@ -472,6 +472,9 @@ *) Add SRP support. [Tom Wu and Ben Laurie] + *) Add -attime option to openssl verify. + [Peter Eckersley and Ben Laurie] + *) Add functions to copy EVP_PKEY_METHOD and retrieve flags and id. [Steve Henson] diff --git a/apps/verify.c b/apps/verify.c index 4fd6b192e3..abb6ab30b0 100644 --- a/apps/verify.c +++ b/apps/verify.c @@ -72,7 +72,7 @@ static int MS_CALLBACK cb(int ok, X509_STORE_CTX *ctx); static int check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain, STACK_OF(X509) *tchain, - STACK_OF(X509_CRL) *crls, ENGINE *e); + STACK_OF(X509_CRL) *crls, ENGINE *e, time_t at_time); static int v_verbose=0, vflags = 0; int MAIN(int, char **); @@ -83,6 +83,9 @@ int MAIN(int argc, char **argv) int i,ret=1, badarg = 0; char *CApath=NULL,*CAfile=NULL; char *untfile = NULL, *trustfile = NULL, *crlfile = NULL; + char *checktime_string = NULL; + long int timestamp; + time_t t = 0; STACK_OF(X509) *untrusted = NULL, *trusted = NULL; STACK_OF(X509_CRL) *crls = NULL; X509_STORE *cert_ctx=NULL; @@ -145,6 +148,11 @@ int MAIN(int argc, char **argv) if (argc-- < 1) goto end; crlfile= *(++argv); } + else if (strcmp(*argv,"-attime") == 0) + { + if (argc-- < 1) goto end; + checktime_string= *(++argv); + } #ifndef OPENSSL_NO_ENGINE else if (strcmp(*argv,"-engine") == 0) { @@ -222,14 +230,28 @@ int MAIN(int argc, char **argv) goto end; } - if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, crls, e); + if(checktime_string) + { + /* interpret the -attime argument as seconds since Epoch */ + if (sscanf(checktime_string, "%li", ×tamp) != 1) + { + BIO_printf(bio_err, "Error parsing timestamp %s\n", + checktime_string); + ERR_print_errors(bio_err); + goto end; + } + t = (time_t) timestamp; /* on some platforms time_t may be a float */ + } + + if (argc < 1) check(cert_ctx, NULL, untrusted, trusted, crls, e, t); else for (i=0; i