02 Dec, 2010

1 commit


17 Jan, 2010

1 commit

  • This patch adds the RFC4543 (GMAC) wrapper for GCM similar to the
    existing RFC4106 wrapper. The main differences between GCM and GMAC are
    the contents of the AAD and that the plaintext is empty for the latter.

    Signed-off-by: Tobias Brunner
    Signed-off-by: Herbert Xu

    Tobias Brunner
     

16 Nov, 2009

1 commit

  • The flow of the complete function (xxx_done) in gcm.c is as follow:

    void complete(struct crypto_async_request *areq, int err)
    {
    struct aead_request *req = areq->data;

    if (!err) {
    err = async_next_step();
    if (err == -EINPROGRESS || err == -EBUSY)
    return;
    }

    complete_for_next_step(areq, err);
    }

    But *areq may be destroyed in async_next_step(), this makes
    complete_for_next_step() can not work properly. To fix this, one of
    following methods is used for each complete function.

    - Add a __complete() for each complete(), which accept struct
    aead_request *req instead of areq, so avoid using areq after it is
    destroyed.

    - Expand complete_for_next_step().

    The fixing method is based on the idea of Herbert Xu.

    Signed-off-by: Huang Ying
    Signed-off-by: Herbert Xu

    Huang Ying
     

06 Aug, 2009

1 commit

  • Remove the dedicated GHASH implementation in GCM, and uses the GHASH
    digest algorithm instead. This will make GCM uses hardware accelerated
    GHASH implementation automatically if available.

    ahash instead of shash interface is used, because some hardware
    accelerated GHASH implementation needs asynchronous interface.

    Signed-off-by: Huang Ying
    Signed-off-by: Herbert Xu

    Huang Ying
     

11 Jan, 2008

13 commits

  • This patch introduces the rfc4106 wrapper for GCM just as we have an
    rfc4309 wrapper for CCM. The purpose of the wrapper is to include part
    of the IV in the key so that it can be negotiated by IPsec.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch converts the gcm algorithm over to crypto_grab_skcipher
    which is a prerequisite for IV generation.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the gcm_base template which takes a block cipher
    parameter instead of cipher. This allows the user to specify a
    specific CTR implementation.

    This also fixes a leak of the cipher algorithm that was previously
    looked up but never freed.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the necessary changes for GCM to be used with async
    ciphers. This would allow it to be used with hardware devices that
    support CTR.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • As discussed previously, this patch moves the basic CTR functionality
    into a chainable algorithm called ctr. The IPsec-specific variant of
    it is now placed on top with the name rfc3686.

    So ctr(aes) gives a chainable cipher with IV size 16 while the IPsec
    variant will be called rfc3686(ctr(aes)). This patch also adjusts
    gcm accordingly.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch fixes the request context alignment so that it is actually
    aligned to the value required by the algorithm.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • The abreq structure is currently allocated on the stack. This is broken
    if the underlying algorithm is asynchronous. This patch changes it so
    that it's taken from the private context instead which has been enlarged
    accordingly.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • Unfortunately the generic chaining hasn't been ported to all architectures
    yet, and notably not s390. So this patch restores the chainging that we've
    been using previously which does work everywhere.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • The scatterwalk infrastructure is used by algorithms so it needs to
    move out of crypto for future users that may live in drivers/crypto
    or asm/*/crypto.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch changes gcm/authenc to return EBADMSG instead of EINVAL for
    ICV mismatches. This convention has already been adopted by IPsec.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • The crypto_aead convention for ICVs is to include it directly in the
    output. If we decided to change this in future then we would make
    the ICV (if the algorithm has an explicit one) available in the
    request itself.

    For now no algorithm needs this so this patch changes gcm to conform
    to this convention. It also adjusts the tcrypt aead tests to take
    this into account.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • As it is authsize is an algorithm paramter which cannot be changed at
    run-time. This is inconvenient because hardware that implements such
    algorithms would have to register each authsize that they support
    separately.

    Since authsize is a property common to all AEAD algorithms, we can add
    a function setauthsize that sets it at run-time, just like setkey.

    This patch does exactly that and also changes authenc so that authsize
    is no longer a parameter of its template.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • Add GCM/GMAC support to cryptoapi.

    GCM (Galois/Counter Mode) is an AEAD mode of operations for any block cipher
    with a block size of 16. The typical example is AES-GCM.

    Signed-off-by: Mikko Herranen
    Reviewed-by: Mika Kukkonen
    Signed-off-by: Herbert Xu

    Mikko Herranen