18 Jul, 2016

3 commits


17 Aug, 2015

3 commits


14 Jul, 2015

2 commits


03 Jun, 2015

3 commits


28 May, 2015

2 commits


25 May, 2015

4 commits


22 May, 2015

4 commits

  • This patch converts the seqiv IV generator to work with the new
    AEAD interface where IV generators are just normal AEAD algorithms.

    Full backwards compatibility is paramount at this point since
    no users have yet switched over to the new interface. Nor can
    they switch to the new interface until IV generation is fully
    supported by it.

    So this means we are adding two versions of seqiv alongside the
    existing one. The first one is the one that will be used when
    the underlying AEAD algorithm has switched over to the new AEAD
    interface. The second one handles the current case where the
    underlying AEAD algorithm still uses the old interface.

    Both versions export themselves through the new AEAD interface.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the basic structure of the new AEAD type. Unlike
    the current version, there is no longer any concept of geniv. IV
    generation will still be carried out by wrappers but they will be
    normal AEAD algorithms that simply take the IPsec sequence number
    as the IV.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch is the first step in the introduction of a new AEAD
    alg type. Unlike normal conversions this patch only renames the
    existing aead_alg structure because there are external references
    to it.

    Those references will be removed after this patch.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • The primary user of AEAD, IPsec includes the IV in the AD in
    most cases, except where it is implicitly authenticated by the
    underlying algorithm.

    The way it is currently implemented is a hack because we pass
    the data in piecemeal and the underlying algorithms try to stitch
    them back up into one piece.

    This is why this patch is adding a new interface that allows a
    single SG list to be passed in that contains everything so the
    algorithm implementors do not have to stitch.

    The new interface accepts a single source SG list and a single
    destination SG list. Both must be laid out as follows:

    AD, skipped data, plain/cipher text, ICV

    The ICV is not present from the source during encryption and from
    the destination during decryption.

    For the top-level IPsec AEAD algorithm the plain/cipher text will
    contain the generated (or received) IV.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

13 May, 2015

1 commit

  • This patch converts the top-level aead interface to the new style.
    All user-level AEAD interface code have been moved into crypto/aead.h.

    The allocation/free functions have switched over to the new way of
    allocating tfms.

    This patch also removes the double indrection on setkey so the
    indirection now exists only at the alg level.

    Apart from these there are no user-visible changes.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

26 Apr, 2015

1 commit


22 Dec, 2014

1 commit


19 Feb, 2013

1 commit

  • Three errors resulting in kernel memory disclosure:

    1/ The structures used for the netlink based crypto algorithm report API
    are located on the stack. As snprintf() does not fill the remainder of
    the buffer with null bytes, those stack bytes will be disclosed to users
    of the API. Switch to strncpy() to fix this.

    2/ crypto_report_one() does not initialize all field of struct
    crypto_user_alg. Fix this to fix the heap info leak.

    3/ For the module name we should copy only as many bytes as
    module_name() returns -- not as much as the destination buffer could
    hold. But the current code does not and therefore copies random data
    from behind the end of the module name, as the module name is always
    shorter than CRYPTO_MAX_ALG_NAME.

    Also switch to use strncpy() to copy the algorithm's name and
    driver_name. They are strings, after all.

    Signed-off-by: Mathias Krause
    Cc: Steffen Klassert
    Signed-off-by: Herbert Xu

    Mathias Krause
     

04 Feb, 2013

1 commit

  • Replace PTR_ERR followed by ERR_PTR by ERR_CAST, to be more concise.

    The semantic patch that makes this change is as follows:
    (http://coccinelle.lip6.fr/)

    //
    @@
    expression err,x;
    @@
    - err = PTR_ERR(x);
    if (IS_ERR(x))
    - return ERR_PTR(err);
    + return ERR_CAST(x);
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: Herbert Xu

    Julia Lawall
     

11 Apr, 2012

1 commit


02 Apr, 2012

1 commit


29 Mar, 2012

1 commit

  • We lookup algorithms with crypto_alg_mod_lookup() when instantiating via
    crypto_add_alg(). However, algorithms that are wrapped by an IV genearator
    (e.g. aead or genicv type algorithms) need special care. The userspace
    process hangs until it gets a timeout when we use crypto_alg_mod_lookup()
    to lookup these algorithms. So export the lookup functions for these
    algorithms and use them in crypto_add_alg().

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     

11 Nov, 2011

1 commit


21 Oct, 2011

2 commits


16 Feb, 2010

1 commit


12 Oct, 2009

1 commit


18 Feb, 2009

1 commit

  • When an aead constructed through crypto_nivaead_default fails
    its selftest, we'll loop forever trying to construct new aead
    objects but failing because it already exists.

    The crux of the issue is that once an aead fails the selftest,
    we'll ignore it on the next run through crypto_aead_lookup and
    attempt to construct a new aead.

    We should instead return an error to the caller if we find an
    an that has failed the test.

    This bug hasn't manifested itself yet because we don't have any
    test vectors for the existing nivaead algorithms. They're tested
    through the underlying algorithms only.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

11 Jan, 2008

5 commits

  • This patch adds an async field to /proc/crypto for ablkcipher and aead
    algorithms.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch makes crypto_alloc_aead always return algorithms that is
    capable of generating their own IVs through givencrypt and givdecrypt.
    All existing AEAD algorithms already do. New ones must either supply
    their own or specify a generic IV generator with the geniv field.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch creates the infrastructure to help the construction of IV
    generator templates that wrap around AEAD algorithms by adding an IV
    generator to them. This is useful for AEAD algorithms with no built-in
    IV generator or to replace their built-in generator.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • Some algorithms always require manual IV construction. For instance,
    the generic CCM algorithm requires the first byte of the IV to be manually
    constructed. Such algorithms are always used by other algorithms equipped
    with their own IV generators and do not need IV generation per se.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the underlying givcrypt operations for aead and associated
    support elements. The rationale is identical to that of the skcipher
    givcrypt operations, i.e., sometimes only the algorithm knows how the
    IV should be generated.

    A new request type aead_givcrypt_request is added which contains an
    embedded aead_request structure with two new elements to support this
    operation. The new elements are seq and giv. The seq field should
    contain a strictly increasing 64-bit integer which may be used by
    certain IV generators as an input value. The giv field will be used
    to store the generated IV. It does not need to obey the alignment
    requirements of the algorithm because it's not used during the operation.

    The existing iv field must still be available as it will be used to store
    intermediate IVs and the output IV if chaining is desired.

    Signed-off-by: Herbert Xu

    Herbert Xu