Skip to content

Commit 2278da2

Browse files
committed
libp11 PKCS#11 provider support
1 parent 7022a03 commit 2278da2

File tree

9 files changed

+1075
-3
lines changed

9 files changed

+1075
-3
lines changed

Makefile.mingw

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
SUBDIRS = src
3+
4+
all::
5+
6+
all depend install clean::
7+
@for i in $(SUBDIRS); do \
8+
(cd $$i && $(MAKE) BUILD_FOR=$(BUILD_FOR) OPENSSL_DIR=$(OPENSSL_DIR) -f Makefile.mak); \
9+
done
10+

configure.ac

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ opensslversion="$( \
3838
case "$opensslversion" in
3939
3.*) # Engines directory prefix for OpenSSL 3.x
4040
LIBP11_LT_OLDEST="3"
41+
LIBP11_OSSL_PROVIDER="yes"
4142
debian_ssl_prefix="engines-3";;
4243
1.1.*) # Engines directory prefix for OpenSSL 1.1.x
4344
LIBP11_LT_OLDEST="3"
@@ -50,6 +51,13 @@ case "$opensslversion" in
5051
debian_ssl_prefix="ssl/engines";;
5152
esac
5253

54+
case "$OSSL_PKG_VERSION" in
55+
3.*)
56+
AC_MSG_NOTICE([3.*])
57+
LIBP11_OSSL_PROVIDER="yes";;
58+
esac
59+
60+
AM_CONDITIONAL([LIBP11_OSSL_PROVIDER], [test x$LIBP11_OSSL_PROVIDER = xyes])
5361

5462
# LT Version numbers, remember to change them just *before* a release.
5563
# (Code changed: REVISION++)
@@ -156,6 +164,29 @@ AC_ARG_ENABLE(
156164
[enable_static_engine="no"]
157165
)
158166

167+
AC_ARG_WITH(
168+
[modulesdir],
169+
[AS_HELP_STRING([--with-modulesdir], [OpenSSL3 providers directory])],
170+
[providersexecdir="${withval}"],
171+
[
172+
providersexecdir="`$PKG_CONFIG --variable=modulesdir --silence-errors libcrypto`"
173+
if test "${providersexecdir}" = ""; then
174+
libcryptodir="`$PKG_CONFIG --variable=libdir --silence-errors libcrypto || \
175+
$PKG_CONFIG --variable=libdir openssl`"
176+
if test -d "$libcryptodir/$debian_ssl_prefix"; then
177+
# Debian-based OpenSSL package (for example Ubuntu)
178+
providersexecdir="$libcryptodir/$debian_ssl_prefix"
179+
else # Default OpenSSL providers directory
180+
providersexecdir="$libcryptodir/ossl-modules"
181+
fi
182+
if test "${prefix}" != "NONE" -o "${exec_prefix}" != "NONE"; then
183+
# Override the autodetected value with the default
184+
providersexecdir="\$(libdir)"
185+
fi
186+
fi
187+
]
188+
)
189+
159190
AC_ARG_WITH(
160191
[pkcs11-module],
161192
[AS_HELP_STRING([--with-pkcs11-module], [default PKCS11 module])],
@@ -220,6 +251,7 @@ pkgconfigdir="\$(libdir)/pkgconfig"
220251
AC_SUBST([pkgconfigdir])
221252
AC_SUBST([apidocdir])
222253
AC_SUBST([enginesexecdir])
254+
AC_SUBST([providersexecdir])
223255
AC_SUBST([LIBP11_VERSION_MAJOR])
224256
AC_SUBST([LIBP11_VERSION_MINOR])
225257
AC_SUBST([LIBP11_VERSION_FIX])
@@ -262,6 +294,7 @@ AC_CONFIG_FILES([
262294
src/libp11.pc
263295
src/libp11.rc
264296
src/pkcs11.rc
297+
src/pkcs11prov.rc
265298
doc/Makefile
266299
doc/doxygen.conf
267300
examples/Makefile
@@ -289,6 +322,7 @@ libp11 has been configured with the following options:
289322
Version: ${PACKAGE_VERSION}
290323
libp11 directory: $(eval eval eval echo "${libdir}")
291324
Engine directory: ${enginesexecdir}
325+
Provider directory: ${providersexecdir}
292326
Default PKCS11 module: ${pkcs11_module}
293327
API doc support: ${enable_api_doc}
294328
Static PKCS#11 engine ${enable_static_engine}

src/Makefile.am

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ endif
1414
enginesexec_LTLIBRARIES = pkcs11.la
1515
pkgconfig_DATA = libp11.pc
1616

17+
if LIBP11_OSSL_PROVIDER
18+
EXTRA_DIST += pkcs11prov.rc.in
19+
providersexec_LTLIBRARIES = pkcs11prov.la
20+
endif
21+
1722
SHARED_EXT=@SHARED_EXT@
1823

1924
libp11_la_SOURCES = libpkcs11.c p11_attr.c p11_cert.c p11_err.c p11_ckr.c \
@@ -67,6 +72,9 @@ check-local: $(LTLIBRARIES)
6772

6873
install-exec-hook:
6974
cd '$(DESTDIR)$(enginesexecdir)' && $(LN_S) -f pkcs11$(SHARED_EXT) libpkcs11$(SHARED_EXT)
75+
if LIBP11_OSSL_PROVIDER
76+
cd '$(DESTDIR)$(providersexecdir)' && $(LN_S) -f pkcs11prov$(SHARED_EXT) libpkcs11$(SHARED_EXT)
77+
endif
7078

7179
if WIN32
7280
# def file required for MS users to build library
@@ -79,6 +87,20 @@ RCCOMPILE = $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
7987
$(AM_CPPFLAGS) $(CPPFLAGS)
8088
LTRCCOMPILE = $(LIBTOOL) --mode=compile --tag=RC $(RCCOMPILE)
8189

90+
# openssl PKCS#11 provider
91+
pkcs11prov_la_SOURCES = provider.c util_uri.c pkcs11prov.exports
92+
if WIN32
93+
pkcs11prov_la_SOURCES += pkcs11prov.rc
94+
else
95+
dist_noinst_DATA += pkcs11prov.rc
96+
endif
97+
pkcs11prov_la_CFLAGS = $(AM_CFLAGS) $(OPENSSL_EXTRA_CFLAGS) $(OPENSSL_CFLAGS)
98+
pkcs11prov_la_LIBADD = $(libp11_la_OBJECTS) $(OPENSSL_LIBS)
99+
100+
# We intentionally not version symbols in this module because no
101+
# application links with it. It is dynamically opened.
102+
pkcs11prov_la_LDFLAGS = $(AM_LDFLAGS) -module -shared -shrext $(SHARED_EXT) \
103+
-avoid-version -export-symbols "$(srcdir)/pkcs11prov.exports"
82104
.rc.lo:
83105
$(LTRCCOMPILE) -i "$<" -o "$@"
84106

src/Makefile.mak

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ LIBP11_TARGET = libp11.dll
1212
PKCS11_OBJECTS = eng_front.obj eng_back.obj eng_err.obj util_uri.obj
1313
PKCS11_TARGET = pkcs11.dll
1414

15-
OBJECTS = $(LIBP11_OBJECTS) $(PKCS11_OBJECTS)
16-
TARGETS = $(LIBP11_TARGET) $(PKCS11_TARGET)
15+
PKCS11PROV_OBJECTS = provider.obj util_uri.obj
16+
PKCS11PROV_TARGET = pkcs11prov.dll
17+
18+
OBJECTS = $(LIBP11_OBJECTS) $(PKCS11_OBJECTS) $(PKCS11PROV_OBJECTS)
19+
TARGETS = $(LIBP11_TARGET) $(PKCS11_TARGET) $(PKCS11PROV_TARGET)
1720

1821
all: $(TARGETS)
1922

2023
clean:
21-
del $(OBJECTS) $(TARGETS) *.lib *.def *.res libp11.exp pkcs11.exp
24+
del $(OBJECTS) $(TARGETS) *.lib *.def *.res libp11.exp pkcs11.exp pkcs11prov.exp
2225

2326
.rc.res:
2427
rc /r /fo$@ $<
@@ -40,4 +43,9 @@ $(PKCS11_TARGET): $(PKCS11_OBJECTS) $(LIBP11_OBJECTS) $*.def $*.res
4043
$(PKCS11_OBJECTS) $(LIBP11_OBJECTS) $(LIBS) $*.res
4144
if EXIST $*.dll.manifest mt -manifest $*.dll.manifest -outputresource:$*.dll;2
4245

46+
$(PKCS11PROV_TARGET): $(PKCS11PROV_OBJECTS) $(LIBP11_OBJECTS) pkcs11prov.def $*.res
47+
link $(LINKFLAGS) /dll /def:pkcs11prov.def /implib:pkcs11prov.lib /out:$@ \
48+
$(PKCS11PROV_OBJECTS) $(LIBP11_OBJECTS) $(LIBS) $*.res
49+
if EXIST $*.dll.manifest mt -manifest $*.dll.manifest -outputresource:$*.dll;2
50+
4351
.SUFFIXES: .exports

src/pkcs11prov.exports

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OSSL_provider_init

src/pkcs11prov.rc

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <winresrc.h>
2+
3+
VS_VERSION_INFO VERSIONINFO
4+
FILEVERSION 0,4,14,0
5+
PRODUCTVERSION 0,4,14,0
6+
FILEFLAGSMASK 0x3fL
7+
#ifdef _DEBUG
8+
FILEFLAGS 0x21L
9+
#else
10+
FILEFLAGS 0x20L
11+
#endif
12+
FILEOS 0x40004L
13+
FILETYPE VFT_DLL
14+
FILESUBTYPE 0x0L
15+
BEGIN
16+
BLOCK "StringFileInfo"
17+
BEGIN
18+
BLOCK "040904b0"
19+
BEGIN
20+
VALUE "Comments", "Provided under the terms of the GNU General Public License (LGPLv2.1+).\0"
21+
VALUE "CompanyName", "OpenSC Project\0"
22+
VALUE "FileDescription", "OpenSSL PKCS#11 provider\0"
23+
VALUE "FileVersion", "0.4.14.0\0"
24+
VALUE "InternalName", "libp11\0"
25+
VALUE "LegalCopyright", "OpenSC Project\0"
26+
VALUE "LegalTrademarks", "\0"
27+
VALUE "OriginalFilename", "pkcs11prov.dll\0"
28+
VALUE "PrivateBuild", "\0"
29+
VALUE "ProductName", "libp11\0"
30+
VALUE "ProductVersion", "0.4.14.0\0"
31+
VALUE "SpecialBuild", "\0"
32+
END
33+
END
34+
BLOCK "VarFileInfo"
35+
BEGIN
36+
VALUE "Translation", 0x409, 1200
37+
END
38+
END

src/pkcs11prov.rc.in

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <winresrc.h>
2+
3+
VS_VERSION_INFO VERSIONINFO
4+
FILEVERSION @LIBP11_VERSION_MAJOR@,@LIBP11_VERSION_MINOR@,@LIBP11_VERSION_FIX@,0
5+
PRODUCTVERSION @LIBP11_VERSION_MAJOR@,@LIBP11_VERSION_MINOR@,@LIBP11_VERSION_FIX@,0
6+
FILEFLAGSMASK 0x3fL
7+
#ifdef _DEBUG
8+
FILEFLAGS 0x21L
9+
#else
10+
FILEFLAGS 0x20L
11+
#endif
12+
FILEOS 0x40004L
13+
FILETYPE VFT_DLL
14+
FILESUBTYPE 0x0L
15+
BEGIN
16+
BLOCK "StringFileInfo"
17+
BEGIN
18+
BLOCK "040904b0"
19+
BEGIN
20+
VALUE "Comments", "Provided under the terms of the GNU General Public License (LGPLv2.1+).\0"
21+
VALUE "CompanyName", "OpenSC Project\0"
22+
VALUE "FileDescription", "OpenSSL PKCS#11 provider\0"
23+
VALUE "FileVersion", "@LIBP11_VERSION_MAJOR@.@LIBP11_VERSION_MINOR@.@LIBP11_VERSION_FIX@.0\0"
24+
VALUE "InternalName", "@PACKAGE_NAME@\0"
25+
VALUE "LegalCopyright", "OpenSC Project\0"
26+
VALUE "LegalTrademarks", "\0"
27+
VALUE "OriginalFilename", "pkcs11prov.dll\0"
28+
VALUE "PrivateBuild", "\0"
29+
VALUE "ProductName", "@PACKAGE_NAME@\0"
30+
VALUE "ProductVersion", "@LIBP11_VERSION_MAJOR@.@LIBP11_VERSION_MINOR@.@LIBP11_VERSION_FIX@.0\0"
31+
VALUE "SpecialBuild", "\0"
32+
END
33+
END
34+
BLOCK "VarFileInfo"
35+
BEGIN
36+
VALUE "Translation", 0x409, 1200
37+
END
38+
END

0 commit comments

Comments
 (0)