18 Apr, 2019

3 commits


24 Mar, 2019

1 commit

  • commit eb5e6730db98fcc4b51148b4a819fa4bf864ae54 upstream.

    Instantiating "cryptd(crc32c)" causes a crypto self-test failure because
    the crypto_alloc_shash() in alg_test_crc32c() fails. This is because
    cryptd(crc32c) is an ahash algorithm, not a shash algorithm; so it can
    only be accessed through the ahash API, unlike shash algorithms which
    can be accessed through both the ahash and shash APIs.

    As the test is testing the shash descriptor format which is only
    applicable to shash algorithms, skip it for ahash algorithms.

    (Note that it's still important to fix crypto self-test failures even
    for weird algorithm instantiations like cryptd(crc32c) that no one
    would really use; in fips_enabled mode unprivileged users can use them
    to panic the kernel, and also they prevent treating a crypto self-test
    failure as a bug when fuzzing the kernel.)

    Fixes: 8e3ee85e68c5 ("crypto: crc32c - Test descriptor context format")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu
    Signed-off-by: Greg Kroah-Hartman

    Eric Biggers
     

10 Jan, 2019

1 commit

  • commit 7da66670775d201f633577f5b15a4bbeebaaa2b0 upstream.

    Add AES128/192/256-CFB testvectors from NIST SP800-38A.

    Signed-off-by: Dmitry Eremin-Solenikov
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Eremin-Solenikov
    Signed-off-by: Herbert Xu
    Signed-off-by: Greg Kroah-Hartman

    Dmitry Eremin-Solenikov
     

14 Nov, 2018

1 commit

  • commit 578bdaabd015b9b164842c3e8ace9802f38e7ecc upstream.

    These are unused, undesired, and have never actually been used by
    anybody. The original authors of this code have changed their mind about
    its inclusion. While originally proposed for disk encryption on low-end
    devices, the idea was discarded [1] in favor of something else before
    that could really get going. Therefore, this patch removes Speck.

    [1] https://marc.info/?l=linux-crypto-vger&m=153359499015659

    Signed-off-by: Jason A. Donenfeld
    Acked-by: Eric Biggers
    Cc: stable@vger.kernel.org
    Acked-by: Ard Biesheuvel
    Signed-off-by: Herbert Xu
    Signed-off-by: Greg Kroah-Hartman

    Jason A. Donenfeld
     

09 Jul, 2018

1 commit

  • The testmgr hash tests were testing init, digest, update and final
    methods but not the finup method. Add a test for this one too.

    While doing this, make sure we only run the partial tests once with
    the digest tests and skip them with the final and finup tests since
    they are the same.

    Signed-off-by: Gilad Ben-Yossef
    Signed-off-by: Herbert Xu

    Gilad Ben-Yossef
     

01 Jul, 2018

2 commits

  • Remove the original version of the VMAC template that had the nonce
    hardcoded to 0 and produced a digest with the wrong endianness. I'm
    unsure whether this had users or not (there are no explicit in-kernel
    references to it), but given that the hardcoded nonce made it wildly
    insecure unless a unique key was used for each message, let's try
    removing it and see if anyone complains.

    Leave the new "vmac64" template that requires the nonce to be explicitly
    specified as the first 16 bytes of data and uses the correct endianness
    for the digest.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     
  • Currently the VMAC template uses a "nonce" hardcoded to 0, which makes
    it insecure unless a unique key is set for every message. Also, the
    endianness of the final digest is wrong: the implementation uses little
    endian, but the VMAC specification has it as big endian, as do other
    VMAC implementations such as the one in Crypto++.

    Add a new VMAC template where the nonce is passed as the first 16 bytes
    of data (similar to what is done for Poly1305's nonce), and the digest
    is big endian. Call it "vmac64", since the old name of simply "vmac"
    didn't clarify whether the implementation is of VMAC-64 or of VMAC-128
    (which produce 64-bit and 128-bit digests respectively); so we fix the
    naming ambiguity too.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

13 Jun, 2018

1 commit

  • The kmalloc() function has a 2-factor argument form, kmalloc_array(). This
    patch replaces cases of:

    kmalloc(a * b, gfp)

    with:
    kmalloc_array(a * b, gfp)

    as well as handling cases of:

    kmalloc(a * b * c, gfp)

    with:

    kmalloc(array3_size(a, b, c), gfp)

    as it's slightly less ugly than:

    kmalloc_array(array_size(a, b), c, gfp)

    This does, however, attempt to ignore constant size factors like:

    kmalloc(4 * 1024, gfp)

    though any constants defined via macros get caught up in the conversion.

    Any factors with a sizeof() of "unsigned char", "char", and "u8" were
    dropped, since they're redundant.

    The tools/ directory was manually excluded, since it has its own
    implementation of kmalloc().

    The Coccinelle script used for this was:

    // Fix redundant parens around sizeof().
    @@
    type TYPE;
    expression THING, E;
    @@

    (
    kmalloc(
    - (sizeof(TYPE)) * E
    + sizeof(TYPE) * E
    , ...)
    |
    kmalloc(
    - (sizeof(THING)) * E
    + sizeof(THING) * E
    , ...)
    )

    // Drop single-byte sizes and redundant parens.
    @@
    expression COUNT;
    typedef u8;
    typedef __u8;
    @@

    (
    kmalloc(
    - sizeof(u8) * (COUNT)
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(__u8) * (COUNT)
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(char) * (COUNT)
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(unsigned char) * (COUNT)
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(u8) * COUNT
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(__u8) * COUNT
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(char) * COUNT
    + COUNT
    , ...)
    |
    kmalloc(
    - sizeof(unsigned char) * COUNT
    + COUNT
    , ...)
    )

    // 2-factor product with sizeof(type/expression) and identifier or constant.
    @@
    type TYPE;
    expression THING;
    identifier COUNT_ID;
    constant COUNT_CONST;
    @@

    (
    - kmalloc
    + kmalloc_array
    (
    - sizeof(TYPE) * (COUNT_ID)
    + COUNT_ID, sizeof(TYPE)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(TYPE) * COUNT_ID
    + COUNT_ID, sizeof(TYPE)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(TYPE) * (COUNT_CONST)
    + COUNT_CONST, sizeof(TYPE)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(TYPE) * COUNT_CONST
    + COUNT_CONST, sizeof(TYPE)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(THING) * (COUNT_ID)
    + COUNT_ID, sizeof(THING)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(THING) * COUNT_ID
    + COUNT_ID, sizeof(THING)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(THING) * (COUNT_CONST)
    + COUNT_CONST, sizeof(THING)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(THING) * COUNT_CONST
    + COUNT_CONST, sizeof(THING)
    , ...)
    )

    // 2-factor product, only identifiers.
    @@
    identifier SIZE, COUNT;
    @@

    - kmalloc
    + kmalloc_array
    (
    - SIZE * COUNT
    + COUNT, SIZE
    , ...)

    // 3-factor product with 1 sizeof(type) or sizeof(expression), with
    // redundant parens removed.
    @@
    expression THING;
    identifier STRIDE, COUNT;
    type TYPE;
    @@

    (
    kmalloc(
    - sizeof(TYPE) * (COUNT) * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kmalloc(
    - sizeof(TYPE) * (COUNT) * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kmalloc(
    - sizeof(TYPE) * COUNT * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kmalloc(
    - sizeof(TYPE) * COUNT * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kmalloc(
    - sizeof(THING) * (COUNT) * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    |
    kmalloc(
    - sizeof(THING) * (COUNT) * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    |
    kmalloc(
    - sizeof(THING) * COUNT * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    |
    kmalloc(
    - sizeof(THING) * COUNT * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    )

    // 3-factor product with 2 sizeof(variable), with redundant parens removed.
    @@
    expression THING1, THING2;
    identifier COUNT;
    type TYPE1, TYPE2;
    @@

    (
    kmalloc(
    - sizeof(TYPE1) * sizeof(TYPE2) * COUNT
    + array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
    , ...)
    |
    kmalloc(
    - sizeof(TYPE1) * sizeof(THING2) * (COUNT)
    + array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
    , ...)
    |
    kmalloc(
    - sizeof(THING1) * sizeof(THING2) * COUNT
    + array3_size(COUNT, sizeof(THING1), sizeof(THING2))
    , ...)
    |
    kmalloc(
    - sizeof(THING1) * sizeof(THING2) * (COUNT)
    + array3_size(COUNT, sizeof(THING1), sizeof(THING2))
    , ...)
    |
    kmalloc(
    - sizeof(TYPE1) * sizeof(THING2) * COUNT
    + array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
    , ...)
    |
    kmalloc(
    - sizeof(TYPE1) * sizeof(THING2) * (COUNT)
    + array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
    , ...)
    )

    // 3-factor product, only identifiers, with redundant parens removed.
    @@
    identifier STRIDE, SIZE, COUNT;
    @@

    (
    kmalloc(
    - (COUNT) * STRIDE * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - COUNT * (STRIDE) * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - COUNT * STRIDE * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - (COUNT) * (STRIDE) * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - COUNT * (STRIDE) * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - (COUNT) * STRIDE * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - (COUNT) * (STRIDE) * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kmalloc(
    - COUNT * STRIDE * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    )

    // Any remaining multi-factor products, first at least 3-factor products,
    // when they're not all constants...
    @@
    expression E1, E2, E3;
    constant C1, C2, C3;
    @@

    (
    kmalloc(C1 * C2 * C3, ...)
    |
    kmalloc(
    - (E1) * E2 * E3
    + array3_size(E1, E2, E3)
    , ...)
    |
    kmalloc(
    - (E1) * (E2) * E3
    + array3_size(E1, E2, E3)
    , ...)
    |
    kmalloc(
    - (E1) * (E2) * (E3)
    + array3_size(E1, E2, E3)
    , ...)
    |
    kmalloc(
    - E1 * E2 * E3
    + array3_size(E1, E2, E3)
    , ...)
    )

    // And then all remaining 2 factors products when they're not all constants,
    // keeping sizeof() as the second factor argument.
    @@
    expression THING, E1, E2;
    type TYPE;
    constant C1, C2, C3;
    @@

    (
    kmalloc(sizeof(THING) * C2, ...)
    |
    kmalloc(sizeof(TYPE) * C2, ...)
    |
    kmalloc(C1 * C2 * C3, ...)
    |
    kmalloc(C1 * C2, ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(TYPE) * (E2)
    + E2, sizeof(TYPE)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(TYPE) * E2
    + E2, sizeof(TYPE)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(THING) * (E2)
    + E2, sizeof(THING)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - sizeof(THING) * E2
    + E2, sizeof(THING)
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - (E1) * E2
    + E1, E2
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - (E1) * (E2)
    + E1, E2
    , ...)
    |
    - kmalloc
    + kmalloc_array
    (
    - E1 * E2
    + E1, E2
    , ...)
    )

    Signed-off-by: Kees Cook

    Kees Cook
     

31 May, 2018

1 commit

  • Currently testmgr has separate encryption and decryption test vectors
    for symmetric ciphers. That's massively redundant, since with few
    exceptions (mostly mistakes, apparently), all decryption tests are
    identical to the encryption tests, just with the input/result flipped.

    Therefore, eliminate the redundancy by removing the decryption test
    vectors and updating testmgr to test both encryption and decryption
    using what used to be the encryption test vectors. Naming is adjusted
    accordingly: each cipher_testvec now has a 'ptext' (plaintext), 'ctext'
    (ciphertext), and 'len' instead of an 'input', 'result', 'ilen', and
    'rlen'. Note that it was always the case that 'ilen == rlen'.

    AES keywrap ("kw(aes)") is special because its IV is generated by the
    encryption. Previously this was handled by specifying 'iv_out' for
    encryption and 'iv' for decryption. To make it work cleanly with only
    one set of test vectors, put the IV in 'iv', remove 'iv_out', and add a
    boolean that indicates that the IV is generated by the encryption.

    In total, this removes over 10000 lines from testmgr.h, with no
    reduction in test coverage since prior patches already copied the few
    unique decryption test vectors into the encryption test vectors.

    This covers all algorithms that used 'struct cipher_testvec', e.g. any
    block cipher in the ECB, CBC, CTR, XTS, LRW, CTS-CBC, PCBC, OFB, or
    keywrap modes, and Salsa20 and ChaCha20. No change is made to AEAD
    tests, though we probably can eliminate a similar redundancy there too.

    The testmgr.h portion of this patch was automatically generated using
    the following awk script, with some slight manual fixups on top (updated
    'struct cipher_testvec' definition, updated a few comments, and fixed up
    the AES keywrap test vectors):

    BEGIN { OTHER = 0; ENCVEC = 1; DECVEC = 2; DECVEC_TAIL = 3; mode = OTHER }

    /^static const struct cipher_testvec.*_enc_/ { sub("_enc", ""); mode = ENCVEC }
    /^static const struct cipher_testvec.*_dec_/ { mode = DECVEC }
    mode == ENCVEC && !/\.ilen[[:space:]]*=/ {
    sub(/\.input[[:space:]]*=$/, ".ptext =")
    sub(/\.input[[:space:]]*=/, ".ptext\t=")
    sub(/\.result[[:space:]]*=$/, ".ctext =")
    sub(/\.result[[:space:]]*=/, ".ctext\t=")
    sub(/\.rlen[[:space:]]*=/, ".len\t=")
    print
    }
    mode == DECVEC_TAIL && /[^[:space:]]/ { mode = OTHER }
    mode == OTHER { print }
    mode == ENCVEC && /^};/ { mode = OTHER }
    mode == DECVEC && /^};/ { mode = DECVEC_TAIL }

    Note that git's default diff algorithm gets confused by the testmgr.h
    portion of this patch, and reports too many lines added and removed.
    It's better viewed with 'git diff --minimal' (or 'git show --minimal'),
    which reports "2 files changed, 919 insertions(+), 11723 deletions(-)".

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

27 May, 2018

2 commits

  • Since testmgr uses a single tfm for all tests of each hash algorithm,
    once a key is set the tfm won't be unkeyed anymore. But with crc32 and
    crc32c, the key is really the "default initial state" and is optional;
    those algorithms should have both keyed and unkeyed test vectors, to
    verify that implementations use the correct default key.

    Simply listing the unkeyed test vectors first isn't guaranteed to work
    yet because testmgr makes multiple passes through the test vectors.
    crc32c does have an unkeyed test vector listed first currently, but it
    only works by chance because the last crc32c test vector happens to use
    a key that is the same as the default key.

    Therefore, teach testmgr to split hash test vectors into unkeyed and
    keyed sections, and do all the unkeyed ones before the keyed ones.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     
  • The Blackfin CRC driver was removed by commit 9678a8dc53c1 ("crypto:
    bfin_crc - remove blackfin CRC driver"), but it was forgotten to remove
    the corresponding "hmac(crc32)" test vectors. I see no point in keeping
    them since nothing else appears to implement or use "hmac(crc32)", which
    isn't an algorithm that makes sense anyway because HMAC is meant to be
    used with a cryptographically secure hash function, which CRC's are not.

    Thus, remove the unneeded test vectors.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

19 May, 2018

3 commits


05 May, 2018

1 commit

  • Enable CryptoCell support for hardware keys.

    Hardware keys are regular AES keys loaded into CryptoCell internal memory
    via firmware, often from secure boot ROM or hardware fuses at boot time.

    As such, they can be used for enc/dec purposes like any other key but
    cannot (read: extremely hard to) be extracted since since they are not
    available anywhere in RAM during runtime.

    The mechanism has some similarities to s390 secure keys although the keys
    are not wrapped or sealed, but simply loaded offline. The interface was
    therefore modeled based on the s390 secure keys support.

    Signed-off-by: Gilad Ben-Yossef
    Signed-off-by: Herbert Xu

    Gilad Ben-Yossef
     

21 Apr, 2018

2 commits

  • The following error is triggered by the ThunderX ZIP driver
    if the testmanager is enabled:

    [ 199.069437] ThunderX-ZIP 0000:03:00.0: Found ZIP device 0 177d:a01a on Node 0
    [ 199.073573] alg: comp: Compression test 1 failed for deflate-generic: output len = 37

    The reason for this error is the verification of the compression
    results. Verifying the compression result only works if all
    algorithm parameters are identical, in this case to the software
    implementation.

    Different compression engines like the ThunderX ZIP coprocessor
    might yield different compression results by tuning the
    algorithm parameters. In our case the compressed result is
    shorter than the test vector.

    We should not forbid different compression results but only
    check that compression -> decompression yields the same
    result. This is done already in the acomp test. Do something
    similar for test_comp().

    Signed-off-by: Mahipal Challa
    Signed-off-by: Balakrishna Bhamidipati
    [jglauber@cavium.com: removed unrelated printk changes, rewrote commit msg,
    fixed whitespace and unneeded initialization]
    Signed-off-by: Jan Glauber
    Signed-off-by: Herbert Xu

    Mahipal Challa
     
  • Adds zstd support to crypto and scompress. Only supports the default
    level.

    Previously we held off on this patch, since there weren't any users.
    Now zram is ready for zstd support, but depends on CONFIG_CRYPTO_ZSTD,
    which isn't defined until this patch is in. I also see a patch adding
    zstd to pstore [0], which depends on crypto zstd.

    [0] lkml.kernel.org/r/9c9416b2dff19f05fb4c35879aaa83d11ff72c92.1521626182.git.geliangtang@gmail.com

    Signed-off-by: Nick Terrell
    Signed-off-by: Herbert Xu

    Nick Terrell
     

16 Mar, 2018

1 commit


22 Feb, 2018

3 commits

  • Add test vectors for Speck64-XTS, generated in userspace using C code.
    The inputs were borrowed from the AES-XTS test vectors, with key lengths
    adjusted.

    xts-speck64-neon passes these tests. However, they aren't currently
    applicable for the generic XTS template, as that only supports a 128-bit
    block size.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     
  • Add test vectors for Speck128-XTS, generated in userspace using C code.
    The inputs were borrowed from the AES-XTS test vectors.

    Both xts(speck128-generic) and xts-speck128-neon pass these tests.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     
  • Add a generic implementation of Speck, including the Speck128 and
    Speck64 variants. Speck is a lightweight block cipher that can be much
    faster than AES on processors that don't have AES instructions.

    We are planning to offer Speck-XTS (probably Speck128/256-XTS) as an
    option for dm-crypt and fscrypt on Android, for low-end mobile devices
    with older CPUs such as ARMv7 which don't have the Cryptography
    Extensions. Currently, such devices are unencrypted because AES is not
    fast enough, even when the NEON bit-sliced implementation of AES is
    used. Other AES alternatives such as Twofish, Threefish, Camellia,
    CAST6, and Serpent aren't fast enough either; it seems that only a
    modern ARX cipher can provide sufficient performance on these devices.

    This is a replacement for our original proposal
    (https://patchwork.kernel.org/patch/10101451/) which was to offer
    ChaCha20 for these devices. However, the use of a stream cipher for
    disk/file encryption with no space to store nonces would have been much
    more insecure than we thought initially, given that it would be used on
    top of flash storage as well as potentially on top of F2FS, neither of
    which is guaranteed to overwrite data in-place.

    Speck has been somewhat controversial due to its origin. Nevertheless,
    it has a straightforward design (it's an ARX cipher), and it appears to
    be the leading software-optimized lightweight block cipher currently,
    with the most cryptanalysis. It's also easy to implement without side
    channels, unlike AES. Moreover, we only intend Speck to be used when
    the status quo is no encryption, due to AES not being fast enough.

    We've also considered a novel length-preserving encryption mode based on
    ChaCha20 and Poly1305. While theoretically attractive, such a mode
    would be a brand new crypto construction and would be more complicated
    and difficult to implement efficiently in comparison to Speck-XTS.

    There is confusion about the byte and word orders of Speck, since the
    original paper doesn't specify them. But we have implemented it using
    the orders the authors recommended in a correspondence with them. The
    test vectors are taken from the original paper but were mapped to byte
    arrays using the recommended byte and word orders.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

25 Jan, 2018

1 commit


12 Jan, 2018

1 commit


03 Nov, 2017

1 commit


22 Sep, 2017

1 commit


28 Jun, 2017

1 commit


20 Jun, 2017

1 commit


19 Jun, 2017

1 commit


10 Jun, 2017

1 commit

  • The test considers a party that already has a private-public
    key pair and a party that provides a NULL key. The kernel will
    generate the private-public key pair for the latter, computes
    the shared secret on both ends and verifies if it's the same.

    The explicit private-public key pair was copied from
    the previous test vector.

    Signed-off-by: Tudor Ambarus
    Signed-off-by: Herbert Xu

    Tudor-Dan Ambarus
     

24 Apr, 2017

2 commits

  • Add scomp backend for zlib-deflate compression algorithm.
    This backend outputs data using the format defined in rfc1950
    (raw deflate surrounded by zlib header and footer).

    Signed-off-by: Giovanni Cabiddu
    Signed-off-by: Herbert Xu

    Giovanni Cabiddu
     
  • The cipher_null is not a real cipher, FIPS mode should not restrict its use.

    It is used for several tests (for example in cryptsetup testsuite) and also
    temporarily for reencryption of not yet encrypted device in cryptsetup-reencrypt tool.

    Problem is easily reproducible with
    cryptsetup benchmark -c null

    Signed-off-by: Milan Broz
    Acked-by: Stephan Müller
    Signed-off-by: Herbert Xu

    Milan Broz
     

21 Apr, 2017

1 commit

  • Compression implementations might return valid outputs that
    do not match what specified in the test vectors.
    For this reason, the testmgr might report that a compression
    implementation failed the test even if the data produced
    by the compressor is correct.
    This implements a decompress-and-verify test for acomp
    compression tests rather than a known answer test.

    Signed-off-by: Giovanni Cabiddu
    Signed-off-by: Herbert Xu

    Giovanni Cabiddu
     

24 Mar, 2017

1 commit


09 Mar, 2017

1 commit

  • Cryptographic test vectors should never be modified, so constify them to
    enforce this at both compile-time and run-time. This moves a significant
    amount of data from .data to .rodata when the crypto tests are enabled.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

11 Feb, 2017

1 commit


13 Jan, 2017

3 commits

  • When working on AES in CCM mode for ARM, my code passed the internal
    tcrypt test before I had even bothered to implement the AES-192 and
    AES-256 code paths, which is strange because the tcrypt does contain
    AES-192 and AES-256 test vectors for CCM.

    As it turned out, the define AES_CCM_ENC_TEST_VECTORS was out of sync
    with the actual number of test vectors, causing only the AES-128 ones
    to be executed.

    So get rid of the defines, and wrap the test vector references in a
    macro that calculates the number of vectors automatically.

    The following test vector counts were out of sync with the respective
    defines:

    BF_CTR_ENC_TEST_VECTORS 2 -> 3
    BF_CTR_DEC_TEST_VECTORS 2 -> 3
    TF_CTR_ENC_TEST_VECTORS 2 -> 3
    TF_CTR_DEC_TEST_VECTORS 2 -> 3
    SERPENT_CTR_ENC_TEST_VECTORS 2 -> 3
    SERPENT_CTR_DEC_TEST_VECTORS 2 -> 3
    AES_CCM_ENC_TEST_VECTORS 8 -> 14
    AES_CCM_DEC_TEST_VECTORS 7 -> 17
    AES_CCM_4309_ENC_TEST_VECTORS 7 -> 23
    AES_CCM_4309_DEC_TEST_VECTORS 10 -> 23
    CAMELLIA_CTR_ENC_TEST_VECTORS 2 -> 3
    CAMELLIA_CTR_DEC_TEST_VECTORS 2 -> 3

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

    Ard Biesheuvel
     
  • There are some hashes (e.g. sha224) that have some internal trickery
    to make sure that only the correct number of output bytes are
    generated. If something goes wrong, they could potentially overrun
    the output buffer.

    Make the test more robust by allocating only enough space for the
    correct output size so that memory debugging will catch the error if
    the output is overrun.

    Tested by intentionally breaking sha224 to output all 256
    internally-generated bits while running on KASAN.

    Cc: Ard Biesheuvel
    Cc: Herbert Xu
    Signed-off-by: Andy Lutomirski
    Signed-off-by: Herbert Xu

    Andrew Lutomirski
     
  • It's recommended to use kmemdup instead of kmalloc followed by memcpy.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers