Branch data Line data Source code
1 : : /*
2 : : * Symmetric key ciphers.
3 : : *
4 : : * Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au>
5 : : *
6 : : * This program is free software; you can redistribute it and/or modify it
7 : : * under the terms of the GNU General Public License as published by the Free
8 : : * Software Foundation; either version 2 of the License, or (at your option)
9 : : * any later version.
10 : : *
11 : : */
12 : :
13 : : #ifndef _CRYPTO_INTERNAL_SKCIPHER_H
14 : : #define _CRYPTO_INTERNAL_SKCIPHER_H
15 : :
16 : : #include <crypto/algapi.h>
17 : : #include <crypto/skcipher.h>
18 : : #include <linux/types.h>
19 : :
20 : : struct rtattr;
21 : :
22 : : struct crypto_skcipher_spawn {
23 : : struct crypto_spawn base;
24 : : };
25 : :
26 : : extern const struct crypto_type crypto_givcipher_type;
27 : :
28 : : static inline void crypto_set_skcipher_spawn(
29 : : struct crypto_skcipher_spawn *spawn, struct crypto_instance *inst)
30 : : {
31 : : crypto_set_spawn(&spawn->base, inst);
32 : : }
33 : :
34 : : int crypto_grab_skcipher(struct crypto_skcipher_spawn *spawn, const char *name,
35 : : u32 type, u32 mask);
36 : :
37 : : struct crypto_alg *crypto_lookup_skcipher(const char *name, u32 type, u32 mask);
38 : :
39 : : static inline void crypto_drop_skcipher(struct crypto_skcipher_spawn *spawn)
40 : : {
41 : 0 : crypto_drop_spawn(&spawn->base);
42 : : }
43 : :
44 : : static inline struct crypto_alg *crypto_skcipher_spawn_alg(
45 : : struct crypto_skcipher_spawn *spawn)
46 : : {
47 : : return spawn->base.alg;
48 : : }
49 : :
50 : : static inline struct crypto_ablkcipher *crypto_spawn_skcipher(
51 : : struct crypto_skcipher_spawn *spawn)
52 : : {
53 : 0 : return __crypto_ablkcipher_cast(
54 : : crypto_spawn_tfm(&spawn->base, crypto_skcipher_type(0),
55 : : crypto_skcipher_mask(0)));
56 : : }
57 : :
58 : : int skcipher_null_givencrypt(struct skcipher_givcrypt_request *req);
59 : : int skcipher_null_givdecrypt(struct skcipher_givcrypt_request *req);
60 : : const char *crypto_default_geniv(const struct crypto_alg *alg);
61 : :
62 : : struct crypto_instance *skcipher_geniv_alloc(struct crypto_template *tmpl,
63 : : struct rtattr **tb, u32 type,
64 : : u32 mask);
65 : : void skcipher_geniv_free(struct crypto_instance *inst);
66 : : int skcipher_geniv_init(struct crypto_tfm *tfm);
67 : : void skcipher_geniv_exit(struct crypto_tfm *tfm);
68 : :
69 : : static inline struct crypto_ablkcipher *skcipher_geniv_cipher(
70 : : struct crypto_ablkcipher *geniv)
71 : : {
72 : 0 : return crypto_ablkcipher_crt(geniv)->base;
73 : : }
74 : :
75 : : static inline int skcipher_enqueue_givcrypt(
76 : : struct crypto_queue *queue, struct skcipher_givcrypt_request *request)
77 : : {
78 : : return ablkcipher_enqueue_request(queue, &request->creq);
79 : : }
80 : :
81 : : static inline struct skcipher_givcrypt_request *skcipher_dequeue_givcrypt(
82 : : struct crypto_queue *queue)
83 : : {
84 : 0 : return __crypto_dequeue_request(
85 : : queue, offsetof(struct skcipher_givcrypt_request, creq.base));
86 : : }
87 : :
88 : : static inline void *skcipher_givcrypt_reqctx(
89 : : struct skcipher_givcrypt_request *req)
90 : : {
91 : : return ablkcipher_request_ctx(&req->creq);
92 : : }
93 : :
94 : : static inline void ablkcipher_request_complete(struct ablkcipher_request *req,
95 : : int err)
96 : : {
97 : 0 : req->base.complete(&req->base, err);
98 : : }
99 : :
100 : : static inline void skcipher_givcrypt_complete(
101 : : struct skcipher_givcrypt_request *req, int err)
102 : : {
103 : : ablkcipher_request_complete(&req->creq, err);
104 : : }
105 : :
106 : : static inline u32 ablkcipher_request_flags(struct ablkcipher_request *req)
107 : : {
108 : : return req->base.flags;
109 : : }
110 : :
111 : : #endif /* _CRYPTO_INTERNAL_SKCIPHER_H */
112 : :
|