On Sun, Nov 13, 2016 at 07:45:37PM +0800, Herbert Xu wrote:
> +static void cryptd_skcipher_encrypt(struct crypto_async_request *base,
> +                                 int err)
> +{
> +     struct skcipher_request *req = skcipher_request_cast(base);
> +     struct cryptd_skcipher_request_ctx *rctx = skcipher_request_ctx(req);
> +     struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
> +     struct cryptd_skcipher_ctx *ctx = crypto_skcipher_ctx(tfm);
> +     struct crypto_skcipher *child = ctx->child;
> +     SKCIPHER_REQUEST_ON_STACK(subreq, child);
> +
> +     if (unlikely(err == -EINPROGRESS))
> +             goto out;
> +
> +     skcipher_request_set_tfm(subreq, child);
> +     skcipher_request_set_callback(subreq, CRYPTO_TFM_REQ_MAY_SLEEP,
> +                                   NULL, NULL);
> +     skcipher_request_set_crypt(subreq, req->src, req->dst, req->cryptlen,
> +                                req->iv);
> +
> +     err = crypto_skcipher_encrypt(subreq);
> +     skcipher_request_zero(subreq);
> +
> +     req->base.complete = rctx->complete;
> +
> +out:
> +     cryptd_skcipher_complete(req, err);
> +}
> +
> +static void cryptd_skcipher_decrypt(struct crypto_async_request *base,
> +                                 int err)
> +{
> +     struct skcipher_request *req = skcipher_request_cast(base);
> +     struct cryptd_skcipher_request_ctx *rctx = skcipher_request_ctx(req);
> +     struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
> +     struct cryptd_skcipher_ctx *ctx = crypto_skcipher_ctx(tfm);
> +     struct crypto_skcipher *child = ctx->child;
> +     SKCIPHER_REQUEST_ON_STACK(subreq, child);
> +
> +     if (unlikely(err == -EINPROGRESS))
> +             goto out;
> +
> +     skcipher_request_set_tfm(subreq, child);
> +     skcipher_request_set_callback(subreq, CRYPTO_TFM_REQ_MAY_SLEEP,
> +                                   NULL, NULL);
> +     skcipher_request_set_crypt(subreq, req->src, req->dst, req->cryptlen,
> +                                req->iv);
> +
> +     err = crypto_skcipher_decrypt(subreq);
> +     skcipher_request_zero(subreq);
> +
> +     req->base.complete = rctx->complete;
> +
> +out:
> +     cryptd_skcipher_complete(req, err);
> +}

cryptd_skcipher_encrypt() and cryptd_skcipher_decrypt() are identical except for
whether crypto_skcipher_encrypt() or crypto_skcipher_decrypt() is used.  I
suggest having them wrap a function cryptd_skcipher_crypt() that takes in a
function pointer to crypto_skcipher_encrypt or crypto_skcipher_decrypt.
Alternatively a bool would be okay too.

Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to