2 * Symmetric key ciphers.
4 * Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au>
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)
13 #ifndef _CRYPTO_INTERNAL_SKCIPHER_H
14 #define _CRYPTO_INTERNAL_SKCIPHER_H
16 #include <crypto/algapi.h>
17 #include <crypto/skcipher.h>
18 #include <linux/types.h>
22 struct skcipher_instance
{
23 void (*free
)(struct skcipher_instance
*inst
);
26 char head
[offsetof(struct skcipher_alg
, base
)];
27 struct crypto_instance base
;
29 struct skcipher_alg alg
;
33 struct crypto_skcipher_spawn
{
34 struct crypto_spawn base
;
37 extern const struct crypto_type crypto_givcipher_type
;
39 static inline struct crypto_instance
*skcipher_crypto_instance(
40 struct skcipher_instance
*inst
)
45 static inline struct skcipher_instance
*skcipher_alg_instance(
46 struct crypto_skcipher
*skcipher
)
48 return container_of(crypto_skcipher_alg(skcipher
),
49 struct skcipher_instance
, alg
);
52 static inline void *skcipher_instance_ctx(struct skcipher_instance
*inst
)
54 return crypto_instance_ctx(skcipher_crypto_instance(inst
));
57 static inline void skcipher_request_complete(struct skcipher_request
*req
, int err
)
59 req
->base
.complete(&req
->base
, err
);
62 static inline void crypto_set_skcipher_spawn(
63 struct crypto_skcipher_spawn
*spawn
, struct crypto_instance
*inst
)
65 crypto_set_spawn(&spawn
->base
, inst
);
68 int crypto_grab_skcipher(struct crypto_skcipher_spawn
*spawn
, const char *name
,
70 int crypto_grab_skcipher2(struct crypto_skcipher_spawn
*spawn
,
71 const char *name
, u32 type
, u32 mask
);
73 struct crypto_alg
*crypto_lookup_skcipher(const char *name
, u32 type
, u32 mask
);
75 static inline void crypto_drop_skcipher(struct crypto_skcipher_spawn
*spawn
)
77 crypto_drop_spawn(&spawn
->base
);
80 static inline struct crypto_alg
*crypto_skcipher_spawn_alg(
81 struct crypto_skcipher_spawn
*spawn
)
83 return spawn
->base
.alg
;
86 static inline struct skcipher_alg
*crypto_spawn_skcipher_alg(
87 struct crypto_skcipher_spawn
*spawn
)
89 return container_of(spawn
->base
.alg
, struct skcipher_alg
, base
);
92 static inline struct crypto_ablkcipher
*crypto_spawn_skcipher(
93 struct crypto_skcipher_spawn
*spawn
)
95 return __crypto_ablkcipher_cast(
96 crypto_spawn_tfm(&spawn
->base
, crypto_skcipher_type(0),
97 crypto_skcipher_mask(0)));
100 static inline struct crypto_skcipher
*crypto_spawn_skcipher2(
101 struct crypto_skcipher_spawn
*spawn
)
103 return crypto_spawn_tfm2(&spawn
->base
);
106 static inline void crypto_skcipher_set_reqsize(
107 struct crypto_skcipher
*skcipher
, unsigned int reqsize
)
109 skcipher
->reqsize
= reqsize
;
112 int crypto_register_skcipher(struct skcipher_alg
*alg
);
113 void crypto_unregister_skcipher(struct skcipher_alg
*alg
);
114 int crypto_register_skciphers(struct skcipher_alg
*algs
, int count
);
115 void crypto_unregister_skciphers(struct skcipher_alg
*algs
, int count
);
116 int skcipher_register_instance(struct crypto_template
*tmpl
,
117 struct skcipher_instance
*inst
);
119 int skcipher_null_givencrypt(struct skcipher_givcrypt_request
*req
);
120 int skcipher_null_givdecrypt(struct skcipher_givcrypt_request
*req
);
121 const char *crypto_default_geniv(const struct crypto_alg
*alg
);
123 struct crypto_instance
*skcipher_geniv_alloc(struct crypto_template
*tmpl
,
124 struct rtattr
**tb
, u32 type
,
126 void skcipher_geniv_free(struct crypto_instance
*inst
);
127 int skcipher_geniv_init(struct crypto_tfm
*tfm
);
128 void skcipher_geniv_exit(struct crypto_tfm
*tfm
);
130 static inline struct crypto_ablkcipher
*skcipher_geniv_cipher(
131 struct crypto_ablkcipher
*geniv
)
133 return crypto_ablkcipher_crt(geniv
)->base
;
136 static inline int skcipher_enqueue_givcrypt(
137 struct crypto_queue
*queue
, struct skcipher_givcrypt_request
*request
)
139 return ablkcipher_enqueue_request(queue
, &request
->creq
);
142 static inline struct skcipher_givcrypt_request
*skcipher_dequeue_givcrypt(
143 struct crypto_queue
*queue
)
145 return skcipher_givcrypt_cast(crypto_dequeue_request(queue
));
148 static inline void *skcipher_givcrypt_reqctx(
149 struct skcipher_givcrypt_request
*req
)
151 return ablkcipher_request_ctx(&req
->creq
);
154 static inline void ablkcipher_request_complete(struct ablkcipher_request
*req
,
157 req
->base
.complete(&req
->base
, err
);
160 static inline void skcipher_givcrypt_complete(
161 struct skcipher_givcrypt_request
*req
, int err
)
163 ablkcipher_request_complete(&req
->creq
, err
);
166 static inline u32
ablkcipher_request_flags(struct ablkcipher_request
*req
)
168 return req
->base
.flags
;
171 static inline void *crypto_skcipher_ctx(struct crypto_skcipher
*tfm
)
173 return crypto_tfm_ctx(&tfm
->base
);
176 static inline void *skcipher_request_ctx(struct skcipher_request
*req
)
181 static inline u32
skcipher_request_flags(struct skcipher_request
*req
)
183 return req
->base
.flags
;
186 static inline unsigned int crypto_skcipher_alg_min_keysize(
187 struct skcipher_alg
*alg
)
189 if ((alg
->base
.cra_flags
& CRYPTO_ALG_TYPE_MASK
) ==
190 CRYPTO_ALG_TYPE_BLKCIPHER
)
191 return alg
->base
.cra_blkcipher
.min_keysize
;
193 if (alg
->base
.cra_ablkcipher
.encrypt
)
194 return alg
->base
.cra_ablkcipher
.min_keysize
;
196 return alg
->min_keysize
;
199 static inline unsigned int crypto_skcipher_alg_max_keysize(
200 struct skcipher_alg
*alg
)
202 if ((alg
->base
.cra_flags
& CRYPTO_ALG_TYPE_MASK
) ==
203 CRYPTO_ALG_TYPE_BLKCIPHER
)
204 return alg
->base
.cra_blkcipher
.max_keysize
;
206 if (alg
->base
.cra_ablkcipher
.encrypt
)
207 return alg
->base
.cra_ablkcipher
.max_keysize
;
209 return alg
->max_keysize
;
212 #endif /* _CRYPTO_INTERNAL_SKCIPHER_H */