Update to 0.4.8-1
- Support RSA key generation on the token - RSA-OAEP and RSA-PKCS encryption support - RSA-PSS signature support - Support for OpenSSL 1.1.1 beta - Removed support for OpenSSL 0.9.8 - Various bug fixes and enhancements
This commit is contained in:
parent
bfc5f19c99
commit
35fa3e5734
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
/libp11-0.4.7.tar.gz
|
/libp11-0.4.7.tar.gz
|
||||||
|
/libp11-0.4.8.tar.gz
|
||||||
|
@ -1,760 +0,0 @@
|
|||||||
diff --git a/src/p11_load.c b/src/p11_load.c
|
|
||||||
index 58cec7c..4109083 100644
|
|
||||||
--- a/src/p11_load.c
|
|
||||||
+++ b/src/p11_load.c
|
|
||||||
@@ -126,8 +126,7 @@ int pkcs11_CTX_reload(PKCS11_CTX *ctx)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Reinitialize the PKCS11 internal slot table */
|
|
||||||
- return pkcs11_enumerate_slots(ctx, NULL, NULL);
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
||||||
index b65e24a..1112078 100644
|
|
||||||
--- a/tests/Makefile.am
|
|
||||||
+++ b/tests/Makefile.am
|
|
||||||
@@ -9,10 +9,10 @@ AM_CPPFLAGS = \
|
|
||||||
AM_LDFLAGS = -no-install
|
|
||||||
LDADD = ../src/libp11.la $(OPENSSL_LIBS)
|
|
||||||
|
|
||||||
-check_PROGRAMS = openssl_version fork-test evp-sign
|
|
||||||
+check_PROGRAMS = openssl_version fork-test evp-sign fork-change-slot
|
|
||||||
dist_check_SCRIPTS = \
|
|
||||||
rsa-testpkcs11.softhsm rsa-testfork.softhsm rsa-testlistkeys.softhsm rsa-evp-sign.softhsm \
|
|
||||||
- ec-testfork.softhsm
|
|
||||||
+ ec-testfork.softhsm fork-change-slot.softhsm
|
|
||||||
dist_check_DATA = \
|
|
||||||
rsa-cert.der rsa-prvkey.der rsa-pubkey.der \
|
|
||||||
ec-cert.der ec-prvkey.der ec-pubkey.der
|
|
||||||
diff --git a/tests/ec-common.sh b/tests/ec-common.sh
|
|
||||||
index 2e6f735..a709c0d 100755
|
|
||||||
--- a/tests/ec-common.sh
|
|
||||||
+++ b/tests/ec-common.sh
|
|
||||||
@@ -33,7 +33,7 @@ echo "Output directory: ${outdir}"
|
|
||||||
|
|
||||||
mkdir -p $outdir
|
|
||||||
|
|
||||||
-for i in /usr/lib64/pkcs11 /usr/lib/softhsm /usr/local/lib/softhsm /opt/local/lib/softhsm /usr/lib/x86_64-linux-gnu/softhsm /usr/lib /usr/lib64/softhsm;do
|
|
||||||
+for i in /usr/lib64/pkcs11 /usr/lib64/softhsm /usr/lib/x86_64-linux-gnu/softhsm /usr/local/lib/softhsm /opt/local/lib/softhsm /usr/lib/softhsm /usr/lib ;do
|
|
||||||
if test -f "$i/libsofthsm2.so"; then
|
|
||||||
ADDITIONAL_PARAM="$i/libsofthsm2.so"
|
|
||||||
break
|
|
||||||
@@ -53,6 +53,11 @@ init_card () {
|
|
||||||
PIN="$1"
|
|
||||||
PUK="$2"
|
|
||||||
|
|
||||||
+ if test -x "/usr/bin/softhsm"; then
|
|
||||||
+ export SOFTHSM_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
+ SOFTHSM_TOOL="/usr/bin/softhsm"
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
if test -x "/usr/local/bin/softhsm2-util"; then
|
|
||||||
export SOFTHSM2_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
SOFTHSM_TOOL="/usr/local/bin/softhsm2-util"
|
|
||||||
@@ -68,17 +73,12 @@ init_card () {
|
|
||||||
SOFTHSM_TOOL="/usr/bin/softhsm2-util"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- if test -x "/usr/bin/softhsm"; then
|
|
||||||
- export SOFTHSM_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
- SOFTHSM_TOOL="/usr/bin/softhsm"
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
if test -z "${SOFTHSM_TOOL}"; then
|
|
||||||
echo "Could not find softhsm(2) tool"
|
|
||||||
exit 77
|
|
||||||
fi
|
|
||||||
|
|
||||||
- if test -z "${SOFTHSM_CONF}"; then
|
|
||||||
+ if test -n "${SOFTHSM2_CONF}"; then
|
|
||||||
rm -rf $outdir/softhsm-testpkcs11.db
|
|
||||||
mkdir -p $outdir/softhsm-testpkcs11.db
|
|
||||||
echo "objectstore.backend = file" > "${SOFTHSM2_CONF}"
|
|
||||||
diff --git a/tests/fork-change-slot.c b/tests/fork-change-slot.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..8e782ce
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/fork-change-slot.c
|
|
||||||
@@ -0,0 +1,288 @@
|
|
||||||
+/* libp11 test code: fork-change-slot.c
|
|
||||||
+ *
|
|
||||||
+ * This program loads a key pair using the engine pkcs11, forks to create
|
|
||||||
+ * a new process, and waits for a SIGUSR1 signal before trying to sign/verify
|
|
||||||
+ * random data in both parent and child processes.
|
|
||||||
+ *
|
|
||||||
+ * The intention of the signal waiting is to allow the user to add/remove
|
|
||||||
+ * devices before continuing to the signature/verifying test.
|
|
||||||
+ *
|
|
||||||
+ * Adding or removing devices can lead to a change in the list of slot IDs
|
|
||||||
+ * obtained from the PKCS#11 module. If the engine does not handle the
|
|
||||||
+ * slot ID referenced by the previously loaded key properly, then the key in
|
|
||||||
+ * the child process can reference to the wrong slot ID after forking.
|
|
||||||
+ * This would lead to an error, since the engine will try to sign the data
|
|
||||||
+ * using the key in the wrong slot.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+#include <termios.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/wait.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+#include <signal.h>
|
|
||||||
+
|
|
||||||
+#include <execinfo.h>
|
|
||||||
+
|
|
||||||
+#include <openssl/evp.h>
|
|
||||||
+#include <openssl/conf.h>
|
|
||||||
+#include <openssl/engine.h>
|
|
||||||
+
|
|
||||||
+#define RANDOM_SIZE 20
|
|
||||||
+#define MAX_SIGSIZE 1024
|
|
||||||
+
|
|
||||||
+#if OPENSSL_VERSION_NUMBER < 0x10100003L
|
|
||||||
+#define EVP_PKEY_get0_RSA(key) ((key)->pkey.rsa)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+static int do_wait(pid_t pids[], int num)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ int status = 0;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < num; i++) {
|
|
||||||
+ waitpid(pids[i], &status, 0);
|
|
||||||
+ if (WIFEXITED(status)) {
|
|
||||||
+ printf("child %d exited with status %d\n", pids[i], WEXITSTATUS(status));
|
|
||||||
+ return (WEXITSTATUS(status));
|
|
||||||
+ }
|
|
||||||
+ if (WIFSIGNALED(status)) {
|
|
||||||
+ fprintf(stderr, "Child %d terminated by signal #%d\n", pids[i],
|
|
||||||
+ WTERMSIG(status));
|
|
||||||
+ return (WTERMSIG(status));
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ perror("waitpid");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int spawn_processes(int num)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ int chld_ret = 0;
|
|
||||||
+ pid_t *pids;
|
|
||||||
+ pid_t pid;
|
|
||||||
+
|
|
||||||
+ sigset_t set, oldset;
|
|
||||||
+ int signal;
|
|
||||||
+
|
|
||||||
+ sigemptyset(&set);
|
|
||||||
+ sigaddset(&set, SIGUSR1);
|
|
||||||
+
|
|
||||||
+ /* If only 1 process was requested, no more processes are required */
|
|
||||||
+ if (num <= 1) {
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ pids = (pid_t *)malloc(num * sizeof(pid_t));
|
|
||||||
+ if (pids == NULL) {
|
|
||||||
+ exit(ENOMEM);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Spawn (num - 1) new processes to get a total of num processes */
|
|
||||||
+ for (i = 0; i < (num - 1); i++) {
|
|
||||||
+ pid = fork();
|
|
||||||
+ switch (pid) {
|
|
||||||
+ case -1: /* failed */
|
|
||||||
+ perror("fork");
|
|
||||||
+ do_wait(pids, i);
|
|
||||||
+ free(pids);
|
|
||||||
+ exit(5);
|
|
||||||
+ case 0: /* child */
|
|
||||||
+ printf("Remove or add a device to try to cause an error\n");
|
|
||||||
+ printf("Waiting for signal SIGUSR1\n");
|
|
||||||
+ sigprocmask(SIG_BLOCK, &set, &oldset);
|
|
||||||
+ sigwait(&set, &signal);
|
|
||||||
+ sigprocmask(SIG_SETMASK, &oldset, NULL);
|
|
||||||
+ free(pids);
|
|
||||||
+ return 0;
|
|
||||||
+ default: /* parent */
|
|
||||||
+ pids[i] = pid;
|
|
||||||
+ printf("spawned %d\n", pid);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Wait for the created processes */
|
|
||||||
+ chld_ret = do_wait(pids, (num - 1));
|
|
||||||
+
|
|
||||||
+ free(pids);
|
|
||||||
+
|
|
||||||
+ return chld_ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void error_queue(const char *name, int pid)
|
|
||||||
+{
|
|
||||||
+ if (ERR_peek_last_error()) {
|
|
||||||
+ fprintf(stderr, "pid %d: %s generated errors:\n", pid, name);
|
|
||||||
+ ERR_print_errors_fp(stderr);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void usage(char *arg)
|
|
||||||
+{
|
|
||||||
+ printf("usage: %s (Key PKCS#11 URL) [opt: PKCS#11 module path]\n",
|
|
||||||
+ arg);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int main(int argc, char *argv[])
|
|
||||||
+{
|
|
||||||
+ const EVP_MD *digest_algo = NULL;
|
|
||||||
+ EVP_PKEY *pkey = NULL;
|
|
||||||
+ EVP_MD_CTX *md_ctx = NULL;
|
|
||||||
+ ENGINE *engine = NULL;
|
|
||||||
+ unsigned char random[RANDOM_SIZE], signature[MAX_SIGSIZE];
|
|
||||||
+ unsigned int siglen = MAX_SIGSIZE;
|
|
||||||
+
|
|
||||||
+ int ret, num_processes = 2;
|
|
||||||
+ pid_t pid;
|
|
||||||
+
|
|
||||||
+ int rv = 1;
|
|
||||||
+
|
|
||||||
+ /* Check arguments */
|
|
||||||
+ if (argc < 2) {
|
|
||||||
+ fprintf(stderr, "Missing required arguments\n");
|
|
||||||
+ usage(argv[0]);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (argc > 4) {
|
|
||||||
+ fprintf(stderr, "Too many arguments\n");
|
|
||||||
+ usage(argv[0]);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Check PKCS#11 URL */
|
|
||||||
+ if (strncmp(argv[1], "pkcs11:", 7)) {
|
|
||||||
+ fprintf(stderr, "fatal: invalid PKCS#11 URL\n");
|
|
||||||
+ usage(argv[0]);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ pid = getpid();
|
|
||||||
+ printf("pid %d is the parent\n", pid);
|
|
||||||
+
|
|
||||||
+ /* Load configuration file, if provided */
|
|
||||||
+ if (argc >= 3) {
|
|
||||||
+ ret = CONF_modules_load_file(argv[2], "engines", 0);
|
|
||||||
+ if (ret <= 0) {
|
|
||||||
+ fprintf(stderr, "cannot load %s\n", argv[2]);
|
|
||||||
+ error_queue("CONF_modules_load_file", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+ ENGINE_add_conf_module();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ENGINE_add_conf_module();
|
|
||||||
+ OpenSSL_add_all_algorithms();
|
|
||||||
+ ERR_load_crypto_strings();
|
|
||||||
+ ERR_clear_error();
|
|
||||||
+ ENGINE_load_builtin_engines();
|
|
||||||
+
|
|
||||||
+ /* Get structural reference */
|
|
||||||
+ engine = ENGINE_by_id("pkcs11");
|
|
||||||
+ if (engine == NULL) {
|
|
||||||
+ fprintf(stderr, "fatal: engine \"pkcs11\" not available\n");
|
|
||||||
+ error_queue("ENGINE_by_id", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Set the used */
|
|
||||||
+ if (argc >= 4) {
|
|
||||||
+ ENGINE_ctrl_cmd(engine, "MODULE_PATH", 0, argv[3], NULL, 1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Initialize to get the engine functional reference */
|
|
||||||
+ if (ENGINE_init(engine)) {
|
|
||||||
+ pkey = ENGINE_load_private_key(engine, argv[1], 0, 0);
|
|
||||||
+ if (pkey == NULL) {
|
|
||||||
+ error_queue("ENGINE_load_private_key", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!ENGINE_set_default(engine, ENGINE_METHOD_ALL)) {
|
|
||||||
+ error_queue("ENGINE_set_default", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ENGINE_free(engine);
|
|
||||||
+ engine = NULL;
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ error_queue("ENGINE_init", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Spawn processes and check child return */
|
|
||||||
+ if (spawn_processes(num_processes)) {
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+ pid = getpid();
|
|
||||||
+
|
|
||||||
+ /* Generate random data */
|
|
||||||
+ if (!RAND_bytes(random, RANDOM_SIZE)){
|
|
||||||
+ error_queue("RAND_bytes", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Create context to sign the random data */
|
|
||||||
+ digest_algo = EVP_get_digestbyname("sha256");
|
|
||||||
+ md_ctx = EVP_MD_CTX_create();
|
|
||||||
+ if (EVP_DigestInit(md_ctx, digest_algo) <= 0) {
|
|
||||||
+ error_queue("EVP_DigestInit", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ EVP_SignInit(md_ctx, digest_algo);
|
|
||||||
+ if (EVP_SignUpdate(md_ctx, random, RANDOM_SIZE) <= 0) {
|
|
||||||
+ error_queue("EVP_SignUpdate", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (EVP_SignFinal(md_ctx, signature, &siglen, pkey) <= 0) {
|
|
||||||
+ error_queue("EVP_SignFinal", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+ EVP_MD_CTX_destroy(md_ctx);
|
|
||||||
+
|
|
||||||
+ printf("pid %d: %u-byte signature created\n", pid, siglen);
|
|
||||||
+
|
|
||||||
+ /* Now verify the result */
|
|
||||||
+ md_ctx = EVP_MD_CTX_create();
|
|
||||||
+ if (EVP_DigestInit(md_ctx, digest_algo) <= 0) {
|
|
||||||
+ error_queue("EVP_DigestInit", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ EVP_VerifyInit(md_ctx, digest_algo);
|
|
||||||
+ if (EVP_VerifyUpdate(md_ctx, random, RANDOM_SIZE) <= 0) {
|
|
||||||
+ error_queue("EVP_VerifyUpdate", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (EVP_VerifyFinal(md_ctx, signature, siglen, pkey) <= 0) {
|
|
||||||
+ error_queue("EVP_VerifyFinal", pid);
|
|
||||||
+ goto failed;
|
|
||||||
+ }
|
|
||||||
+ printf("pid %d: Signature matched\n", pid);
|
|
||||||
+
|
|
||||||
+ rv = 0;
|
|
||||||
+
|
|
||||||
+failed:
|
|
||||||
+ if (md_ctx != NULL)
|
|
||||||
+ EVP_MD_CTX_destroy(md_ctx);
|
|
||||||
+ if (pkey != NULL)
|
|
||||||
+ EVP_PKEY_free(pkey);
|
|
||||||
+ if (engine != NULL)
|
|
||||||
+ ENGINE_free(engine);
|
|
||||||
+ CRYPTO_cleanup_all_ex_data();
|
|
||||||
+ ERR_free_strings();
|
|
||||||
+
|
|
||||||
+ return rv;
|
|
||||||
+}
|
|
||||||
diff --git a/tests/fork-change-slot.softhsm b/tests/fork-change-slot.softhsm
|
|
||||||
new file mode 100755
|
|
||||||
index 0000000..f13d2c8
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/fork-change-slot.softhsm
|
|
||||||
@@ -0,0 +1,75 @@
|
|
||||||
+#!/bin/sh
|
|
||||||
+
|
|
||||||
+# Copyright (C) 2013 Nikos Mavrogiannopoulos
|
|
||||||
+# Copyright (C) 2015 Red Hat, Inc.
|
|
||||||
+#
|
|
||||||
+# This 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.
|
|
||||||
+#
|
|
||||||
+# GnuTLS 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 GnuTLS; if not, write to the Free Software Foundation,
|
|
||||||
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
+
|
|
||||||
+outdir="output.$$"
|
|
||||||
+
|
|
||||||
+# Load common test functions
|
|
||||||
+. ${srcdir}/rsa-common.sh
|
|
||||||
+
|
|
||||||
+sed -e "s|@MODULE_PATH@|${MODULE}|g" -e \
|
|
||||||
+ "s|@ENGINE_PATH@|../src/.libs/pkcs11.so|g" \
|
|
||||||
+ <"${srcdir}/engines.cnf.in" >"${outdir}/engines.cnf"
|
|
||||||
+
|
|
||||||
+# Set the used PIN and PUK
|
|
||||||
+PIN=1234
|
|
||||||
+PUK=1234
|
|
||||||
+
|
|
||||||
+# Initialize SoftHSM DB
|
|
||||||
+init_db
|
|
||||||
+
|
|
||||||
+# Create 2 different tokens
|
|
||||||
+init_card $PIN $PUK "token1"
|
|
||||||
+init_card $PIN $PUK "token2"
|
|
||||||
+
|
|
||||||
+# Force the use of the local built engine
|
|
||||||
+export OPENSSL_ENGINES="../src/.libs/"
|
|
||||||
+
|
|
||||||
+# Generate a key pair in the second token
|
|
||||||
+pkcs11-tool --module ${MODULE} -l --pin $PIN --keypairgen --key-type \
|
|
||||||
+ rsa:1024 --id 01020304 --label pkey --token-label token2
|
|
||||||
+if test $? != 0;then
|
|
||||||
+ exit 1;
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+# Run the test program which will stop and wait for a signal (SIGUSR1)
|
|
||||||
+./fork-change-slot \
|
|
||||||
+ "pkcs11:token=token2;object=pkey;type=private;pin-value=$PIN" \
|
|
||||||
+ "${outdir}/engines.cnf" ${MODULE} &
|
|
||||||
+pid=$!
|
|
||||||
+
|
|
||||||
+# Wait the test program to reach the sigwait
|
|
||||||
+sleep 3
|
|
||||||
+
|
|
||||||
+# Remove the first token to change the slotID associated with token2
|
|
||||||
+${SOFTHSM_TOOL} --delete-token --token token1
|
|
||||||
+
|
|
||||||
+# Send the signal to the waiting process
|
|
||||||
+kill -USR1 `pgrep -P $pid`
|
|
||||||
+
|
|
||||||
+# Test the result
|
|
||||||
+wait $pid
|
|
||||||
+if test $? != 0;then
|
|
||||||
+ exit 1;
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+# Cleanup
|
|
||||||
+rm -rf "$outdir"
|
|
||||||
+
|
|
||||||
+exit 0
|
|
||||||
+
|
|
||||||
diff --git a/tests/rsa-common.sh b/tests/rsa-common.sh
|
|
||||||
index ba1faf5..7db5ba0 100755
|
|
||||||
--- a/tests/rsa-common.sh
|
|
||||||
+++ b/tests/rsa-common.sh
|
|
||||||
@@ -10,7 +10,7 @@
|
|
||||||
#
|
|
||||||
# GnuTLS 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
|
|
||||||
+# 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
|
|
||||||
@@ -23,13 +23,15 @@ echo "Output directory: ${outdir}"
|
|
||||||
|
|
||||||
mkdir -p $outdir
|
|
||||||
|
|
||||||
-for i in /usr/lib64/pkcs11 /usr/lib/softhsm /usr/local/lib/softhsm /opt/local/lib/softhsm /usr/lib/x86_64-linux-gnu/softhsm /usr/lib /usr/lib64/softhsm;do
|
|
||||||
+# Set the module to be used
|
|
||||||
+for i in /usr/lib64/pkcs11 /usr/lib64/softhsm /usr/lib/x86_64-linux-gnu/softhsm \
|
|
||||||
+ /usr/local/lib/softhsm /opt/local/lib/softhsm /usr/lib/softhsm /usr/lib ;do
|
|
||||||
if test -f "$i/libsofthsm2.so"; then
|
|
||||||
- ADDITIONAL_PARAM="$i/libsofthsm2.so"
|
|
||||||
+ MODULE="$i/libsofthsm2.so"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
if test -f "$i/libsofthsm.so";then
|
|
||||||
- ADDITIONAL_PARAM="$i/libsofthsm.so"
|
|
||||||
+ MODULE="$i/libsofthsm.so"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@@ -39,28 +41,30 @@ if (! test -x /usr/bin/pkcs11-tool && ! test -x /usr/local/bin/pkcs11-tool);then
|
|
||||||
exit 77
|
|
||||||
fi
|
|
||||||
|
|
||||||
-init_card () {
|
|
||||||
- PIN="$1"
|
|
||||||
- PUK="$2"
|
|
||||||
+# Initialize the SoftHSM DB
|
|
||||||
+init_db () {
|
|
||||||
+ if test -x "/usr/bin/softhsm"; then
|
|
||||||
+ export SOFTHSM_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
+ SOFTHSM_TOOL="/usr/bin/softhsm"
|
|
||||||
+ SLOT="--slot 0"
|
|
||||||
+ fi
|
|
||||||
|
|
||||||
if test -x "/usr/local/bin/softhsm2-util"; then
|
|
||||||
export SOFTHSM2_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
SOFTHSM_TOOL="/usr/local/bin/softhsm2-util"
|
|
||||||
+ SLOT="--free "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -x "/opt/local/bin/softhsm2-util"; then
|
|
||||||
export SOFTHSM2_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
SOFTHSM_TOOL="/opt/local/bin/softhsm2-util"
|
|
||||||
+ SLOT="--free "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -x "/usr/bin/softhsm2-util"; then
|
|
||||||
export SOFTHSM2_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
SOFTHSM_TOOL="/usr/bin/softhsm2-util"
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- if test -x "/usr/bin/softhsm"; then
|
|
||||||
- export SOFTHSM_CONF="$outdir/softhsm-testpkcs11.config"
|
|
||||||
- SOFTHSM_TOOL="/usr/bin/softhsm"
|
|
||||||
+ SLOT="--free "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "${SOFTHSM_TOOL}"; then
|
|
||||||
@@ -68,19 +72,27 @@ init_card () {
|
|
||||||
exit 77
|
|
||||||
fi
|
|
||||||
|
|
||||||
- if test -z "${SOFTHSM_CONF}"; then
|
|
||||||
+ if test -n "${SOFTHSM2_CONF}"; then
|
|
||||||
rm -rf $outdir/softhsm-testpkcs11.db
|
|
||||||
mkdir -p $outdir/softhsm-testpkcs11.db
|
|
||||||
echo "objectstore.backend = file" > "${SOFTHSM2_CONF}"
|
|
||||||
- echo "directories.tokendir = $outdir/softhsm-testpkcs11.db" >> "${SOFTHSM2_CONF}"
|
|
||||||
+ echo "directories.tokendir = $outdir/softhsm-testpkcs11.db" >> \
|
|
||||||
+ "${SOFTHSM2_CONF}"
|
|
||||||
else
|
|
||||||
rm -rf $outdir/softhsm-testpkcs11.db
|
|
||||||
echo "0:$outdir/softhsm-testpkcs11.db" > "${SOFTHSM_CONF}"
|
|
||||||
fi
|
|
||||||
+}
|
|
||||||
|
|
||||||
+# Create a new device
|
|
||||||
+init_card () {
|
|
||||||
+ PIN="$1"
|
|
||||||
+ PUK="$2"
|
|
||||||
+ DEV_LABEL="$3"
|
|
||||||
|
|
||||||
echo -n "* Initializing smart card... "
|
|
||||||
- ${SOFTHSM_TOOL} --init-token --slot 0 --label "libp11-test" --so-pin "${PUK}" --pin "${PIN}" >/dev/null
|
|
||||||
+ ${SOFTHSM_TOOL} --init-token ${SLOT} --label "${DEV_LABEL}" \
|
|
||||||
+ --so-pin "${PUK}" --pin "${PIN}" >/dev/null
|
|
||||||
if test $? = 0; then
|
|
||||||
echo ok
|
|
||||||
else
|
|
||||||
@@ -89,27 +101,55 @@ init_card () {
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
-PIN=1234
|
|
||||||
-PUK=1234
|
|
||||||
-init_card $PIN $PUK
|
|
||||||
+# Import objects to the token
|
|
||||||
+import_objects () {
|
|
||||||
+ ID=$1
|
|
||||||
+ OBJ_LABEL=$2
|
|
||||||
|
|
||||||
-# generate key in token
|
|
||||||
-pkcs11-tool -p $PIN --module $ADDITIONAL_PARAM -d 01020304 -a server-key -l -w ${srcdir}/rsa-prvkey.der -y privkey >/dev/null
|
|
||||||
-if test $? != 0;then
|
|
||||||
- exit 1;
|
|
||||||
-fi
|
|
||||||
+ pkcs11-tool -p ${PIN} --module ${MODULE} -d ${ID} -a ${OBJ_LABEL} -l -w \
|
|
||||||
+ ${srcdir}/rsa-prvkey.der -y privkey >/dev/null
|
|
||||||
+ if test $? != 0;then
|
|
||||||
+ exit 1;
|
|
||||||
+ fi
|
|
||||||
|
|
||||||
-pkcs11-tool -p $PIN --module $ADDITIONAL_PARAM -d 01020304 -a server-key -l -w ${srcdir}/rsa-pubkey.der -y pubkey >/dev/null
|
|
||||||
-if test $? != 0;then
|
|
||||||
- exit 1;
|
|
||||||
-fi
|
|
||||||
+ pkcs11-tool -p ${PIN} --module ${MODULE} -d ${ID} -a ${OBJ_LABEL} -l -w \
|
|
||||||
+ ${srcdir}/rsa-pubkey.der -y pubkey >/dev/null
|
|
||||||
+ if test $? != 0;then
|
|
||||||
+ exit 1;
|
|
||||||
+ fi
|
|
||||||
|
|
||||||
-pkcs11-tool -p $PIN --module $ADDITIONAL_PARAM -d 01020304 -a server-key -l -w ${srcdir}/rsa-cert.der -y cert >/dev/null
|
|
||||||
-if test $? != 0;then
|
|
||||||
- exit 1;
|
|
||||||
-fi
|
|
||||||
+ pkcs11-tool -p ${PIN} --module ${MODULE} -d ${ID} -a ${OBJ_LABEL} -l -w \
|
|
||||||
+ ${srcdir}/rsa-cert.der -y cert >/dev/null
|
|
||||||
+ if test $? != 0;then
|
|
||||||
+ exit 1;
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
+ echo Finished
|
|
||||||
+}
|
|
||||||
|
|
||||||
-echo "***************"
|
|
||||||
-echo "Listing objects"
|
|
||||||
-echo "***************"
|
|
||||||
-pkcs11-tool -p $PIN --module $ADDITIONAL_PARAM -l -O
|
|
||||||
+# List the objects contained in the token
|
|
||||||
+list_objects () {
|
|
||||||
+ echo "***************"
|
|
||||||
+ echo "Listing objects"
|
|
||||||
+ echo "***************"
|
|
||||||
+ pkcs11-tool -p ${PIN} --module ${MODULE} -l -O
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+common_init () {
|
|
||||||
+ # Set the used PIN and PUK
|
|
||||||
+ PIN=1234
|
|
||||||
+ PUK=1234
|
|
||||||
+
|
|
||||||
+ # Initialize the SoftHSM DB
|
|
||||||
+ init_db
|
|
||||||
+
|
|
||||||
+ # Initialize a new device
|
|
||||||
+ init_card $PIN $PUK "libp11-test"
|
|
||||||
+
|
|
||||||
+ echo Importing
|
|
||||||
+ # Import the used objects (private key, public key, and certificate)
|
|
||||||
+ import_objects 01020304 "server-key"
|
|
||||||
+
|
|
||||||
+ # List the imported objects
|
|
||||||
+ list_objects
|
|
||||||
+}
|
|
||||||
diff --git a/tests/rsa-evp-sign.softhsm b/tests/rsa-evp-sign.softhsm
|
|
||||||
index 4d60c83..7ef993d 100755
|
|
||||||
--- a/tests/rsa-evp-sign.softhsm
|
|
||||||
+++ b/tests/rsa-evp-sign.softhsm
|
|
||||||
@@ -18,47 +18,49 @@
|
|
||||||
|
|
||||||
outdir="output.$$"
|
|
||||||
|
|
||||||
+# Load common test functions
|
|
||||||
. ${srcdir}/rsa-common.sh
|
|
||||||
|
|
||||||
-# This uses the engine for basic sign-verify operation.
|
|
||||||
+# Do the common test initialization
|
|
||||||
+common_init
|
|
||||||
|
|
||||||
-sed -e "s|@MODULE_PATH@|${ADDITIONAL_PARAM}|g" -e "s|@ENGINE_PATH@|../src/.libs/pkcs11.so|g" <"${srcdir}/engines.cnf.in" >"${outdir}/engines.cnf"
|
|
||||||
+sed -e "s|@MODULE_PATH@|${MODULE}|g" -e "s|@ENGINE_PATH@|../src/.libs/pkcs11.so|g" <"${srcdir}/engines.cnf.in" >"${outdir}/engines.cnf"
|
|
||||||
|
|
||||||
export OPENSSL_ENGINES="../src/.libs/"
|
|
||||||
PRIVATE_KEY="pkcs11:token=libp11-test;id=%01%02%03%04;object=server-key;type=private;pin-value=1234"
|
|
||||||
PUBLIC_KEY="pkcs11:token=libp11-test;id=%01%02%03%04;object=server-key;type=public;pin-value=1234"
|
|
||||||
|
|
||||||
-./evp-sign ctrl false "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${ADDITIONAL_PARAM}
|
|
||||||
+./evp-sign ctrl false "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${MODULE}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test, using ctrl failed"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
-./evp-sign default false "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${ADDITIONAL_PARAM}
|
|
||||||
+./evp-sign default false "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${MODULE}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test, using default failed"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
-./evp-sign ctrl 1234 "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${ADDITIONAL_PARAM}
|
|
||||||
+./evp-sign ctrl 1234 "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${MODULE}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test without pin-value, using ctrl failed"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
-./evp-sign default 1234 "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${ADDITIONAL_PARAM}
|
|
||||||
+./evp-sign default 1234 "${outdir}/engines.cnf" ${PRIVATE_KEY} ${PUBLIC_KEY} ${MODULE}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test without pin-value, using default failed"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
-./evp-sign ctrl 1234 "${outdir}/engines.cnf" "label_server-key" "label_server-key" ${ADDITIONAL_PARAM}
|
|
||||||
+./evp-sign ctrl 1234 "${outdir}/engines.cnf" "label_server-key" "label_server-key" ${MODULE}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test with legacy name #1 failed"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
-./evp-sign default 1234 "${outdir}/engines.cnf" "id_01020304" "id_01020304" ${ADDITIONAL_PARAM}
|
|
||||||
+./evp-sign default 1234 "${outdir}/engines.cnf" "id_01020304" "id_01020304" ${MODULE}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test with legacy name #2 failed"
|
|
||||||
exit 1;
|
|
||||||
diff --git a/tests/rsa-testfork.softhsm b/tests/rsa-testfork.softhsm
|
|
||||||
index 0643e96..ba5d851 100755
|
|
||||||
--- a/tests/rsa-testfork.softhsm
|
|
||||||
+++ b/tests/rsa-testfork.softhsm
|
|
||||||
@@ -19,13 +19,19 @@
|
|
||||||
|
|
||||||
outdir="output.$$"
|
|
||||||
|
|
||||||
+# Load common test functions
|
|
||||||
. ${srcdir}/rsa-common.sh
|
|
||||||
|
|
||||||
-./fork-test $ADDITIONAL_PARAM $PIN
|
|
||||||
+# Do the common test initialization
|
|
||||||
+common_init
|
|
||||||
+
|
|
||||||
+# Run the test
|
|
||||||
+./fork-test ${MODULE} ${PIN}
|
|
||||||
if test $? != 0;then
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
+# Cleanup
|
|
||||||
rm -rf "$outdir"
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
diff --git a/tests/rsa-testlistkeys.softhsm b/tests/rsa-testlistkeys.softhsm
|
|
||||||
index 9494f9d..b3696f5 100755
|
|
||||||
--- a/tests/rsa-testlistkeys.softhsm
|
|
||||||
+++ b/tests/rsa-testlistkeys.softhsm
|
|
||||||
@@ -19,9 +19,14 @@
|
|
||||||
|
|
||||||
outdir="output.$$"
|
|
||||||
|
|
||||||
+# Load common test functions
|
|
||||||
. ${srcdir}/rsa-common.sh
|
|
||||||
|
|
||||||
-../examples/listkeys $ADDITIONAL_PARAM $PIN
|
|
||||||
+# Do the common test initialization
|
|
||||||
+common_init
|
|
||||||
+
|
|
||||||
+# Run the test
|
|
||||||
+../examples/listkeys ${MODULE} ${PIN}
|
|
||||||
if test $? != 0;then
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
diff --git a/tests/rsa-testpkcs11.softhsm b/tests/rsa-testpkcs11.softhsm
|
|
||||||
index d1e1f50..f76a8d3 100755
|
|
||||||
--- a/tests/rsa-testpkcs11.softhsm
|
|
||||||
+++ b/tests/rsa-testpkcs11.softhsm
|
|
||||||
@@ -20,14 +20,19 @@
|
|
||||||
|
|
||||||
outdir="output.$$"
|
|
||||||
|
|
||||||
+# Load common test functions
|
|
||||||
. ${srcdir}/rsa-common.sh
|
|
||||||
|
|
||||||
-../examples/auth $ADDITIONAL_PARAM $PIN
|
|
||||||
+# Do the common test initialization
|
|
||||||
+common_init
|
|
||||||
+
|
|
||||||
+../examples/auth ${MODULE} ${PIN}
|
|
||||||
if test $? != 0;then
|
|
||||||
echo "Basic PKCS #11 test test failed"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
+# Cleanup
|
|
||||||
rm -rf "$outdir"
|
|
||||||
|
|
||||||
exit 0
|
|
@ -1,5 +1,5 @@
|
|||||||
Version: 0.4.7
|
Version: 0.4.8
|
||||||
Release: 8%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
# Define the directory where the OpenSSL engines are installed
|
# Define the directory where the OpenSSL engines are installed
|
||||||
%global enginesdir %{_libdir}/engines-1.1
|
%global enginesdir %{_libdir}/engines-1.1
|
||||||
@ -11,8 +11,6 @@ License: LGPLv2+ and BSD
|
|||||||
URL: https://github.com/OpenSC/libp11
|
URL: https://github.com/OpenSC/libp11
|
||||||
Source0: https://github.com/OpenSC/libp11/releases/download/libp11-%{version}/libp11-%{version}.tar.gz
|
Source0: https://github.com/OpenSC/libp11/releases/download/libp11-%{version}/libp11-%{version}.tar.gz
|
||||||
|
|
||||||
Patch1: libp11-0.4.7-do-not-enumerate-slots-on-fork.patch
|
|
||||||
|
|
||||||
BuildRequires: autoconf automake libtool
|
BuildRequires: autoconf automake libtool
|
||||||
BuildRequires: openssl-devel
|
BuildRequires: openssl-devel
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
@ -60,8 +58,6 @@ developing applications that use libp11.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -p 1 -n libp11-%{version}
|
%autosetup -p 1 -n libp11-%{version}
|
||||||
# Fix permissions for file brought by a patch
|
|
||||||
chmod ugo+x %{_builddir}/libp11-0.4.7/tests/fork-change-slot.softhsm
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -fvi
|
autoreconf -fvi
|
||||||
@ -113,6 +109,15 @@ make check %{?_smp_mflags}
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Aug 06 2018 Anderson Sasaki <ansasaki@redhat.com> - 0.4.8-1
|
||||||
|
- Update to 0.4.8-1
|
||||||
|
- RSA key generation on the token
|
||||||
|
- RSA-OAEP and RSA-PKCS encryption support
|
||||||
|
- RSA-PSS signature support
|
||||||
|
- Support for OpenSSL 1.1.1 beta
|
||||||
|
- Removed support for OpenSSL 0.9.8
|
||||||
|
- Various bug fixes and enhancements
|
||||||
|
|
||||||
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.7-8
|
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.7-8
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (libp11-0.4.7.tar.gz) = 8142b32bee9e6763b506b93be788a4df2b28ae8cb3ad6e11fc53ba3db770d77bdcc0362661c2f906cab1b5afc2828019f3d0f0b9d898414c0d6266201b7e08e6
|
SHA512 (libp11-0.4.8.tar.gz) = efce50f88bf560255666640f30d6a5fa7d8cbbb55678551c4e938abdc6f60331534f9e6245d99d6b6c5c5d283f21b7c2dfb8c97b381da56035be4fe0550a948b
|
||||||
|
Loading…
Reference in New Issue
Block a user