#include "compat.h"
#include "regs.h"
#include "intern.h"
#include "jr.h"
#include "error.h"
#include "desc_constr.h"
#include "sg_sw_sec4.h"
#include "caampkc.h"
#include <crypto/internal/engine.h>
#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h>
#define DESC_RSA_PUB_LEN …
#define DESC_RSA_PRIV_F1_LEN …
#define DESC_RSA_PRIV_F2_LEN …
#define DESC_RSA_PRIV_F3_LEN …
#define CAAM_RSA_MAX_INPUT_SIZE …
static u8 *zero_buffer;
static bool init_done;
struct caam_akcipher_alg { … };
static void rsa_io_unmap(struct device *dev, struct rsa_edesc *edesc,
struct akcipher_request *req)
{ … }
static void rsa_pub_unmap(struct device *dev, struct rsa_edesc *edesc,
struct akcipher_request *req)
{ … }
static void rsa_priv_f1_unmap(struct device *dev, struct rsa_edesc *edesc,
struct akcipher_request *req)
{ … }
static void rsa_priv_f2_unmap(struct device *dev, struct rsa_edesc *edesc,
struct akcipher_request *req)
{ … }
static void rsa_priv_f3_unmap(struct device *dev, struct rsa_edesc *edesc,
struct akcipher_request *req)
{ … }
static void rsa_pub_done(struct device *dev, u32 *desc, u32 err, void *context)
{ … }
static void rsa_priv_f_done(struct device *dev, u32 *desc, u32 err,
void *context)
{ … }
static int caam_rsa_count_leading_zeros(struct scatterlist *sgl,
unsigned int nbytes,
unsigned int flags)
{ … }
static struct rsa_edesc *rsa_edesc_alloc(struct akcipher_request *req,
size_t desclen)
{ … }
static int akcipher_do_one_req(struct crypto_engine *engine, void *areq)
{ … }
static int set_rsa_pub_pdb(struct akcipher_request *req,
struct rsa_edesc *edesc)
{ … }
static int set_rsa_priv_f1_pdb(struct akcipher_request *req,
struct rsa_edesc *edesc)
{ … }
static int set_rsa_priv_f2_pdb(struct akcipher_request *req,
struct rsa_edesc *edesc)
{ … }
static int set_rsa_priv_f3_pdb(struct akcipher_request *req,
struct rsa_edesc *edesc)
{ … }
static int akcipher_enqueue_req(struct device *jrdev,
void (*cbk)(struct device *jrdev, u32 *desc,
u32 err, void *context),
struct akcipher_request *req)
{ … }
static int caam_rsa_enc(struct akcipher_request *req)
{ … }
static int caam_rsa_dec_priv_f1(struct akcipher_request *req)
{ … }
static int caam_rsa_dec_priv_f2(struct akcipher_request *req)
{ … }
static int caam_rsa_dec_priv_f3(struct akcipher_request *req)
{ … }
static int caam_rsa_dec(struct akcipher_request *req)
{ … }
static void caam_rsa_free_key(struct caam_rsa_key *key)
{ … }
static void caam_rsa_drop_leading_zeros(const u8 **ptr, size_t *nbytes)
{ … }
static u8 *caam_read_rsa_crt(const u8 *ptr, size_t nbytes, size_t dstlen)
{ … }
static inline u8 *caam_read_raw_data(const u8 *buf, size_t *nbytes)
{ … }
static int caam_rsa_check_key_length(unsigned int len)
{ … }
static int caam_rsa_set_pub_key(struct crypto_akcipher *tfm, const void *key,
unsigned int keylen)
{ … }
static void caam_rsa_set_priv_key_form(struct caam_rsa_ctx *ctx,
struct rsa_key *raw_key)
{ … }
static int caam_rsa_set_priv_key(struct crypto_akcipher *tfm, const void *key,
unsigned int keylen)
{ … }
static unsigned int caam_rsa_max_size(struct crypto_akcipher *tfm)
{ … }
static int caam_rsa_init_tfm(struct crypto_akcipher *tfm)
{ … }
static void caam_rsa_exit_tfm(struct crypto_akcipher *tfm)
{ … }
static struct caam_akcipher_alg caam_rsa = …;
int caam_pkc_init(struct device *ctrldev)
{ … }
void caam_pkc_exit(void)
{ … }