23 Jul, 2020

1 commit

  • Rationale:
    Reduces attack surface on kernel devs opening the links for MITM
    as HTTPS traffic is much harder to manipulate.

    Deterministic algorithm:
    For each file:
    If not .svg:
    For each line:
    If doesn't contain `\bxmlns\b`:
    For each link, `\bhttp://[^# \t\r\n]*(?:\w|/)`:
    If neither `\bgnu\.org/license`, nor `\bmozilla\.org/MPL\b`:
    If both the HTTP and HTTPS versions
    return 200 OK and serve the same content:
    Replace HTTP with HTTPS.

    Signed-off-by: Alexander A. Klimov
    Signed-off-by: Herbert Xu

    Alexander A. Klimov
     

15 May, 2020

1 commit

  • When building for ARMv7-M, clang-9 or higher tries to unroll some loops,
    which ends up confusing the register allocator to the point of generating
    rather bad code and using more than the warning limit for stack frames:

    warning: stack frame size of 1200 bytes in function 'blake2b_compress' [-Wframe-larger-than=]

    Forcing it to not unroll the final loop avoids this problem.

    Fixes: 91d689337fe8 ("crypto: blake2b - add blake2b generic implementation")
    Signed-off-by: Arnd Bergmann
    Reviewed-by: Nathan Chancellor
    Signed-off-by: Herbert Xu

    Arnd Bergmann
     

09 Jan, 2020

1 commit

  • The CRYPTO_TFM_RES_BAD_KEY_LEN flag was apparently meant as a way to
    make the ->setkey() functions provide more information about errors.

    However, no one actually checks for this flag, which makes it pointless.

    Also, many algorithms fail to set this flag when given a bad length key.
    Reviewing just the generic implementations, this is the case for
    aes-fixed-time, cbcmac, echainiv, nhpoly1305, pcrypt, rfc3686, rfc4309,
    rfc7539, rfc7539esp, salsa20, seqiv, and xcbc. But there are probably
    many more in arch/*/crypto/ and drivers/crypto/.

    Some algorithms can even set this flag when the key is the correct
    length. For example, authenc and authencesn set it when the key payload
    is malformed in any way (not just a bad length), the atmel-sha and ccree
    drivers can set it if a memory allocation fails, and the chelsio driver
    sets it for bad auth tag lengths, not just bad key lengths.

    So even if someone actually wanted to start checking this flag (which
    seems unlikely, since it's been unused for a long time), there would be
    a lot of work needed to get it working correctly. But it would probably
    be much better to go back to the drawing board and just define different
    return values, like -EINVAL if the key is invalid for the algorithm vs.
    -EKEYREJECTED if the key was rejected by a policy like "no weak keys".
    That would be much simpler, less error-prone, and easier to test.

    So just remove this flag.

    Signed-off-by: Eric Biggers
    Reviewed-by: Horia Geantă
    Signed-off-by: Herbert Xu

    Eric Biggers
     

22 Nov, 2019

7 commits

  • The TFM context can be renamed to a more appropriate name and the local
    varaibles as well, using 'tctx' which seems to be more common than
    'mctx'.

    The _setkey callback was the last one without the blake2b_ prefix,
    rename that too.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     
  • Now that there's only one call to blake2b_update, we can merge it to the
    callback and simplify. The empty input check is split and the rest of
    code un-indented.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     
  • The helper is trival and called once, inlining makes things simpler.
    There's a comment to tie it back to the idea behind the code.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     
  • All the code for param block has been inlined, last_node and outlen from
    the state are not used or have become redundant due to other code.
    Remove it.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     
  • The keyed init writes the key bytes to the input buffer and does an
    update. We can do that in two ways: fill the buffer and update
    immediatelly. This is what current blake2b_init_key does. Any other
    following _update or _final will continue from the updated state.

    The other way is to write the key and set the number of bytes to process
    at the next _update or _final, lazy evaluation. Which leads to the the
    simplified code in this patch.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     
  • The call chain from blake2b_init can be simplified because the param
    block is effectively zeros, besides the key.

    - blake2b_init0 zeroes state and sets IV
    - blake2b_init sets up param block with defaults (key and some 1s)
    - init with key, write it to the input buffer and recalculate state

    So the compact way is to zero out the state and initialize index 0 of
    the state directly with the non-zero values and the key.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     
  • blake2b_final is called only once, merge it to the crypto API callback
    and simplify. This avoids the temporary buffer and swaps the bytes of
    internal buffer.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba
     

01 Nov, 2019

1 commit

  • The patch brings support of several BLAKE2 variants (2b with various
    digest lengths). The keyed digest is supported, using tfm->setkey call.
    The in-tree user will be btrfs (for checksumming), we're going to use
    the BLAKE2b-256 variant.

    The code is reference implementation taken from the official sources and
    modified in terms of kernel coding style (whitespace, comments, uintXX_t
    -> uXX types, removed unused prototypes and #ifdefs, removed testing
    code, changed secure_zero_memory -> memzero_explicit, used own helpers
    for unaligned reads/writes and rotations).

    Further changes removed sanity checks of key length or output size,
    these values are verified in the crypto API callbacks or hardcoded in
    shash_alg and not exposed to users.

    Signed-off-by: David Sterba
    Signed-off-by: Herbert Xu

    David Sterba