1 # SPDX-License-Identifier: GPL-2.0
3 # Makefile for the linux kernel signature checking certificates.
6 obj-
$(CONFIG_SYSTEM_TRUSTED_KEYRING
) += system_keyring.o system_certificates.o
7 obj-
$(CONFIG_SYSTEM_BLACKLIST_KEYRING
) += blacklist.o blacklist_hashes.o
8 obj-
$(CONFIG_SYSTEM_REVOCATION_LIST
) += revocation_certificates.o
10 $(obj
)/blacklist_hashes.o
: $(obj
)/blacklist_hash_list
11 CFLAGS_blacklist_hashes.o
:= -I
$(obj
)
13 quiet_cmd_check_and_copy_blacklist_hash_list
= GEN
$@
14 cmd_check_and_copy_blacklist_hash_list
= \
15 $(if
$(CONFIG_SYSTEM_BLACKLIST_HASH_LIST
), \
16 $(AWK
) -f
$(src
)/check-blacklist-hashes.awk
$(CONFIG_SYSTEM_BLACKLIST_HASH_LIST
) >&2; \
17 { cat
$(CONFIG_SYSTEM_BLACKLIST_HASH_LIST
); echo
$(comma
) NULL
; } > $@
, \
20 $(obj
)/blacklist_hash_list
: $(CONFIG_SYSTEM_BLACKLIST_HASH_LIST
) FORCE
21 $(call if_changed
,check_and_copy_blacklist_hash_list
)
23 targets
+= blacklist_hash_list
25 quiet_cmd_extract_certs
= CERT
$@
26 cmd_extract_certs
= $(obj
)/extract-cert
"$(extract-cert-in)" $@
27 extract-cert-in
= $(filter-out $(obj
)/extract-cert
, $(real-prereqs
))
29 $(obj
)/system_certificates.o
: $(obj
)/x509_certificate_list
31 $(obj
)/x509_certificate_list
: $(CONFIG_SYSTEM_TRUSTED_KEYS
) $(obj
)/extract-cert FORCE
32 $(call if_changed
,extract_certs
)
34 targets
+= x509_certificate_list
36 # If module signing is requested, say by allyesconfig, but a key has not been
37 # supplied, then one will need to be generated to make sure the build does not
38 # fail and that the kernel may be used afterwards.
40 # We do it this way rather than having a boolean option for enabling an
41 # external private key, because 'make randconfig' might enable such a
42 # boolean option and we unfortunately can't make it depend on !RANDCONFIG.
43 ifeq ($(CONFIG_MODULE_SIG_KEY
),certs
/signing_key.pem
)
45 keytype-
$(CONFIG_MODULE_SIG_KEY_TYPE_ECDSA
) := -newkey ec
-pkeyopt ec_paramgen_curve
:secp384r1
47 quiet_cmd_gen_key
= GENKEY
$@
48 cmd_gen_key
= openssl req
-new
-nodes
-utf8
-$(CONFIG_MODULE_SIG_HASH
) -days
36500 \
49 -batch
-x509
-config
$< \
50 -outform PEM
-out
$@
-keyout
$@
$(keytype-y
) 2>&1
52 $(obj
)/signing_key.pem
: $(obj
)/x509.genkey FORCE
53 $(call if_changed
,gen_key
)
55 targets
+= signing_key.pem
57 quiet_cmd_copy_x509_config
= COPY
$@
58 cmd_copy_x509_config
= cat
$(src
)/default_x509.genkey
> $@
60 # You can provide your own config file. If not present, copy the default one.
62 $(call cmd
,copy_x509_config
)
64 endif # CONFIG_MODULE_SIG_KEY
66 $(obj
)/system_certificates.o
: $(obj
)/signing_key.x509
68 PKCS11_URI
:= $(filter pkcs11
:%, $(CONFIG_MODULE_SIG_KEY
))
70 $(obj
)/signing_key.x509
: extract-cert-in
:= $(PKCS11_URI
)
73 $(obj
)/signing_key.x509
: $(filter-out $(PKCS11_URI
),$(CONFIG_MODULE_SIG_KEY
)) $(obj
)/extract-cert FORCE
74 $(call if_changed
,extract_certs
)
76 targets
+= signing_key.x509
78 $(obj
)/revocation_certificates.o
: $(obj
)/x509_revocation_list
80 $(obj
)/x509_revocation_list
: $(CONFIG_SYSTEM_REVOCATION_KEYS
) $(obj
)/extract-cert FORCE
81 $(call if_changed
,extract_certs
)
83 targets
+= x509_revocation_list
85 hostprogs
:= extract-cert
87 HOSTCFLAGS_extract-cert.o
= $(shell $(HOSTPKG_CONFIG
) --cflags libcrypto
2> /dev
/null
) -I
$(srctree
)/scripts
88 HOSTLDLIBS_extract-cert
= $(shell $(HOSTPKG_CONFIG
) --libs libcrypto
2> /dev
/null || echo
-lcrypto
)