xref: /linux/crypto/Kconfig (revision d3b6dd90e23ef1b57143e60668175ecd890948d1)
1# SPDX-License-Identifier: GPL-2.0
2#
3# Generic algorithms support
4#
5config XOR_BLOCKS
6	tristate
7
8#
9# async_tx api: hardware offloaded memory transfer/transform support
10#
11source "crypto/async_tx/Kconfig"
12
13#
14# Cryptographic API Configuration
15#
16menuconfig CRYPTO
17	tristate "Cryptographic API"
18	select CRYPTO_LIB_UTILS
19	help
20	  This option provides the core Cryptographic API.
21
22if CRYPTO
23
24menu "Crypto core or helper"
25
26config CRYPTO_FIPS
27	bool "FIPS 200 compliance"
28	depends on CRYPTO_DRBG && CRYPTO_SELFTESTS
29	depends on (MODULE_SIG || !MODULES)
30	help
31	  This option enables the fips boot option which is
32	  required if you want the system to operate in a FIPS 200
33	  certification.  You should say no unless you know what
34	  this is.
35
36config CRYPTO_FIPS_NAME
37	string "FIPS Module Name"
38	default "Linux Kernel Cryptographic API"
39	depends on CRYPTO_FIPS
40	help
41	  This option sets the FIPS Module name reported by the Crypto API via
42	  the /proc/sys/crypto/fips_name file.
43
44config CRYPTO_FIPS_CUSTOM_VERSION
45	bool "Use Custom FIPS Module Version"
46	depends on CRYPTO_FIPS
47	default n
48
49config CRYPTO_FIPS_VERSION
50	string "FIPS Module Version"
51	default "(none)"
52	depends on CRYPTO_FIPS_CUSTOM_VERSION
53	help
54	  This option provides the ability to override the FIPS Module Version.
55	  By default the KERNELRELEASE value is used.
56
57config CRYPTO_ALGAPI
58	tristate
59	select CRYPTO_ALGAPI2
60	help
61	  This option provides the API for cryptographic algorithms.
62
63config CRYPTO_ALGAPI2
64	tristate
65
66config CRYPTO_AEAD
67	tristate
68	select CRYPTO_AEAD2
69	select CRYPTO_ALGAPI
70
71config CRYPTO_AEAD2
72	tristate
73	select CRYPTO_ALGAPI2
74
75config CRYPTO_SIG
76	tristate
77	select CRYPTO_SIG2
78	select CRYPTO_ALGAPI
79
80config CRYPTO_SIG2
81	tristate
82	select CRYPTO_ALGAPI2
83
84config CRYPTO_SKCIPHER
85	tristate
86	select CRYPTO_SKCIPHER2
87	select CRYPTO_ALGAPI
88	select CRYPTO_ECB
89
90config CRYPTO_SKCIPHER2
91	tristate
92	select CRYPTO_ALGAPI2
93
94config CRYPTO_HASH
95	tristate
96	select CRYPTO_HASH2
97	select CRYPTO_ALGAPI
98
99config CRYPTO_HASH2
100	tristate
101	select CRYPTO_ALGAPI2
102
103config CRYPTO_RNG
104	tristate
105	select CRYPTO_RNG2
106	select CRYPTO_ALGAPI
107
108config CRYPTO_RNG2
109	tristate
110	select CRYPTO_ALGAPI2
111
112config CRYPTO_RNG_DEFAULT
113	tristate
114	select CRYPTO_DRBG_MENU
115
116config CRYPTO_AKCIPHER2
117	tristate
118	select CRYPTO_ALGAPI2
119
120config CRYPTO_AKCIPHER
121	tristate
122	select CRYPTO_AKCIPHER2
123	select CRYPTO_ALGAPI
124
125config CRYPTO_KPP2
126	tristate
127	select CRYPTO_ALGAPI2
128
129config CRYPTO_KPP
130	tristate
131	select CRYPTO_ALGAPI
132	select CRYPTO_KPP2
133
134config CRYPTO_ACOMP2
135	tristate
136	select CRYPTO_ALGAPI2
137	select SGL_ALLOC
138
139config CRYPTO_ACOMP
140	tristate
141	select CRYPTO_ALGAPI
142	select CRYPTO_ACOMP2
143
144config CRYPTO_HKDF
145	tristate
146	select CRYPTO_SHA256 if CRYPTO_SELFTESTS
147	select CRYPTO_SHA512 if CRYPTO_SELFTESTS
148	select CRYPTO_HASH2
149
150config CRYPTO_MANAGER
151	tristate
152	default CRYPTO_ALGAPI if CRYPTO_SELFTESTS
153	select CRYPTO_MANAGER2
154	help
155	  This provides the support for instantiating templates such as
156	  cbc(aes), and the support for the crypto self-tests.
157
158config CRYPTO_MANAGER2
159	def_tristate CRYPTO_MANAGER || (CRYPTO_MANAGER!=n && CRYPTO_ALGAPI=y)
160	select CRYPTO_ACOMP2
161	select CRYPTO_AEAD2
162	select CRYPTO_AKCIPHER2
163	select CRYPTO_SIG2
164	select CRYPTO_HASH2
165	select CRYPTO_KPP2
166	select CRYPTO_RNG2
167	select CRYPTO_SKCIPHER2
168
169config CRYPTO_USER
170	tristate "Userspace cryptographic algorithm configuration"
171	depends on NET
172	select CRYPTO_MANAGER
173	help
174	  Userspace configuration for cryptographic instantiations such as
175	  cbc(aes).
176
177config CRYPTO_SELFTESTS
178	bool "Enable cryptographic self-tests"
179	depends on EXPERT
180	help
181	  Enable the cryptographic self-tests.
182
183	  The cryptographic self-tests run at boot time, or at algorithm
184	  registration time if algorithms are dynamically loaded later.
185
186	  There are two main use cases for these tests:
187
188	  - Development and pre-release testing.  In this case, also enable
189	    CRYPTO_SELFTESTS_FULL to get the full set of tests.  All crypto code
190	    in the kernel is expected to pass the full set of tests.
191
192	  - Production kernels, to help prevent buggy drivers from being used
193	    and/or meet FIPS 140-3 pre-operational testing requirements.  In
194	    this case, enable CRYPTO_SELFTESTS but not CRYPTO_SELFTESTS_FULL.
195
196config CRYPTO_SELFTESTS_FULL
197	bool "Enable the full set of cryptographic self-tests"
198	depends on CRYPTO_SELFTESTS
199	help
200	  Enable the full set of cryptographic self-tests for each algorithm.
201
202	  The full set of tests should be enabled for development and
203	  pre-release testing, but not in production kernels.
204
205	  All crypto code in the kernel is expected to pass the full tests.
206
207config CRYPTO_NULL
208	tristate "Null algorithms"
209	select CRYPTO_ALGAPI
210	select CRYPTO_SKCIPHER
211	select CRYPTO_HASH
212	help
213	  These are 'Null' algorithms, used by IPsec, which do nothing.
214
215config CRYPTO_PCRYPT
216	tristate "Parallel crypto engine"
217	depends on SMP
218	select PADATA
219	select CRYPTO_MANAGER
220	select CRYPTO_AEAD
221	help
222	  This converts an arbitrary crypto algorithm into a parallel
223	  algorithm that executes in kernel threads.
224
225config CRYPTO_CRYPTD
226	tristate "Software async crypto daemon"
227	select CRYPTO_SKCIPHER
228	select CRYPTO_HASH
229	select CRYPTO_MANAGER
230	help
231	  This is a generic software asynchronous crypto daemon that
232	  converts an arbitrary synchronous software crypto algorithm
233	  into an asynchronous algorithm that executes in a kernel thread.
234
235config CRYPTO_AUTHENC
236	tristate "Authenc support"
237	select CRYPTO_AEAD
238	select CRYPTO_SKCIPHER
239	select CRYPTO_MANAGER
240	select CRYPTO_HASH
241	help
242	  Authenc: Combined mode wrapper for IPsec.
243
244	  This is required for IPSec ESP (XFRM_ESP).
245
246config CRYPTO_KRB5ENC
247	tristate "Kerberos 5 combined hash+cipher support"
248	select CRYPTO_AEAD
249	select CRYPTO_SKCIPHER
250	select CRYPTO_MANAGER
251	select CRYPTO_HASH
252	help
253	  Combined hash and cipher support for Kerberos 5 RFC3961 simplified
254	  profile.  This is required for Kerberos 5-style encryption, used by
255	  sunrpc/NFS and rxrpc/AFS.
256
257config CRYPTO_BENCHMARK
258	tristate "Crypto benchmarking module"
259	depends on m || EXPERT
260	select CRYPTO_MANAGER
261	help
262	  Quick & dirty crypto benchmarking module.
263
264	  This is mainly intended for use by people developing cryptographic
265	  algorithms in the kernel.  It should not be enabled in production
266	  kernels.
267
268config CRYPTO_SIMD
269	tristate
270	select CRYPTO_CRYPTD
271
272config CRYPTO_ENGINE
273	tristate
274
275endmenu
276
277menu "Public-key cryptography"
278
279config CRYPTO_RSA
280	tristate "RSA (Rivest-Shamir-Adleman)"
281	select CRYPTO_AKCIPHER
282	select CRYPTO_MANAGER
283	select CRYPTO_SIG
284	select MPILIB
285	select ASN1
286	help
287	  RSA (Rivest-Shamir-Adleman) public key algorithm (RFC8017)
288
289config CRYPTO_DH
290	tristate "DH (Diffie-Hellman)"
291	select CRYPTO_KPP
292	select MPILIB
293	help
294	  DH (Diffie-Hellman) key exchange algorithm
295
296config CRYPTO_DH_RFC7919_GROUPS
297	bool "RFC 7919 FFDHE groups"
298	depends on CRYPTO_DH
299	select CRYPTO_RNG_DEFAULT
300	help
301	  FFDHE (Finite-Field-based Diffie-Hellman Ephemeral) groups
302	  defined in RFC7919.
303
304	  Support these finite-field groups in DH key exchanges:
305	  - ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192
306
307	  If unsure, say N.
308
309config CRYPTO_ECC
310	tristate
311	select CRYPTO_RNG_DEFAULT
312
313config CRYPTO_ECDH
314	tristate "ECDH (Elliptic Curve Diffie-Hellman)"
315	select CRYPTO_ECC
316	select CRYPTO_KPP
317	help
318	  ECDH (Elliptic Curve Diffie-Hellman) key exchange algorithm
319	  using curves P-192, P-256, and P-384 (FIPS 186)
320
321config CRYPTO_ECDSA
322	tristate "ECDSA (Elliptic Curve Digital Signature Algorithm)"
323	select CRYPTO_ECC
324	select CRYPTO_SIG
325	select ASN1
326	help
327	  ECDSA (Elliptic Curve Digital Signature Algorithm) (FIPS 186,
328	  ISO/IEC 14888-3)
329	  using curves P-192, P-256, P-384 and P-521
330
331	  Only signature verification is implemented.
332
333config CRYPTO_ECRDSA
334	tristate "EC-RDSA (Elliptic Curve Russian Digital Signature Algorithm)"
335	select CRYPTO_ECC
336	select CRYPTO_SIG
337	select CRYPTO_STREEBOG
338	select OID_REGISTRY
339	select ASN1
340	help
341	  Elliptic Curve Russian Digital Signature Algorithm (GOST R 34.10-2012,
342	  RFC 7091, ISO/IEC 14888-3)
343
344	  One of the Russian cryptographic standard algorithms (called GOST
345	  algorithms). Only signature verification is implemented.
346
347config CRYPTO_MLDSA
348	tristate "ML-DSA (Module-Lattice-Based Digital Signature Algorithm)"
349	select CRYPTO_SIG
350	select CRYPTO_LIB_MLDSA
351	help
352	  ML-DSA (Module-Lattice-Based Digital Signature Algorithm) (FIPS-204).
353
354	  Only signature verification is implemented.
355
356endmenu
357
358menu "Block ciphers"
359
360config CRYPTO_AES
361	tristate "AES (Advanced Encryption Standard)"
362	select CRYPTO_ALGAPI
363	select CRYPTO_LIB_AES
364	help
365	  AES cipher algorithms (Rijndael)(FIPS-197, ISO/IEC 18033-3)
366
367	  Rijndael appears to be consistently a very good performer in
368	  both hardware and software across a wide range of computing
369	  environments regardless of its use in feedback or non-feedback
370	  modes. Its key setup time is excellent, and its key agility is
371	  good. Rijndael's very low memory requirements make it very well
372	  suited for restricted-space environments, in which it also
373	  demonstrates excellent performance. Rijndael's operations are
374	  among the easiest to defend against power and timing attacks.
375
376	  The AES specifies three key sizes: 128, 192 and 256 bits
377
378config CRYPTO_AES_TI
379	tristate "AES (Advanced Encryption Standard) (fixed time)"
380	select CRYPTO_ALGAPI
381	select CRYPTO_LIB_AES
382	help
383	  AES cipher algorithms (Rijndael)(FIPS-197, ISO/IEC 18033-3)
384
385	  This is a generic implementation of AES that attempts to eliminate
386	  data dependent latencies as much as possible without affecting
387	  performance too much. It is intended for use by the generic CCM
388	  and GCM drivers, and other CTR or CMAC/XCBC based modes that rely
389	  solely on encryption (although decryption is supported as well, but
390	  with a more dramatic performance hit)
391
392	  Instead of using 16 lookup tables of 1 KB each, (8 for encryption and
393	  8 for decryption), this implementation only uses just two S-boxes of
394	  256 bytes each, and attempts to eliminate data dependent latencies by
395	  prefetching the entire table into the cache at the start of each
396	  block. Interrupts are also disabled to avoid races where cachelines
397	  are evicted when the CPU is interrupted to do something else.
398
399config CRYPTO_ANUBIS
400	tristate "Anubis"
401	depends on CRYPTO_USER_API_ENABLE_OBSOLETE
402	select CRYPTO_ALGAPI
403	help
404	  Anubis cipher algorithm
405
406	  Anubis is a variable key length cipher which can use keys from
407	  128 bits to 320 bits in length.  It was evaluated as a entrant
408	  in the NESSIE competition.
409
410	  See https://web.archive.org/web/20160606112246/http://www.larc.usp.br/~pbarreto/AnubisPage.html
411	  for further information.
412
413config CRYPTO_ARIA
414	tristate "ARIA"
415	select CRYPTO_ALGAPI
416	help
417	  ARIA cipher algorithm (RFC5794)
418
419	  ARIA is a standard encryption algorithm of the Republic of Korea.
420	  The ARIA specifies three key sizes and rounds.
421	  128-bit: 12 rounds.
422	  192-bit: 14 rounds.
423	  256-bit: 16 rounds.
424
425	  See:
426	  https://seed.kisa.or.kr/kisa/algorithm/EgovAriaInfo.do
427
428config CRYPTO_BLOWFISH
429	tristate "Blowfish"
430	select CRYPTO_ALGAPI
431	select CRYPTO_BLOWFISH_COMMON
432	help
433	  Blowfish cipher algorithm, by Bruce Schneier
434
435	  This is a variable key length cipher which can use keys from 32
436	  bits to 448 bits in length.  It's fast, simple and specifically
437	  designed for use on "large microprocessors".
438
439	  See https://www.schneier.com/blowfish.html for further information.
440
441config CRYPTO_BLOWFISH_COMMON
442	tristate
443	help
444	  Common parts of the Blowfish cipher algorithm shared by the
445	  generic c and the assembler implementations.
446
447config CRYPTO_CAMELLIA
448	tristate "Camellia"
449	select CRYPTO_ALGAPI
450	help
451	  Camellia cipher algorithms (ISO/IEC 18033-3)
452
453	  Camellia is a symmetric key block cipher developed jointly
454	  at NTT and Mitsubishi Electric Corporation.
455
456	  The Camellia specifies three key sizes: 128, 192 and 256 bits.
457
458	  See https://info.isl.ntt.co.jp/crypt/eng/camellia/ for further information.
459
460config CRYPTO_CAST_COMMON
461	tristate
462	help
463	  Common parts of the CAST cipher algorithms shared by the
464	  generic c and the assembler implementations.
465
466config CRYPTO_CAST5
467	tristate "CAST5 (CAST-128)"
468	select CRYPTO_ALGAPI
469	select CRYPTO_CAST_COMMON
470	help
471	  CAST5 (CAST-128) cipher algorithm (RFC2144, ISO/IEC 18033-3)
472
473config CRYPTO_CAST6
474	tristate "CAST6 (CAST-256)"
475	select CRYPTO_ALGAPI
476	select CRYPTO_CAST_COMMON
477	help
478	  CAST6 (CAST-256) encryption algorithm (RFC2612)
479
480config CRYPTO_DES
481	tristate "DES and Triple DES EDE"
482	select CRYPTO_ALGAPI
483	select CRYPTO_LIB_DES
484	help
485	  DES (Data Encryption Standard)(FIPS 46-2, ISO/IEC 18033-3) and
486	  Triple DES EDE (Encrypt/Decrypt/Encrypt) (FIPS 46-3, ISO/IEC 18033-3)
487	  cipher algorithms
488
489config CRYPTO_FCRYPT
490	tristate "FCrypt"
491	select CRYPTO_ALGAPI
492	select CRYPTO_SKCIPHER
493	help
494	  FCrypt algorithm used by RxRPC
495
496	  See https://ota.polyonymo.us/fcrypt-paper.txt
497
498config CRYPTO_KHAZAD
499	tristate "Khazad"
500	depends on CRYPTO_USER_API_ENABLE_OBSOLETE
501	select CRYPTO_ALGAPI
502	help
503	  Khazad cipher algorithm
504
505	  Khazad was a finalist in the initial NESSIE competition.  It is
506	  an algorithm optimized for 64-bit processors with good performance
507	  on 32-bit processors.  Khazad uses an 128 bit key size.
508
509	  See https://web.archive.org/web/20171011071731/http://www.larc.usp.br/~pbarreto/KhazadPage.html
510	  for further information.
511
512config CRYPTO_SEED
513	tristate "SEED"
514	depends on CRYPTO_USER_API_ENABLE_OBSOLETE
515	select CRYPTO_ALGAPI
516	help
517	  SEED cipher algorithm (RFC4269, ISO/IEC 18033-3)
518
519	  SEED is a 128-bit symmetric key block cipher that has been
520	  developed by KISA (Korea Information Security Agency) as a
521	  national standard encryption algorithm of the Republic of Korea.
522	  It is a 16 round block cipher with the key size of 128 bit.
523
524	  See https://seed.kisa.or.kr/kisa/algorithm/EgovSeedInfo.do
525	  for further information.
526
527config CRYPTO_SERPENT
528	tristate "Serpent"
529	select CRYPTO_ALGAPI
530	help
531	  Serpent cipher algorithm, by Anderson, Biham & Knudsen
532
533	  Keys are allowed to be from 0 to 256 bits in length, in steps
534	  of 8 bits.
535
536	  See https://www.cl.cam.ac.uk/~rja14/serpent.html for further information.
537
538config CRYPTO_SM4
539	tristate
540
541config CRYPTO_SM4_GENERIC
542	tristate "SM4 (ShangMi 4)"
543	select CRYPTO_ALGAPI
544	select CRYPTO_SM4
545	help
546	  SM4 cipher algorithms (OSCCA GB/T 32907-2016,
547	  ISO/IEC 18033-3:2010/Amd 1:2021)
548
549	  SM4 (GBT.32907-2016) is a cryptographic standard issued by the
550	  Organization of State Commercial Administration of China (OSCCA)
551	  as an authorized cryptographic algorithms for the use within China.
552
553	  SMS4 was originally created for use in protecting wireless
554	  networks, and is mandated in the Chinese National Standard for
555	  Wireless LAN WAPI (Wired Authentication and Privacy Infrastructure)
556	  (GB.15629.11-2003).
557
558	  The latest SM4 standard (GBT.32907-2016) was proposed by OSCCA and
559	  standardized through TC 260 of the Standardization Administration
560	  of the People's Republic of China (SAC).
561
562	  The input, output, and key of SMS4 are each 128 bits.
563
564	  See https://eprint.iacr.org/2008/329.pdf for further information.
565
566	  If unsure, say N.
567
568config CRYPTO_TEA
569	tristate "TEA, XTEA and XETA"
570	depends on CRYPTO_USER_API_ENABLE_OBSOLETE
571	select CRYPTO_ALGAPI
572	help
573	  TEA (Tiny Encryption Algorithm) cipher algorithms
574
575	  Tiny Encryption Algorithm is a simple cipher that uses
576	  many rounds for security.  It is very fast and uses
577	  little memory.
578
579	  Xtendend Tiny Encryption Algorithm is a modification to
580	  the TEA algorithm to address a potential key weakness
581	  in the TEA algorithm.
582
583	  Xtendend Encryption Tiny Algorithm is a mis-implementation
584	  of the XTEA algorithm for compatibility purposes.
585
586config CRYPTO_TWOFISH
587	tristate "Twofish"
588	select CRYPTO_ALGAPI
589	select CRYPTO_TWOFISH_COMMON
590	help
591	  Twofish cipher algorithm
592
593	  Twofish was submitted as an AES (Advanced Encryption Standard)
594	  candidate cipher by researchers at CounterPane Systems.  It is a
595	  16 round block cipher supporting key sizes of 128, 192, and 256
596	  bits.
597
598	  See https://www.schneier.com/twofish.html for further information.
599
600config CRYPTO_TWOFISH_COMMON
601	tristate
602	help
603	  Common parts of the Twofish cipher algorithm shared by the
604	  generic c and the assembler implementations.
605
606endmenu
607
608menu "Length-preserving ciphers and modes"
609
610config CRYPTO_ADIANTUM
611	tristate "Adiantum"
612	select CRYPTO_CHACHA20
613	select CRYPTO_LIB_NH
614	select CRYPTO_LIB_POLY1305
615	select CRYPTO_LIB_POLY1305_GENERIC
616	select CRYPTO_MANAGER
617	help
618	  Adiantum tweakable, length-preserving encryption mode
619
620	  Designed for fast and secure disk encryption, especially on
621	  CPUs without dedicated crypto instructions.  It encrypts
622	  each sector using the XChaCha12 stream cipher, two passes of
623	  an ε-almost-∆-universal hash function, and an invocation of
624	  the AES-256 block cipher on a single 16-byte block.  On CPUs
625	  without AES instructions, Adiantum is much faster than
626	  AES-XTS.
627
628	  Adiantum's security is provably reducible to that of its
629	  underlying stream and block ciphers, subject to a security
630	  bound.  Unlike XTS, Adiantum is a true wide-block encryption
631	  mode, so it actually provides an even stronger notion of
632	  security than XTS, subject to the security bound.
633
634	  If unsure, say N.
635
636config CRYPTO_ARC4
637	tristate "ARC4 (Alleged Rivest Cipher 4)"
638	depends on CRYPTO_USER_API_ENABLE_OBSOLETE
639	select CRYPTO_SKCIPHER
640	select CRYPTO_LIB_ARC4
641	help
642	  ARC4 cipher algorithm
643
644	  ARC4 is a stream cipher using keys ranging from 8 bits to 2048
645	  bits in length.  This algorithm is required for driver-based
646	  WEP, but it should not be for other purposes because of the
647	  weakness of the algorithm.
648
649config CRYPTO_CHACHA20
650	tristate "ChaCha"
651	select CRYPTO_LIB_CHACHA
652	select CRYPTO_SKCIPHER
653	help
654	  The ChaCha20, XChaCha20, and XChaCha12 stream cipher algorithms
655
656	  ChaCha20 is a 256-bit high-speed stream cipher designed by Daniel J.
657	  Bernstein and further specified in RFC7539 for use in IETF protocols.
658	  This is the portable C implementation of ChaCha20.  See
659	  https://cr.yp.to/chacha/chacha-20080128.pdf for further information.
660
661	  XChaCha20 is the application of the XSalsa20 construction to ChaCha20
662	  rather than to Salsa20.  XChaCha20 extends ChaCha20's nonce length
663	  from 64 bits (or 96 bits using the RFC7539 convention) to 192 bits,
664	  while provably retaining ChaCha20's security.  See
665	  https://cr.yp.to/snuffle/xsalsa-20081128.pdf for further information.
666
667	  XChaCha12 is XChaCha20 reduced to 12 rounds, with correspondingly
668	  reduced security margin but increased performance.  It can be needed
669	  in some performance-sensitive scenarios.
670
671config CRYPTO_CBC
672	tristate "CBC (Cipher Block Chaining)"
673	select CRYPTO_SKCIPHER
674	select CRYPTO_MANAGER
675	help
676	  CBC (Cipher Block Chaining) mode (NIST SP800-38A)
677
678	  This block cipher mode is required for IPSec ESP (XFRM_ESP).
679
680config CRYPTO_CTR
681	tristate "CTR (Counter)"
682	select CRYPTO_SKCIPHER
683	select CRYPTO_MANAGER
684	help
685	  CTR (Counter) mode (NIST SP800-38A)
686
687config CRYPTO_CTS
688	tristate "CTS (Cipher Text Stealing)"
689	select CRYPTO_SKCIPHER
690	select CRYPTO_MANAGER
691	help
692	  CBC-CS3 variant of CTS (Cipher Text Stealing) (NIST
693	  Addendum to SP800-38A (October 2010))
694
695	  This mode is required for Kerberos gss mechanism support
696	  for AES encryption.
697
698config CRYPTO_ECB
699	tristate "ECB (Electronic Codebook)"
700	select CRYPTO_SKCIPHER2
701	select CRYPTO_MANAGER
702	help
703	  ECB (Electronic Codebook) mode (NIST SP800-38A)
704
705config CRYPTO_HCTR2
706	tristate "HCTR2"
707	select CRYPTO_XCTR
708	select CRYPTO_LIB_POLYVAL
709	select CRYPTO_MANAGER
710	help
711	  HCTR2 length-preserving encryption mode
712
713	  A mode for storage encryption that is efficient on processors with
714	  instructions to accelerate AES and carryless multiplication, e.g.
715	  x86 processors with AES-NI and CLMUL, and ARM processors with the
716	  ARMv8 crypto extensions.
717
718	  See https://eprint.iacr.org/2021/1441
719
720config CRYPTO_LRW
721	tristate "LRW (Liskov Rivest Wagner)"
722	select CRYPTO_LIB_GF128MUL
723	select CRYPTO_SKCIPHER
724	select CRYPTO_MANAGER
725	select CRYPTO_ECB
726	help
727	  LRW (Liskov Rivest Wagner) mode
728
729	  A tweakable, non malleable, non movable
730	  narrow block cipher mode for dm-crypt.  Use it with cipher
731	  specification string aes-lrw-benbi, the key must be 256, 320 or 384.
732	  The first 128, 192 or 256 bits in the key are used for AES and the
733	  rest is used to tie each cipher block to its logical position.
734
735	  See https://people.csail.mit.edu/rivest/pubs/LRW02.pdf
736
737config CRYPTO_PCBC
738	tristate "PCBC (Propagating Cipher Block Chaining)"
739	select CRYPTO_SKCIPHER
740	select CRYPTO_MANAGER
741	help
742	  PCBC (Propagating Cipher Block Chaining) mode
743
744	  This block cipher mode is required for RxRPC.
745
746config CRYPTO_XCTR
747	tristate
748	select CRYPTO_SKCIPHER
749	select CRYPTO_MANAGER
750	help
751	  XCTR (XOR Counter) mode for HCTR2
752
753	  This blockcipher mode is a variant of CTR mode using XORs and little-endian
754	  addition rather than big-endian arithmetic.
755
756	  XCTR mode is used to implement HCTR2.
757
758config CRYPTO_XTS
759	tristate "XTS (XOR Encrypt XOR with ciphertext stealing)"
760	select CRYPTO_SKCIPHER
761	select CRYPTO_MANAGER
762	select CRYPTO_ECB
763	help
764	  XTS (XOR Encrypt XOR with ciphertext stealing) mode (NIST SP800-38E
765	  and IEEE 1619)
766
767	  Use with aes-xts-plain, key size 256, 384 or 512 bits. This
768	  implementation currently can't handle a sectorsize which is not a
769	  multiple of 16 bytes.
770
771endmenu
772
773menu "AEAD (authenticated encryption with associated data) ciphers"
774
775config CRYPTO_AEGIS128
776	tristate "AEGIS-128"
777	select CRYPTO_AEAD
778	select CRYPTO_AES  # for AES S-box tables
779	help
780	  AEGIS-128 AEAD algorithm
781
782config CRYPTO_AEGIS128_SIMD
783	bool "AEGIS-128 (arm NEON, arm64 NEON)"
784	depends on CRYPTO_AEGIS128 && ((ARM || ARM64) && KERNEL_MODE_NEON)
785	default y
786	help
787	  AEGIS-128 AEAD algorithm
788
789	  Architecture: arm or arm64 using:
790	  - NEON (Advanced SIMD) extension
791
792config CRYPTO_CHACHA20POLY1305
793	tristate "ChaCha20-Poly1305"
794	select CRYPTO_CHACHA20
795	select CRYPTO_AEAD
796	select CRYPTO_LIB_POLY1305
797	select CRYPTO_MANAGER
798	help
799	  ChaCha20 stream cipher and Poly1305 authenticator combined
800	  mode (RFC8439)
801
802config CRYPTO_CCM
803	tristate "CCM (Counter with Cipher Block Chaining-MAC)"
804	select CRYPTO_CTR
805	select CRYPTO_HASH
806	select CRYPTO_AEAD
807	select CRYPTO_MANAGER
808	help
809	  CCM (Counter with Cipher Block Chaining-Message Authentication Code)
810	  authenticated encryption mode (NIST SP800-38C)
811
812config CRYPTO_GCM
813	tristate "GCM (Galois/Counter Mode) and GMAC (GCM MAC)"
814	select CRYPTO_CTR
815	select CRYPTO_AEAD
816	select CRYPTO_GHASH
817	select CRYPTO_MANAGER
818	help
819	  GCM (Galois/Counter Mode) authenticated encryption mode and GMAC
820	  (GCM Message Authentication Code) (NIST SP800-38D)
821
822	  This is required for IPSec ESP (XFRM_ESP).
823
824config CRYPTO_GENIV
825	tristate
826	select CRYPTO_AEAD
827	select CRYPTO_MANAGER
828	select CRYPTO_RNG_DEFAULT
829
830config CRYPTO_SEQIV
831	tristate "Sequence Number IV Generator"
832	select CRYPTO_GENIV
833	help
834	  Sequence Number IV generator
835
836	  This IV generator generates an IV based on a sequence number by
837	  xoring it with a salt.  This algorithm is mainly useful for CTR.
838
839	  This is required for IPsec ESP (XFRM_ESP).
840
841config CRYPTO_ECHAINIV
842	tristate "Encrypted Chain IV Generator"
843	select CRYPTO_GENIV
844	help
845	  Encrypted Chain IV generator
846
847	  This IV generator generates an IV based on the encryption of
848	  a sequence number xored with a salt.  This is the default
849	  algorithm for CBC.
850
851config CRYPTO_ESSIV
852	tristate "Encrypted Salt-Sector IV Generator"
853	select CRYPTO_AUTHENC
854	help
855	  Encrypted Salt-Sector IV generator
856
857	  This IV generator is used in some cases by fscrypt and/or
858	  dm-crypt. It uses the hash of the block encryption key as the
859	  symmetric key for a block encryption pass applied to the input
860	  IV, making low entropy IV sources more suitable for block
861	  encryption.
862
863	  This driver implements a crypto API template that can be
864	  instantiated either as an skcipher or as an AEAD (depending on the
865	  type of the first template argument), and which defers encryption
866	  and decryption requests to the encapsulated cipher after applying
867	  ESSIV to the input IV. Note that in the AEAD case, it is assumed
868	  that the keys are presented in the same format used by the authenc
869	  template, and that the IV appears at the end of the authenticated
870	  associated data (AAD) region (which is how dm-crypt uses it.)
871
872	  Note that the use of ESSIV is not recommended for new deployments,
873	  and so this only needs to be enabled when interoperability with
874	  existing encrypted volumes of filesystems is required, or when
875	  building for a particular system that requires it (e.g., when
876	  the SoC in question has accelerated CBC but not XTS, making CBC
877	  combined with ESSIV the only feasible mode for h/w accelerated
878	  block encryption)
879
880endmenu
881
882menu "Hashes, digests, and MACs"
883
884config CRYPTO_BLAKE2B
885	tristate "BLAKE2b"
886	select CRYPTO_HASH
887	select CRYPTO_LIB_BLAKE2B
888	help
889	  BLAKE2b cryptographic hash function (RFC 7693)
890
891	  BLAKE2b is optimized for 64-bit platforms and can produce digests
892	  of any size between 1 and 64 bytes. The keyed hash is also implemented.
893
894	  This module provides the following algorithms:
895	  - blake2b-160
896	  - blake2b-256
897	  - blake2b-384
898	  - blake2b-512
899
900	  Used by the btrfs filesystem.
901
902	  See https://blake2.net for further information.
903
904config CRYPTO_CMAC
905	tristate "CMAC (Cipher-based MAC)"
906	select CRYPTO_HASH
907	select CRYPTO_MANAGER
908	help
909	  CMAC (Cipher-based Message Authentication Code) authentication
910	  mode (NIST SP800-38B and IETF RFC4493)
911
912config CRYPTO_GHASH
913	tristate "GHASH"
914	select CRYPTO_HASH
915	select CRYPTO_LIB_GF128MUL
916	help
917	  GCM GHASH function (NIST SP800-38D)
918
919config CRYPTO_HMAC
920	tristate "HMAC (Keyed-Hash MAC)"
921	select CRYPTO_HASH
922	select CRYPTO_MANAGER
923	help
924	  HMAC (Keyed-Hash Message Authentication Code) (FIPS 198 and
925	  RFC2104)
926
927	  This is required for IPsec AH (XFRM_AH) and IPsec ESP (XFRM_ESP).
928
929config CRYPTO_MD4
930	tristate "MD4"
931	select CRYPTO_HASH
932	help
933	  MD4 message digest algorithm (RFC1320)
934
935config CRYPTO_MD5
936	tristate "MD5"
937	select CRYPTO_HASH
938	select CRYPTO_LIB_MD5
939	help
940	  MD5 message digest algorithm (RFC1321), including HMAC support.
941
942config CRYPTO_MICHAEL_MIC
943	tristate "Michael MIC"
944	select CRYPTO_HASH
945	help
946	  Michael MIC (Message Integrity Code) (IEEE 802.11i)
947
948	  Defined by the IEEE 802.11i TKIP (Temporal Key Integrity Protocol),
949	  known as WPA (Wif-Fi Protected Access).
950
951	  This algorithm is required for TKIP, but it should not be used for
952	  other purposes because of the weakness of the algorithm.
953
954config CRYPTO_RMD160
955	tristate "RIPEMD-160"
956	select CRYPTO_HASH
957	help
958	  RIPEMD-160 hash function (ISO/IEC 10118-3)
959
960	  RIPEMD-160 is a 160-bit cryptographic hash function. It is intended
961	  to be used as a secure replacement for the 128-bit hash functions
962	  MD4, MD5 and its predecessor RIPEMD
963	  (not to be confused with RIPEMD-128).
964
965	  Its speed is comparable to SHA-1 and there are no known attacks
966	  against RIPEMD-160.
967
968	  Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel.
969	  See https://homes.esat.kuleuven.be/~bosselae/ripemd160.html
970	  for further information.
971
972config CRYPTO_SHA1
973	tristate "SHA-1"
974	select CRYPTO_HASH
975	select CRYPTO_LIB_SHA1
976	help
977	  SHA-1 secure hash algorithm (FIPS 180, ISO/IEC 10118-3), including
978	  HMAC support.
979
980config CRYPTO_SHA256
981	tristate "SHA-224 and SHA-256"
982	select CRYPTO_HASH
983	select CRYPTO_LIB_SHA256
984	help
985	  SHA-224 and SHA-256 secure hash algorithms (FIPS 180, ISO/IEC
986	  10118-3), including HMAC support.
987
988	  This is required for IPsec AH (XFRM_AH) and IPsec ESP (XFRM_ESP).
989	  Used by the btrfs filesystem, Ceph, NFS, and SMB.
990
991config CRYPTO_SHA512
992	tristate "SHA-384 and SHA-512"
993	select CRYPTO_HASH
994	select CRYPTO_LIB_SHA512
995	help
996	  SHA-384 and SHA-512 secure hash algorithms (FIPS 180, ISO/IEC
997	  10118-3), including HMAC support.
998
999config CRYPTO_SHA3
1000	tristate "SHA-3"
1001	select CRYPTO_HASH
1002	select CRYPTO_LIB_SHA3
1003	help
1004	  SHA-3 secure hash algorithms (FIPS 202, ISO/IEC 10118-3)
1005
1006config CRYPTO_SM3_GENERIC
1007	tristate "SM3 (ShangMi 3)"
1008	select CRYPTO_HASH
1009	select CRYPTO_LIB_SM3
1010	help
1011	  SM3 (ShangMi 3) secure hash function (OSCCA GM/T 0004-2012, ISO/IEC 10118-3)
1012
1013	  This is part of the Chinese Commercial Cryptography suite.
1014
1015	  References:
1016	  http://www.oscca.gov.cn/UpFile/20101222141857786.pdf
1017	  https://datatracker.ietf.org/doc/html/draft-shen-sm3-hash
1018
1019config CRYPTO_STREEBOG
1020	tristate "Streebog"
1021	select CRYPTO_HASH
1022	help
1023	  Streebog Hash Function (GOST R 34.11-2012, RFC 6986, ISO/IEC 10118-3)
1024
1025	  This is one of the Russian cryptographic standard algorithms (called
1026	  GOST algorithms). This setting enables two hash algorithms with
1027	  256 and 512 bits output.
1028
1029	  References:
1030	  https://tc26.ru/upload/iblock/fed/feddbb4d26b685903faa2ba11aea43f6.pdf
1031	  https://tools.ietf.org/html/rfc6986
1032
1033config CRYPTO_WP512
1034	tristate "Whirlpool"
1035	select CRYPTO_HASH
1036	help
1037	  Whirlpool hash function (ISO/IEC 10118-3)
1038
1039	  512, 384 and 256-bit hashes.
1040
1041	  Whirlpool-512 is part of the NESSIE cryptographic primitives.
1042
1043	  See https://web.archive.org/web/20171129084214/http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html
1044	  for further information.
1045
1046config CRYPTO_XCBC
1047	tristate "XCBC-MAC (Extended Cipher Block Chaining MAC)"
1048	select CRYPTO_HASH
1049	select CRYPTO_MANAGER
1050	help
1051	  XCBC-MAC (Extended Cipher Block Chaining Message Authentication
1052	  Code) (RFC3566)
1053
1054config CRYPTO_XXHASH
1055	tristate "xxHash"
1056	select CRYPTO_HASH
1057	select XXHASH
1058	help
1059	  xxHash non-cryptographic hash algorithm
1060
1061	  Extremely fast, working at speeds close to RAM limits.
1062
1063	  Used by the btrfs filesystem.
1064
1065endmenu
1066
1067menu "CRCs (cyclic redundancy checks)"
1068
1069config CRYPTO_CRC32C
1070	tristate "CRC32c"
1071	select CRYPTO_HASH
1072	select CRC32
1073	help
1074	  CRC32c CRC algorithm with the iSCSI polynomial (RFC 3385 and RFC 3720)
1075
1076	  A 32-bit CRC (cyclic redundancy check) with a polynomial defined
1077	  by G. Castagnoli, S. Braeuer and M. Herrman in "Optimization of Cyclic
1078	  Redundancy-Check Codes with 24 and 32 Parity Bits", IEEE Transactions
1079	  on Communications, Vol. 41, No. 6, June 1993, selected for use with
1080	  iSCSI.
1081
1082	  Used by btrfs, ext4, jbd2, NVMeoF/TCP, and iSCSI.
1083
1084config CRYPTO_CRC32
1085	tristate "CRC32"
1086	select CRYPTO_HASH
1087	select CRC32
1088	help
1089	  CRC32 CRC algorithm (IEEE 802.3)
1090
1091	  Used by RoCEv2 and f2fs.
1092
1093endmenu
1094
1095menu "Compression"
1096
1097config CRYPTO_DEFLATE
1098	tristate "Deflate"
1099	select CRYPTO_ALGAPI
1100	select CRYPTO_ACOMP2
1101	select ZLIB_INFLATE
1102	select ZLIB_DEFLATE
1103	help
1104	  Deflate compression algorithm (RFC1951)
1105
1106	  Used by IPSec with the IPCOMP protocol (RFC3173, RFC2394)
1107
1108config CRYPTO_LZO
1109	tristate "LZO"
1110	select CRYPTO_ALGAPI
1111	select CRYPTO_ACOMP2
1112	select LZO_COMPRESS
1113	select LZO_DECOMPRESS
1114	help
1115	  LZO compression algorithm
1116
1117	  See https://www.oberhumer.com/opensource/lzo/ for further information.
1118
1119config CRYPTO_842
1120	tristate "842"
1121	select CRYPTO_ALGAPI
1122	select CRYPTO_ACOMP2
1123	select 842_COMPRESS
1124	select 842_DECOMPRESS
1125	help
1126	  842 compression algorithm by IBM
1127
1128	  See https://github.com/plauth/lib842 for further information.
1129
1130config CRYPTO_LZ4
1131	tristate "LZ4"
1132	select CRYPTO_ALGAPI
1133	select CRYPTO_ACOMP2
1134	select LZ4_COMPRESS
1135	select LZ4_DECOMPRESS
1136	help
1137	  LZ4 compression algorithm
1138
1139	  See https://github.com/lz4/lz4 for further information.
1140
1141config CRYPTO_LZ4HC
1142	tristate "LZ4HC"
1143	select CRYPTO_ALGAPI
1144	select CRYPTO_ACOMP2
1145	select LZ4HC_COMPRESS
1146	select LZ4_DECOMPRESS
1147	help
1148	  LZ4 high compression mode algorithm
1149
1150	  See https://github.com/lz4/lz4 for further information.
1151
1152config CRYPTO_ZSTD
1153	tristate "Zstd"
1154	select CRYPTO_ALGAPI
1155	select CRYPTO_ACOMP2
1156	select ZSTD_COMPRESS
1157	select ZSTD_DECOMPRESS
1158	help
1159	  zstd compression algorithm
1160
1161	  See https://github.com/facebook/zstd for further information.
1162
1163endmenu
1164
1165menu "Random number generation"
1166
1167menuconfig CRYPTO_DRBG_MENU
1168	tristate "NIST SP800-90A DRBG (Deterministic Random Bit Generator)"
1169	help
1170	  DRBG (Deterministic Random Bit Generator) (NIST SP800-90A)
1171
1172	  In the following submenu, one or more of the DRBG types must be selected.
1173
1174if CRYPTO_DRBG_MENU
1175
1176config CRYPTO_DRBG_HMAC
1177	bool
1178	default y
1179	select CRYPTO_HMAC
1180	select CRYPTO_SHA512
1181
1182config CRYPTO_DRBG_HASH
1183	bool "Hash_DRBG"
1184	select CRYPTO_SHA256
1185	help
1186	  Hash_DRBG variant as defined in NIST SP800-90A.
1187
1188	  This uses the SHA-1, SHA-256, SHA-384, or SHA-512 hash algorithms.
1189
1190config CRYPTO_DRBG_CTR
1191	bool "CTR_DRBG"
1192	select CRYPTO_DF80090A
1193	help
1194	  CTR_DRBG variant as defined in NIST SP800-90A.
1195
1196	  This uses the AES cipher algorithm with the counter block mode.
1197
1198config CRYPTO_DRBG
1199	tristate
1200	default CRYPTO_DRBG_MENU
1201	select CRYPTO_RNG
1202	select CRYPTO_JITTERENTROPY
1203
1204endif	# if CRYPTO_DRBG_MENU
1205
1206config CRYPTO_JITTERENTROPY
1207	tristate "CPU Jitter Non-Deterministic RNG (Random Number Generator)"
1208	select CRYPTO_RNG
1209	select CRYPTO_SHA3
1210	help
1211	  CPU Jitter RNG (Random Number Generator) from the Jitterentropy library
1212
1213	  A non-physical non-deterministic ("true") RNG (e.g., an entropy source
1214	  compliant with NIST SP800-90B) intended to provide a seed to a
1215	  deterministic RNG (e.g., per NIST SP800-90C).
1216	  This RNG does not perform any cryptographic whitening of the generated
1217	  random numbers.
1218
1219	  See https://www.chronox.de/jent/
1220
1221if CRYPTO_JITTERENTROPY
1222if CRYPTO_FIPS && EXPERT
1223
1224choice
1225	prompt "CPU Jitter RNG Memory Size"
1226	default CRYPTO_JITTERENTROPY_MEMSIZE_2
1227	help
1228	  The Jitter RNG measures the execution time of memory accesses.
1229	  Multiple consecutive memory accesses are performed. If the memory
1230	  size fits into a cache (e.g. L1), only the memory access timing
1231	  to that cache is measured. The closer the cache is to the CPU
1232	  the less variations are measured and thus the less entropy is
1233	  obtained. Thus, if the memory size fits into the L1 cache, the
1234	  obtained entropy is less than if the memory size fits within
1235	  L1 + L2, which in turn is less if the memory fits into
1236	  L1 + L2 + L3. Thus, by selecting a different memory size,
1237	  the entropy rate produced by the Jitter RNG can be modified.
1238
1239	config CRYPTO_JITTERENTROPY_MEMSIZE_2
1240		bool "2048 Bytes (default)"
1241
1242	config CRYPTO_JITTERENTROPY_MEMSIZE_128
1243		bool "128 kBytes"
1244
1245	config CRYPTO_JITTERENTROPY_MEMSIZE_1024
1246		bool "1024 kBytes"
1247
1248	config CRYPTO_JITTERENTROPY_MEMSIZE_8192
1249		bool "8192 kBytes"
1250endchoice
1251
1252config CRYPTO_JITTERENTROPY_MEMORY_BLOCKS
1253	int
1254	default 64 if CRYPTO_JITTERENTROPY_MEMSIZE_2
1255	default 512 if CRYPTO_JITTERENTROPY_MEMSIZE_128
1256	default 1024 if CRYPTO_JITTERENTROPY_MEMSIZE_1024
1257	default 4096 if CRYPTO_JITTERENTROPY_MEMSIZE_8192
1258
1259config CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE
1260	int
1261	default 32 if CRYPTO_JITTERENTROPY_MEMSIZE_2
1262	default 256 if CRYPTO_JITTERENTROPY_MEMSIZE_128
1263	default 1024 if CRYPTO_JITTERENTROPY_MEMSIZE_1024
1264	default 2048 if CRYPTO_JITTERENTROPY_MEMSIZE_8192
1265
1266config CRYPTO_JITTERENTROPY_OSR
1267	int "CPU Jitter RNG Oversampling Rate"
1268	range 1 15
1269	default 3
1270	help
1271	  The Jitter RNG allows the specification of an oversampling rate (OSR).
1272	  The Jitter RNG operation requires a fixed amount of timing
1273	  measurements to produce one output block of random numbers. The
1274	  OSR value is multiplied with the amount of timing measurements to
1275	  generate one output block. Thus, the timing measurement is oversampled
1276	  by the OSR factor. The oversampling allows the Jitter RNG to operate
1277	  on hardware whose timers deliver limited amount of entropy (e.g.
1278	  the timer is coarse) by setting the OSR to a higher value. The
1279	  trade-off, however, is that the Jitter RNG now requires more time
1280	  to generate random numbers.
1281
1282config CRYPTO_JITTERENTROPY_TESTINTERFACE
1283	bool "CPU Jitter RNG Test Interface"
1284	help
1285	  The test interface allows a privileged process to capture
1286	  the raw unconditioned high resolution time stamp noise that
1287	  is collected by the Jitter RNG for statistical analysis. As
1288	  this data is used at the same time to generate random bits,
1289	  the Jitter RNG operates in an insecure mode as long as the
1290	  recording is enabled. This interface therefore is only
1291	  intended for testing purposes and is not suitable for
1292	  production systems.
1293
1294	  The raw noise data can be obtained using the jent_raw_hires
1295	  debugfs file. Using the option
1296	  jitterentropy_testing.boot_raw_hires_test=1 the raw noise of
1297	  the first 1000 entropy events since boot can be sampled.
1298
1299	  If unsure, select N.
1300
1301endif	# if CRYPTO_FIPS && EXPERT
1302
1303if !(CRYPTO_FIPS && EXPERT)
1304
1305config CRYPTO_JITTERENTROPY_MEMORY_BLOCKS
1306	int
1307	default 64
1308
1309config CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE
1310	int
1311	default 32
1312
1313config CRYPTO_JITTERENTROPY_OSR
1314	int
1315	default 1
1316
1317config CRYPTO_JITTERENTROPY_TESTINTERFACE
1318	bool
1319
1320endif	# if !(CRYPTO_FIPS && EXPERT)
1321endif	# if CRYPTO_JITTERENTROPY
1322
1323config CRYPTO_KDF800108_CTR
1324	tristate
1325	select CRYPTO_HMAC
1326	select CRYPTO_SHA256
1327
1328config CRYPTO_DF80090A
1329	tristate
1330	select CRYPTO_AES
1331	select CRYPTO_CTR
1332
1333endmenu
1334menu "Userspace interface"
1335
1336config CRYPTO_USER_API
1337	tristate
1338
1339config CRYPTO_USER_API_HASH
1340	tristate "Hash algorithms"
1341	depends on NET
1342	select CRYPTO_HASH
1343	select CRYPTO_USER_API
1344	help
1345	  Enable the userspace interface for hash algorithms.
1346
1347	  See Documentation/crypto/userspace-if.rst and
1348	  https://www.chronox.de/libkcapi/html/index.html
1349
1350config CRYPTO_USER_API_SKCIPHER
1351	tristate "Symmetric key cipher algorithms"
1352	depends on NET
1353	select CRYPTO_SKCIPHER
1354	select CRYPTO_USER_API
1355	help
1356	  Enable the userspace interface for symmetric key cipher algorithms.
1357
1358	  See Documentation/crypto/userspace-if.rst and
1359	  https://www.chronox.de/libkcapi/html/index.html
1360
1361config CRYPTO_USER_API_RNG
1362	tristate "RNG (random number generator) algorithms"
1363	depends on NET
1364	select CRYPTO_RNG
1365	select CRYPTO_USER_API
1366	help
1367	  Enable the userspace interface for RNG (random number generator)
1368	  algorithms.
1369
1370	  See Documentation/crypto/userspace-if.rst and
1371	  https://www.chronox.de/libkcapi/html/index.html
1372
1373config CRYPTO_USER_API_RNG_CAVP
1374	bool "Enable CAVP testing of DRBG"
1375	depends on CRYPTO_USER_API_RNG && CRYPTO_DRBG
1376	help
1377	  Enable extra APIs in the userspace interface for NIST CAVP
1378	  (Cryptographic Algorithm Validation Program) testing:
1379	  - resetting DRBG entropy
1380	  - providing Additional Data
1381
1382	  This should only be enabled for CAVP testing. You should say
1383	  no unless you know what this is.
1384
1385config CRYPTO_USER_API_AEAD
1386	tristate "AEAD cipher algorithms"
1387	depends on NET
1388	select CRYPTO_AEAD
1389	select CRYPTO_SKCIPHER
1390	select CRYPTO_USER_API
1391	help
1392	  Enable the userspace interface for AEAD cipher algorithms.
1393
1394	  See Documentation/crypto/userspace-if.rst and
1395	  https://www.chronox.de/libkcapi/html/index.html
1396
1397config CRYPTO_USER_API_ENABLE_OBSOLETE
1398	bool "Obsolete cryptographic algorithms"
1399	depends on CRYPTO_USER_API
1400	default y
1401	help
1402	  Allow obsolete cryptographic algorithms to be selected that have
1403	  already been phased out from internal use by the kernel, and are
1404	  only useful for userspace clients that still rely on them.
1405
1406endmenu
1407
1408if !KMSAN # avoid false positives from assembly
1409if ARM
1410source "arch/arm/crypto/Kconfig"
1411endif
1412if ARM64
1413source "arch/arm64/crypto/Kconfig"
1414endif
1415if LOONGARCH
1416source "arch/loongarch/crypto/Kconfig"
1417endif
1418if MIPS
1419source "arch/mips/crypto/Kconfig"
1420endif
1421if PPC
1422source "arch/powerpc/crypto/Kconfig"
1423endif
1424if RISCV
1425source "arch/riscv/crypto/Kconfig"
1426endif
1427if S390
1428source "arch/s390/crypto/Kconfig"
1429endif
1430if SPARC
1431source "arch/sparc/crypto/Kconfig"
1432endif
1433if X86
1434source "arch/x86/crypto/Kconfig"
1435endif
1436endif
1437
1438source "drivers/crypto/Kconfig"
1439source "crypto/asymmetric_keys/Kconfig"
1440source "certs/Kconfig"
1441source "crypto/krb5/Kconfig"
1442
1443endif	# if CRYPTO
1444