diff --git a/configure.ac b/configure.ac index 64f15d9..3741cf9 100644 --- a/configure.ac +++ b/configure.ac @@ -216,6 +216,7 @@ AC_CONFIG_FILES([ ykcs11/Makefile ykcs11/ykcs11-version.h ykcs11/ykcs11.pc + ykcs11/tests/Makefile ]) AC_OUTPUT diff --git a/ykcs11/Makefile.am b/ykcs11/Makefile.am index 137df27..554d0c1 100644 --- a/ykcs11/Makefile.am +++ b/ykcs11/Makefile.am @@ -24,8 +24,7 @@ # non-source form of such a combination shall include the source code # for the parts of OpenSSL used as well as that of the covered work. -SUBDIRS = . -#tests +SUBDIRS = . tests AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) AM_CPPFLAGS = $(OPENSSL_CFLAGS) $(PCSC_CFLAGS) diff --git a/ykcs11/tests/Makefile.am b/ykcs11/tests/Makefile.am new file mode 100644 index 0000000..7973809 --- /dev/null +++ b/ykcs11/tests/Makefile.am @@ -0,0 +1,46 @@ +# Copyright (c) 2014 Yubico AB +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#TESTS_ENVIRONMENT = export VERSION=$(PACKAGE_VERSION); export EXEEXT=$(EXEEXT); + +#LOG_COMPILER = $(VALGRIND) + +AM_CFLAGS = $(WARN_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_builddir)/lib +AM_CPPFLAGS += -I$(top_srcdir)/ykcs11 -I$(top_builddir)/ykcs11 +AM_CPPFLAGS += $(OPENSSL_CFLAGS) + +AM_LDFLAGS = -no-install + +ykcs11_tests_LDADD = ../libykcs11.la $(OPENSSL_LIBS) + +check_PROGRAMS = ykcs11_tests +TESTS = $(check_PROGRAMS) + +if ENABLE_COV +AM_LDFLAGS += --coverage +endif diff --git a/ykcs11/tests/test-suite.log b/ykcs11/tests/test-suite.log new file mode 100644 index 0000000..21794ef --- /dev/null +++ b/ykcs11/tests/test-suite.log @@ -0,0 +1,14 @@ +======================================================== + yubico-piv-tool 1.1.2: ykcs11/tests/test-suite.log +======================================================== + +# TOTAL: 1 +# PASS: 1 +# SKIP: 0 +# XFAIL: 0 +# FAIL: 0 +# XPASS: 0 +# ERROR: 0 + +.. contents:: :depth: 2 + diff --git a/ykcs11/tests/ykcs11_tests b/ykcs11/tests/ykcs11_tests new file mode 100755 index 0000000..304d404 Binary files /dev/null and b/ykcs11/tests/ykcs11_tests differ diff --git a/ykcs11/tests/ykcs11_tests.c b/ykcs11/tests/ykcs11_tests.c new file mode 100644 index 0000000..a54eb22 --- /dev/null +++ b/ykcs11/tests/ykcs11_tests.c @@ -0,0 +1,67 @@ +#include +#include + +#include + +#define MANUFACTURER_ID "Yubico (www.yubico.com)" +#define YKCS11_DESCRIPTION "PKCS#11 PIV Library (SP-800-73)" +#define CRYPTOKI_VERSION_MAJ 2 +#define CRYPTOKI_VERSION_MIN 40 + + +static void lib_info() { + + CK_INFO info; + CK_FUNCTION_LIST_PTR funcs; + + if (C_GetFunctionList(&funcs) != CKR_OK) { + fprintf(stderr, "Get function list failed\n"); + exit(EXIT_FAILURE); + } + + if (funcs->C_Initialize(NULL) != CKR_OK) { + fprintf(stderr, "Initialize failed\n"); + exit(EXIT_FAILURE); + } + + if (funcs->C_GetInfo(&info) != CKR_OK) { + fprintf(stderr, "GetInfo failed\n"); + exit(EXIT_FAILURE); + } + + if (strcmp(info.manufacturerID, MANUFACTURER_ID) != 0) { + fprintf(stderr, "unexpected manufacturer ID %s\n", info.manufacturerID); + exit(EXIT_FAILURE); + } + + if (info.cryptokiVersion.major != CRYPTOKI_VERSION_MAJ || + info.cryptokiVersion.minor != CRYPTOKI_VERSION_MIN ) { + fprintf(stderr, "unexpected Cryptoki version %d.%d\n", info.cryptokiVersion.major, info.cryptokiVersion.minor); + exit(EXIT_FAILURE); + } + + if (info.libraryVersion.major != YKCS11_VERSION_MAJOR || + info.libraryVersion.minor != ((YKCS11_VERSION_MINOR * 100) + YKCS11_VERSION_PATCH )) { + fprintf(stderr, "unexpected YKCS11 version %d.%d\n", info.libraryVersion.major, info.libraryVersion.minor); + exit(EXIT_FAILURE); + } + + if (strcmp(info.libraryDescription, YKCS11_DESCRIPTION) != 0) { + fprintf(stderr, "unexpected description %s\n", info.libraryDescription); + exit(EXIT_FAILURE); + } + + if (funcs->C_Finalize(NULL) != CKR_OK) { + fprintf(stderr, "Finalize failed\n"); + exit(EXIT_FAILURE); + } + +} + +int main(void) { + + lib_info(); + + return EXIT_SUCCESS; + +} diff --git a/ykcs11/tests/ykcs11_tests.log b/ykcs11/tests/ykcs11_tests.log new file mode 100644 index 0000000..1705a9f --- /dev/null +++ b/ykcs11/tests/ykcs11_tests.log @@ -0,0 +1 @@ +PASS ykcs11_tests (exit status: 0) diff --git a/ykcs11/tests/ykcs11_tests.o b/ykcs11/tests/ykcs11_tests.o new file mode 100644 index 0000000..b8d8e7a Binary files /dev/null and b/ykcs11/tests/ykcs11_tests.o differ diff --git a/ykcs11/tests/ykcs11_tests.trs b/ykcs11/tests/ykcs11_tests.trs new file mode 100644 index 0000000..3f0f396 --- /dev/null +++ b/ykcs11/tests/ykcs11_tests.trs @@ -0,0 +1,4 @@ +:test-result: PASS +:global-test-result: PASS +:recheck: no +:copy-in-global-log: no