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 | ||
