Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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>