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