c9deb184b0
PKCS7 signing format is used by OpenPOWER Key Management, which is using mbedtls as its crypto library. This patch adds the limited support of pkcs7 parser and verification to the mbedtls. The limitations are: * Only signed data is supported. * CRLs are not currently handled. * Single signer is supported. Signed-off-by: Daniel Axtens <dja@axtens.net> Signed-off-by: Eric Richter <erichte@linux.ibm.com> Signed-off-by: Nayna Jain <nayna@linux.ibm.com>
355 lines
8.8 KiB
Makefile
355 lines
8.8 KiB
Makefile
|
|
# Also see "include/mbedtls/mbedtls_config.h"
|
|
|
|
CFLAGS ?= -O2
|
|
WARNING_CFLAGS ?= -Wall -Wextra -Wformat=2 -Wno-format-nonliteral
|
|
LDFLAGS ?=
|
|
|
|
# Include ../include for public headers and . for private headers.
|
|
# Note that . needs to be included explicitly for the sake of library
|
|
# files that are not in the /library directory (which currently means
|
|
# under /3rdparty).
|
|
LOCAL_CFLAGS = $(WARNING_CFLAGS) -I. -I../include -D_FILE_OFFSET_BITS=64
|
|
LOCAL_LDFLAGS =
|
|
|
|
ifdef DEBUG
|
|
LOCAL_CFLAGS += -g3
|
|
endif
|
|
|
|
# MicroBlaze specific options:
|
|
# CFLAGS += -mno-xl-soft-mul -mxl-barrel-shift
|
|
|
|
# To compile on Plan9:
|
|
# CFLAGS += -D_BSD_EXTENSION
|
|
|
|
PERL ?= perl
|
|
|
|
ifdef WINDOWS
|
|
PYTHON ?= python
|
|
else
|
|
PYTHON ?= $(shell if type python3 >/dev/null 2>/dev/null; then echo python3; else echo python; fi)
|
|
endif
|
|
|
|
# if were running on Windows build for Windows
|
|
ifdef WINDOWS
|
|
WINDOWS_BUILD=1
|
|
else ifeq ($(shell uname -s),Darwin)
|
|
ifeq ($(AR),ar)
|
|
APPLE_BUILD ?= 1
|
|
endif
|
|
endif
|
|
|
|
# To compile as a shared library:
|
|
ifdef SHARED
|
|
# all code is position-indep with mingw, avoid warning about useless flag
|
|
ifndef WINDOWS_BUILD
|
|
LOCAL_CFLAGS += -fPIC -fpic
|
|
endif
|
|
endif
|
|
|
|
SOEXT_TLS?=so.18
|
|
SOEXT_X509?=so.4
|
|
SOEXT_CRYPTO?=so.12
|
|
|
|
# Set AR_DASH= (empty string) to use an ar implementation that does not accept
|
|
# the - prefix for command line options (e.g. llvm-ar)
|
|
AR_DASH ?= -
|
|
|
|
ARFLAGS = $(AR_DASH)src
|
|
ifdef APPLE_BUILD
|
|
ifneq ($(APPLE_BUILD),0)
|
|
ARFLAGS = $(AR_DASH)Src
|
|
RLFLAGS = -no_warning_for_no_symbols -c
|
|
RL ?= ranlib
|
|
endif
|
|
endif
|
|
|
|
DLEXT ?= so
|
|
ifdef WINDOWS_BUILD
|
|
# Windows shared library extension:
|
|
DLEXT = dll
|
|
else ifdef APPLE_BUILD
|
|
ifneq ($(APPLE_BUILD),0)
|
|
# Mac OS X shared library extension:
|
|
DLEXT = dylib
|
|
endif
|
|
endif
|
|
|
|
OBJS_CRYPTO= \
|
|
aes.o \
|
|
aesni.o \
|
|
aria.o \
|
|
asn1parse.o \
|
|
asn1write.o \
|
|
base64.o \
|
|
bignum.o \
|
|
bignum_core.o \
|
|
bignum_mod.o \
|
|
bignum_mod_raw.o \
|
|
camellia.o \
|
|
ccm.o \
|
|
chacha20.o \
|
|
chachapoly.o \
|
|
cipher.o \
|
|
cipher_wrap.o \
|
|
cmac.o \
|
|
constant_time.o \
|
|
ctr_drbg.o \
|
|
des.o \
|
|
dhm.o \
|
|
ecdh.o \
|
|
ecdsa.o \
|
|
ecjpake.o \
|
|
ecp.o \
|
|
ecp_curves.o \
|
|
entropy.o \
|
|
entropy_poll.o \
|
|
error.o \
|
|
gcm.o \
|
|
hash_info.o \
|
|
hkdf.o \
|
|
hmac_drbg.o \
|
|
md.o \
|
|
md5.o \
|
|
memory_buffer_alloc.o \
|
|
mps_reader.o \
|
|
mps_trace.o \
|
|
nist_kw.o \
|
|
oid.o \
|
|
padlock.o \
|
|
pem.o \
|
|
pk.o \
|
|
pk_wrap.o \
|
|
pkcs12.o \
|
|
pkcs5.o \
|
|
pkparse.o \
|
|
pkwrite.o \
|
|
platform.o \
|
|
platform_util.o \
|
|
poly1305.o \
|
|
psa_crypto.o \
|
|
psa_crypto_aead.o \
|
|
psa_crypto_cipher.o \
|
|
psa_crypto_client.o \
|
|
psa_crypto_driver_wrappers.o \
|
|
psa_crypto_ecp.o \
|
|
psa_crypto_hash.o \
|
|
psa_crypto_mac.o \
|
|
psa_crypto_rsa.o \
|
|
psa_crypto_se.o \
|
|
psa_crypto_slot_management.o \
|
|
psa_crypto_storage.o \
|
|
psa_its_file.o \
|
|
ripemd160.o \
|
|
rsa.o \
|
|
rsa_alt_helpers.o \
|
|
sha1.o \
|
|
sha256.o \
|
|
sha512.o \
|
|
ssl_debug_helpers_generated.o \
|
|
threading.o \
|
|
timing.o \
|
|
version.o \
|
|
version_features.o \
|
|
# This line is intentionally left blank
|
|
|
|
include ../3rdparty/Makefile.inc
|
|
LOCAL_CFLAGS+=$(THIRDPARTY_INCLUDES)
|
|
OBJS_CRYPTO+=$(THIRDPARTY_CRYPTO_OBJECTS)
|
|
|
|
OBJS_X509= \
|
|
x509.o \
|
|
x509_create.o \
|
|
x509_crl.o \
|
|
x509_crt.o \
|
|
x509_csr.o \
|
|
x509write_crt.o \
|
|
x509write_csr.o \
|
|
pkcs7.o \
|
|
# This line is intentionally left blank
|
|
|
|
OBJS_TLS= \
|
|
debug.o \
|
|
net_sockets.o \
|
|
ssl_cache.o \
|
|
ssl_ciphersuites.o \
|
|
ssl_client.o \
|
|
ssl_cookie.o \
|
|
ssl_msg.o \
|
|
ssl_ticket.o \
|
|
ssl_tls.o \
|
|
ssl_tls12_client.o \
|
|
ssl_tls12_server.o \
|
|
ssl_tls13_keys.o \
|
|
ssl_tls13_client.o \
|
|
ssl_tls13_server.o \
|
|
ssl_tls13_generic.o \
|
|
# This line is intentionally left blank
|
|
|
|
.SILENT:
|
|
|
|
.PHONY: all static shared clean
|
|
|
|
ifndef SHARED
|
|
all: static
|
|
else
|
|
all: shared static
|
|
endif
|
|
|
|
static: libmbedcrypto.a libmbedx509.a libmbedtls.a
|
|
|
|
shared: libmbedcrypto.$(DLEXT) libmbedx509.$(DLEXT) libmbedtls.$(DLEXT)
|
|
|
|
# Windows builds under Mingw can fail if make tries to create archives in the same
|
|
# directory at the same time - see https://bugs.launchpad.net/gcc-arm-embedded/+bug/1848002.
|
|
# This forces builds of the .a files to be serialised.
|
|
ifdef WINDOWS
|
|
libmbedtls.a: | libmbedx509.a
|
|
libmbedx509.a: | libmbedcrypto.a
|
|
endif
|
|
|
|
# tls
|
|
libmbedtls.a: $(OBJS_TLS)
|
|
echo " AR $@"
|
|
$(AR) $(ARFLAGS) $@ $(OBJS_TLS)
|
|
ifdef APPLE_BUILD
|
|
ifneq ($(APPLE_BUILD),0)
|
|
echo " RL $@"
|
|
$(RL) $(RLFLAGS) $@
|
|
endif
|
|
endif
|
|
|
|
libmbedtls.$(SOEXT_TLS): $(OBJS_TLS) libmbedx509.so
|
|
echo " LD $@"
|
|
$(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_TLS) -L. -lmbedx509 -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
ifneq ($(SOEXT_TLS),so)
|
|
libmbedtls.so: libmbedtls.$(SOEXT_TLS)
|
|
echo " LN $@ -> $<"
|
|
ln -sf $< $@
|
|
endif
|
|
|
|
libmbedtls.dylib: $(OBJS_TLS) libmbedx509.dylib
|
|
echo " LD $@"
|
|
$(CC) -dynamiclib -o $@ $(OBJS_TLS) -L. -lmbedx509 -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
libmbedtls.dll: $(OBJS_TLS) libmbedx509.dll
|
|
echo " LD $@"
|
|
$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_TLS) -lws2_32 -lwinmm -lgdi32 -L. -lmbedx509 -lmbedcrypto -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
# x509
|
|
libmbedx509.a: $(OBJS_X509)
|
|
echo " AR $@"
|
|
$(AR) $(ARFLAGS) $@ $(OBJS_X509)
|
|
ifdef APPLE_BUILD
|
|
ifneq ($(APPLE_BUILD),0)
|
|
echo " RL $@"
|
|
$(RL) $(RLFLAGS) $@
|
|
endif
|
|
endif
|
|
|
|
libmbedx509.$(SOEXT_X509): $(OBJS_X509) libmbedcrypto.so
|
|
echo " LD $@"
|
|
$(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_X509) -L. -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
ifneq ($(SOEXT_X509),so)
|
|
libmbedx509.so: libmbedx509.$(SOEXT_X509)
|
|
echo " LN $@ -> $<"
|
|
ln -sf $< $@
|
|
endif
|
|
|
|
libmbedx509.dylib: $(OBJS_X509) libmbedcrypto.dylib
|
|
echo " LD $@"
|
|
$(CC) -dynamiclib -o $@ $(OBJS_X509) -L. -lmbedcrypto $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
libmbedx509.dll: $(OBJS_X509) libmbedcrypto.dll
|
|
echo " LD $@"
|
|
$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_X509) -lws2_32 -lwinmm -lgdi32 -L. -lmbedcrypto -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
# crypto
|
|
libmbedcrypto.a: $(OBJS_CRYPTO)
|
|
echo " AR $@"
|
|
$(AR) $(ARFLAGS) $@ $(OBJS_CRYPTO)
|
|
ifdef APPLE_BUILD
|
|
ifneq ($(APPLE_BUILD),0)
|
|
echo " RL $@"
|
|
$(RL) $(RLFLAGS) $@
|
|
endif
|
|
endif
|
|
|
|
libmbedcrypto.$(SOEXT_CRYPTO): $(OBJS_CRYPTO)
|
|
echo " LD $@"
|
|
$(CC) -shared -Wl,-soname,$@ -o $@ $(OBJS_CRYPTO) $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
ifneq ($(SOEXT_CRYPTO),so)
|
|
libmbedcrypto.so: libmbedcrypto.$(SOEXT_CRYPTO)
|
|
echo " LN $@ -> $<"
|
|
ln -sf $< $@
|
|
endif
|
|
|
|
libmbedcrypto.dylib: $(OBJS_CRYPTO)
|
|
echo " LD $@"
|
|
$(CC) -dynamiclib -o $@ $(OBJS_CRYPTO) $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
libmbedcrypto.dll: $(OBJS_CRYPTO)
|
|
echo " LD $@"
|
|
$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_CRYPTO) -lws2_32 -lwinmm -lgdi32 -static-libgcc $(LOCAL_LDFLAGS) $(LDFLAGS)
|
|
|
|
.c.o:
|
|
echo " CC $<"
|
|
$(CC) $(LOCAL_CFLAGS) $(CFLAGS) -o $@ -c $<
|
|
|
|
.PHONY: generated_files
|
|
GENERATED_FILES = \
|
|
error.c version_features.c \
|
|
ssl_debug_helpers_generated.c \
|
|
psa_crypto_driver_wrappers.c
|
|
generated_files: $(GENERATED_FILES)
|
|
|
|
error.c: ../scripts/generate_errors.pl
|
|
error.c: ../scripts/data_files/error.fmt
|
|
error.c: $(filter-out %config%,$(wildcard ../include/mbedtls/*.h))
|
|
error.c:
|
|
echo " Gen $@"
|
|
$(PERL) ../scripts/generate_errors.pl
|
|
|
|
ssl_debug_helpers_generated.c: ../scripts/generate_ssl_debug_helpers.py
|
|
ssl_debug_helpers_generated.c: $(filter-out %config%,$(wildcard ../include/mbedtls/*.h))
|
|
ssl_debug_helpers_generated.c:
|
|
echo " Gen $@"
|
|
$(PYTHON) ../scripts/generate_ssl_debug_helpers.py --mbedtls-root .. .
|
|
|
|
version_features.c: ../scripts/generate_features.pl
|
|
version_features.c: ../scripts/data_files/version_features.fmt
|
|
## The generated file only depends on the options that are present in mbedtls_config.h,
|
|
## not on which options are set. To avoid regenerating this file all the time
|
|
## when switching between configurations, don't declare mbedtls_config.h as a
|
|
## dependency. Remove this file from your working tree if you've just added or
|
|
## removed an option in mbedtls_config.h.
|
|
#version_features.c: ../include/mbedtls/mbedtls_config.h
|
|
version_features.c:
|
|
echo " Gen $@"
|
|
$(PERL) ../scripts/generate_features.pl
|
|
|
|
psa_crypto_driver_wrappers.c: ../scripts/generate_driver_wrappers.py
|
|
psa_crypto_driver_wrappers.c: ../scripts/data_files/driver_templates/psa_crypto_driver_wrappers.c.jinja
|
|
psa_crypto_driver_wrappers.c:
|
|
echo " Gen $@"
|
|
$(PYTHON) ../scripts/generate_driver_wrappers.py
|
|
|
|
clean:
|
|
ifndef WINDOWS
|
|
rm -f *.o libmbed*
|
|
rm -f $(THIRDPARTY_CRYPTO_OBJECTS)
|
|
else
|
|
if exist *.o del /Q /F *.o
|
|
if exist libmbed* del /Q /F libmbed*
|
|
del /Q /F del_errors_out_if_the_file_list_is_empty_but_not_if_a_file_does_not_exist $(subst /,\,$(THIRDPARTY_CRYPTO_OBJECTS))
|
|
endif
|
|
|
|
neat: clean
|
|
ifndef WINDOWS
|
|
rm -f $(GENERATED_FILES)
|
|
else
|
|
for %f in ($(subst /,\,$(GENERATED_FILES))) if exist %f del /Q /F %f
|
|
endif
|