From 9d0d163f620ca184aa2a7a964732d050bb032456 Mon Sep 17 00:00:00 2001 From: Klas Lindfors Date: Tue, 17 Jun 2014 10:34:51 +0200 Subject: [PATCH] some tests for the library --- .gitignore | 8 +++++ tests/Makefile.am | 11 ++++-- tests/basic.c | 74 ++++++++++++++++++++++++++++++++++++++ tests/parse_key.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 tests/basic.c create mode 100644 tests/parse_key.c diff --git a/.gitignore b/.gitignore index a4cf1e3..a224e0e 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,14 @@ yubico-piv-tool-*-mac.zip.sig tests/basic.sh.log tests/basic.sh.trs tests/test-suite.log +tests/basic +tests/basic.log +tests/basic.o +tests/basic.trs +tests/parse_key +tests/parse_key.log +tests/parse_key.o +tests/parse_key.trs lib/error.lo lib/error.o lib/libykpiv.la diff --git a/tests/Makefile.am b/tests/Makefile.am index 9eaf2e7..1c47722 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -24,6 +24,13 @@ # 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. -TESTS = basic.sh - TESTS_ENVIRONMENT = export VERSION=$(VERSION); export EXEEXT=$(EXEEXT); + +AM_CFLAGS = $(WARN_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_builddir)/lib + +AM_LDFLAGS = -no-install +LDADD = ../lib/libykpiv.la + +check_PROGRAMS = basic parse_key +TESTS = basic.sh $(check_PROGRAMS) diff --git a/tests/basic.c b/tests/basic.c new file mode 100644 index 0000000..b7c64ae --- /dev/null +++ b/tests/basic.c @@ -0,0 +1,74 @@ + /* + * Copyright (c) 2014 Yubico AB + * All rights reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Additional permission under GNU GPL version 3 section 7 + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, We grant you additional + * permission to convey the resulting work. Corresponding Source for a + * 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. + * + */ + +#include "ykpiv.h" + +#include +#include +#include +#include + +int main(void) +{ + if(strcmp(YKPIV_VERSION_STRING, ykpiv_check_version (NULL)) != 0) { + printf("version mismatch %s != %s\n", YKPIV_VERSION_STRING, + ykpiv_check_version(NULL)); + return EXIT_FAILURE; + } + + if(ykpiv_check_version(YKPIV_VERSION_STRING) == NULL) { + printf("version NULL?\n"); + return EXIT_FAILURE; + } + + if(ykpiv_check_version("99.99.99") != NULL) { + printf ("version not NULL?\n"); + return EXIT_FAILURE; + } + + printf ("ykpiv version: header %s library %s\n", + YKPIV_VERSION_STRING, ykpiv_check_version (NULL)); + + + if(ykpiv_strerror(YKPIV_OK) == NULL) { + printf ("ykpiv_strerror NULL\n"); + return EXIT_FAILURE; + } + + { + const char *s; + s = ykpiv_strerror_name(YKPIV_OK); + if(s == NULL || strcmp(s, "YKPIV_OK") != 0) { + printf("ykpiv_strerror_name %s\n", s); + return EXIT_FAILURE; + } + } + + return EXIT_SUCCESS; +} diff --git a/tests/parse_key.c b/tests/parse_key.c new file mode 100644 index 0000000..564352d --- /dev/null +++ b/tests/parse_key.c @@ -0,0 +1,91 @@ + /* + * Copyright (c) 2014 Yubico AB + * All rights reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Additional permission under GNU GPL version 3 section 7 + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, We grant you additional + * permission to convey the resulting work. Corresponding Source for a + * 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. + * + */ + +#include +#include +#include + +#include "ykpiv.h" + +struct key { + const char text[49]; + const unsigned char formatted[24]; + int valid; +}; + +struct key keys[] = { + {"010203040506070801020304050607080102030405060708", + {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, + 1}, + {"a1a2a3a4a5a6a7a8a1a2a3a4a5a6a7a8a1a2a3a4a5a6a7a8", + {0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8}, + 1} +}; + +static int parse_key(ykpiv_state *state, const char *text, const unsigned char *expected, int valid) { + unsigned char key[24]; + ykpiv_rc res = ykpiv_parse_key(state, text, key); + if(res != YKPIV_OK && valid == 1) { + printf("key check failed for %s!\n", text); + return EXIT_FAILURE; + } else if(res != YKPIV_OK && valid == 0) { + return EXIT_SUCCESS; + } + + if(memcmp(expected, key, 24) != 0) { + printf("keys not matching for %s!\n", text); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +int main(void) { + ykpiv_state *state; + size_t i; + + if(ykpiv_init(&state, 0) != YKPIV_OK) { + printf("Failed initializing library!\n"); + return EXIT_FAILURE; + } + + for(i = 0; i < sizeof(keys) / sizeof(struct key); i++) { + int res = parse_key(state, keys[i].text, keys[i].formatted, keys[i].valid); + if(res != EXIT_SUCCESS) { + return res; + } + } + + if(ykpiv_done(state) != YKPIV_OK) { + printf("Failed de-initializing library!\n"); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +}