1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Crypto engine API 4 * 5 * Copyright (c) 2016 Baolin Wang <baolin.wang@linaro.org> 6 */ 7#ifndef _CRYPTO_ENGINE_H 8#define _CRYPTO_ENGINE_H 9 10#include <crypto/aead.h> 11#include <crypto/akcipher.h> 12#include <crypto/hash.h> 13#include <crypto/kpp.h> 14#include <crypto/skcipher.h> 15#include <linux/types.h> 16 17struct crypto_engine; 18struct device; 19 20/* 21 * struct crypto_engine_op - crypto hardware engine operations 22 * @do_one_request: do encryption for current request 23 */ 24struct crypto_engine_op { 25 int (*do_one_request)(struct crypto_engine *engine, 26 void *areq); 27}; 28 29struct aead_engine_alg { 30 struct aead_alg base; 31 struct crypto_engine_op op; 32}; 33 34struct ahash_engine_alg { 35 struct ahash_alg base; 36 struct crypto_engine_op op; 37}; 38 39struct akcipher_engine_alg { 40 struct akcipher_alg base; 41 struct crypto_engine_op op; 42}; 43 44struct kpp_engine_alg { 45 struct kpp_alg base; 46 struct crypto_engine_op op; 47}; 48 49struct skcipher_engine_alg { 50 struct skcipher_alg base; 51 struct crypto_engine_op op; 52}; 53 54int crypto_transfer_aead_request_to_engine(struct crypto_engine *engine, 55 struct aead_request *req); 56int crypto_transfer_akcipher_request_to_engine(struct crypto_engine *engine, 57 struct akcipher_request *req); 58int crypto_transfer_hash_request_to_engine(struct crypto_engine *engine, 59 struct ahash_request *req); 60int crypto_transfer_kpp_request_to_engine(struct crypto_engine *engine, 61 struct kpp_request *req); 62int crypto_transfer_skcipher_request_to_engine(struct crypto_engine *engine, 63 struct skcipher_request *req); 64void crypto_finalize_aead_request(struct crypto_engine *engine, 65 struct aead_request *req, int err); 66void crypto_finalize_akcipher_request(struct crypto_engine *engine, 67 struct akcipher_request *req, int err); 68void crypto_finalize_hash_request(struct crypto_engine *engine, 69 struct ahash_request *req, int err); 70void crypto_finalize_kpp_request(struct crypto_engine *engine, 71 struct kpp_request *req, int err); 72void crypto_finalize_skcipher_request(struct crypto_engine *engine, 73 struct skcipher_request *req, int err); 74int crypto_engine_start(struct crypto_engine *engine); 75int crypto_engine_stop(struct crypto_engine *engine); 76struct crypto_engine *crypto_engine_alloc_init(struct device *dev, bool rt); 77struct crypto_engine *crypto_engine_alloc_init_and_set(struct device *dev, 78 bool retry_support, 79 int (*cbk_do_batch)(struct crypto_engine *engine), 80 bool rt, int qlen); 81void crypto_engine_exit(struct crypto_engine *engine); 82 83int crypto_engine_register_aead(struct aead_engine_alg *alg); 84void crypto_engine_unregister_aead(struct aead_engine_alg *alg); 85int crypto_engine_register_aeads(struct aead_engine_alg *algs, int count); 86void crypto_engine_unregister_aeads(struct aead_engine_alg *algs, int count); 87 88int crypto_engine_register_ahash(struct ahash_engine_alg *alg); 89void crypto_engine_unregister_ahash(struct ahash_engine_alg *alg); 90int crypto_engine_register_ahashes(struct ahash_engine_alg *algs, int count); 91void crypto_engine_unregister_ahashes(struct ahash_engine_alg *algs, 92 int count); 93 94int crypto_engine_register_akcipher(struct akcipher_engine_alg *alg); 95void crypto_engine_unregister_akcipher(struct akcipher_engine_alg *alg); 96 97int crypto_engine_register_kpp(struct kpp_engine_alg *alg); 98void crypto_engine_unregister_kpp(struct kpp_engine_alg *alg); 99 100int crypto_engine_register_skcipher(struct skcipher_engine_alg *alg); 101void crypto_engine_unregister_skcipher(struct skcipher_engine_alg *alg); 102int crypto_engine_register_skciphers(struct skcipher_engine_alg *algs, 103 int count); 104void crypto_engine_unregister_skciphers(struct skcipher_engine_alg *algs, 105 int count); 106 107#endif /* _CRYPTO_ENGINE_H */ 108