1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * The MORUS-640 Authenticated-Encryption Algorithm
4 * Common glue skeleton -- header file
6 * Copyright (c) 2016-2018 Ondrej Mosnacek <omosnacek@gmail.com>
7 * Copyright (C) 2017-2018 Red Hat, Inc. All rights reserved.
10 #ifndef _CRYPTO_MORUS640_GLUE_H
11 #define _CRYPTO_MORUS640_GLUE_H
13 #include <linux/module.h>
14 #include <linux/types.h>
15 #include <crypto/algapi.h>
16 #include <crypto/aead.h>
17 #include <crypto/morus_common.h>
19 #define MORUS640_WORD_SIZE 4
20 #define MORUS640_BLOCK_SIZE (MORUS_BLOCK_WORDS * MORUS640_WORD_SIZE)
22 struct morus640_block
{
23 u8 bytes
[MORUS640_BLOCK_SIZE
];
26 struct morus640_glue_ops
{
27 void (*init
)(void *state
, const void *key
, const void *iv
);
28 void (*ad
)(void *state
, const void *data
, unsigned int length
);
29 void (*enc
)(void *state
, const void *src
, void *dst
, unsigned int length
);
30 void (*dec
)(void *state
, const void *src
, void *dst
, unsigned int length
);
31 void (*enc_tail
)(void *state
, const void *src
, void *dst
, unsigned int length
);
32 void (*dec_tail
)(void *state
, const void *src
, void *dst
, unsigned int length
);
33 void (*final
)(void *state
, void *tag_xor
, u64 assoclen
, u64 cryptlen
);
37 const struct morus640_glue_ops
*ops
;
38 struct morus640_block key
;
41 void crypto_morus640_glue_init_ops(struct crypto_aead
*aead
,
42 const struct morus640_glue_ops
*ops
);
43 int crypto_morus640_glue_setkey(struct crypto_aead
*aead
, const u8
*key
,
45 int crypto_morus640_glue_setauthsize(struct crypto_aead
*tfm
,
46 unsigned int authsize
);
47 int crypto_morus640_glue_encrypt(struct aead_request
*req
);
48 int crypto_morus640_glue_decrypt(struct aead_request
*req
);
50 int cryptd_morus640_glue_setkey(struct crypto_aead
*aead
, const u8
*key
,
52 int cryptd_morus640_glue_setauthsize(struct crypto_aead
*aead
,
53 unsigned int authsize
);
54 int cryptd_morus640_glue_encrypt(struct aead_request
*req
);
55 int cryptd_morus640_glue_decrypt(struct aead_request
*req
);
56 int cryptd_morus640_glue_init_tfm(struct crypto_aead
*aead
);
57 void cryptd_morus640_glue_exit_tfm(struct crypto_aead
*aead
);
59 #define MORUS640_DECLARE_ALGS(id, driver_name, priority) \
60 static const struct morus640_glue_ops crypto_morus640_##id##_ops = {\
61 .init = crypto_morus640_##id##_init, \
62 .ad = crypto_morus640_##id##_ad, \
63 .enc = crypto_morus640_##id##_enc, \
64 .enc_tail = crypto_morus640_##id##_enc_tail, \
65 .dec = crypto_morus640_##id##_dec, \
66 .dec_tail = crypto_morus640_##id##_dec_tail, \
67 .final = crypto_morus640_##id##_final, \
70 static int crypto_morus640_##id##_init_tfm(struct crypto_aead *tfm) \
72 crypto_morus640_glue_init_ops(tfm, &crypto_morus640_##id##_ops); \
76 static void crypto_morus640_##id##_exit_tfm(struct crypto_aead *tfm) \
80 static struct aead_alg crypto_morus640_##id##_algs[] = {\
82 .setkey = crypto_morus640_glue_setkey, \
83 .setauthsize = crypto_morus640_glue_setauthsize, \
84 .encrypt = crypto_morus640_glue_encrypt, \
85 .decrypt = crypto_morus640_glue_decrypt, \
86 .init = crypto_morus640_##id##_init_tfm, \
87 .exit = crypto_morus640_##id##_exit_tfm, \
89 .ivsize = MORUS_NONCE_SIZE, \
90 .maxauthsize = MORUS_MAX_AUTH_SIZE, \
91 .chunksize = MORUS640_BLOCK_SIZE, \
94 .cra_flags = CRYPTO_ALG_INTERNAL, \
96 .cra_ctxsize = sizeof(struct morus640_ctx), \
99 .cra_name = "__morus640", \
100 .cra_driver_name = "__"driver_name, \
102 .cra_module = THIS_MODULE, \
105 .setkey = cryptd_morus640_glue_setkey, \
106 .setauthsize = cryptd_morus640_glue_setauthsize, \
107 .encrypt = cryptd_morus640_glue_encrypt, \
108 .decrypt = cryptd_morus640_glue_decrypt, \
109 .init = cryptd_morus640_glue_init_tfm, \
110 .exit = cryptd_morus640_glue_exit_tfm, \
112 .ivsize = MORUS_NONCE_SIZE, \
113 .maxauthsize = MORUS_MAX_AUTH_SIZE, \
114 .chunksize = MORUS640_BLOCK_SIZE, \
117 .cra_flags = CRYPTO_ALG_ASYNC, \
118 .cra_blocksize = 1, \
119 .cra_ctxsize = sizeof(struct crypto_aead *), \
120 .cra_alignmask = 0, \
122 .cra_priority = priority, \
124 .cra_name = "morus640", \
125 .cra_driver_name = driver_name, \
127 .cra_module = THIS_MODULE, \
132 #endif /* _CRYPTO_MORUS640_GLUE_H */