@@ -53,6 +53,11 @@ static void crypto_akcipher_show(struct seq_file *m, struct crypto_alg *alg)
seq_puts(m, "type : akcipher\n");
}
+static int crypto_akcipher_init(struct crypto_tfm *tfm, u32 type, u32 mask)
+{
+ return 0;
+}
+
static void crypto_akcipher_exit_tfm(struct crypto_tfm *tfm)
{
struct crypto_akcipher *akcipher = __crypto_akcipher_tfm(tfm);
@@ -75,8 +80,16 @@ static int crypto_akcipher_init_tfm(struct crypto_tfm *tfm)
return 0;
}
-static const struct crypto_type crypto_akcipher_type = {
+static unsigned int crypto_akcipher_ctxsize(struct crypto_alg *alg, u32 type,
+ u32 mask)
+{
+ return alg->cra_ctxsize;
+}
+
+const struct crypto_type crypto_akcipher_type = {
+ .ctxsize = crypto_akcipher_ctxsize,
.extsize = crypto_alg_extsize,
+ .init = crypto_akcipher_init,
.init_tfm = crypto_akcipher_init_tfm,
#ifdef CONFIG_PROC_FS
.show = crypto_akcipher_show,
@@ -87,6 +100,7 @@ static const struct crypto_type crypto_akcipher_type = {
.type = CRYPTO_ALG_TYPE_AKCIPHER,
.tfmsize = offsetof(struct crypto_akcipher, base),
};
+EXPORT_SYMBOL_GPL(crypto_akcipher_type);
struct crypto_akcipher *crypto_alloc_akcipher(const char *alg_name, u32 type,
u32 mask)
@@ -130,6 +130,7 @@ struct ablkcipher_walk {
extern const struct crypto_type crypto_ablkcipher_type;
extern const struct crypto_type crypto_blkcipher_type;
+extern const struct crypto_type crypto_akcipher_type;
void crypto_mod_put(struct crypto_alg *alg);
Add two dummy methods that are required by the crypto API internals: .ctxsize and .init (just because the framework calls them without checking if they were provided). They're only required by the complicated code path needed to instantiate a template algorithm. Also expose crypto_akcipher_type like other crypto types are exposed to be used from outside modules. Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com> --- crypto/akcipher.c | 16 +++++++++++++++- include/crypto/algapi.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-)