#include <crypto/engine.h>
#include <crypto/internal/akcipher.h>
#include <crypto/internal/rsa.h>
#include <crypto/scatterwalk.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/mpi.h>
#include <linux/scatterlist.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <uapi/linux/virtio_crypto.h>
#include "virtio_crypto_common.h"
struct virtio_crypto_rsa_ctx { … };
struct virtio_crypto_akcipher_ctx { … };
struct virtio_crypto_akcipher_request { … };
struct virtio_crypto_akcipher_algo { … };
static DEFINE_MUTEX(algs_lock);
static void virtio_crypto_akcipher_finalize_req(
struct virtio_crypto_akcipher_request *vc_akcipher_req,
struct akcipher_request *req, int err)
{ … }
static void virtio_crypto_dataq_akcipher_callback(struct virtio_crypto_request *vc_req, int len)
{ … }
static int virtio_crypto_alg_akcipher_init_session(struct virtio_crypto_akcipher_ctx *ctx,
struct virtio_crypto_ctrl_header *header,
struct virtio_crypto_akcipher_session_para *para,
const uint8_t *key, unsigned int keylen)
{ … }
static int virtio_crypto_alg_akcipher_close_session(struct virtio_crypto_akcipher_ctx *ctx)
{ … }
static int __virtio_crypto_akcipher_do_req(struct virtio_crypto_akcipher_request *vc_akcipher_req,
struct akcipher_request *req, struct data_queue *data_vq)
{ … }
static int virtio_crypto_rsa_do_req(struct crypto_engine *engine, void *vreq)
{ … }
static int virtio_crypto_rsa_req(struct akcipher_request *req, uint32_t opcode)
{ … }
static int virtio_crypto_rsa_encrypt(struct akcipher_request *req)
{ … }
static int virtio_crypto_rsa_decrypt(struct akcipher_request *req)
{ … }
static int virtio_crypto_rsa_sign(struct akcipher_request *req)
{ … }
static int virtio_crypto_rsa_verify(struct akcipher_request *req)
{ … }
static int virtio_crypto_rsa_set_key(struct crypto_akcipher *tfm,
const void *key,
unsigned int keylen,
bool private,
int padding_algo,
int hash_algo)
{ … }
static int virtio_crypto_rsa_raw_set_priv_key(struct crypto_akcipher *tfm,
const void *key,
unsigned int keylen)
{ … }
static int virtio_crypto_p1pad_rsa_sha1_set_priv_key(struct crypto_akcipher *tfm,
const void *key,
unsigned int keylen)
{ … }
static int virtio_crypto_rsa_raw_set_pub_key(struct crypto_akcipher *tfm,
const void *key,
unsigned int keylen)
{ … }
static int virtio_crypto_p1pad_rsa_sha1_set_pub_key(struct crypto_akcipher *tfm,
const void *key,
unsigned int keylen)
{ … }
static unsigned int virtio_crypto_rsa_max_size(struct crypto_akcipher *tfm)
{ … }
static int virtio_crypto_rsa_init_tfm(struct crypto_akcipher *tfm)
{ … }
static void virtio_crypto_rsa_exit_tfm(struct crypto_akcipher *tfm)
{ … }
static struct virtio_crypto_akcipher_algo virtio_crypto_akcipher_algs[] = …;
int virtio_crypto_akcipher_algs_register(struct virtio_crypto *vcrypto)
{ … }
void virtio_crypto_akcipher_algs_unregister(struct virtio_crypto *vcrypto)
{ … }