summaryrefslogtreecommitdiff
path: root/test/cmp_asn_test.c
diff options
context:
space:
mode:
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>2019-08-10 14:07:22 +0200
committerMatt Caswell <matt@openssl.org>2019-09-27 10:53:11 +0100
commit7960dbec6801c1c98c848b81ca00e73625e8970b (patch)
tree58045a9618ce5668f8b95b966810a35b3285deb3 /test/cmp_asn_test.c
parent0c452a51a5dfe061e5080ae484f1cd06772d8f47 (diff)
downloadopenssl-new-7960dbec6801c1c98c848b81ca00e73625e8970b.tar.gz
Certificate Management Protocol (CMP, RFC 4210) extension to OpenSSL
Also includes CRMF (RFC 4211) and HTTP transfer (RFC 6712) CMP and CRMF API is added to libcrypto, and the "cmp" app to the openssl CLI. Adds extensive man pages and tests. Integration into build scripts. Incremental pull request based on OpenSSL commit 8869ad4a39f of 2019-04-02 4th chunk: CMP context/parameters and utilities in crypto/cmp/cmp_ctx.c, crypto/cmp/cmp_util.c, and related files Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9107)
Diffstat (limited to 'test/cmp_asn_test.c')
-rw-r--r--test/cmp_asn_test.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/test/cmp_asn_test.c b/test/cmp_asn_test.c
new file mode 100644
index 0000000000..70439bf0af
--- /dev/null
+++ b/test/cmp_asn_test.c
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2007-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright Nokia 2007-2019
+ * Copyright Siemens AG 2015-2019
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "cmp_testlib.h"
+
+static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH];
+
+typedef struct test_fixture {
+ const char *test_case_name;
+ int expected;
+ ASN1_OCTET_STRING *src_string;
+ ASN1_OCTET_STRING *tgt_string;
+
+} CMP_ASN_TEST_FIXTURE;
+
+static CMP_ASN_TEST_FIXTURE *set_up(const char *const test_case_name)
+{
+ CMP_ASN_TEST_FIXTURE *fixture;
+ int setup_ok = 0;
+
+ /* Allocate memory owned by the fixture, exit on error */
+ if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture))))
+ goto err;
+ fixture->test_case_name = test_case_name;
+ setup_ok = 1;
+
+ err:
+ if (!setup_ok) {
+#ifndef OPENSSL_NO_STDIO
+ ERR_print_errors_fp(stderr);
+#endif
+ exit(EXIT_FAILURE);
+ }
+ return fixture;
+}
+
+static void tear_down(CMP_ASN_TEST_FIXTURE *fixture)
+{
+ ASN1_OCTET_STRING_free(fixture->src_string);
+ if (fixture->tgt_string != fixture->src_string)
+ ASN1_OCTET_STRING_free(fixture->tgt_string);
+
+ OPENSSL_free(fixture);
+}
+
+static int execute_cmp_asn1_get_int_test(CMP_ASN_TEST_FIXTURE *
+ fixture)
+{
+ ASN1_INTEGER *asn1integer = ASN1_INTEGER_new();
+ ASN1_INTEGER_set(asn1integer, 77);
+ if (!TEST_int_eq(77, ossl_cmp_asn1_get_int(asn1integer)))
+ return 0;
+ ASN1_INTEGER_free(asn1integer);
+ return 1;
+}
+
+static int test_cmp_asn1_get_int(void)
+{
+ SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ EXECUTE_TEST(execute_cmp_asn1_get_int_test, tear_down);
+ return result;
+}
+
+static int execute_CMP_ASN1_OCTET_STRING_set1_test(CMP_ASN_TEST_FIXTURE *
+ fixture)
+{
+ if (!TEST_int_eq(fixture->expected,
+ ossl_cmp_asn1_octet_string_set1(&fixture->tgt_string,
+ fixture->src_string)))
+ return 0;
+ if (fixture->expected != 0)
+ return TEST_int_eq(0, ASN1_OCTET_STRING_cmp(fixture->tgt_string,
+ fixture->src_string));
+ return 1;
+}
+
+static int test_ASN1_OCTET_STRING_set(void)
+{
+ SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->tgt_string = ASN1_OCTET_STRING_new())
+ || !TEST_ptr(fixture->src_string = ASN1_OCTET_STRING_new())
+ || !TEST_true(ASN1_OCTET_STRING_set(fixture->src_string, rand_data,
+ sizeof(rand_data)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_CMP_ASN1_OCTET_STRING_set1_test, tear_down);
+ return result;
+}
+
+static int test_ASN1_OCTET_STRING_set_tgt_is_src(void)
+{
+ SETUP_TEST_FIXTURE(CMP_ASN_TEST_FIXTURE, set_up);
+ fixture->expected = 1;
+ if (!TEST_ptr(fixture->src_string = ASN1_OCTET_STRING_new())
+ || !(fixture->tgt_string = fixture->src_string)
+ || !TEST_true(ASN1_OCTET_STRING_set(fixture->src_string, rand_data,
+ sizeof(rand_data)))) {
+ tear_down(fixture);
+ fixture = NULL;
+ }
+ EXECUTE_TEST(execute_CMP_ASN1_OCTET_STRING_set1_test, tear_down);
+ return result;
+}
+
+
+void cleanup_tests(void)
+{
+ return;
+}
+
+int setup_tests(void)
+{
+ /* ASN.1 related tests */
+ ADD_TEST(test_cmp_asn1_get_int);
+ ADD_TEST(test_ASN1_OCTET_STRING_set);
+ ADD_TEST(test_ASN1_OCTET_STRING_set_tgt_is_src);
+ /* TODO make sure that total number of tests (here currently 24) is shown,
+ also for other cmp_*text.c. Currently the test drivers always show 1. */
+
+ return 1;
+}