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
,
71 static inline int crypto_grab_skcipher2(struct crypto_skcipher_spawn
*spawn
,
72 const char *name
, u32 type
, u32 mask
)
74 return crypto_grab_skcipher(spawn
, name
, type
, mask
);
77 struct crypto_alg
*crypto_lookup_skcipher(const char *name
, u32 type
, u32 mask
);
79 static inline void crypto_drop_skcipher(struct crypto_skcipher_spawn
*spawn
)
81 crypto_drop_spawn(&spawn
->base
);
84 static inline struct skcipher_alg
*crypto_skcipher_spawn_alg(
85 struct crypto_skcipher_spawn
*spawn
)
87 return container_of(spawn
->base
.alg
, struct skcipher_alg
, base
);
90 static inline struct skcipher_alg
*crypto_spawn_skcipher_alg(
91 struct crypto_skcipher_spawn
*spawn
)
93 return crypto_skcipher_spawn_alg(spawn
);
96 static inline struct crypto_skcipher
*crypto_spawn_skcipher(
97 struct crypto_skcipher_spawn
*spawn
)
99 return crypto_spawn_tfm2(&spawn
->base
);
102 static inline struct crypto_skcipher
*crypto_spawn_skcipher2(
103 struct crypto_skcipher_spawn
*spawn
)
105 return crypto_spawn_skcipher(spawn
);
108 static inline void crypto_skcipher_set_reqsize(
109 struct crypto_skcipher
*skcipher
, unsigned int reqsize
)
111 skcipher
->reqsize
= reqsize
;
114 int crypto_register_skcipher(struct skcipher_alg
*alg
);
115 void crypto_unregister_skcipher(struct skcipher_alg
*alg
);
116 int crypto_register_skciphers(struct skcipher_alg
*algs
, int count
);
117 void crypto_unregister_skciphers(struct skcipher_alg
*algs
, int count
);
118 int skcipher_register_instance(struct crypto_template
*tmpl
,
119 struct skcipher_instance
*inst
);
121 static inline void ablkcipher_request_complete(struct ablkcipher_request
*req
,
124 req
->base
.complete(&req
->base
, err
);
127 static inline u32
ablkcipher_request_flags(struct ablkcipher_request
*req
)
129 return req
->base
.flags
;
132 static inline void *crypto_skcipher_ctx(struct crypto_skcipher
*tfm
)
134 return crypto_tfm_ctx(&tfm
->base
);
137 static inline void *skcipher_request_ctx(struct skcipher_request
*req
)
142 static inline u32
skcipher_request_flags(struct skcipher_request
*req
)
144 return req
->base
.flags
;
147 static inline unsigned int crypto_skcipher_alg_min_keysize(
148 struct skcipher_alg
*alg
)
150 if ((alg
->base
.cra_flags
& CRYPTO_ALG_TYPE_MASK
) ==
151 CRYPTO_ALG_TYPE_BLKCIPHER
)
152 return alg
->base
.cra_blkcipher
.min_keysize
;
154 if (alg
->base
.cra_ablkcipher
.encrypt
)
155 return alg
->base
.cra_ablkcipher
.min_keysize
;
157 return alg
->min_keysize
;
160 static inline unsigned int crypto_skcipher_alg_max_keysize(
161 struct skcipher_alg
*alg
)
163 if ((alg
->base
.cra_flags
& CRYPTO_ALG_TYPE_MASK
) ==
164 CRYPTO_ALG_TYPE_BLKCIPHER
)
165 return alg
->base
.cra_blkcipher
.max_keysize
;
167 if (alg
->base
.cra_ablkcipher
.encrypt
)
168 return alg
->base
.cra_ablkcipher
.max_keysize
;
170 return alg
->max_keysize
;
173 #endif /* _CRYPTO_INTERNAL_SKCIPHER_H */