1
0
mirror of https://github.com/wolfSSL/wolfssl.git synced 2026-10-24 04:09:07 +03:00
Files
wolfssl/zephyr/Kconfig
Tobias Frauenschläger f8a93aef94 zephyr: let the EdgeLock port be configured with a settings file
WOLFSSL_ELS_PKC depended on !WOLFSSL_HAS_SETTINGS_FILE, which read the option
as nothing but a writer of user_settings.h. It does two other things a
settings file cannot express: select MCUX_ELS_PKC, which puts the vendor
headers on the include path, and select WOLFSSL_SYS_INIT, which brings the
subsystem up at boot. Drop the dependency so a settings-file build can turn
the port on, and keep the crypto-affecting defines out of that build, since
injecting WOLF_CRYPTO_CB behind the user's back changes struct layouts. A
settings file that leaves WOLFSSL_ELS_PKC or WOLF_CRYPTO_CB undefined now fails
the build instead of silently compiling the port to nothing.
2026-10-23 13:18:02 +02:00

759 lines
26 KiB
Plaintext

# Kconfig - Cryptography primitive options for wolfSSL
#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
config ZEPHYR_WOLFSSL_MODULE
bool
config WOLFSSL_PROMPTLESS
bool
help
Symbol to disable the prompt for WOLFSSL selection.
This symbol may be used internally in a Kconfig tree to hide the
wolfSSL menu prompt and instead handle the selection of WOLFSSL from
dependent sub-configurations and thus prevent stuck symbol behavior.
menuconfig WOLFSSL
bool "wolfSSL Support" if !WOLFSSL_PROMPTLESS
help
This option enables the wolfSSL cryptography library.
if WOLFSSL
choice WOLFSSL_IMPLEMENTATION
prompt "Select implementation"
default WOLFSSL_BUILTIN
config WOLFSSL_BUILTIN
bool "Enable wolfSSL integrated sources"
help
Link with local wolfSSL sources instead of external library.
config WOLFSSL_LIBRARY
bool "Enable wolfSSL external library"
help
This option enables wolfSSL library.
endchoice
config WOLFSSL_SETTINGS_FILE
string "wolfSSL settings file"
depends on WOLFSSL_BUILTIN
help
Use a specific wolfSSL settings file. The default config file
file can be tweaked with Kconfig. The default settings is
suitable to communicate with majority of HTTPS servers on the Internet,
but has relatively many features enabled. To optimize resources for
special TLS usage, use available Kconfig settings, or select an
alternative config.
config WOLFSSL_HAS_SETTINGS_FILE
bool
default y if WOLFSSL_SETTINGS_FILE != ""
help
Set when the application supplies its own wolfSSL settings file.
That file is authoritative, so every option that works by writing a
define into the module's user_settings.h depends on this being clear.
config WOLFCRYPT_FIPS
bool "wolfCrypt FIPS support"
depends on WOLFSSL_BUILTIN && !WOLFSSL_HAS_SETTINGS_FILE
select STATIC_INIT_GNU # the power-on self test is a C constructor
help
Enable the wolfCrypt FIPS 140-3 module boundary. Requires the wolfSSL
FIPS bundle (fips.c, fips_test.c, wolfcrypt_first.c, wolfcrypt_last.c)
dropped into wolfcrypt/src/ - the CMake FIPS-boundary block compiles them.
Select the version that matches the bundle under "wolfCrypt FIPS version".
choice
prompt "wolfCrypt FIPS version"
depends on WOLFCRYPT_FIPS
default WOLFCRYPT_FIPS_V6
help
Select the FIPS module version. It must match the dropped-in bundle: the
in-core integrity check and the in-boundary algorithm set are keyed to the
version, so a mismatch fails the power-on self test. Values mirror
configure.ac's --enable-fips=VERSION mapping.
config WOLFCRYPT_FIPS_V2
bool "FIPS 140-2 (Cert #3389)"
help
Legacy FIPS 140-2 validated module (HAVE_FIPS_VERSION 2.0.0).
config WOLFCRYPT_FIPS_V5
bool "FIPS 140-3 (Cert #4718)"
help
wolfCrypt FIPS 140-3 validated module, Certificate #4718 (version 5.2.1).
config WOLFCRYPT_FIPS_V6
bool "FIPS 140-3 (SRTP-KDF full submission)"
help
wolfCrypt FIPS 140-3 SRTP-KDF full submission (version 6.0.0).
config WOLFCRYPT_FIPS_V7
bool "FIPS 140-3 (v7 full submission)"
help
wolfCrypt FIPS 140-3 v7 full submission (version 7.0.0).
config WOLFCRYPT_FIPS_READY
bool "FIPS Ready (in-tree, uncertified)"
help
FIPS-Ready in-tree sources, feature locked (version 7.0.0 - kept one major
ahead of the latest tagged release, as configure.ac does). Carries the
newest in-boundary algorithms but is not yet NIST-certified; use it for
pre-certification integration.
endchoice
config WOLFSSL_CRYPTO_CB
bool "wolfCrypt crypto callbacks"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable the crypto callback interface (WOLF_CRYPTO_CB), through which an
application registers a device with wc_CryptoCb_RegisterDevice() and
routes wolfCrypt operations to it. Also enables key references
(WOLF_PRIVATE_KEY_ID), which is what lets a TLS key live on that device
instead of in the application's memory.
config WOLFSSL_SYS_INIT
bool "Initialize wolfSSL from a SYS_INIT hook"
depends on WOLFSSL_BUILTIN
help
Call wolfSSL_Init() at boot, from POST_KERNEL, instead of leaving it
to whichever library call happens to run first. A wolfCrypt-only
build calls wolfCrypt_Init() instead, since wolfSSL_Init() is not
compiled without the TLS layer.
wolfCrypt initializes and seeds its DRBG lazily either way, so this
matters only when initialization also brings up a peripheral. A port
that does selects this itself; a settings-file build gets no such
select and has to set it by hand.
config WOLFSSL_ELS_PKC
bool "NXP EdgeLock (ELS) hardware offload"
depends on WOLFSSL_BUILTIN
depends on !BUILD_WITH_TFM
depends on SOC_SERIES_RW6XX
select MCUX_ELS_PKC
select WOLFSSL_SYS_INIT
help
Route wolfCrypt operations to the on-chip EdgeLock secure subsystem
through the crypto callback interface. Operations the hardware does
not implement fall back to software.
Selects MCUX_ELS_PKC, which is what puts the vendor headers on the
include path, and WOLFSSL_SYS_INIT, which brings the subsystem up at
boot. Neither is expressible in a settings file, so this option stays
available there; what it will not do is write WOLFSSL_ELS_PKC and
WOLF_CRYPTO_CB into a build whose settings file is authoritative.
Both go in the settings file, and user_settings.h fails the build if
either is missing.
Not selectable in a TF-M build, where els_pkc does not create its
McuxElsPkc CMake target.
Restricted to RW6XX because els_pkc exports src/platforms/<soc>, where
mcux_els.h lives, only under CONFIG_SOC_SERIES_RW6XX.
config WOLFSSL_CRYPTO_ONLY
bool "Build wolfCrypt only (no TLS layer)"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on WOLFSSL_BUILTIN
help
Define WOLFCRYPT_ONLY: compile only the wolfCrypt crypto library and
leave the wolfSSL TLS layer out of the build.
config WOLFSSL_SINGLE_THREADED
bool "wolfCrypt single-threaded"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on WOLFSSL_BUILTIN
default y if !MULTITHREADING
help
Define SINGLE_THREADED: build wolfCrypt without internal locking, for a
single-threaded system or when the caller serializes all access. Defaults
on when the kernel has no threading (!MULTITHREADING), so consumers such
as wolfPSA do not need to select it themselves.
config WOLFSSL_TLS_VERSION_1_2
bool "TLS 1.2"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable TLS 1.2. Clearing this and WOLFSSL_TLS_VERSION_1_3 leaves the
build with no TLS version at all, which only makes sense alongside
WOLFSSL_CRYPTO_ONLY.
config WOLFSSL_TLS_VERSION_1_3
bool "TLS 1.3"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable TLS 1.3 (WOLFSSL_TLS13).
config WOLFSSL_DTLS
bool "wolfSSL DTLS support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable DTLS support
config WOLFSSL_ALPN
bool "wolfSSL ALPN support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable ALPN support
config WOLFSSL_PSK
bool "wolfSSL PSK support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable PSK support
config WOLFSSL_MLKEM
bool "wolfSSL PQC ML-KEM support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable PQC ML-KEM support for Key Exchange
config WOLFSSL_MLDSA
bool "wolfSSL PQC ML-DSA support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable PQC ML-DSA (Dilithium) signatures.
config WOLFSSL_LMS
bool "wolfSSL LMS/HSS hash-based signatures"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable LMS/HSS stateful hash-based signature verification (verify-only).
config WOLFSSL_XMSS
bool "wolfSSL XMSS/XMSS^MT hash-based signatures"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable XMSS/XMSS^MT stateful hash-based signature verification (verify-only).
config WOLFSSL_FALCON
bool "wolfSSL PQC Falcon signatures"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable PQC Falcon (FN-DSA) signatures.
config WOLFSSL_RSA
bool "wolfCrypt RSA support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable RSA (define RSA support; NO_RSA when off).
config WOLFSSL_ECC
bool "wolfCrypt ECC support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable ECC (HAVE_ECC). At least one curve must be selected below - a
build with none is rejected, because wolfCrypt has no curve table to
size its types from.
if WOLFSSL_ECC
config WOLFSSL_ECC_256
bool "SECP256R1 (P-256)"
default y
help
Enable the NIST P-256 curve. This is the curve TLS uses by default, so
leave it on unless you know the whole application avoids it.
config WOLFSSL_ECC_384
bool "SECP384R1 (P-384)"
help
Enable the NIST P-384 curve (HAVE_ECC384 and the SP implementation
behind WOLFSSL_SP_384).
Enabling a curve larger than P-256 raises MAX_ECC_BYTES, so every ECC
key, signature buffer and temporary grows accordingly - including on the
stack. Size thread stacks for the largest curve selected.
config WOLFSSL_ECC_512
bool "512-bit curves"
help
Enable the 512-bit curve size (HAVE_ECC512). There is no NIST curve at
this size - it exists for brainpoolP512r1, so it is only useful together
with WOLFSSL_ECC_BRAINPOOL. SP math has no implementation at this size,
so selecting it forces the generic SP variant.
config WOLFSSL_ECC_521
bool "SECP521R1 (P-521)"
help
Enable the NIST P-521 curve (HAVE_ECC521 and the SP implementation
behind WOLFSSL_SP_521). This sets the largest MAX_ECC_BYTES of any
supported curve.
Its SP implementation is also the most stack-hungry: a thread signing on
P-521 overflowed a 16 KB stack during bring-up and needed roughly three
times that. Raise CONFIG_MAIN_STACK_SIZE and any relevant thread stack,
or set WOLFSSL_SMALL_STACK to move the intermediates onto the heap.
config WOLFSSL_ECC_BRAINPOOL
bool "Brainpool curves"
help
Enable the Brainpool curve family (HAVE_ECC_BRAINPOOL). Each curve also
needs its matching size enabled: brainpoolP256r1 needs WOLFSSL_ECC_256,
brainpoolP384r1 needs WOLFSSL_ECC_384 and brainpoolP512r1 needs
WOLFSSL_ECC_512.
Implies WOLFSSL_CUSTOM_CURVES, which wolfCrypt requires for any
non-prime-field curve, and that moves the whole build onto the generic
SP variant - slower and larger on the common curves, which is why this
is opt-in.
endif # WOLFSSL_ECC
# Selected by consumers that must sign an all-zero digest, such as wolfPSA.
# No depends on: settings-file builds select it too.
config WOLFSSL_ECC_ALLOW_ZERO_HASH
bool
# Thumb2 needs UBFX and LDRD, so ARMv6-M and ARMv8-M baseline keep the C code
# and take only the SP speedup.
config WOLFCRYPT_ARM_SYMMETRIC_ASM
bool
default y if WOLFCRYPT_ASM && (ARM64 || ARMV7_M_ARMV8_M_MAINLINE || \
(ARM && !CPU_CORTEX_M))
# Not under FIPS v2 or v5, whose pinned aes.c has neither backend, nor with the
# Arm assembly, which indexes its AES and GHASH tables with secret data.
config WOLFSSL_AES_CONSTANT_TIME_AVAILABLE
bool
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y if !WOLFCRYPT_FIPS_V2 && !WOLFCRYPT_FIPS_V5 && \
!WOLFCRYPT_ARM_SYMMETRIC_ASM
config WOLFSSL_AES_CONSTANT_TIME
bool "Constant-time AES software backend"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on WOLFSSL_AES_CONSTANT_TIME_AVAILABLE
help
Build the AES software core so that no memory access depends on a
secret.
wolfCrypt's default core indexes precomputed tables with key- and
state-derived bytes. On a part with a data cache that access pattern is
observable, so a caller that must be constant time - the PSA Crypto API
is one - has to turn this on. On a part with no data cache there is
nothing to observe and the default core is the right choice.
A subsystem that requires the guarantee defaults this on and leaves the
implementation below to the target.
It also restricts AES-GCM to the constant-time GHASH below. It has no
effect when the build uses a hardware AES engine, which compiles no
software table.
Unavailable where WOLFCRYPT_ASM builds the Arm symmetric assembly
(ARMv7-M and ARMv8-M mainline, 32-bit Cortex-A/R, AArch64): that
assembly replaces both backends with table lookups indexed by secret
data. That includes AArch64 parts with the crypto extension, whose
hardware AES is constant time but which Kconfig cannot tell apart.
Unavailable under FIPS v2 and v5, whose pinned aes.c predates both
backends and would ignore the macro rather than fail: a build would come
out with the table core and no sign that the request was dropped. It does
take effect from FIPS v6 on, where it changes the in-core integrity
digest, so the module must be rehashed and is no longer the validated
binary.
choice WOLFSSL_AES_CONSTANT_TIME_IMPL
prompt "Constant-time AES implementation"
depends on WOLFSSL_AES_CONSTANT_TIME
default WOLFSSL_AES_TOUCH_LINES
config WOLFSSL_AES_TOUCH_LINES
bool "Touch every cache line of the table"
help
Define WOLFSSL_AES_TOUCH_LINES. Every table access reads all cache lines
of the table, so the access pattern carries no secret. sizeof(Aes) is
unchanged, which is what makes this the affordable choice on a
constrained target.
config WOLFSSL_AES_BITSLICED
bool "Bitsliced core"
help
Define WC_AES_BITSLICED. Holds the state as bit slices across machine
words, so there is no table and no secret-indexed load at all.
It grows every Aes and Cmac quadratically in the word size, so set
WOLFSSL_AES_BS_WORD_SIZE for the target before selecting it.
endchoice
config WOLFSSL_AES_BS_WORD_SIZE
int "Bitsliced AES word size"
depends on WOLFSSL_AES_BITSLICED
default 16
help
Define WC_AES_BS_WORD_SIZE: bits processed per round, and the term that
dominates the size of every Aes and Cmac. The bitsliced key schedule
costs 30 * WC_AES_BS_WORD_SIZE^2 bytes, so measured against this
module's own defaults:
8 2,248 byte Aes 32 31,048 byte Aes
16 8,008 byte Aes 64 123,208 byte Aes
Only 8, 16, 32 and 64 are implemented; wolfCrypt rejects anything else.
wolfCrypt itself defaults to 64 on a 64-bit build. 16 is the default
here because these contexts are allocated per live operation, and 64
puts a single AES operation beyond the whole heap of a typical part.
choice WOLFSSL_AES_GCM_GHASH
prompt "AES-GCM GHASH implementation"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default WOLFSSL_GHASH_SMALL if WOLFCRYPT_FIPS_V2 || WOLFCRYPT_FIPS_V5
default WOLFSSL_GHASH_TABLE_4BIT if WOLFCRYPT_FIPS_V7 || WOLFCRYPT_FIPS_READY
default WOLFSSL_GHASH_CONSTANT_TIME if !WOLFCRYPT_ARM_SYMMETRIC_ASM
default WOLFSSL_GHASH_TABLE_4BIT
help
Under FIPS the GHASH code sits inside the module boundary, so changing
this changes the in-core integrity digest and the module must be
rehashed.
config WOLFSSL_GHASH_CONSTANT_TIME
bool "Bitwise multiply, constant time"
depends on !WOLFCRYPT_ARM_SYMMETRIC_ASM && !WOLFCRYPT_FIPS_V2
help
Leave the GCM method unset, which builds wolfCrypt's masked bitwise
multiply: no branch and no memory access depends on the hash subkey or
the data, and no table is stored. The slowest option. Under FIPS
v5 this also defines AES_GCM_GMULT_CT, which that module's aes.c needs
for the masked form.
Not available where WOLFCRYPT_ASM builds the Arm symmetric assembly,
which has no constant-time bitwise GHASH; the 4-bit table is the
default there, at 512 bytes per Aes. Not available under FIPS v2,
whose aes.c has only the branching form.
config WOLFSSL_GHASH_SMALL
bool "Bitwise multiply, branching (GCM_SMALL)"
depends on WOLFCRYPT_FIPS || WOLFCRYPT_ARM_SYMMETRIC_ASM
depends on !WOLFSSL_AES_CONSTANT_TIME
help
Define GCM_SMALL, the module's method before this choice existed. Lets a
validated FIPS build keep its boundary object, and gives the Arm
symmetric assembly a GHASH with no table. It branches on the hash
subkey, so it is not constant time.
config WOLFSSL_GHASH_TABLE_4BIT
bool "4-bit table"
depends on !WOLFSSL_AES_CONSTANT_TIME && !WOLFCRYPT_FIPS_V2
help
Define GCM_TABLE_4BIT, the method configure builds by default. Adds a
512-byte table to every Aes and indexes it with secret data, so it is
not constant time on a part with a data cache. Not available under FIPS
v2, whose aes.c predates it.
config WOLFSSL_GHASH_TABLE_8BIT
bool "8-bit table"
depends on !WOLFSSL_AES_CONSTANT_TIME
help
Define GCM_TABLE. Faster than the 4-bit table, at 4 KB per Aes, and
likewise indexed with secret data.
endchoice
config WOLFSSL_CHACHA_POLY
bool "wolfCrypt ChaCha20-Poly1305 support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable ChaCha20 and Poly1305 (HAVE_CHACHA, HAVE_POLY1305).
config WOLFSSL_CURVE25519
bool "wolfCrypt Curve25519 (X25519) support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default n
help
Enable X25519 key agreement (HAVE_CURVE25519).
config WOLFSSL_ED25519
bool "wolfCrypt Ed25519 support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y if WOLFSSL_CURVE25519
help
Enable Ed25519 signatures (HAVE_ED25519). Defaults on with
WOLFSSL_CURVE25519, which used to enable both.
config WOLFSSL_CURVE448
bool "wolfCrypt Curve448 (X448) support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable X448 key agreement (HAVE_CURVE448).
config WOLFSSL_ED448
bool "wolfCrypt Ed448 support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on !WOLFCRYPT_FIPS_V2 && !WOLFCRYPT_FIPS_V5
default y if WOLFSSL_CURVE448
help
Enable Ed448 signatures (HAVE_ED448), together with the SHAKE-256
that Ed448 hashes with.
config WOLFSSL_SNI
bool "wolfSSL Server Name Indication (SNI)"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable TLS Server Name Indication (HAVE_SNI).
config WOLFSSL_POST_HANDSHAKE_AUTH
bool "wolfSSL TLS 1.3 post-handshake authentication"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on WOLFSSL_TLS_VERSION_1_3
help
Enable TLS 1.3 post-handshake client authentication
(WOLFSSL_POST_HANDSHAKE_AUTH).
config WOLFSSL_SESSION_CACHE
bool "wolfSSL TLS session cache"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable the TLS session cache (SMALL_SESSION_CACHE; NO_SESSION_CACHE off).
config WOLFSSL_OCSP
bool "wolfSSL OCSP certificate revocation checking"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable OCSP (HAVE_OCSP).
config WOLFSSL_OCSP_STAPLING
bool "wolfSSL OCSP stapling"
depends on WOLFSSL_OCSP
help
Enable the TLS certificate status request extension
(HAVE_CERTIFICATE_STATUS_REQUEST), with which a client asks the server
to staple an OCSP response for its own certificate to the handshake.
config WOLFSSL_SESSION_TICKET
bool "wolfSSL TLS session tickets"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable TLS session tickets (HAVE_SESSION_TICKET, TLS 1.3 resumption).
config WOLFSSL_MAX_FRAGMENT
bool "wolfSSL max_fragment_length extension"
depends on !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Enable the RFC 6066 max_fragment_length extension (HAVE_MAX_FRAGMENT).
config WOLFSSL_SESSION_EXPORT
bool "wolfSSL session export support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable external session cache (HAVE_EXT_CACHE)
config WOLFSSL_KEEP_PEER_CERT
bool "wolfSSL keep peer certificate support"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Retain peer certificate after handshake (KEEP_PEER_CERT)
config WOLFSSL_ALWAYS_VERIFY_CB
bool "wolfSSL always invoke verify callback"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Invoke verify callback on success as well as failure (WOLFSSL_ALWAYS_VERIFY_CB)
config WOLFSSL_OPENSSL_EXTRA_X509_SMALL
bool "wolfSSL minimal X509 compat APIs"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Define OPENSSL_EXTRA_X509_SMALL. Exposes a small subset of X509
helpers (wolfSSL_X509_free, wolfSSL_get_verify_result, ...) without
the rest of OPENSSL_EXTRA.
config WOLFSSL_USER_IO
bool "wolfSSL transport supplied by the application"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Define WOLFSSL_USER_IO. Leaves the built-in socket send/receive
callbacks out of the build, for an application that installs its own
with wolfSSL_CTX_SetIOSend()/SetIORecv(). Without a transport of its
own such a build cannot do TLS at all; with one it needs no network
stack, so CONFIG_NETWORKING can stay off.
config WOLFSSL_CERT_GEN
bool "wolfSSL certificate generation"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Define WOLFSSL_CERT_GEN. Builds wc_InitCert(), wc_MakeCert() and
wc_SignCert(), so the application can issue X.509 certificates.
config WOLFSSL_CERT_REQ
bool "wolfCrypt certificate request generation"
depends on WOLFSSL_CERT_GEN
help
Enable PKCS#10 certificate signing request generation
(WOLFSSL_CERT_REQ).
config WOLFSSL_CERT_EXT
bool "wolfSSL certificate extensions"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Define WOLFSSL_CERT_EXT. Decodes further certificate extensions, such
as certificate policies, and with WOLFSSL_CERT_GEN adds the v3
extension setters - wc_SetKeyUsage(), wc_SetExtKeyUsage(),
wc_SetSubjectKeyId...() and wc_SetAuthKeyId...().
config WOLFSSL_KEY_GEN
bool "wolfCrypt key generation"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Enable RSA key generation and private key export to DER and PEM
(WOLFSSL_KEY_GEN).
config WOLFSSL_ALT_NAMES
bool "wolfCrypt subject alternative names in generated certificates"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Write subject alternative names into generated certificates and
requests (WOLFSSL_ALT_NAMES).
config WOLFSSL_IP_ALT_NAME
bool "wolfCrypt IP address subject alternative names"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on NETWORKING || WOLFSSL_USER_IO || WOLFSSL_CRYPTO_ONLY
help
Decode and match IP address subject alternative names
(WOLFSSL_IP_ALT_NAME).
With the built-in socket I/O this needs NETWORKING, as the TLS
layer's IPv6 matching uses the socket address types.
config WOLFSSL_CERT_NAME_ALL
bool "wolfCrypt all certificate name attributes"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Add the given name, initials, DN qualifier and name attributes to
certificate subjects (WOLFSSL_CERT_NAME_ALL).
config WOLFSSL_PUBLIC_ASN
bool "wolfCrypt public ASN.1 helpers"
depends on !WOLFSSL_HAS_SETTINGS_FILE
help
Define WOLFSSL_PUBLIC_ASN, which makes the ASN.1 helpers declared
WOLFSSL_ASN_API, such as wc_SetDNSEntry(), wc_SetAltNamesFromList()
and SetLength(), public API. The module builds without hidden symbol
visibility, so this changes what the headers promise, not what links.
config WOLFSSL_PKCS7
bool "wolfCrypt PKCS#7 / CMS"
depends on !WOLFSSL_HAS_SETTINGS_FILE
depends on WOLFSSL_RSA || WOLFSSL_ECC || WOLFSSL_MLDSA
help
Enable PKCS#7 (HAVE_PKCS7) with the AES key wrap and, with ECC, the
X9.63 KDF that its enveloped-data recipients need, as
--enable-pkcs7 does.
config WOLFCRYPT_ASM
bool "wolfCrypt assembly optimisations"
depends on WOLFSSL_BUILTIN && !WOLFSSL_HAS_SETTINGS_FILE
depends on ARM || ARM64 || X86_64
help
Use the hand-written assembly for the symmetric algorithms (AES,
SHA-2, SHA-3, ChaCha20/Poly1305, Curve25519) and, on ARM, for the
single-precision math behind RSA, DH and ECC.
The port follows the CPU Zephyr reports:
ARMv7-M / ARMv8-M mainline thumb2 symmetric, Cortex-M math
ARMv6-M / ARMv8-M baseline math only, Thumb variant
32-bit Cortex-A / Cortex-R armv8-32 symmetric, ARM32 math
AArch64 armv8 symmetric, ARM64 math
x86_64 symmetric only
ARMv6-M and ARMv8-M baseline get no symmetric assembly because the
Thumb2 port uses UBFX and LDRD, which those cores lack. On the
mainline cores the math assembly prefers UMAAL, part of the DSP
extension; a part built without it takes the slower UMAAL-free
variant of the same routines.
x86_64 gets no single-precision assembly: sp_x86_64_asm.S is AVX
throughout and sp_x86_64.c calls it without a CPUID check, while
Zephyr's x86 context switch never enables the YMM state. Its
symmetric AVX1/AVX2 paths are safe because they are chosen at run
time by CPUID, which this module also teaches to check that the OS
enabled the vector state.
32-bit x86 is not offered: only the AES sources have an
implementation at that width, and the rest are guarded to x86_64.
config WOLFCRYPT_SP_SMALL
bool "Smaller single-precision math"
depends on WOLFSSL_BUILTIN && !WOLFSSL_HAS_SETTINGS_FILE
default y
help
Build the space-optimised variant of the single-precision math
backend. Turning it off trades a markedly larger image for faster
RSA, DH and ECC.
Independent of WOLFCRYPT_ASM, which picks the backend while this
picks the variant within it: the assembly sources carry both a
loop-based and an unrolled form of each routine. Leaving this on
therefore keeps the smaller, slower half of the assembly, so
turning it off is what makes WOLFCRYPT_ASM pay off on a part with
the flash to spare.
config WOLFSSL_NO_HAVE_MIN_MAX
bool "Force wolfSSL to use its own min/max"
help
Disable this if Zephyr min()/max() macros cause
issues. By default wolfSSL defers to Zephyr's
min/max on >= 4.3.
config WOLFSSL_DEBUG
bool "wolfSSL debug activation"
depends on WOLFSSL_BUILTIN
help
Enable debugging activation for wolfSSL configuration. If you use
wolfSSL/Zephyr integration (e.g. net_app), this will activate debug
logging (of the level configured by WOLFSSL_DEBUG_LEVEL).
config WOLFSSL_INSTALL_PATH
string "wolfSSL install path"
depends on WOLFSSL_LIBRARY
help
This option holds the path where the wolfSSL libraries and headers are
installed. Make sure this option is properly set when WOLFSSL_LIBRARY
is enabled otherwise the build will fail.
module = WOLFSSL
module-str = wolfssl
source "subsys/logging/Kconfig.template.log_config"
config APP_LINK_WITH_WOLFSSL
bool "Link 'app' with WOLFSSL"
default y
help
Add WOLFSSL header files to the 'app' include path. It may be
disabled if the include paths for WOLFSSL are causing aliasing
issues for 'app'.
endif