• Eric Biggers's avatar
    crypto: testmgr - add testvec_config struct and helper functions · 3f47a03d
    Eric Biggers authored
    Crypto algorithms must produce the same output for the same input
    regardless of data layout, i.e. how the src and dst scatterlists are
    divided into chunks and how each chunk is aligned.  Request flags such
    as CRYPTO_TFM_REQ_MAY_SLEEP must not affect the result either.
    
    However, testing of this currently has many gaps.  For example,
    individual algorithms are responsible for providing their own chunked
    test vectors.  But many don't bother to do this or test only one or two
    cases, providing poor test coverage.  Also, other things such as
    misaligned IVs and CRYPTO_TFM_REQ_MAY_SLEEP are never tested at all.
    
    Test code is also duplicated between the chunked and non-chunked cases,
    making it difficult to make other improvements.
    
    To improve the situation, this patch series basically moves the chunk
    descriptions into the testmgr itself so that they are shared by all
    algorithms.  However, it's done in an extensible way via a new struct
    'testvec_config', which describes not just the scaled chunk lengths but
    also all other aspects of the crypto operation besides the data itself
    such as the buffer alignments, the request flags, whether the operation
    is in-place or not, the IV alignment, and for hash algorithms when to
    do each update() and when to use finup() vs. final() vs. digest().
    
    Then, this patch series makes skcipher, aead, and hash algorithms be
    tested against a list of default testvec_configs, replacing the current
    test code.  This improves overall test coverage, without reducing test
    performance too much.  Note that the test vectors themselves are not
    changed, except for removing the chunk lists.
    
    This series also adds randomized fuzz tests, enabled by a new kconfig
    option intended for developer use only, where skcipher, aead, and hash
    algorithms are tested against many randomly generated testvec_configs.
    This provides much more comprehensive test coverage.
    
    These improved tests have already exposed many bugs.
    
    To start it off, this initial patch adds the testvec_config and various
    helper functions that will be used by the skcipher, aead, and hash test
    code that will be converted to use the new testvec_config framework.
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    3f47a03d
testmgr.c 97.6 KB