diff options
Diffstat (limited to 'crypto/internal.h')
-rw-r--r-- | crypto/internal.h | 106 |
1 files changed, 89 insertions, 17 deletions
diff --git a/crypto/internal.h b/crypto/internal.h index 959e602909a6..2da6ad4f3593 100644 --- a/crypto/internal.h +++ b/crypto/internal.h | |||
@@ -12,19 +12,43 @@ | |||
12 | */ | 12 | */ |
13 | #ifndef _CRYPTO_INTERNAL_H | 13 | #ifndef _CRYPTO_INTERNAL_H |
14 | #define _CRYPTO_INTERNAL_H | 14 | #define _CRYPTO_INTERNAL_H |
15 | #include <linux/crypto.h> | 15 | |
16 | #include <crypto/algapi.h> | ||
17 | #include <linux/completion.h> | ||
16 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
17 | #include <linux/highmem.h> | 19 | #include <linux/highmem.h> |
18 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
19 | #include <linux/init.h> | 21 | #include <linux/init.h> |
20 | #include <linux/list.h> | 22 | #include <linux/list.h> |
23 | #include <linux/module.h> | ||
21 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | #include <linux/notifier.h> | ||
22 | #include <linux/rwsem.h> | 26 | #include <linux/rwsem.h> |
23 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
24 | #include <asm/kmap_types.h> | 28 | #include <asm/kmap_types.h> |
25 | 29 | ||
30 | /* Crypto notification events. */ | ||
31 | enum { | ||
32 | CRYPTO_MSG_ALG_REQUEST, | ||
33 | CRYPTO_MSG_ALG_REGISTER, | ||
34 | CRYPTO_MSG_ALG_UNREGISTER, | ||
35 | CRYPTO_MSG_TMPL_REGISTER, | ||
36 | CRYPTO_MSG_TMPL_UNREGISTER, | ||
37 | }; | ||
38 | |||
39 | struct crypto_instance; | ||
40 | struct crypto_template; | ||
41 | |||
42 | struct crypto_larval { | ||
43 | struct crypto_alg alg; | ||
44 | struct crypto_alg *adult; | ||
45 | struct completion completion; | ||
46 | u32 mask; | ||
47 | }; | ||
48 | |||
26 | extern struct list_head crypto_alg_list; | 49 | extern struct list_head crypto_alg_list; |
27 | extern struct rw_semaphore crypto_alg_sem; | 50 | extern struct rw_semaphore crypto_alg_sem; |
51 | extern struct blocking_notifier_head crypto_chain; | ||
28 | 52 | ||
29 | extern enum km_type crypto_km_types[]; | 53 | extern enum km_type crypto_km_types[]; |
30 | 54 | ||
@@ -43,36 +67,33 @@ static inline void crypto_kunmap(void *vaddr, int out) | |||
43 | kunmap_atomic(vaddr, crypto_kmap_type(out)); | 67 | kunmap_atomic(vaddr, crypto_kmap_type(out)); |
44 | } | 68 | } |
45 | 69 | ||
46 | static inline void crypto_yield(struct crypto_tfm *tfm) | 70 | static inline void crypto_yield(u32 flags) |
47 | { | 71 | { |
48 | if (tfm->crt_flags & CRYPTO_TFM_REQ_MAY_SLEEP) | 72 | if (flags & CRYPTO_TFM_REQ_MAY_SLEEP) |
49 | cond_resched(); | 73 | cond_resched(); |
50 | } | 74 | } |
51 | 75 | ||
52 | #ifdef CONFIG_CRYPTO_HMAC | ||
53 | int crypto_alloc_hmac_block(struct crypto_tfm *tfm); | ||
54 | void crypto_free_hmac_block(struct crypto_tfm *tfm); | ||
55 | #else | ||
56 | static inline int crypto_alloc_hmac_block(struct crypto_tfm *tfm) | ||
57 | { | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | static inline void crypto_free_hmac_block(struct crypto_tfm *tfm) | ||
62 | { } | ||
63 | #endif | ||
64 | |||
65 | #ifdef CONFIG_PROC_FS | 76 | #ifdef CONFIG_PROC_FS |
66 | void __init crypto_init_proc(void); | 77 | void __init crypto_init_proc(void); |
78 | void __exit crypto_exit_proc(void); | ||
67 | #else | 79 | #else |
68 | static inline void crypto_init_proc(void) | 80 | static inline void crypto_init_proc(void) |
69 | { } | 81 | { } |
82 | static inline void crypto_exit_proc(void) | ||
83 | { } | ||
70 | #endif | 84 | #endif |
71 | 85 | ||
72 | static inline unsigned int crypto_digest_ctxsize(struct crypto_alg *alg, | 86 | static inline unsigned int crypto_digest_ctxsize(struct crypto_alg *alg, |
73 | int flags) | 87 | int flags) |
74 | { | 88 | { |
75 | return alg->cra_ctxsize; | 89 | unsigned int len = alg->cra_ctxsize; |
90 | |||
91 | if (alg->cra_alignmask) { | ||
92 | len = ALIGN(len, (unsigned long)alg->cra_alignmask + 1); | ||
93 | len += alg->cra_digest.dia_digestsize; | ||
94 | } | ||
95 | |||
96 | return len; | ||
76 | } | 97 | } |
77 | 98 | ||
78 | static inline unsigned int crypto_cipher_ctxsize(struct crypto_alg *alg, | 99 | static inline unsigned int crypto_cipher_ctxsize(struct crypto_alg *alg, |
@@ -96,6 +117,10 @@ static inline unsigned int crypto_compress_ctxsize(struct crypto_alg *alg, | |||
96 | return alg->cra_ctxsize; | 117 | return alg->cra_ctxsize; |
97 | } | 118 | } |
98 | 119 | ||
120 | struct crypto_alg *crypto_mod_get(struct crypto_alg *alg); | ||
121 | struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask); | ||
122 | struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask); | ||
123 | |||
99 | int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags); | 124 | int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags); |
100 | int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags); | 125 | int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags); |
101 | int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags); | 126 | int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags); |
@@ -108,5 +133,52 @@ void crypto_exit_digest_ops(struct crypto_tfm *tfm); | |||
108 | void crypto_exit_cipher_ops(struct crypto_tfm *tfm); | 133 | void crypto_exit_cipher_ops(struct crypto_tfm *tfm); |
109 | void crypto_exit_compress_ops(struct crypto_tfm *tfm); | 134 | void crypto_exit_compress_ops(struct crypto_tfm *tfm); |
110 | 135 | ||
136 | void crypto_larval_error(const char *name, u32 type, u32 mask); | ||
137 | |||
138 | void crypto_shoot_alg(struct crypto_alg *alg); | ||
139 | struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 flags); | ||
140 | |||
141 | int crypto_register_instance(struct crypto_template *tmpl, | ||
142 | struct crypto_instance *inst); | ||
143 | |||
144 | int crypto_register_notifier(struct notifier_block *nb); | ||
145 | int crypto_unregister_notifier(struct notifier_block *nb); | ||
146 | |||
147 | static inline void crypto_alg_put(struct crypto_alg *alg) | ||
148 | { | ||
149 | if (atomic_dec_and_test(&alg->cra_refcnt) && alg->cra_destroy) | ||
150 | alg->cra_destroy(alg); | ||
151 | } | ||
152 | |||
153 | static inline int crypto_tmpl_get(struct crypto_template *tmpl) | ||
154 | { | ||
155 | return try_module_get(tmpl->module); | ||
156 | } | ||
157 | |||
158 | static inline void crypto_tmpl_put(struct crypto_template *tmpl) | ||
159 | { | ||
160 | module_put(tmpl->module); | ||
161 | } | ||
162 | |||
163 | static inline int crypto_is_larval(struct crypto_alg *alg) | ||
164 | { | ||
165 | return alg->cra_flags & CRYPTO_ALG_LARVAL; | ||
166 | } | ||
167 | |||
168 | static inline int crypto_is_dead(struct crypto_alg *alg) | ||
169 | { | ||
170 | return alg->cra_flags & CRYPTO_ALG_DEAD; | ||
171 | } | ||
172 | |||
173 | static inline int crypto_is_moribund(struct crypto_alg *alg) | ||
174 | { | ||
175 | return alg->cra_flags & (CRYPTO_ALG_DEAD | CRYPTO_ALG_DYING); | ||
176 | } | ||
177 | |||
178 | static inline int crypto_notify(unsigned long val, void *v) | ||
179 | { | ||
180 | return blocking_notifier_call_chain(&crypto_chain, val, v); | ||
181 | } | ||
182 | |||
111 | #endif /* _CRYPTO_INTERNAL_H */ | 183 | #endif /* _CRYPTO_INTERNAL_H */ |
112 | 184 | ||