1*5af82120Sclaudio /* $Id: test-rsc.c,v 1.10 2024/04/22 05:54:01 claudio Exp $ */
28f0bc535Sjob /*
38f0bc535Sjob * Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
48f0bc535Sjob *
58f0bc535Sjob * Permission to use, copy, modify, and distribute this software for any
68f0bc535Sjob * purpose with or without fee is hereby granted, provided that the above
78f0bc535Sjob * copyright notice and this permission notice appear in all copies.
88f0bc535Sjob *
98f0bc535Sjob * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
108f0bc535Sjob * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
118f0bc535Sjob * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
128f0bc535Sjob * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
138f0bc535Sjob * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
148f0bc535Sjob * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
158f0bc535Sjob * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
168f0bc535Sjob */
178f0bc535Sjob
188f0bc535Sjob #include <sys/types.h>
198f0bc535Sjob #include <netinet/in.h>
208f0bc535Sjob #include <assert.h>
218f0bc535Sjob #include <err.h>
228f0bc535Sjob #include <resolv.h> /* b64_ntop */
238f0bc535Sjob #include <stdio.h>
248f0bc535Sjob #include <stdint.h>
258f0bc535Sjob #include <stdlib.h>
268f0bc535Sjob #include <string.h>
278f0bc535Sjob #include <unistd.h>
288f0bc535Sjob
298f0bc535Sjob #include <openssl/err.h>
308f0bc535Sjob #include <openssl/evp.h>
318f0bc535Sjob #include <openssl/pem.h>
328f0bc535Sjob #include <openssl/x509v3.h>
338f0bc535Sjob
348f0bc535Sjob #include "extern.h"
358f0bc535Sjob
368f0bc535Sjob int outformats;
378f0bc535Sjob int verbose;
3884f3eaedSjob int filemode;
39*5af82120Sclaudio int experimental;
408f0bc535Sjob
418f0bc535Sjob int
main(int argc,char * argv[])428f0bc535Sjob main(int argc, char *argv[])
438f0bc535Sjob {
448f0bc535Sjob int c, i, ppem = 0, verb = 0;
458f0bc535Sjob struct rsc *p;
468f0bc535Sjob X509 *xp = NULL;
478f0bc535Sjob unsigned char *buf;
488f0bc535Sjob size_t len;
498f0bc535Sjob
508f0bc535Sjob ERR_load_crypto_strings();
518f0bc535Sjob OpenSSL_add_all_ciphers();
528f0bc535Sjob OpenSSL_add_all_digests();
538f0bc535Sjob x509_init_oid();
548f0bc535Sjob
558f0bc535Sjob while (-1 != (c = getopt(argc, argv, "pv")))
568f0bc535Sjob switch (c) {
578f0bc535Sjob case 'p':
588f0bc535Sjob if (ppem)
598f0bc535Sjob break;
608f0bc535Sjob ppem = 1;
618f0bc535Sjob break;
628f0bc535Sjob case 'v':
638f0bc535Sjob verb++;
648f0bc535Sjob break;
658f0bc535Sjob default:
668f0bc535Sjob errx(1, "bad argument %c", c);
678f0bc535Sjob }
688f0bc535Sjob
698f0bc535Sjob argv += optind;
708f0bc535Sjob argc -= optind;
718f0bc535Sjob
728f0bc535Sjob if (argc == 0)
738f0bc535Sjob errx(1, "argument missing");
748f0bc535Sjob
758f0bc535Sjob for (i = 0; i < argc; i++) {
768f0bc535Sjob buf = load_file(argv[i], &len);
778e9035a6Stb if ((p = rsc_parse(&xp, argv[i], -1, buf, len)) == NULL) {
788f0bc535Sjob free(buf);
7905b383ecStb break;
808f0bc535Sjob }
818f0bc535Sjob if (verb)
828f0bc535Sjob rsc_print(xp, p);
838f0bc535Sjob if (ppem) {
84a5e3d3caStb if (!PEM_write_X509(stdout, xp))
857d686ddcStb errx(1, "PEM_write_X509: unable to write cert");
868f0bc535Sjob }
878f0bc535Sjob free(buf);
888f0bc535Sjob rsc_free(p);
898f0bc535Sjob X509_free(xp);
908f0bc535Sjob }
918f0bc535Sjob
928f0bc535Sjob EVP_cleanup();
938f0bc535Sjob CRYPTO_cleanup_all_ex_data();
948f0bc535Sjob ERR_free_strings();
958f0bc535Sjob
968f0bc535Sjob if (i < argc)
978f0bc535Sjob errx(1, "test failed for %s", argv[i]);
988f0bc535Sjob
998f0bc535Sjob printf("OK\n");
1008f0bc535Sjob return 0;
1018f0bc535Sjob }
1020876134dSclaudio
1030876134dSclaudio time_t
get_current_time(void)1040876134dSclaudio get_current_time(void)
1050876134dSclaudio {
1060876134dSclaudio return time(NULL);
1070876134dSclaudio }
108