22 Jun, 2022

1 commit

  • commit abfed87e2a12bd246047d78c01d81eb9529f1d06 upstream.

    This is used by code that doesn't need CONFIG_CRYPTO, so move this into
    lib/ with a Kconfig option so that it can be selected by whatever needs
    it.

    This fixes a linker error Zheng pointed out when
    CRYPTO_MANAGER_DISABLE_TESTS!=y and CRYPTO=m:

    lib/crypto/curve25519-selftest.o: In function `curve25519_selftest':
    curve25519-selftest.c:(.init.text+0x60): undefined reference to `__crypto_memneq'
    curve25519-selftest.c:(.init.text+0xec): undefined reference to `__crypto_memneq'
    curve25519-selftest.c:(.init.text+0x114): undefined reference to `__crypto_memneq'
    curve25519-selftest.c:(.init.text+0x154): undefined reference to `__crypto_memneq'

    Reported-by: Zheng Bin
    Cc: Eric Biggers
    Cc: stable@vger.kernel.org
    Fixes: aa127963f1ca ("crypto: lib/curve25519 - re-add selftests")
    Signed-off-by: Jason A. Donenfeld
    Reviewed-by: Eric Biggers
    Signed-off-by: Herbert Xu
    Signed-off-by: Greg Kroah-Hartman

    Jason A. Donenfeld
     

06 Jun, 2022

1 commit

  • commit e56e18985596617ae426ed5997fb2e737cffb58b upstream.

    Commit 6048fdcc5f269 ("lib/crypto: blake2s: include as built-in") took
    away a number of prompt texts from other crypto libraries. This makes
    values flip from built-in to module when oldconfig runs, and causes
    problems when these crypto libs need to be built in for thingslike
    BIG_KEYS.

    Fixes: 6048fdcc5f269 ("lib/crypto: blake2s: include as built-in")
    Cc: Herbert Xu
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Justin M. Forbes
    [Jason: - moved menu into submenu of lib/ instead of root menu
    - fixed chacha sub-dependencies for CONFIG_CRYPTO]
    Signed-off-by: Jason A. Donenfeld
    Signed-off-by: Greg Kroah-Hartman

    Justin M. Forbes
     

30 May, 2022

1 commit

  • commit 6048fdcc5f269c7f31d774c295ce59081b36e6f9 upstream.

    In preparation for using blake2s in the RNG, we change the way that it
    is wired-in to the build system. Instead of using ifdefs to select the
    right symbol, we use weak symbols. And because ARM doesn't need the
    generic implementation, we make the generic one default only if an arch
    library doesn't need it already, and then have arch libraries that do
    need it opt-in. So that the arch libraries can remain tristate rather
    than bool, we then split the shash part from the glue code.

    Acked-by: Herbert Xu
    Acked-by: Ard Biesheuvel
    Acked-by: Greg Kroah-Hartman
    Cc: Masahiro Yamada
    Cc: linux-kbuild@vger.kernel.org
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Jason A. Donenfeld
    Signed-off-by: Greg Kroah-Hartman

    Jason A. Donenfeld
     

19 Nov, 2021

1 commit

  • [ Upstream commit 38aa192a05f22f9778f9420e630f0322525ef12e ]

    The ecc.c file started out as part of the ECDH algorithm but got
    moved out into a standalone module later. It does not build without
    CRYPTO_DEFAULT_RNG, so now that other modules are using it as well we
    can run into this link error:

    aarch64-linux-ld: ecc.c:(.text+0xfc8): undefined reference to `crypto_default_rng'
    aarch64-linux-ld: ecc.c:(.text+0xff4): undefined reference to `crypto_put_default_rng'

    Move the 'select CRYPTO_DEFAULT_RNG' statement into the correct symbol.

    Fixes: 0d7a78643f69 ("crypto: ecrdsa - add EC-RDSA (GOST 34.10) algorithm")
    Fixes: 4e6602916bc6 ("crypto: ecdsa - Add support for ECDSA signature verification")
    Signed-off-by: Arnd Bergmann
    Reviewed-by: Stefan Berger
    Signed-off-by: Herbert Xu
    Signed-off-by: Sasha Levin

    Arnd Bergmann
     

27 Aug, 2021

1 commit

  • Like the implementation of AESNI/AVX, this patch adds an accelerated
    implementation of AESNI/AVX2. In terms of code implementation, by
    reusing AESNI/AVX mode-related codes, the amount of code is greatly
    reduced. From the benchmark data, it can be seen that when the block
    size is 1024, compared to AVX acceleration, the performance achieved
    by AVX2 has increased by about 70%, it is also 7.7 times of the pure
    software implementation of sm4-generic.

    The main algorithm implementation comes from SM4 AES-NI work by
    libgcrypt and Markku-Juhani O. Saarinen at:
    https://github.com/mjosaarinen/sm4ni

    This optimization supports the four modes of SM4, ECB, CBC, CFB,
    and CTR. Since CBC and CFB do not support multiple block parallel
    encryption, the optimization effect is not obvious.

    Benchmark on Intel i5-6200U 2.30GHz, performance data of three
    implementation methods, pure software sm4-generic, aesni/avx
    acceleration, and aesni/avx2 acceleration, the data comes from
    the 218 mode and 518 mode of tcrypt. The abscissas are blocks of
    different lengths. The data is tabulated and the unit is Mb/s:

    block-size | 16 64 128 256 1024 1420 4096
    sm4-generic
    ECB enc | 60.94 70.41 72.27 73.02 73.87 73.58 73.59
    ECB dec | 61.87 70.53 72.15 73.09 73.89 73.92 73.86
    CBC enc | 56.71 66.31 68.05 69.84 70.02 70.12 70.24
    CBC dec | 54.54 65.91 68.22 69.51 70.63 70.79 70.82
    CFB enc | 57.21 67.24 69.10 70.25 70.73 70.52 71.42
    CFB dec | 57.22 64.74 66.31 67.24 67.40 67.64 67.58
    CTR enc | 59.47 68.64 69.91 71.02 71.86 71.61 71.95
    CTR dec | 59.94 68.77 69.95 71.00 71.84 71.55 71.95
    sm4-aesni-avx
    ECB enc | 44.95 177.35 292.06 316.98 339.48 322.27 330.59
    ECB dec | 45.28 178.66 292.31 317.52 339.59 322.52 331.16
    CBC enc | 57.75 67.68 69.72 70.60 71.48 71.63 71.74
    CBC dec | 44.32 176.83 284.32 307.24 328.61 312.61 325.82
    CFB enc | 57.81 67.64 69.63 70.55 71.40 71.35 71.70
    CFB dec | 43.14 167.78 282.03 307.20 328.35 318.24 325.95
    CTR enc | 42.35 163.32 279.11 302.93 320.86 310.56 317.93
    CTR dec | 42.39 162.81 278.49 302.37 321.11 310.33 318.37
    sm4-aesni-avx2
    ECB enc | 45.19 177.41 292.42 316.12 339.90 322.53 330.54
    ECB dec | 44.83 178.90 291.45 317.31 339.85 322.55 331.07
    CBC enc | 57.66 67.62 69.73 70.55 71.58 71.66 71.77
    CBC dec | 44.34 176.86 286.10 501.68 559.58 483.87 527.46
    CFB enc | 57.43 67.60 69.61 70.52 71.43 71.28 71.65
    CFB dec | 43.12 167.75 268.09 499.33 558.35 490.36 524.73
    CTR enc | 42.42 163.39 256.17 493.95 552.45 481.58 517.19
    CTR dec | 42.49 163.11 256.36 493.34 552.62 481.49 516.83

    Signed-off-by: Tianjia Zhang
    Signed-off-by: Herbert Xu

    Tianjia Zhang
     

30 Jul, 2021

2 commits

  • This patch adds AES-NI/AVX/x86_64 assembler implementation of SM4
    block cipher. Through two affine transforms, we can use the AES S-Box
    to simulate the SM4 S-Box to achieve the effect of instruction
    acceleration.

    The main algorithm implementation comes from SM4 AES-NI work by
    libgcrypt and Markku-Juhani O. Saarinen at:
    https://github.com/mjosaarinen/sm4ni

    This optimization supports the four modes of SM4, ECB, CBC, CFB, and
    CTR. Since CBC and CFB do not support multiple block parallel
    encryption, the optimization effect is not obvious.

    Benchmark on Intel Xeon Cascadelake, the data comes from the 218 mode
    and 518 mode of tcrypt. The abscissas are blocks of different lengths.
    The data is tabulated and the unit is Mb/s:

    sm4-generic | 16 64 128 256 1024 1420 4096
    ECB enc | 40.99 46.50 48.05 48.41 49.20 49.25 49.28
    ECB dec | 41.07 46.99 48.15 48.67 49.20 49.25 49.29
    CBC enc | 37.71 45.28 46.77 47.60 48.32 48.37 48.40
    CBC dec | 36.48 44.82 46.43 47.45 48.23 48.30 48.36
    CFB enc | 37.94 44.84 46.12 46.94 47.57 47.46 47.68
    CFB dec | 37.50 42.84 43.74 44.37 44.85 44.80 44.96
    CTR enc | 39.20 45.63 46.75 47.49 48.09 47.85 48.08
    CTR dec | 39.64 45.70 46.72 47.47 47.98 47.88 48.06
    sm4-aesni-avx
    ECB enc | 33.75 134.47 221.64 243.43 264.05 251.58 258.13
    ECB dec | 34.02 134.92 223.11 245.14 264.12 251.04 258.33
    CBC enc | 38.85 46.18 47.67 48.34 49.00 48.96 49.14
    CBC dec | 33.54 131.29 223.88 245.27 265.50 252.41 263.78
    CFB enc | 38.70 46.10 47.58 48.29 49.01 48.94 49.19
    CFB dec | 32.79 128.40 223.23 244.87 265.77 253.31 262.79
    CTR enc | 32.58 122.23 220.29 241.16 259.57 248.32 256.69
    CTR dec | 32.81 122.47 218.99 241.54 258.42 248.58 256.61

    Signed-off-by: Tianjia Zhang
    Signed-off-by: Herbert Xu

    Tianjia Zhang
     
  • Take the existing small footprint and mostly time invariant C code
    and turn it into a SM4 library that can be used for non-performance
    critical, casual use of SM4, and as a fallback for, e.g., SIMD code
    that needs a secondary path that can be taken in contexts where the
    SIMD unit is off limits.

    Secondly, some codes have been optimized, such as unrolling small
    times loop, removing unnecessary memory shifts, exporting sbox, fk,
    ck arrays, and basic encryption and decryption functions.

    Signed-off-by: Tianjia Zhang
    Signed-off-by: Herbert Xu

    Tianjia Zhang
     

16 Jul, 2021

1 commit

  • With the swtich to use HMAC(SHA-512) as the default DRBG type, the
    configuration must now also select SHA-512.

    Fixes: 9b7b94683a9b "crypto: DRBG - switch to HMAC SHA512 DRBG as default
    DRBG"
    Reported-by: Sachin Sant
    Signed-off-by: Stephan Mueller
    Tested-by: Sachin Sant
    Signed-off-by: Herbert Xu

    Stephan Mueller
     

26 Apr, 2021

1 commit

  • Pull crypto updates from Herbert Xu:
    "API:

    - crypto_destroy_tfm now ignores errors as well as NULL pointers

    Algorithms:

    - Add explicit curve IDs in ECDH algorithm names

    - Add NIST P384 curve parameters

    - Add ECDSA

    Drivers:

    - Add support for Green Sardine in ccp

    - Add ecdh/curve25519 to hisilicon/hpre

    - Add support for AM64 in sa2ul"

    * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (184 commits)
    fsverity: relax build time dependency on CRYPTO_SHA256
    fscrypt: relax Kconfig dependencies for crypto API algorithms
    crypto: camellia - drop duplicate "depends on CRYPTO"
    crypto: s5p-sss - consistently use local 'dev' variable in probe()
    crypto: s5p-sss - remove unneeded local variable initialization
    crypto: s5p-sss - simplify getting of_device_id match data
    ccp: ccp - add support for Green Sardine
    crypto: ccp - Make ccp_dev_suspend and ccp_dev_resume void functions
    crypto: octeontx2 - add support for OcteonTX2 98xx CPT block.
    crypto: chelsio/chcr - Remove useless MODULE_VERSION
    crypto: ux500/cryp - Remove duplicate argument
    crypto: chelsio - remove unused function
    crypto: sa2ul - Add support for AM64
    crypto: sa2ul - Support for per channel coherency
    dt-bindings: crypto: ti,sa2ul: Add new compatible for AM64
    crypto: hisilicon - enable new error types for QM
    crypto: hisilicon - add new error type for SEC
    crypto: hisilicon - support new error types for ZIP
    crypto: hisilicon - dynamic configuration 'err_info'
    crypto: doc - fix kernel-doc notation in chacha.c and af_alg.c
    ...

    Linus Torvalds
     

22 Apr, 2021

1 commit

  • All 5 CAMELLIA crypto driver Kconfig symbols have a duplicate
    "depends on CRYPTO" line but they are inside an
    "if CRYPTO"/"endif # if CRYPTO" block, so drop the duplicate "depends"
    lines.

    These 5 symbols still depend on CRYPTO.

    Fixes: 584fffc8b196 ("[CRYPTO] kconfig: Ordering cleanup")
    Fixes: 0b95ec56ae19 ("crypto: camellia - add assembler implementation for x86_64")
    Fixes: d9b1d2e7e10d ("crypto: camellia - add AES-NI/AVX/x86_64 assembler implementation of camellia cipher")
    Fixes: f3f935a76aa0 ("crypto: camellia - add AVX2/AES-NI/x86_64 assembler implementation of camellia cipher")
    Fixes: c5aac2df6577 ("sparc64: Add DES driver making use of the new des opcodes.")
    Signed-off-by: Randy Dunlap
    Cc: Sebastian Siewior
    Cc: Jussi Kivilinna
    Cc: Herbert Xu
    Cc: "David S. Miller"
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Herbert Xu

    Randy Dunlap
     

26 Mar, 2021

1 commit

  • Add support for parsing the parameters of a NIST P256 or NIST P192 key.
    Enable signature verification using these keys. The new module is
    enabled with CONFIG_ECDSA:
    Elliptic Curve Digital Signature Algorithm (NIST P192, P256 etc.)
    is A NIST cryptographic standard algorithm. Only signature verification
    is implemented.

    Cc: Herbert Xu
    Cc: "David S. Miller"
    Cc: linux-crypto@vger.kernel.org
    Signed-off-by: Stefan Berger
    Signed-off-by: Herbert Xu

    Stefan Berger
     

08 Mar, 2021

1 commit

  • The MIPS Poly1305 implementation is generic MIPS code written such as to
    support down to the original MIPS I and MIPS III ISA for the 32-bit and
    64-bit variant respectively. Lift the current limitation then to enable
    code for MIPSr1 ISA or newer processors only and have it available for
    all MIPS processors.

    Signed-off-by: Maciej W. Rozycki
    Fixes: a11d055e7a64 ("crypto: mips/poly1305 - incorporate OpenSSL/CRYPTOGAMS optimized implementation")
    Cc: stable@vger.kernel.org # v5.5+
    Acked-by: Jason A. Donenfeld
    Signed-off-by: Thomas Bogendoerfer

    Maciej W. Rozycki
     

10 Feb, 2021

1 commit

  • It is not trivial to trace back why exactly the tnepres variant of
    serpent was added ~17 years ago - Google searches come up mostly empty,
    but it seems to be related with the 'kerneli' version, which was based
    on an incorrect interpretation of the serpent spec.

    In other words, nobody is likely to care anymore today, so let's get rid
    of it.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Herbert Xu

    Ard Biesheuvel
     

29 Jan, 2021

5 commits


14 Jan, 2021

16 commits


08 Jan, 2021

1 commit

  • The AES-NI driver implements XTS via the glue helper, which consumes
    a struct with sets of function pointers which are invoked on chunks
    of input data of the appropriate size, as annotated in the struct.

    Let's get rid of this indirection, so that we can perform direct calls
    to the assembler helpers. Instead, let's adopt the arm64 strategy, i.e.,
    provide a helper which can consume inputs of any size, provided that the
    penultimate, full block is passed via the last call if ciphertext stealing
    needs to be applied.

    This also allows us to enable the XTS mode for i386.

    Tested-by: Eric Biggers # x86_64
    Signed-off-by: Ard Biesheuvel
    Reported-by: kernel test robot
    Reported-by: kernel test robot
    Reported-by: kernel test robot
    Signed-off-by: Herbert Xu

    Ard Biesheuvel
     

27 Nov, 2020

1 commit

  • When working on crypto algorithms, being able to run tcrypt quickly
    without booting an entire Linux installation can be very useful. For
    instance, QEMU/kvm can be used to boot a kernel from the command line,
    and having tcrypt.ko builtin would allow tcrypt to be executed to run
    benchmarks, or to run tests for algorithms that need to be instantiated
    from templates, without the need to make it past the point where the
    rootfs is mounted.

    So let's relax the requirement that tcrypt can only be built as a module
    when CONFIG_EXPERT is enabled.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Herbert Xu

    Ard Biesheuvel
     

13 Nov, 2020

1 commit

  • The extra tests in the manager actually require the manager to be
    selected too. Otherwise the linker gives errors like:

    ld: arch/x86/crypto/chacha_glue.o: in function `chacha_simd_stream_xor':
    chacha_glue.c:(.text+0x422): undefined reference to `crypto_simd_disabled_for_test'

    Fixes: 2343d1529aff ("crypto: Kconfig - allow tests to be disabled when manager is disabled")
    Signed-off-by: Jason A. Donenfeld
    Signed-off-by: Herbert Xu

    Jason A. Donenfeld
     

25 Sep, 2020

2 commits

  • This new module implement the SM2 public key algorithm. It was
    published by State Encryption Management Bureau, China.
    List of specifications for SM2 elliptic curve public key cryptography:

    * GM/T 0003.1-2012
    * GM/T 0003.2-2012
    * GM/T 0003.3-2012
    * GM/T 0003.4-2012
    * GM/T 0003.5-2012

    IETF: https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02
    oscca: http://www.oscca.gov.cn/sca/xxgk/2010-12/17/content_1002386.shtml
    scctc: http://www.gmbz.org.cn/main/bzlb.html

    Signed-off-by: Tianjia Zhang
    Tested-by: Xufeng Zhang
    Signed-off-by: Herbert Xu

    Tianjia Zhang
     
  • Extend the user-space RNG interface:
    1. Add entropy input via ALG_SET_DRBG_ENTROPY setsockopt option;
    2. Add additional data input via sendmsg syscall.

    This allows DRBG to be tested with test vectors, for example for the
    purpose of CAVP testing, which otherwise isn't possible.

    To prevent erroneous use of entropy input, it is hidden under
    CRYPTO_USER_API_RNG_CAVP config option and requires CAP_SYS_ADMIN to
    succeed.

    Signed-off-by: Elena Petrova
    Acked-by: Stephan Müller
    Reviewed-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Elena Petrova
     

18 Sep, 2020

1 commit

  • We have a few interesting pieces in our cipher museum, which are never
    used internally, and were only ever provided as generic C implementations.

    Unfortunately, we cannot simply remove this code, as we cannot be sure
    that it is not being used via the AF_ALG socket API, however unlikely.

    So let's mark the Anubis, Khazad, SEED and TEA algorithms as obsolete,
    which means they can only be enabled in the build if the socket API is
    enabled in the first place.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Herbert Xu

    Ard Biesheuvel