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