mirror of https://github.com/torvalds/linux.git
crypto: ansi_cprng - Remove unused ansi_cprng algorithm
Remove ansi_cprng, since it's obsolete and unused, as confirmed at https://lore.kernel.org/r/aQxpnckYMgAAOLpZ@gondor.apana.org.au/ This was originally added in 2008, apparently as a FIPS approved random number generator. Whether this has ever belonged upstream is questionable. Either way, ansi_cprng is no longer usable for this purpose, since it's been superseded by the more modern algorithms in crypto/drbg.c, and FIPS itself no longer allows it. (NIST SP 800-131A Rev 1 (2015) says that RNGs based on ANSI X9.31 will be disallowed after 2015. NIST SP 800-131A Rev 2 (2019) confirms they are now disallowed.) Therefore, there is no reason to keep it around. Suggested-by: Herbert Xu <herbert@gondor.apana.org.au> Cc: Haotian Zhang <vulab@iscas.ac.cn> Cc: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
79492d5adf
commit
c7dcb041ce
|
|
@ -302,10 +302,9 @@ follows:
|
|||
|
||||
|
||||
Depending on the RNG type, the RNG must be seeded. The seed is provided
|
||||
using the setsockopt interface to set the key. For example, the
|
||||
ansi_cprng requires a seed. The DRBGs do not require a seed, but may be
|
||||
seeded. The seed is also known as a *Personalization String* in NIST SP 800-90A
|
||||
standard.
|
||||
using the setsockopt interface to set the key. The SP800-90A DRBGs do
|
||||
not require a seed, but may be seeded. The seed is also known as a
|
||||
*Personalization String* in NIST SP 800-90A standard.
|
||||
|
||||
Using the read()/recvmsg() system calls, random numbers can be obtained.
|
||||
The kernel generates at most 128 bytes in one call. If user space
|
||||
|
|
|
|||
|
|
@ -6605,7 +6605,6 @@ CRYPTOGRAPHIC RANDOM NUMBER GENERATOR
|
|||
M: Neil Horman <nhorman@tuxdriver.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
F: crypto/ansi_cprng.c
|
||||
F: crypto/rng.c
|
||||
|
||||
CS3308 MEDIA DRIVER
|
||||
|
|
|
|||
|
|
@ -233,4 +233,3 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
|||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_CRYPTO_GCM=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -75,5 +75,4 @@ CONFIG_MINIX_FS=y
|
|||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -126,7 +126,6 @@ CONFIG_CRYPTO_SHA256=y
|
|||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_MARVELL_CESA=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
|
|
|
|||
|
|
@ -119,4 +119,3 @@ CONFIG_DEBUG_SPINLOCK=y
|
|||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -92,4 +92,3 @@ CONFIG_NLS_UTF8=m
|
|||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_FTRACE is not set
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -228,7 +228,6 @@ CONFIG_CRYPTO_DES=y
|
|||
CONFIG_CRYPTO_CBC=y
|
||||
CONFIG_CRYPTO_CTR=y
|
||||
CONFIG_CRYPTO_XCBC=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||
CONFIG_DMA_CMA=y
|
||||
|
|
|
|||
|
|
@ -177,7 +177,6 @@ CONFIG_NLS_CODEPAGE_437=y
|
|||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
|
|
|
|||
|
|
@ -78,4 +78,3 @@ CONFIG_DEBUG_USER=y
|
|||
CONFIG_DEBUG_LL=y
|
||||
CONFIG_DEBUG_MMP_UART3=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -121,4 +121,3 @@ CONFIG_DEBUG_KERNEL=y
|
|||
CONFIG_SCHEDSTATS=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -220,7 +220,6 @@ CONFIG_CRYPTO_ECB=y
|
|||
CONFIG_CRYPTO_PCBC=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
|
|
|
|||
|
|
@ -145,4 +145,3 @@ CONFIG_LATENCYTOP=y
|
|||
# CONFIG_FTRACE is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -48,4 +48,3 @@ CONFIG_MAGIC_SYSRQ=y
|
|||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -106,5 +106,4 @@ CONFIG_DEBUG_SPINLOCK=y
|
|||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
# CONFIG_FTRACE is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -59,4 +59,3 @@ CONFIG_DEBUG_USER=y
|
|||
CONFIG_DEBUG_LL=y
|
||||
CONFIG_DEBUG_MMP_UART2=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -228,7 +228,6 @@ CONFIG_CRYPTO_KHAZAD=m
|
|||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
|
|
|
|||
|
|
@ -1783,7 +1783,6 @@ CONFIG_CRYPTO_CHACHA20=m
|
|||
CONFIG_CRYPTO_BENCHMARK=m
|
||||
CONFIG_CRYPTO_ECHAINIV=y
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
CONFIG_CRYPTO_USER_API_RNG=m
|
||||
CONFIG_CRYPTO_GHASH_ARM64_CE=y
|
||||
CONFIG_CRYPTO_SHA3_ARM64=m
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ CONFIG_INET=y
|
|||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_FRAME_WARN=0
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
|
|
|
|||
|
|
@ -86,5 +86,4 @@ CONFIG_PANIC_ON_OOPS=y
|
|||
# CONFIG_SCHED_DEBUG is not set
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
# CONFIG_CRYPTO_ECHAINIV is not set
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -591,7 +591,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -548,7 +548,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -568,7 +568,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -540,7 +540,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -550,7 +550,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -567,7 +567,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -654,7 +654,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -540,7 +540,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -541,7 +541,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -557,7 +557,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -84,7 +84,6 @@ CONFIG_FSCACHE=y
|
|||
CONFIG_CRAMFS=y
|
||||
CONFIG_SQUASHFS=y
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_PRINTK_TIME=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
|
|
|
|||
|
|
@ -538,7 +538,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -538,7 +538,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
|
|
|
|||
|
|
@ -200,7 +200,6 @@ CONFIG_CRYPTO_LZO=m
|
|||
CONFIG_CRYPTO_842=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -195,7 +195,6 @@ CONFIG_CRYPTO_LZO=m
|
|||
CONFIG_CRYPTO_842=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -195,7 +195,6 @@ CONFIG_CRYPTO_LZO=m
|
|||
CONFIG_CRYPTO_842=m
|
||||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_DRBG_HASH=y
|
||||
CONFIG_CRYPTO_DRBG_CTR=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -800,7 +800,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
CONFIG_CRYPTO_USER_API_RNG=m
|
||||
|
|
|
|||
|
|
@ -784,7 +784,6 @@ CONFIG_CRYPTO_842=m
|
|||
CONFIG_CRYPTO_LZ4=m
|
||||
CONFIG_CRYPTO_LZ4HC=m
|
||||
CONFIG_CRYPTO_ZSTD=m
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=m
|
||||
CONFIG_CRYPTO_JITTERENTROPY_OSR=1
|
||||
CONFIG_CRYPTO_USER_API_HASH=m
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||
|
|
|
|||
|
|
@ -98,4 +98,3 @@ CONFIG_NLS_ISO8859_1=y
|
|||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -87,5 +87,4 @@ CONFIG_DEBUG_KERNEL=y
|
|||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -117,4 +117,3 @@ CONFIG_DETECT_HUNG_TASK=y
|
|||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DWARF_UNWINDER=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -66,6 +66,5 @@ CONFIG_LOGO=y
|
|||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=y
|
||||
|
|
|
|||
|
|
@ -127,4 +127,3 @@ CONFIG_NLS_ISO8859_1=y
|
|||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -111,4 +111,3 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
|||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -109,4 +109,3 @@ CONFIG_NLS_KOI8_U=y
|
|||
CONFIG_NLS_UTF8=y
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -54,5 +54,4 @@ CONFIG_CRYPTO_CBC=y
|
|||
CONFIG_CRYPTO_ECB=y
|
||||
CONFIG_CRYPTO_PCBC=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -110,4 +110,3 @@ CONFIG_SMB_FS=m
|
|||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_932=y
|
||||
CONFIG_SH_STANDARD_BIOS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -57,4 +57,3 @@ CONFIG_TMPFS=y
|
|||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_SH_STANDARD_BIOS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -87,5 +87,4 @@ CONFIG_TMPFS=y
|
|||
CONFIG_NFS_FS=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -104,4 +104,3 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
|||
CONFIG_CRYPTO_ECB=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -102,4 +102,3 @@ CONFIG_4KSTACKS=y
|
|||
CONFIG_CRYPTO_ECB=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -86,4 +86,3 @@ CONFIG_TMPFS=y
|
|||
CONFIG_MINIX_FS=y
|
||||
CONFIG_NLS_CODEPAGE_932=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -91,4 +91,3 @@ CONFIG_TMPFS=y
|
|||
CONFIG_MINIX_FS=y
|
||||
CONFIG_NLS_CODEPAGE_932=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -135,4 +135,3 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
|||
CONFIG_SH_STANDARD_BIOS=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -212,4 +212,3 @@ CONFIG_FUNCTION_TRACER=y
|
|||
CONFIG_DMA_API_DEBUG=y
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
CONFIG_DWARF_UNWINDER=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -99,5 +99,4 @@ CONFIG_FRAME_POINTER=y
|
|||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -92,4 +92,3 @@ CONFIG_CRAMFS=y
|
|||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_NFSD=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -51,4 +51,3 @@ CONFIG_PROC_KCORE=y
|
|||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -95,4 +95,3 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
|||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_CRYPTO_ECB=m
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -121,4 +121,3 @@ CONFIG_NLS_ISO8859_1=y
|
|||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -54,4 +54,3 @@ CONFIG_PRINTK_TIME=y
|
|||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_SH_STANDARD_BIOS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -127,4 +127,3 @@ CONFIG_NLS_ISO8859_1=y
|
|||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -52,4 +52,3 @@ CONFIG_ROOT_NFS=y
|
|||
CONFIG_PARTITION_ADVANCED=y
|
||||
# CONFIG_MSDOS_PARTITION is not set
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ CONFIG_EXT2_FS=y
|
|||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -102,4 +102,3 @@ CONFIG_NFS_FS=y
|
|||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -119,6 +119,5 @@ CONFIG_CRYPTO_ECB=m
|
|||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=y
|
||||
|
|
|
|||
|
|
@ -191,5 +191,4 @@ CONFIG_CRYPTO_TEA=y
|
|||
CONFIG_CRYPTO_TWOFISH=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -51,4 +51,3 @@ CONFIG_THERMAL=y
|
|||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -81,4 +81,3 @@ CONFIG_DEBUG_KERNEL=y
|
|||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -111,4 +111,3 @@ CONFIG_NLS_KOI8_U=y
|
|||
CONFIG_NLS_UTF8=y
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -145,5 +145,4 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
|||
CONFIG_LATENCYTOP=y
|
||||
# CONFIG_FTRACE is not set
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -113,5 +113,4 @@ CONFIG_DEBUG_KERNEL=y
|
|||
CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -49,4 +49,3 @@ CONFIG_NFS_FS=y
|
|||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_SH_STANDARD_BIOS=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -98,4 +98,3 @@ CONFIG_DEBUG_VM=y
|
|||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_SH_STANDARD_BIOS=y
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -262,4 +262,3 @@ CONFIG_CRYPTO_KHAZAD=m
|
|||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -81,4 +81,3 @@ CONFIG_NLS_CODEPAGE_932=y
|
|||
CONFIG_NLS_ISO8859_1=y
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
|
|||
|
|
@ -143,5 +143,4 @@ CONFIG_FRAME_POINTER=y
|
|||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_DUMP_CODE is not set
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -92,5 +92,4 @@ CONFIG_CRYPTO_CAST5=m
|
|||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
|
|
|
|||
|
|
@ -228,7 +228,6 @@ CONFIG_CRYPTO_SEED=m
|
|||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_VCC=m
|
||||
CONFIG_PATA_CMD64X=y
|
||||
CONFIG_IP_PNP=y
|
||||
|
|
|
|||
|
|
@ -133,4 +133,3 @@ CONFIG_STACKTRACE=y
|
|||
CONFIG_RCU_TRACE=y
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_S32C1I_SELFTEST is not set
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
|
|
|
|||
|
|
@ -121,4 +121,3 @@ CONFIG_RCU_TRACE=y
|
|||
# CONFIG_FTRACE is not set
|
||||
CONFIG_LD_NO_RELAX=y
|
||||
# CONFIG_S32C1I_SELFTEST is not set
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
|
|
|
|||
|
|
@ -28,4 +28,3 @@ CONFIG_PROC_KCORE=y
|
|||
CONFIG_TMPFS=y
|
||||
# CONFIG_FRAME_POINTER is not set
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
|
|
|
|||
|
|
@ -122,4 +122,3 @@ CONFIG_RCU_TRACE=y
|
|||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_LD_NO_RELAX is not set
|
||||
# CONFIG_CRYPTO_ECHAINIV is not set
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
|
|
|
|||
|
|
@ -125,4 +125,3 @@ CONFIG_RCU_TRACE=y
|
|||
# CONFIG_FTRACE is not set
|
||||
CONFIG_LD_NO_RELAX=y
|
||||
# CONFIG_S32C1I_SELFTEST is not set
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
|
|
|
|||
|
|
@ -92,7 +92,6 @@ CONFIG_NLS_ISO8859_1=y
|
|||
CONFIG_CRYPTO_ECHAINIV=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
CONFIG_CRYPTO_DEV_VIRTIO=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
|
|
|
|||
|
|
@ -98,7 +98,6 @@ CONFIG_NLS_ISO8859_1=y
|
|||
CONFIG_CRYPTO_ECHAINIV=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ menu "Crypto core or helper"
|
|||
|
||||
config CRYPTO_FIPS
|
||||
bool "FIPS 200 compliance"
|
||||
depends on (CRYPTO_ANSI_CPRNG || CRYPTO_DRBG) && CRYPTO_SELFTESTS
|
||||
depends on CRYPTO_DRBG && CRYPTO_SELFTESTS
|
||||
depends on (MODULE_SIG || !MODULES)
|
||||
help
|
||||
This option enables the fips boot option which is
|
||||
|
|
@ -1169,17 +1169,6 @@ endmenu
|
|||
|
||||
menu "Random number generation"
|
||||
|
||||
config CRYPTO_ANSI_CPRNG
|
||||
tristate "ANSI PRNG (Pseudo Random Number Generator)"
|
||||
select CRYPTO_AES
|
||||
select CRYPTO_RNG
|
||||
help
|
||||
Pseudo RNG (random number generator) (ANSI X9.31 Appendix A.2.4)
|
||||
|
||||
This uses the AES cipher algorithm.
|
||||
|
||||
Note that this option must be enabled if CRYPTO_FIPS is selected
|
||||
|
||||
menuconfig CRYPTO_DRBG_MENU
|
||||
tristate "NIST SP800-90A DRBG (Deterministic Random Bit Generator)"
|
||||
help
|
||||
|
|
|
|||
|
|
@ -163,7 +163,6 @@ obj-$(CONFIG_CRYPTO_LZ4HC) += lz4hc.o
|
|||
obj-$(CONFIG_CRYPTO_XXHASH) += xxhash_generic.o
|
||||
obj-$(CONFIG_CRYPTO_842) += 842.o
|
||||
obj-$(CONFIG_CRYPTO_RNG2) += rng.o
|
||||
obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
|
||||
obj-$(CONFIG_CRYPTO_DRBG) += drbg.o
|
||||
obj-$(CONFIG_CRYPTO_JITTERENTROPY) += jitterentropy_rng.o
|
||||
CFLAGS_jitterentropy.o = -O0
|
||||
|
|
|
|||
|
|
@ -1,474 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/*
|
||||
* PRNG: Pseudo Random Number Generator
|
||||
* Based on NIST Recommended PRNG From ANSI X9.31 Appendix A.2.4 using
|
||||
* AES 128 cipher
|
||||
*
|
||||
* (C) Neil Horman <nhorman@tuxdriver.com>
|
||||
*/
|
||||
|
||||
#include <crypto/internal/cipher.h>
|
||||
#include <crypto/internal/rng.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#define DEFAULT_PRNG_KEY "0123456789abcdef"
|
||||
#define DEFAULT_PRNG_KSZ 16
|
||||
#define DEFAULT_BLK_SZ 16
|
||||
#define DEFAULT_V_SEED "zaybxcwdveuftgsh"
|
||||
|
||||
/*
|
||||
* Flags for the prng_context flags field
|
||||
*/
|
||||
|
||||
#define PRNG_FIXED_SIZE 0x1
|
||||
#define PRNG_NEED_RESET 0x2
|
||||
|
||||
/*
|
||||
* Note: DT is our counter value
|
||||
* I is our intermediate value
|
||||
* V is our seed vector
|
||||
* See http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
|
||||
* for implementation details
|
||||
*/
|
||||
|
||||
|
||||
struct prng_context {
|
||||
spinlock_t prng_lock;
|
||||
unsigned char rand_data[DEFAULT_BLK_SZ];
|
||||
unsigned char last_rand_data[DEFAULT_BLK_SZ];
|
||||
unsigned char DT[DEFAULT_BLK_SZ];
|
||||
unsigned char I[DEFAULT_BLK_SZ];
|
||||
unsigned char V[DEFAULT_BLK_SZ];
|
||||
u32 rand_data_valid;
|
||||
struct crypto_cipher *tfm;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
static int dbg;
|
||||
|
||||
static void hexdump(char *note, unsigned char *buf, unsigned int len)
|
||||
{
|
||||
if (dbg) {
|
||||
printk(KERN_CRIT "%s", note);
|
||||
print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET,
|
||||
16, 1,
|
||||
buf, len, false);
|
||||
}
|
||||
}
|
||||
|
||||
#define dbgprint(format, args...) do {\
|
||||
if (dbg)\
|
||||
printk(format, ##args);\
|
||||
} while (0)
|
||||
|
||||
static void xor_vectors(unsigned char *in1, unsigned char *in2,
|
||||
unsigned char *out, unsigned int size)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
out[i] = in1[i] ^ in2[i];
|
||||
|
||||
}
|
||||
/*
|
||||
* Returns DEFAULT_BLK_SZ bytes of random data per call
|
||||
* returns 0 if generation succeeded, <0 if something went wrong
|
||||
*/
|
||||
static int _get_more_prng_bytes(struct prng_context *ctx, int cont_test)
|
||||
{
|
||||
int i;
|
||||
unsigned char tmp[DEFAULT_BLK_SZ];
|
||||
unsigned char *output = NULL;
|
||||
|
||||
|
||||
dbgprint(KERN_CRIT "Calling _get_more_prng_bytes for context %p\n",
|
||||
ctx);
|
||||
|
||||
hexdump("Input DT: ", ctx->DT, DEFAULT_BLK_SZ);
|
||||
hexdump("Input I: ", ctx->I, DEFAULT_BLK_SZ);
|
||||
hexdump("Input V: ", ctx->V, DEFAULT_BLK_SZ);
|
||||
|
||||
/*
|
||||
* This algorithm is a 3 stage state machine
|
||||
*/
|
||||
for (i = 0; i < 3; i++) {
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
/*
|
||||
* Start by encrypting the counter value
|
||||
* This gives us an intermediate value I
|
||||
*/
|
||||
memcpy(tmp, ctx->DT, DEFAULT_BLK_SZ);
|
||||
output = ctx->I;
|
||||
hexdump("tmp stage 0: ", tmp, DEFAULT_BLK_SZ);
|
||||
break;
|
||||
case 1:
|
||||
|
||||
/*
|
||||
* Next xor I with our secret vector V
|
||||
* encrypt that result to obtain our
|
||||
* pseudo random data which we output
|
||||
*/
|
||||
xor_vectors(ctx->I, ctx->V, tmp, DEFAULT_BLK_SZ);
|
||||
hexdump("tmp stage 1: ", tmp, DEFAULT_BLK_SZ);
|
||||
output = ctx->rand_data;
|
||||
break;
|
||||
case 2:
|
||||
/*
|
||||
* First check that we didn't produce the same
|
||||
* random data that we did last time around through this
|
||||
*/
|
||||
if (!memcmp(ctx->rand_data, ctx->last_rand_data,
|
||||
DEFAULT_BLK_SZ)) {
|
||||
if (cont_test) {
|
||||
panic("cprng %p Failed repetition check!\n",
|
||||
ctx);
|
||||
}
|
||||
|
||||
printk(KERN_ERR
|
||||
"ctx %p Failed repetition check!\n",
|
||||
ctx);
|
||||
|
||||
ctx->flags |= PRNG_NEED_RESET;
|
||||
return -EINVAL;
|
||||
}
|
||||
memcpy(ctx->last_rand_data, ctx->rand_data,
|
||||
DEFAULT_BLK_SZ);
|
||||
|
||||
/*
|
||||
* Lastly xor the random data with I
|
||||
* and encrypt that to obtain a new secret vector V
|
||||
*/
|
||||
xor_vectors(ctx->rand_data, ctx->I, tmp,
|
||||
DEFAULT_BLK_SZ);
|
||||
output = ctx->V;
|
||||
hexdump("tmp stage 2: ", tmp, DEFAULT_BLK_SZ);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* do the encryption */
|
||||
crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Now update our DT value
|
||||
*/
|
||||
for (i = DEFAULT_BLK_SZ - 1; i >= 0; i--) {
|
||||
ctx->DT[i] += 1;
|
||||
if (ctx->DT[i] != 0)
|
||||
break;
|
||||
}
|
||||
|
||||
dbgprint("Returning new block for context %p\n", ctx);
|
||||
ctx->rand_data_valid = 0;
|
||||
|
||||
hexdump("Output DT: ", ctx->DT, DEFAULT_BLK_SZ);
|
||||
hexdump("Output I: ", ctx->I, DEFAULT_BLK_SZ);
|
||||
hexdump("Output V: ", ctx->V, DEFAULT_BLK_SZ);
|
||||
hexdump("New Random Data: ", ctx->rand_data, DEFAULT_BLK_SZ);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Our exported functions */
|
||||
static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx,
|
||||
int do_cont_test)
|
||||
{
|
||||
unsigned char *ptr = buf;
|
||||
unsigned int byte_count = (unsigned int)nbytes;
|
||||
int err;
|
||||
|
||||
|
||||
spin_lock_bh(&ctx->prng_lock);
|
||||
|
||||
err = -EINVAL;
|
||||
if (ctx->flags & PRNG_NEED_RESET)
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* If the FIXED_SIZE flag is on, only return whole blocks of
|
||||
* pseudo random data
|
||||
*/
|
||||
err = -EINVAL;
|
||||
if (ctx->flags & PRNG_FIXED_SIZE) {
|
||||
if (nbytes < DEFAULT_BLK_SZ)
|
||||
goto done;
|
||||
byte_count = DEFAULT_BLK_SZ;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return 0 in case of success as mandated by the kernel
|
||||
* crypto API interface definition.
|
||||
*/
|
||||
err = 0;
|
||||
|
||||
dbgprint(KERN_CRIT "getting %d random bytes for context %p\n",
|
||||
byte_count, ctx);
|
||||
|
||||
|
||||
remainder:
|
||||
if (ctx->rand_data_valid == DEFAULT_BLK_SZ) {
|
||||
if (_get_more_prng_bytes(ctx, do_cont_test) < 0) {
|
||||
memset(buf, 0, nbytes);
|
||||
err = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy any data less than an entire block
|
||||
*/
|
||||
if (byte_count < DEFAULT_BLK_SZ) {
|
||||
empty_rbuf:
|
||||
while (ctx->rand_data_valid < DEFAULT_BLK_SZ) {
|
||||
*ptr = ctx->rand_data[ctx->rand_data_valid];
|
||||
ptr++;
|
||||
byte_count--;
|
||||
ctx->rand_data_valid++;
|
||||
if (byte_count == 0)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Now copy whole blocks
|
||||
*/
|
||||
for (; byte_count >= DEFAULT_BLK_SZ; byte_count -= DEFAULT_BLK_SZ) {
|
||||
if (ctx->rand_data_valid == DEFAULT_BLK_SZ) {
|
||||
if (_get_more_prng_bytes(ctx, do_cont_test) < 0) {
|
||||
memset(buf, 0, nbytes);
|
||||
err = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if (ctx->rand_data_valid > 0)
|
||||
goto empty_rbuf;
|
||||
memcpy(ptr, ctx->rand_data, DEFAULT_BLK_SZ);
|
||||
ctx->rand_data_valid += DEFAULT_BLK_SZ;
|
||||
ptr += DEFAULT_BLK_SZ;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now go back and get any remaining partial block
|
||||
*/
|
||||
if (byte_count)
|
||||
goto remainder;
|
||||
|
||||
done:
|
||||
spin_unlock_bh(&ctx->prng_lock);
|
||||
dbgprint(KERN_CRIT "returning %d from get_prng_bytes in context %p\n",
|
||||
err, ctx);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void free_prng_context(struct prng_context *ctx)
|
||||
{
|
||||
crypto_free_cipher(ctx->tfm);
|
||||
}
|
||||
|
||||
static int reset_prng_context(struct prng_context *ctx,
|
||||
const unsigned char *key, size_t klen,
|
||||
const unsigned char *V, const unsigned char *DT)
|
||||
{
|
||||
int ret;
|
||||
const unsigned char *prng_key;
|
||||
|
||||
spin_lock_bh(&ctx->prng_lock);
|
||||
ctx->flags |= PRNG_NEED_RESET;
|
||||
|
||||
prng_key = (key != NULL) ? key : (unsigned char *)DEFAULT_PRNG_KEY;
|
||||
|
||||
if (!key)
|
||||
klen = DEFAULT_PRNG_KSZ;
|
||||
|
||||
if (V)
|
||||
memcpy(ctx->V, V, DEFAULT_BLK_SZ);
|
||||
else
|
||||
memcpy(ctx->V, DEFAULT_V_SEED, DEFAULT_BLK_SZ);
|
||||
|
||||
if (DT)
|
||||
memcpy(ctx->DT, DT, DEFAULT_BLK_SZ);
|
||||
else
|
||||
memset(ctx->DT, 0, DEFAULT_BLK_SZ);
|
||||
|
||||
memset(ctx->rand_data, 0, DEFAULT_BLK_SZ);
|
||||
memset(ctx->last_rand_data, 0, DEFAULT_BLK_SZ);
|
||||
|
||||
ctx->rand_data_valid = DEFAULT_BLK_SZ;
|
||||
|
||||
ret = crypto_cipher_setkey(ctx->tfm, prng_key, klen);
|
||||
if (ret) {
|
||||
dbgprint(KERN_CRIT "PRNG: setkey() failed flags=%x\n",
|
||||
crypto_cipher_get_flags(ctx->tfm));
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
ctx->flags &= ~PRNG_NEED_RESET;
|
||||
out:
|
||||
spin_unlock_bh(&ctx->prng_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cprng_init(struct crypto_tfm *tfm)
|
||||
{
|
||||
struct prng_context *ctx = crypto_tfm_ctx(tfm);
|
||||
|
||||
spin_lock_init(&ctx->prng_lock);
|
||||
ctx->tfm = crypto_alloc_cipher("aes", 0, 0);
|
||||
if (IS_ERR(ctx->tfm)) {
|
||||
dbgprint(KERN_CRIT "Failed to alloc tfm for context %p\n",
|
||||
ctx);
|
||||
return PTR_ERR(ctx->tfm);
|
||||
}
|
||||
|
||||
if (reset_prng_context(ctx, NULL, DEFAULT_PRNG_KSZ, NULL, NULL) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* after allocation, we should always force the user to reset
|
||||
* so they don't inadvertently use the insecure default values
|
||||
* without specifying them intentially
|
||||
*/
|
||||
ctx->flags |= PRNG_NEED_RESET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cprng_exit(struct crypto_tfm *tfm)
|
||||
{
|
||||
free_prng_context(crypto_tfm_ctx(tfm));
|
||||
}
|
||||
|
||||
static int cprng_get_random(struct crypto_rng *tfm,
|
||||
const u8 *src, unsigned int slen,
|
||||
u8 *rdata, unsigned int dlen)
|
||||
{
|
||||
struct prng_context *prng = crypto_rng_ctx(tfm);
|
||||
|
||||
return get_prng_bytes(rdata, dlen, prng, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the cprng_registered reset method the seed value is
|
||||
* interpreted as the tuple { V KEY DT}
|
||||
* V and KEY are required during reset, and DT is optional, detected
|
||||
* as being present by testing the length of the seed
|
||||
*/
|
||||
static int cprng_reset(struct crypto_rng *tfm,
|
||||
const u8 *seed, unsigned int slen)
|
||||
{
|
||||
struct prng_context *prng = crypto_rng_ctx(tfm);
|
||||
const u8 *key = seed + DEFAULT_BLK_SZ;
|
||||
const u8 *dt = NULL;
|
||||
|
||||
if (slen < DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ)
|
||||
return -EINVAL;
|
||||
|
||||
if (slen >= (2 * DEFAULT_BLK_SZ + DEFAULT_PRNG_KSZ))
|
||||
dt = key + DEFAULT_PRNG_KSZ;
|
||||
|
||||
reset_prng_context(prng, key, DEFAULT_PRNG_KSZ, seed, dt);
|
||||
|
||||
if (prng->flags & PRNG_NEED_RESET)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CRYPTO_FIPS
|
||||
static int fips_cprng_get_random(struct crypto_rng *tfm,
|
||||
const u8 *src, unsigned int slen,
|
||||
u8 *rdata, unsigned int dlen)
|
||||
{
|
||||
struct prng_context *prng = crypto_rng_ctx(tfm);
|
||||
|
||||
return get_prng_bytes(rdata, dlen, prng, 1);
|
||||
}
|
||||
|
||||
static int fips_cprng_reset(struct crypto_rng *tfm,
|
||||
const u8 *seed, unsigned int slen)
|
||||
{
|
||||
u8 rdata[DEFAULT_BLK_SZ];
|
||||
const u8 *key = seed + DEFAULT_BLK_SZ;
|
||||
int rc;
|
||||
|
||||
struct prng_context *prng = crypto_rng_ctx(tfm);
|
||||
|
||||
if (slen < DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ)
|
||||
return -EINVAL;
|
||||
|
||||
/* fips strictly requires seed != key */
|
||||
if (!memcmp(seed, key, DEFAULT_PRNG_KSZ))
|
||||
return -EINVAL;
|
||||
|
||||
rc = cprng_reset(tfm, seed, slen);
|
||||
|
||||
if (!rc)
|
||||
goto out;
|
||||
|
||||
/* this primes our continuity test */
|
||||
rc = get_prng_bytes(rdata, DEFAULT_BLK_SZ, prng, 0);
|
||||
prng->rand_data_valid = DEFAULT_BLK_SZ;
|
||||
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct rng_alg rng_algs[] = { {
|
||||
.generate = cprng_get_random,
|
||||
.seed = cprng_reset,
|
||||
.seedsize = DEFAULT_PRNG_KSZ + 2 * DEFAULT_BLK_SZ,
|
||||
.base = {
|
||||
.cra_name = "stdrng",
|
||||
.cra_driver_name = "ansi_cprng",
|
||||
.cra_priority = 100,
|
||||
.cra_ctxsize = sizeof(struct prng_context),
|
||||
.cra_module = THIS_MODULE,
|
||||
.cra_init = cprng_init,
|
||||
.cra_exit = cprng_exit,
|
||||
}
|
||||
#ifdef CONFIG_CRYPTO_FIPS
|
||||
}, {
|
||||
.generate = fips_cprng_get_random,
|
||||
.seed = fips_cprng_reset,
|
||||
.seedsize = DEFAULT_PRNG_KSZ + 2 * DEFAULT_BLK_SZ,
|
||||
.base = {
|
||||
.cra_name = "fips(ansi_cprng)",
|
||||
.cra_driver_name = "fips_ansi_cprng",
|
||||
.cra_priority = 300,
|
||||
.cra_ctxsize = sizeof(struct prng_context),
|
||||
.cra_module = THIS_MODULE,
|
||||
.cra_init = cprng_init,
|
||||
.cra_exit = cprng_exit,
|
||||
}
|
||||
#endif
|
||||
} };
|
||||
|
||||
/* Module initalization */
|
||||
static int __init prng_mod_init(void)
|
||||
{
|
||||
return crypto_register_rngs(rng_algs, ARRAY_SIZE(rng_algs));
|
||||
}
|
||||
|
||||
static void __exit prng_mod_fini(void)
|
||||
{
|
||||
crypto_unregister_rngs(rng_algs, ARRAY_SIZE(rng_algs));
|
||||
}
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Software Pseudo Random Number Generator");
|
||||
MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>");
|
||||
module_param(dbg, int, 0);
|
||||
MODULE_PARM_DESC(dbg, "Boolean to enable debugging (0/1 == off/on)");
|
||||
module_init(prng_mod_init);
|
||||
module_exit(prng_mod_fini);
|
||||
MODULE_ALIAS_CRYPTO("stdrng");
|
||||
MODULE_ALIAS_CRYPTO("ansi_cprng");
|
||||
MODULE_IMPORT_NS("CRYPTO_INTERNAL");
|
||||
|
|
@ -1758,10 +1758,6 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
|
|||
ret = min(ret, tcrypt_test("hmac(streebog512)"));
|
||||
break;
|
||||
|
||||
case 150:
|
||||
ret = min(ret, tcrypt_test("ansi_cprng"));
|
||||
break;
|
||||
|
||||
case 151:
|
||||
ret = min(ret, tcrypt_test("rfc4106(gcm(aes))"));
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -117,11 +117,6 @@ struct hash_test_suite {
|
|||
unsigned int count;
|
||||
};
|
||||
|
||||
struct cprng_test_suite {
|
||||
const struct cprng_testvec *vecs;
|
||||
unsigned int count;
|
||||
};
|
||||
|
||||
struct drbg_test_suite {
|
||||
const struct drbg_testvec *vecs;
|
||||
unsigned int count;
|
||||
|
|
@ -154,7 +149,6 @@ struct alg_test_desc {
|
|||
struct cipher_test_suite cipher;
|
||||
struct comp_test_suite comp;
|
||||
struct hash_test_suite hash;
|
||||
struct cprng_test_suite cprng;
|
||||
struct drbg_test_suite drbg;
|
||||
struct akcipher_test_suite akcipher;
|
||||
struct sig_test_suite sig;
|
||||
|
|
@ -3442,68 +3436,6 @@ static int test_acomp(struct crypto_acomp *tfm,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int test_cprng(struct crypto_rng *tfm,
|
||||
const struct cprng_testvec *template,
|
||||
unsigned int tcount)
|
||||
{
|
||||
const char *algo = crypto_tfm_alg_driver_name(crypto_rng_tfm(tfm));
|
||||
int err = 0, i, j, seedsize;
|
||||
u8 *seed;
|
||||
char result[32];
|
||||
|
||||
seedsize = crypto_rng_seedsize(tfm);
|
||||
|
||||
seed = kmalloc(seedsize, GFP_KERNEL);
|
||||
if (!seed) {
|
||||
printk(KERN_ERR "alg: cprng: Failed to allocate seed space "
|
||||
"for %s\n", algo);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for (i = 0; i < tcount; i++) {
|
||||
memset(result, 0, 32);
|
||||
|
||||
memcpy(seed, template[i].v, template[i].vlen);
|
||||
memcpy(seed + template[i].vlen, template[i].key,
|
||||
template[i].klen);
|
||||
memcpy(seed + template[i].vlen + template[i].klen,
|
||||
template[i].dt, template[i].dtlen);
|
||||
|
||||
err = crypto_rng_reset(tfm, seed, seedsize);
|
||||
if (err) {
|
||||
printk(KERN_ERR "alg: cprng: Failed to reset rng "
|
||||
"for %s\n", algo);
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (j = 0; j < template[i].loops; j++) {
|
||||
err = crypto_rng_get_bytes(tfm, result,
|
||||
template[i].rlen);
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR "alg: cprng: Failed to obtain "
|
||||
"the correct amount of random data for "
|
||||
"%s (requested %d)\n", algo,
|
||||
template[i].rlen);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
err = memcmp(result, template[i].result,
|
||||
template[i].rlen);
|
||||
if (err) {
|
||||
printk(KERN_ERR "alg: cprng: Test %d failed for %s\n",
|
||||
i, algo);
|
||||
hexdump(result, template[i].rlen);
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
kfree(seed);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int alg_test_cipher(const struct alg_test_desc *desc,
|
||||
const char *driver, u32 type, u32 mask)
|
||||
{
|
||||
|
|
@ -3550,29 +3482,6 @@ static int alg_test_comp(const struct alg_test_desc *desc, const char *driver,
|
|||
return err;
|
||||
}
|
||||
|
||||
static int alg_test_cprng(const struct alg_test_desc *desc, const char *driver,
|
||||
u32 type, u32 mask)
|
||||
{
|
||||
struct crypto_rng *rng;
|
||||
int err;
|
||||
|
||||
rng = crypto_alloc_rng(driver, type, mask);
|
||||
if (IS_ERR(rng)) {
|
||||
if (PTR_ERR(rng) == -ENOENT)
|
||||
return 0;
|
||||
printk(KERN_ERR "alg: cprng: Failed to load transform for %s: "
|
||||
"%ld\n", driver, PTR_ERR(rng));
|
||||
return PTR_ERR(rng);
|
||||
}
|
||||
|
||||
err = test_cprng(rng, desc->suite.cprng.vecs, desc->suite.cprng.count);
|
||||
|
||||
crypto_free_rng(rng);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
static int drbg_cavs_test(const struct drbg_testvec *test, int pr,
|
||||
const char *driver, u32 type, u32 mask)
|
||||
{
|
||||
|
|
@ -4170,12 +4079,6 @@ static const struct alg_test_desc alg_test_descs[] = {
|
|||
.suite = {
|
||||
.aead = __VECS(aegis128_tv_template)
|
||||
}
|
||||
}, {
|
||||
.alg = "ansi_cprng",
|
||||
.test = alg_test_cprng,
|
||||
.suite = {
|
||||
.cprng = __VECS(ansi_cprng_aes_tv_template)
|
||||
}
|
||||
}, {
|
||||
.alg = "authenc(hmac(md5),ecb(cipher_null))",
|
||||
.generic_driver = "authenc(hmac-md5-lib,ecb-cipher_null)",
|
||||
|
|
|
|||
106
crypto/testmgr.h
106
crypto/testmgr.h
|
|
@ -119,18 +119,6 @@ struct aead_testvec {
|
|||
int crypt_error;
|
||||
};
|
||||
|
||||
struct cprng_testvec {
|
||||
const char *key;
|
||||
const char *dt;
|
||||
const char *v;
|
||||
const char *result;
|
||||
unsigned char klen;
|
||||
unsigned short dtlen;
|
||||
unsigned short vlen;
|
||||
unsigned short rlen;
|
||||
unsigned short loops;
|
||||
};
|
||||
|
||||
struct drbg_testvec {
|
||||
const unsigned char *entropy;
|
||||
size_t entropylen;
|
||||
|
|
@ -22376,100 +22364,6 @@ static const struct aead_testvec aegis128_tv_template[] = {
|
|||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* ANSI X9.31 Continuous Pseudo-Random Number Generator (AES mode)
|
||||
* test vectors, taken from Appendix B.2.9 and B.2.10:
|
||||
* http://csrc.nist.gov/groups/STM/cavp/documents/rng/RNGVS.pdf
|
||||
* Only AES-128 is supported at this time.
|
||||
*/
|
||||
static const struct cprng_testvec ansi_cprng_aes_tv_template[] = {
|
||||
{
|
||||
.key = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
|
||||
"\xed\x06\x1c\xab\xb8\xd4\x62\x02",
|
||||
.klen = 16,
|
||||
.dt = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
|
||||
"\xd7\x1d\x4a\xfb\xb0\xe9\x22\xf9",
|
||||
.dtlen = 16,
|
||||
.v = "\x80\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||
.vlen = 16,
|
||||
.result = "\x59\x53\x1e\xd1\x3b\xb0\xc0\x55"
|
||||
"\x84\x79\x66\x85\xc1\x2f\x76\x41",
|
||||
.rlen = 16,
|
||||
.loops = 1,
|
||||
}, {
|
||||
.key = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
|
||||
"\xed\x06\x1c\xab\xb8\xd4\x62\x02",
|
||||
.klen = 16,
|
||||
.dt = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
|
||||
"\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfa",
|
||||
.dtlen = 16,
|
||||
.v = "\xc0\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||
.vlen = 16,
|
||||
.result = "\x7c\x22\x2c\xf4\xca\x8f\xa2\x4c"
|
||||
"\x1c\x9c\xb6\x41\xa9\xf3\x22\x0d",
|
||||
.rlen = 16,
|
||||
.loops = 1,
|
||||
}, {
|
||||
.key = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
|
||||
"\xed\x06\x1c\xab\xb8\xd4\x62\x02",
|
||||
.klen = 16,
|
||||
.dt = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
|
||||
"\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfb",
|
||||
.dtlen = 16,
|
||||
.v = "\xe0\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||
.vlen = 16,
|
||||
.result = "\x8a\xaa\x00\x39\x66\x67\x5b\xe5"
|
||||
"\x29\x14\x28\x81\xa9\x4d\x4e\xc7",
|
||||
.rlen = 16,
|
||||
.loops = 1,
|
||||
}, {
|
||||
.key = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
|
||||
"\xed\x06\x1c\xab\xb8\xd4\x62\x02",
|
||||
.klen = 16,
|
||||
.dt = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
|
||||
"\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfc",
|
||||
.dtlen = 16,
|
||||
.v = "\xf0\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||
.vlen = 16,
|
||||
.result = "\x88\xdd\xa4\x56\x30\x24\x23\xe5"
|
||||
"\xf6\x9d\xa5\x7e\x7b\x95\xc7\x3a",
|
||||
.rlen = 16,
|
||||
.loops = 1,
|
||||
}, {
|
||||
.key = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
|
||||
"\xed\x06\x1c\xab\xb8\xd4\x62\x02",
|
||||
.klen = 16,
|
||||
.dt = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
|
||||
"\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfd",
|
||||
.dtlen = 16,
|
||||
.v = "\xf8\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||
.vlen = 16,
|
||||
.result = "\x05\x25\x92\x46\x61\x79\xd2\xcb"
|
||||
"\x78\xc4\x0b\x14\x0a\x5a\x9a\xc8",
|
||||
.rlen = 16,
|
||||
.loops = 1,
|
||||
}, { /* Monte Carlo Test */
|
||||
.key = "\x9f\x5b\x51\x20\x0b\xf3\x34\xb5"
|
||||
"\xd8\x2b\xe8\xc3\x72\x55\xc8\x48",
|
||||
.klen = 16,
|
||||
.dt = "\x63\x76\xbb\xe5\x29\x02\xba\x3b"
|
||||
"\x67\xc9\x25\xfa\x70\x1f\x11\xac",
|
||||
.dtlen = 16,
|
||||
.v = "\x57\x2c\x8e\x76\x87\x26\x47\x97"
|
||||
"\x7e\x74\xfb\xdd\xc4\x95\x01\xd1",
|
||||
.vlen = 16,
|
||||
.result = "\x48\xe9\xbd\x0d\x06\xee\x18\xfb"
|
||||
"\xe4\x57\x90\xd5\xc3\xfc\x9b\x73",
|
||||
.rlen = 16,
|
||||
.loops = 10000,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* SP800-90A DRBG Test vectors from
|
||||
* http://csrc.nist.gov/groups/STM/cavp/documents/drbg/drbgtestvectors.zip
|
||||
|
|
|
|||
|
|
@ -169,12 +169,11 @@ static inline int crypto_rng_get_bytes(struct crypto_rng *tfm,
|
|||
*
|
||||
* The reset function completely re-initializes the random number generator
|
||||
* referenced by the cipher handle by clearing the current state. The new state
|
||||
* is initialized with the caller provided seed or automatically, depending
|
||||
* on the random number generator type (the ANSI X9.31 RNG requires
|
||||
* caller-provided seed, the SP800-90A DRBGs perform an automatic seeding).
|
||||
* The seed is provided as a parameter to this function call. The provided seed
|
||||
* should have the length of the seed size defined for the random number
|
||||
* generator as defined by crypto_rng_seedsize.
|
||||
* is initialized with the caller provided seed or automatically, depending on
|
||||
* the random number generator type. (The SP800-90A DRBGs perform an automatic
|
||||
* seeding.) The seed is provided as a parameter to this function call. The
|
||||
* provided seed should have the length of the seed size defined for the random
|
||||
* number generator as defined by crypto_rng_seedsize.
|
||||
*
|
||||
* Return: 0 if the setting of the key was successful; < 0 if an error occurred
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue