Merge 0c6bc37255 ("Merge tag 'ubifs-for-linus-6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs") into android-mainline
Steps on the way to 6.8-rc1 Change-Id: I3ab4d41c6419defe26b24d4e0ef73dca2186a145 Signed-off-by: Lee Jones <joneslee@google.com>
This commit is contained in:
@@ -212,13 +212,9 @@ struct shash_desc {
|
||||
* This is a counterpart to @init_tfm, used to remove
|
||||
* various changes set in @init_tfm.
|
||||
* @clone_tfm: Copy transform into new object, may allocate memory.
|
||||
* @digestsize: see struct ahash_alg
|
||||
* @statesize: see struct ahash_alg
|
||||
* @descsize: Size of the operational state for the message digest. This state
|
||||
* size is the memory size that needs to be allocated for
|
||||
* shash_desc.__ctx
|
||||
* @stat: Statistics for hash algorithm.
|
||||
* @base: internally used
|
||||
* @halg: see struct hash_alg_common
|
||||
* @HASH_ALG_COMMON: see struct hash_alg_common
|
||||
*/
|
||||
|
||||
@@ -121,6 +121,7 @@ struct af_alg_async_req {
|
||||
*
|
||||
* @tsgl_list: Link to TX SGL
|
||||
* @iv: IV for cipher operation
|
||||
* @state: Existing state for continuing operation
|
||||
* @aead_assoclen: Length of AAD for AEAD cipher operations
|
||||
* @completion: Work queue for synchronous operation
|
||||
* @used: TX bytes sent to kernel. This variable is used to
|
||||
@@ -136,11 +137,13 @@ struct af_alg_async_req {
|
||||
* recvmsg is invoked.
|
||||
* @init: True if metadata has been sent.
|
||||
* @len: Length of memory allocated for this data structure.
|
||||
* @inflight: Non-zero when AIO requests are in flight.
|
||||
*/
|
||||
struct af_alg_ctx {
|
||||
struct list_head tsgl_list;
|
||||
|
||||
void *iv;
|
||||
void *state;
|
||||
size_t aead_assoclen;
|
||||
|
||||
struct crypto_wait wait;
|
||||
@@ -154,6 +157,8 @@ struct af_alg_ctx {
|
||||
bool init;
|
||||
|
||||
unsigned int len;
|
||||
|
||||
unsigned int inflight;
|
||||
};
|
||||
|
||||
int af_alg_register_type(const struct af_alg_type *type);
|
||||
|
||||
+108
-25
@@ -15,6 +15,17 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Set this bit if the lskcipher operation is a continuation. */
|
||||
#define CRYPTO_LSKCIPHER_FLAG_CONT 0x00000001
|
||||
/* Set this bit if the lskcipher operation is final. */
|
||||
#define CRYPTO_LSKCIPHER_FLAG_FINAL 0x00000002
|
||||
/* The bit CRYPTO_TFM_REQ_MAY_SLEEP can also be set if needed. */
|
||||
|
||||
/* Set this bit if the skcipher operation is a continuation. */
|
||||
#define CRYPTO_SKCIPHER_REQ_CONT 0x00000001
|
||||
/* Set this bit if the skcipher operation is not final. */
|
||||
#define CRYPTO_SKCIPHER_REQ_NOTFINAL 0x00000002
|
||||
|
||||
struct scatterlist;
|
||||
|
||||
/**
|
||||
@@ -91,6 +102,7 @@ struct crypto_istat_cipher {
|
||||
* IV of exactly that size to perform the encrypt or decrypt operation.
|
||||
* @chunksize: Equal to the block size except for stream ciphers such as
|
||||
* CTR where it is set to the underlying block size.
|
||||
* @statesize: Size of the internal state for the algorithm.
|
||||
* @stat: Statistics for cipher algorithm
|
||||
* @base: Definition of a generic crypto algorithm.
|
||||
*/
|
||||
@@ -99,6 +111,7 @@ struct crypto_istat_cipher {
|
||||
unsigned int max_keysize; \
|
||||
unsigned int ivsize; \
|
||||
unsigned int chunksize; \
|
||||
unsigned int statesize; \
|
||||
\
|
||||
SKCIPHER_ALG_COMMON_STAT \
|
||||
\
|
||||
@@ -108,16 +121,6 @@ struct skcipher_alg_common SKCIPHER_ALG_COMMON;
|
||||
|
||||
/**
|
||||
* struct skcipher_alg - symmetric key cipher definition
|
||||
* @min_keysize: Minimum key size supported by the transformation. This is the
|
||||
* smallest key length supported by this transformation algorithm.
|
||||
* This must be set to one of the pre-defined values as this is
|
||||
* not hardware specific. Possible values for this field can be
|
||||
* found via git grep "_MIN_KEY_SIZE" include/crypto/
|
||||
* @max_keysize: Maximum key size supported by the transformation. This is the
|
||||
* largest key length supported by this transformation algorithm.
|
||||
* This must be set to one of the pre-defined values as this is
|
||||
* not hardware specific. Possible values for this field can be
|
||||
* found via git grep "_MAX_KEY_SIZE" include/crypto/
|
||||
* @setkey: Set key for the transformation. This function is used to either
|
||||
* program a supplied key into the hardware or store the key in the
|
||||
* transformation context for programming it later. Note that this
|
||||
@@ -141,6 +144,17 @@ struct skcipher_alg_common SKCIPHER_ALG_COMMON;
|
||||
* be called in parallel with the same transformation object.
|
||||
* @decrypt: Decrypt a single block. This is a reverse counterpart to @encrypt
|
||||
* and the conditions are exactly the same.
|
||||
* @export: Export partial state of the transformation. This function dumps the
|
||||
* entire state of the ongoing transformation into a provided block of
|
||||
* data so it can be @import 'ed back later on. This is useful in case
|
||||
* you want to save partial result of the transformation after
|
||||
* processing certain amount of data and reload this partial result
|
||||
* multiple times later on for multiple re-use. No data processing
|
||||
* happens at this point.
|
||||
* @import: Import partial state of the transformation. This function loads the
|
||||
* entire state of the ongoing transformation from a provided block of
|
||||
* data so the transformation can continue from this point onward. No
|
||||
* data processing happens at this point.
|
||||
* @init: Initialize the cryptographic transformation object. This function
|
||||
* is used to initialize the cryptographic transformation object.
|
||||
* This function is called only once at the instantiation time, right
|
||||
@@ -152,15 +166,9 @@ struct skcipher_alg_common SKCIPHER_ALG_COMMON;
|
||||
* @exit: Deinitialize the cryptographic transformation object. This is a
|
||||
* counterpart to @init, used to remove various changes set in
|
||||
* @init.
|
||||
* @ivsize: IV size applicable for transformation. The consumer must provide an
|
||||
* IV of exactly that size to perform the encrypt or decrypt operation.
|
||||
* @chunksize: Equal to the block size except for stream ciphers such as
|
||||
* CTR where it is set to the underlying block size.
|
||||
* @walksize: Equal to the chunk size except in cases where the algorithm is
|
||||
* considerably more efficient if it can operate on multiple chunks
|
||||
* in parallel. Should be a multiple of chunksize.
|
||||
* @stat: Statistics for cipher algorithm
|
||||
* @base: Definition of a generic crypto algorithm.
|
||||
* @co: see struct skcipher_alg_common
|
||||
*
|
||||
* All fields except @ivsize are mandatory and must be filled.
|
||||
@@ -170,6 +178,8 @@ struct skcipher_alg {
|
||||
unsigned int keylen);
|
||||
int (*encrypt)(struct skcipher_request *req);
|
||||
int (*decrypt)(struct skcipher_request *req);
|
||||
int (*export)(struct skcipher_request *req, void *out);
|
||||
int (*import)(struct skcipher_request *req, const void *in);
|
||||
int (*init)(struct crypto_skcipher *tfm);
|
||||
void (*exit)(struct crypto_skcipher *tfm);
|
||||
|
||||
@@ -200,6 +210,9 @@ struct skcipher_alg {
|
||||
* may be left over if length is not a multiple of blocks
|
||||
* and there is more to come (final == false). The number of
|
||||
* left-over bytes should be returned in case of success.
|
||||
* The siv field shall be as long as ivsize + statesize with
|
||||
* the IV placed at the front. The state will be used by the
|
||||
* algorithm internally.
|
||||
* @decrypt: Decrypt a number of bytes. This is a reverse counterpart to
|
||||
* @encrypt and the conditions are exactly the same.
|
||||
* @init: Initialize the cryptographic transformation object. This function
|
||||
@@ -215,9 +228,9 @@ struct lskcipher_alg {
|
||||
int (*setkey)(struct crypto_lskcipher *tfm, const u8 *key,
|
||||
unsigned int keylen);
|
||||
int (*encrypt)(struct crypto_lskcipher *tfm, const u8 *src,
|
||||
u8 *dst, unsigned len, u8 *iv, bool final);
|
||||
u8 *dst, unsigned len, u8 *siv, u32 flags);
|
||||
int (*decrypt)(struct crypto_lskcipher *tfm, const u8 *src,
|
||||
u8 *dst, unsigned len, u8 *iv, bool final);
|
||||
u8 *dst, unsigned len, u8 *siv, u32 flags);
|
||||
int (*init)(struct crypto_lskcipher *tfm);
|
||||
void (*exit)(struct crypto_lskcipher *tfm);
|
||||
|
||||
@@ -496,6 +509,40 @@ static inline unsigned int crypto_lskcipher_chunksize(
|
||||
return crypto_lskcipher_alg(tfm)->co.chunksize;
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_skcipher_statesize() - obtain state size
|
||||
* @tfm: cipher handle
|
||||
*
|
||||
* Some algorithms cannot be chained with the IV alone. They carry
|
||||
* internal state which must be replicated if data is to be processed
|
||||
* incrementally. The size of that state can be obtained with this
|
||||
* function.
|
||||
*
|
||||
* Return: state size in bytes
|
||||
*/
|
||||
static inline unsigned int crypto_skcipher_statesize(
|
||||
struct crypto_skcipher *tfm)
|
||||
{
|
||||
return crypto_skcipher_alg_common(tfm)->statesize;
|
||||
}
|
||||
|
||||
/**
|
||||
* crypto_lskcipher_statesize() - obtain state size
|
||||
* @tfm: cipher handle
|
||||
*
|
||||
* Some algorithms cannot be chained with the IV alone. They carry
|
||||
* internal state which must be replicated if data is to be processed
|
||||
* incrementally. The size of that state can be obtained with this
|
||||
* function.
|
||||
*
|
||||
* Return: state size in bytes
|
||||
*/
|
||||
static inline unsigned int crypto_lskcipher_statesize(
|
||||
struct crypto_lskcipher *tfm)
|
||||
{
|
||||
return crypto_lskcipher_alg(tfm)->co.statesize;
|
||||
}
|
||||
|
||||
static inline unsigned int crypto_sync_skcipher_blocksize(
|
||||
struct crypto_sync_skcipher *tfm)
|
||||
{
|
||||
@@ -683,15 +730,49 @@ int crypto_skcipher_encrypt(struct skcipher_request *req);
|
||||
*/
|
||||
int crypto_skcipher_decrypt(struct skcipher_request *req);
|
||||
|
||||
/**
|
||||
* crypto_skcipher_export() - export partial state
|
||||
* @req: reference to the skcipher_request handle that holds all information
|
||||
* needed to perform the operation
|
||||
* @out: output buffer of sufficient size that can hold the state
|
||||
*
|
||||
* Export partial state of the transformation. This function dumps the
|
||||
* entire state of the ongoing transformation into a provided block of
|
||||
* data so it can be @import 'ed back later on. This is useful in case
|
||||
* you want to save partial result of the transformation after
|
||||
* processing certain amount of data and reload this partial result
|
||||
* multiple times later on for multiple re-use. No data processing
|
||||
* happens at this point.
|
||||
*
|
||||
* Return: 0 if the cipher operation was successful; < 0 if an error occurred
|
||||
*/
|
||||
int crypto_skcipher_export(struct skcipher_request *req, void *out);
|
||||
|
||||
/**
|
||||
* crypto_skcipher_import() - import partial state
|
||||
* @req: reference to the skcipher_request handle that holds all information
|
||||
* needed to perform the operation
|
||||
* @in: buffer holding the state
|
||||
*
|
||||
* Import partial state of the transformation. This function loads the
|
||||
* entire state of the ongoing transformation from a provided block of
|
||||
* data so the transformation can continue from this point onward. No
|
||||
* data processing happens at this point.
|
||||
*
|
||||
* Return: 0 if the cipher operation was successful; < 0 if an error occurred
|
||||
*/
|
||||
int crypto_skcipher_import(struct skcipher_request *req, const void *in);
|
||||
|
||||
/**
|
||||
* crypto_lskcipher_encrypt() - encrypt plaintext
|
||||
* @tfm: lskcipher handle
|
||||
* @src: source buffer
|
||||
* @dst: destination buffer
|
||||
* @len: number of bytes to process
|
||||
* @iv: IV for the cipher operation which must comply with the IV size defined
|
||||
* by crypto_lskcipher_ivsize
|
||||
*
|
||||
* @siv: IV + state for the cipher operation. The length of the IV must
|
||||
* comply with the IV size defined by crypto_lskcipher_ivsize. The
|
||||
* IV is then followed with a buffer with the length as specified by
|
||||
* crypto_lskcipher_statesize.
|
||||
* Encrypt plaintext data using the lskcipher handle.
|
||||
*
|
||||
* Return: >=0 if the cipher operation was successful, if positive
|
||||
@@ -699,7 +780,7 @@ int crypto_skcipher_decrypt(struct skcipher_request *req);
|
||||
* < 0 if an error occurred
|
||||
*/
|
||||
int crypto_lskcipher_encrypt(struct crypto_lskcipher *tfm, const u8 *src,
|
||||
u8 *dst, unsigned len, u8 *iv);
|
||||
u8 *dst, unsigned len, u8 *siv);
|
||||
|
||||
/**
|
||||
* crypto_lskcipher_decrypt() - decrypt ciphertext
|
||||
@@ -707,8 +788,10 @@ int crypto_lskcipher_encrypt(struct crypto_lskcipher *tfm, const u8 *src,
|
||||
* @src: source buffer
|
||||
* @dst: destination buffer
|
||||
* @len: number of bytes to process
|
||||
* @iv: IV for the cipher operation which must comply with the IV size defined
|
||||
* by crypto_lskcipher_ivsize
|
||||
* @siv: IV + state for the cipher operation. The length of the IV must
|
||||
* comply with the IV size defined by crypto_lskcipher_ivsize. The
|
||||
* IV is then followed with a buffer with the length as specified by
|
||||
* crypto_lskcipher_statesize.
|
||||
*
|
||||
* Decrypt ciphertext data using the lskcipher handle.
|
||||
*
|
||||
@@ -717,7 +800,7 @@ int crypto_lskcipher_encrypt(struct crypto_lskcipher *tfm, const u8 *src,
|
||||
* < 0 if an error occurred
|
||||
*/
|
||||
int crypto_lskcipher_decrypt(struct crypto_lskcipher *tfm, const u8 *src,
|
||||
u8 *dst, unsigned len, u8 *iv);
|
||||
u8 *dst, unsigned len, u8 *siv);
|
||||
|
||||
/**
|
||||
* DOC: Symmetric Key Cipher Request Handle
|
||||
|
||||
Reference in New Issue
Block a user