On Mon, Jun 01, 2026 at 08:56:41AM +0000, Leonid Ravich wrote:
>
> diff --git a/crypto/skcipher.c b/crypto/skcipher.c
> index 2b31d1d5d268..bc37bd554aec 100644
> --- a/crypto/skcipher.c
> +++ b/crypto/skcipher.c
> @@ -432,13 +432,119 @@ int crypto_skcipher_setkey(struct crypto_skcipher
> *tfm, const u8 *key,
> }
> EXPORT_SYMBOL_GPL(crypto_skcipher_setkey);
>
> +int crypto_skcipher_set_data_unit_size(struct crypto_skcipher *tfm,
> + unsigned int data_unit_size)
> +{
> + unsigned int blocksize;
> +
> + if (!data_unit_size) {
> + tfm->data_unit_size = 0;
> + return 0;
> + }
> +
> + if (!crypto_skcipher_supports_multi_data_unit(tfm))
> + return -EOPNOTSUPP;
> +
> + blocksize = crypto_skcipher_blocksize(tfm);
> + if (data_unit_size < blocksize || data_unit_size % blocksize)
> + return -EINVAL;
> +
> + tfm->data_unit_size = data_unit_size;
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(crypto_skcipher_set_data_unit_size);
The unit size should be a per-request attribute, not per tfm.
> @@ -492,6 +517,66 @@ static inline unsigned int crypto_lskcipher_chunksize(
> return crypto_lskcipher_alg(tfm)->co.chunksize;
> }
>
> +/**
> + * crypto_skcipher_supports_multi_data_unit() - test multi-data-unit support
> + * @tfm: cipher handle
> + *
> + * Return: true if the algorithm advertises that it can process multiple
> + * data units in a single skcipher_request.
> + */
> +static inline bool
> +crypto_skcipher_supports_multi_data_unit(struct crypto_skcipher *tfm)
> +{
> + return crypto_skcipher_alg_common(tfm)->base.cra_flags &
> + CRYPTO_ALG_SKCIPHER_MULTI_DATA_UNIT;
> +}
My preference is to always use multi-unit submission if the user
is capable of doing it. The Crypto API should automatically divide
up the units if the underlying driver does not support it.
Thanks,
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt