missing barriers in some of unix_sock ->addr and ->path accesses
[linux-2.6-block.git] / include / crypto / morus1280_glue.h
CommitLineData
56e8e57f
OM
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * The MORUS-1280 Authenticated-Encryption Algorithm
4 * Common glue skeleton -- header file
5 *
6 * Copyright (c) 2016-2018 Ondrej Mosnacek <omosnacek@gmail.com>
7 * Copyright (C) 2017-2018 Red Hat, Inc. All rights reserved.
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option)
12 * any later version.
13 */
14
15#ifndef _CRYPTO_MORUS1280_GLUE_H
16#define _CRYPTO_MORUS1280_GLUE_H
17
18#include <linux/module.h>
19#include <linux/types.h>
20#include <crypto/algapi.h>
21#include <crypto/aead.h>
22#include <crypto/morus_common.h>
23
24#define MORUS1280_WORD_SIZE 8
25#define MORUS1280_BLOCK_SIZE (MORUS_BLOCK_WORDS * MORUS1280_WORD_SIZE)
26
27struct morus1280_block {
28 u8 bytes[MORUS1280_BLOCK_SIZE];
29};
30
31struct morus1280_glue_ops {
32 void (*init)(void *state, const void *key, const void *iv);
33 void (*ad)(void *state, const void *data, unsigned int length);
34 void (*enc)(void *state, const void *src, void *dst, unsigned int length);
35 void (*dec)(void *state, const void *src, void *dst, unsigned int length);
36 void (*enc_tail)(void *state, const void *src, void *dst, unsigned int length);
37 void (*dec_tail)(void *state, const void *src, void *dst, unsigned int length);
38 void (*final)(void *state, void *tag_xor, u64 assoclen, u64 cryptlen);
39};
40
41struct morus1280_ctx {
42 const struct morus1280_glue_ops *ops;
43 struct morus1280_block key;
44};
45
46void crypto_morus1280_glue_init_ops(struct crypto_aead *aead,
47 const struct morus1280_glue_ops *ops);
48int crypto_morus1280_glue_setkey(struct crypto_aead *aead, const u8 *key,
49 unsigned int keylen);
50int crypto_morus1280_glue_setauthsize(struct crypto_aead *tfm,
51 unsigned int authsize);
52int crypto_morus1280_glue_encrypt(struct aead_request *req);
53int crypto_morus1280_glue_decrypt(struct aead_request *req);
54
55int cryptd_morus1280_glue_setkey(struct crypto_aead *aead, const u8 *key,
56 unsigned int keylen);
57int cryptd_morus1280_glue_setauthsize(struct crypto_aead *aead,
58 unsigned int authsize);
59int cryptd_morus1280_glue_encrypt(struct aead_request *req);
60int cryptd_morus1280_glue_decrypt(struct aead_request *req);
61int cryptd_morus1280_glue_init_tfm(struct crypto_aead *aead);
62void cryptd_morus1280_glue_exit_tfm(struct crypto_aead *aead);
63
64#define MORUS1280_DECLARE_ALGS(id, driver_name, priority) \
65 static const struct morus1280_glue_ops crypto_morus1280_##id##_ops = {\
66 .init = crypto_morus1280_##id##_init, \
67 .ad = crypto_morus1280_##id##_ad, \
68 .enc = crypto_morus1280_##id##_enc, \
69 .enc_tail = crypto_morus1280_##id##_enc_tail, \
70 .dec = crypto_morus1280_##id##_dec, \
71 .dec_tail = crypto_morus1280_##id##_dec_tail, \
72 .final = crypto_morus1280_##id##_final, \
73 }; \
74 \
75 static int crypto_morus1280_##id##_init_tfm(struct crypto_aead *tfm) \
76 { \
77 crypto_morus1280_glue_init_ops(tfm, &crypto_morus1280_##id##_ops); \
78 return 0; \
79 } \
80 \
81 static void crypto_morus1280_##id##_exit_tfm(struct crypto_aead *tfm) \
82 { \
83 } \
84 \
90a8c78b 85 static struct aead_alg crypto_morus1280_##id##_algs[] = {\
56e8e57f
OM
86 { \
87 .setkey = crypto_morus1280_glue_setkey, \
88 .setauthsize = crypto_morus1280_glue_setauthsize, \
89 .encrypt = crypto_morus1280_glue_encrypt, \
90 .decrypt = crypto_morus1280_glue_decrypt, \
91 .init = crypto_morus1280_##id##_init_tfm, \
92 .exit = crypto_morus1280_##id##_exit_tfm, \
93 \
94 .ivsize = MORUS_NONCE_SIZE, \
95 .maxauthsize = MORUS_MAX_AUTH_SIZE, \
96 .chunksize = MORUS1280_BLOCK_SIZE, \
97 \
98 .base = { \
99 .cra_flags = CRYPTO_ALG_INTERNAL, \
100 .cra_blocksize = 1, \
101 .cra_ctxsize = sizeof(struct morus1280_ctx), \
102 .cra_alignmask = 0, \
103 \
104 .cra_name = "__morus1280", \
105 .cra_driver_name = "__"driver_name, \
106 \
107 .cra_module = THIS_MODULE, \
108 } \
109 }, { \
110 .setkey = cryptd_morus1280_glue_setkey, \
111 .setauthsize = cryptd_morus1280_glue_setauthsize, \
112 .encrypt = cryptd_morus1280_glue_encrypt, \
113 .decrypt = cryptd_morus1280_glue_decrypt, \
114 .init = cryptd_morus1280_glue_init_tfm, \
115 .exit = cryptd_morus1280_glue_exit_tfm, \
116 \
117 .ivsize = MORUS_NONCE_SIZE, \
118 .maxauthsize = MORUS_MAX_AUTH_SIZE, \
119 .chunksize = MORUS1280_BLOCK_SIZE, \
120 \
121 .base = { \
122 .cra_flags = CRYPTO_ALG_ASYNC, \
123 .cra_blocksize = 1, \
124 .cra_ctxsize = sizeof(struct crypto_aead *), \
125 .cra_alignmask = 0, \
126 \
127 .cra_priority = priority, \
128 \
129 .cra_name = "morus1280", \
130 .cra_driver_name = driver_name, \
131 \
132 .cra_module = THIS_MODULE, \
133 } \
134 } \
135 }
136
137#endif /* _CRYPTO_MORUS1280_GLUE_H */