• Eric Biggers's avatar
    crypto: testmgr - unify the AEAD encryption and decryption test vectors · a0d608ee
    Eric Biggers authored
    Currently testmgr has separate encryption and decryption test vectors
    for AEADs.  That's massively redundant, since usually the decryption
    tests are identical to the encryption tests, just with the input/result
    swapped.  And for some algorithms it was forgotten to add decryption
    test vectors, so for them currently only encryption is being tested.
    
    Therefore, eliminate the redundancy by removing the AEAD decryption test
    vectors and updating testmgr to test both AEAD encryption and decryption
    using what used to be the encryption test vectors.  Naming is adjusted
    accordingly: each aead_testvec now has a 'ptext' (plaintext), 'plen'
    (plaintext length), 'ctext' (ciphertext), and 'clen' (ciphertext length)
    instead of an 'input', 'ilen', 'result', and 'rlen'.  "Ciphertext" here
    refers to the full ciphertext, including the authentication tag.
    
    For now the scatterlist divisions are just given for the plaintext
    length, not also the ciphertext length.  For decryption, the last
    scatterlist element is just extended by the authentication tag length.
    
    In total, this removes over 5000 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.
    
    The testmgr.h portion of this patch was automatically generated using
    the following awk script, except that I also manually updated the
    definition of 'struct aead_testvec' and fixed the location of the
    comment describing the AEGIS-128 test vectors.
    
        BEGIN { OTHER = 0; ENCVEC = 1; DECVEC = 2; DECVEC_TAIL = 3; mode = OTHER }
    
        /^static const struct aead_testvec.*_enc_/ { sub("_enc", ""); mode = ENCVEC }
        /^static const struct aead_testvec.*_dec_/ { mode = DECVEC }
        mode == ENCVEC {
            sub(/\.input[[:space:]]*=/,     ".ptext\t=")
            sub(/\.result[[:space:]]*=/,    ".ctext\t=")
            sub(/\.ilen[[:space:]]*=/,      ".plen\t=")
            sub(/\.rlen[[:space:]]*=/,      ".clen\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, 1235 insertions(+), 6491 deletions(-)".
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    a0d608ee
testmgr.c 85.4 KB