aboutsummaryrefslogtreecommitdiff
path: root/openssl/tests
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2008-06-12 17:43:13 +0000
committerRob Austein <sra@hactrn.net>2008-06-12 17:43:13 +0000
commit855c609b7b0951c22ed3a83bab77e769309e1626 (patch)
tree99792f4c4ad779afc52e04bcf81bb0464b1def60 /openssl/tests
parentca0979f78ecefa9d12926fef6ce1a041b5adf664 (diff)
Reorganize old directory hierarchy to match current usage
svn path=/docs; revision=1875
Diffstat (limited to 'openssl/tests')
-rw-r--r--openssl/tests/Makefile30
-rw-r--r--openssl/tests/resource-set-test.c148
-rw-r--r--openssl/tests/test.conf41
3 files changed, 219 insertions, 0 deletions
diff --git a/openssl/tests/Makefile b/openssl/tests/Makefile
new file mode 100644
index 00000000..f7b803eb
--- /dev/null
+++ b/openssl/tests/Makefile
@@ -0,0 +1,30 @@
+# $Id$
+
+OPENSSL_DIR = ../../openssl/openssl
+
+CFLAGS = -g -I${OPENSSL_DIR}/include
+
+# -H -Wl,-t
+
+BIN = resource-set-test
+OBJ = resource-set-test.o
+LIB = ${OPENSSL_DIR}/libcrypto.a
+
+all: ${BIN}
+
+clean:
+ rm -f ${BIN} ${OBJ}
+
+${BIN}: ${OBJ} ${LIB} Makefile
+ ${CC} -g -o $@ ${OBJ} ${LIB}
+
+# This test needs more work
+
+test: ${BIN} test.cer
+ ./${BIN} -v -a AS:17 -i IPv4:10.0.0.44 -d test.cer
+
+test.cer: test.conf
+ ${OPENSSL_DIR}/apps/openssl req -new -x509 -config test.conf -keyout test.key -out test.cer -outform DER
+
+immaculate: clean
+ rm -f test.key test.cer
diff --git a/openssl/tests/resource-set-test.c b/openssl/tests/resource-set-test.c
new file mode 100644
index 00000000..a14d7a72
--- /dev/null
+++ b/openssl/tests/resource-set-test.c
@@ -0,0 +1,148 @@
+/* $Id$ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <openssl/bio.h>
+#include <openssl/pem.h>
+#include <openssl/err.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include <openssl/safestack.h>
+
+static X509 *read_cert(const char *filename, int format, int verbose)
+{
+ X509 *x = NULL;
+ BIO *b;
+
+ if ((b = BIO_new_file(filename, "r")) == NULL)
+ goto done;
+
+ switch (format) {
+ case 'p':
+ x = PEM_read_bio_X509_AUX(b, NULL, NULL, NULL);
+ break;
+ case 'd':
+ x = d2i_X509_bio(b, NULL);
+ break;
+ }
+
+ if (verbose && x != NULL) {
+ X509_print_fp(stdout, x);
+ printf("\n");
+ }
+
+#if 0
+
+ if (x->rfc3779_addr == NULL)
+ x->rfc3779_addr = X509_get_ext_d2i(x, NID_sbgp_ipAddrBlock,
+ NULL, NULL);
+
+ if (x->rfc3779_asid == NULL)
+ x->rfc3779_asid = X509_get_ext_d2i(x, NID_sbgp_autonomousSysNum,
+ NULL, NULL);
+
+#else
+
+ /*
+ * We run this for the side-effect of calling x509v3_cache_extensions()
+ */
+ X509_check_ca(x);
+
+#endif
+
+ done:
+ BIO_free(b);
+ return x;
+}
+
+static void *parse_resource_set(int nid, char *text, int verbose)
+{
+ X509_EXTENSION *ext;
+ void *result;
+
+ if ((ext = X509V3_EXT_conf_nid(NULL, NULL, nid, text)) == NULL)
+ return NULL;
+
+ if (verbose) {
+ printf("Parsed resource set:\n");
+ X509V3_EXT_print_fp(stdout, ext, 0, 3);
+ printf("\n");
+ }
+
+ result = X509V3_EXT_d2i(ext);
+ X509_EXTENSION_free(ext);
+ return result;
+}
+
+#define lose(_msg_) \
+ do { \
+ if (_msg_) \
+ fprintf(stderr, "%s: %s\n", argv[0], _msg_); \
+ ret = 1; \
+ goto done; \
+ } while(0)
+
+int main(int argc, char *argv[])
+{
+ STACK_OF(X509) *chain = NULL;
+ ASIdentifiers *asid = NULL;
+ IPAddrBlocks *addr = NULL;
+ int c, ret = 0, verbose = 0;
+ X509 *x;
+
+ OpenSSL_add_all_algorithms();
+ ERR_load_crypto_strings();
+
+ if ((chain = sk_X509_new_null()) == NULL)
+ lose("Couldn't allocate X509 stack");
+
+ while ((c = getopt(argc, argv, "p:d:a:i:v")) > 0) {
+ switch (c) {
+ case 'v':
+ verbose = 1;
+ break;
+ case 'p':
+ case 'd':
+ if ((x = read_cert(optarg, c, verbose)) == NULL)
+ lose("Couldn't read certificate");
+ sk_X509_push(chain, x);
+ break;
+ case 'a':
+ if (asid != NULL)
+ lose("Can't specify more than one ASIdentifier");
+ if ((asid = parse_resource_set(NID_sbgp_autonomousSysNum, optarg, verbose)) == NULL)
+ lose("Couldn't read ASIdentifier");
+ break;
+ case 'i':
+ if (addr != NULL)
+ lose("Can't specify more than one IPAddrBlock");
+ if ((addr = parse_resource_set(NID_sbgp_ipAddrBlock, optarg, verbose)) == NULL)
+ lose("Couldn't read IPAddrBlock");
+ break;
+ default:
+ fprintf(stderr, "usage: %s"
+ " [-i IPAddrBlock] [-a ASIdentifier]"
+ " [-p PEM-certfile] [-d DER-certfile]\n", argv[0]);
+ ret = 1;
+ goto done;
+ }
+ }
+
+ printf("Checking ASIdentifier coverage...");
+ if (v3_asid_validate_resource_set(chain, asid, 0))
+ printf("covered\n");
+ else
+ printf("NOT covered\n");
+
+ printf("Checking IPAddrBlock coverage...");
+ if (v3_addr_validate_resource_set(chain, addr, 0))
+ printf("covered\n");
+ else
+ printf("NOT covered\n");
+
+ done:
+ sk_X509_pop_free(chain, X509_free);
+ EVP_cleanup();
+ ERR_free_strings();
+ return ret;
+}
diff --git a/openssl/tests/test.conf b/openssl/tests/test.conf
new file mode 100644
index 00000000..161eb5be
--- /dev/null
+++ b/openssl/tests/test.conf
@@ -0,0 +1,41 @@
+# $Id$
+
+[ req ]
+default_bits = 1024
+encrypt_key = no
+distinguished_name = req_dn
+x509_extensions = req_x509_ext
+prompt = no
+
+[ req_dn ]
+C = US
+ST = MA
+L = Reading
+O = Grunchweather Associates
+OU = Software Engineering
+CN = RFC3779 test cert
+emailAddress = sra@hactrn.net
+
+[ req_x509_ext ]
+
+sbgp-autonomousSysNum = @asid_ext
+sbgp-ipAddrBlock = @addr_ext
+
+[ asid_ext ]
+
+AS.0 = 1
+AS.1 = 3-22
+AS.2 = 2
+RDI.0 = inherit
+
+[ addr_ext ]
+
+IPv4-SAFI.0 = 1 : 10.0.0.6 /24
+IPv4.0 = 10.0.0.44
+IPv4.1 = 10.3.0.44
+IPv4.2 = 10.0.0.45
+IPv4.3 = 10.2.0.5
+IPv4.4 = 10.2.0.6- 10.3.0.0
+IPv6.0 = 2002::
+IPv6.1 = 2002::1 - 2002::14
+IPv6.2 = 2003::/33