^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) Scatterlist Cryptographic API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) Introduction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) The Scatterlist Crypto API takes page vectors (scatterlists) as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) arguments, and works directly on pages. In some cases (e.g. ECB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) mode ciphers), this will allow for pages to be encrypted in-place
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) with no copying.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) One of the initial goals of this design was to readily support IPsec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) so that processing can be applied to paged skb's without the need
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) for linearization.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) Details
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) =======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) At the lowest level are algorithms, which register dynamically with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) API.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 'Transforms' are user-instantiated objects, which maintain state, handle all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) of the implementation logic (e.g. manipulating page vectors) and provide an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) abstraction to the underlying algorithms. However, at the user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) level they are very simple.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) Conceptually, the API layering looks like this::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) [transform api] (user interface)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) [transform ops] (per-type logic glue e.g. cipher.c, compress.c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) [algorithm api] (for registering algorithms)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) The idea is to make the user interface and algorithm registration API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) very simple, while hiding the core logic from both. Many good ideas
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) from existing APIs such as Cryptoapi and Nettle have been adapted for this.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) The API currently supports five main types of transforms: AEAD (Authenticated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) Encryption with Associated Data), Block Ciphers, Ciphers, Compressors and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) Hashes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) Please note that Block Ciphers is somewhat of a misnomer. It is in fact
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) meant to support all ciphers including stream ciphers. The difference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) between Block Ciphers and Ciphers is that the latter operates on exactly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) one block while the former can operate on an arbitrary amount of data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) subject to block size requirements (i.e., non-stream ciphers can only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) process multiples of blocks).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) Here's an example of how to use the API::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #include <crypto/hash.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #include <linux/err.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #include <linux/scatterlist.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct scatterlist sg[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) char result[128];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) struct crypto_ahash *tfm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) struct ahash_request *req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) tfm = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) if (IS_ERR(tfm))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) fail();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /* ... set up the scatterlists ... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) req = ahash_request_alloc(tfm, GFP_ATOMIC);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) if (!req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) fail();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) ahash_request_set_callback(req, 0, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) ahash_request_set_crypt(req, sg, result, 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) if (crypto_ahash_digest(req))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) fail();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ahash_request_free(req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) crypto_free_ahash(tfm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) Many real examples are available in the regression test module (tcrypt.c).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) Developer Notes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) ===============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) Transforms may only be allocated in user context, and cryptographic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) methods may only be called from softirq and user contexts. For
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) transforms with a setkey method it too should only be called from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) user context.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) When using the API for ciphers, performance will be optimal if each
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) scatterlist contains data which is a multiple of the cipher's block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) size (typically 8 bytes). This prevents having to do any copying
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) across non-aligned page fragment boundaries.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) Adding New Algorithms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) =====================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) When submitting a new algorithm for inclusion, a mandatory requirement
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) is that at least a few test vectors from known sources (preferably
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) standards) be included.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) Converting existing well known code is preferred, as it is more likely
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) to have been reviewed and widely tested. If submitting code from LGPL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) sources, please consider changing the license to GPL (see section 3 of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) the LGPL).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) Algorithms submitted must also be generally patent-free (e.g. IDEA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) will not be included in the mainline until around 2011), and be based
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) on a recognized standard and/or have been subjected to appropriate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) peer review.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) Also check for any RFCs which may relate to the use of specific algorithms,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) as well as general application notes such as RFC2451 ("The ESP CBC-Mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) Cipher Algorithms").
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) It's a good idea to avoid using lots of macros and use inlined functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) instead, as gcc does a good job with inlining, while excessive use of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) macros can cause compilation problems on some platforms.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) Also check the TODO list at the web site listed below to see what people
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) might already be working on.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) Bugs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) ====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) Send bug reports to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) linux-crypto@vger.kernel.org
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Cc:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) Herbert Xu <herbert@gondor.apana.org.au>,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) David S. Miller <davem@redhat.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) Further Information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) ===================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) For further patches and various updates, including the current TODO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) list, see:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) http://gondor.apana.org.au/~herbert/crypto/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) Authors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) =======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) - James Morris
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) - David S. Miller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) - Herbert Xu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) Credits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) =======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) The following people provided invaluable feedback during the development
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) of the API:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) - Alexey Kuznetzov
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) - Rusty Russell
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) - Herbert Valerio Riedel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) - Jeff Garzik
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) - Michael Richardson
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) - Andrew Morton
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) - Ingo Oeser
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) - Christoph Hellwig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) Portions of this API were derived from the following projects:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) Kerneli Cryptoapi (http://www.kerneli.org/)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) - Alexander Kjeldaas
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) - Herbert Valerio Riedel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) - Kyle McMartin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) - Jean-Luc Cooke
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) - David Bryson
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) - Clemens Fruhwirth
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) - Tobias Ringstrom
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) - Harald Welte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) and;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) Nettle (https://www.lysator.liu.se/~nisse/nettle/)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) - Niels Möller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) Original developers of the crypto algorithms:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) - Dana L. How (DES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) - Andrew Tridgell and Steve French (MD4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) - Colin Plumb (MD5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) - Steve Reid (SHA1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) - Jean-Luc Cooke (SHA256, SHA384, SHA512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) - Kazunori Miyazawa / USAGI (HMAC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) - Matthew Skala (Twofish)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) - Dag Arne Osvik (Serpent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) - Brian Gladman (AES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) - Kartikey Mahendra Bhatt (CAST6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) - Jon Oberheide (ARC4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) - Jouni Malinen (Michael MIC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) - NTT(Nippon Telegraph and Telephone Corporation) (Camellia)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) SHA1 algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) - Jean-Francois Dive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) DES algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) - Raimar Falke
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) - Gisle Sælensminde
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) - Niels Möller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) Blowfish algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) - Herbert Valerio Riedel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) - Kyle McMartin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) Twofish algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) - Werner Koch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) - Marc Mutz
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) SHA256/384/512 algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) - Andrew McDonald
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) - Kyle McMartin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) - Herbert Valerio Riedel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) AES algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) - Alexander Kjeldaas
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) - Herbert Valerio Riedel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) - Kyle McMartin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) - Adam J. Richter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) - Fruhwirth Clemens (i586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) - Linus Torvalds (i586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) CAST5 algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) - Kartikey Mahendra Bhatt (original developers unknown, FSF copyright).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) TEA/XTEA algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) - Aaron Grothe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) - Michael Ringe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) Khazad algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) - Aaron Grothe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) Whirlpool algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) - Aaron Grothe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) - Jean-Luc Cooke
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) Anubis algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) - Aaron Grothe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) Tiger algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) - Aaron Grothe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) VIA PadLock contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) - Michal Ludvig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) Camellia algorithm contributors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) - NTT(Nippon Telegraph and Telephone Corporation) (Camellia)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) Generic scatterwalk code by Adam J. Richter <adam@yggdrasil.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) Please send any credits updates or corrections to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) Herbert Xu <herbert@gondor.apana.org.au>