Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Cryptographic API.
  3  *
  4  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
  5  * Copyright (c) 2005 Herbert Xu <herbert@gondor.apana.org.au>
  6  *
  7  * This program is free software; you can redistribute it and/or modify it
  8  * under the terms of the GNU General Public License as published by the Free
  9  * Software Foundation; either version 2 of the License, or (at your option) 
 10  * any later version.
 11  *
 12  */
 13 #ifndef _CRYPTO_INTERNAL_H
 14 #define _CRYPTO_INTERNAL_H
 15 
 16 #include <crypto/algapi.h>
 17 #include <linux/completion.h>
 18 #include <linux/mm.h>
 19 #include <linux/highmem.h>
 20 #include <linux/interrupt.h>
 21 #include <linux/init.h>
 22 #include <linux/list.h>
 23 #include <linux/module.h>
 24 #include <linux/kernel.h>
 25 #include <linux/notifier.h>
 26 #include <linux/rwsem.h>
 27 #include <linux/slab.h>
 28 
 29 #ifdef CONFIG_CRYPTO_FIPS
 30 extern int fips_enabled;
 31 #else
 32 #define fips_enabled 0
 33 #endif
 34 
 35 /* Crypto notification events. */
 36 enum {
 37         CRYPTO_MSG_ALG_REQUEST,
 38         CRYPTO_MSG_ALG_REGISTER,
 39         CRYPTO_MSG_ALG_UNREGISTER,
 40         CRYPTO_MSG_TMPL_REGISTER,
 41         CRYPTO_MSG_TMPL_UNREGISTER,
 42 };
 43 
 44 struct crypto_instance;
 45 struct crypto_template;
 46 
 47 struct crypto_larval {
 48         struct crypto_alg alg;
 49         struct crypto_alg *adult;
 50         struct completion completion;
 51         u32 mask;
 52 };
 53 
 54 extern struct list_head crypto_alg_list;
 55 extern struct rw_semaphore crypto_alg_sem;
 56 extern struct blocking_notifier_head crypto_chain;
 57 
 58 #ifdef CONFIG_PROC_FS
 59 void __init crypto_init_proc(void);
 60 void __exit crypto_exit_proc(void);
 61 #else
 62 static inline void crypto_init_proc(void)
 63 { }
 64 static inline void crypto_exit_proc(void)
 65 { }
 66 #endif
 67 
 68 static inline unsigned int crypto_digest_ctxsize(struct crypto_alg *alg)
 69 {
 70         unsigned int len = alg->cra_ctxsize;
 71 
 72         if (alg->cra_alignmask) {
 73                 len = ALIGN(len, (unsigned long)alg->cra_alignmask + 1);
 74                 len += alg->cra_digest.dia_digestsize;
 75         }
 76 
 77         return len;
 78 }
 79 
 80 static inline unsigned int crypto_cipher_ctxsize(struct crypto_alg *alg)
 81 {
 82         return alg->cra_ctxsize;
 83 }
 84 
 85 static inline unsigned int crypto_compress_ctxsize(struct crypto_alg *alg)
 86 {
 87         return alg->cra_ctxsize;
 88 }
 89 
 90 struct crypto_alg *crypto_mod_get(struct crypto_alg *alg);
 91 struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, u32 mask);
 92 struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask);
 93 
 94 int crypto_init_digest_ops(struct crypto_tfm *tfm);
 95 int crypto_init_digest_ops_async(struct crypto_tfm *tfm);
 96 int crypto_init_cipher_ops(struct crypto_tfm *tfm);
 97 int crypto_init_compress_ops(struct crypto_tfm *tfm);
 98 
 99 void crypto_exit_digest_ops(struct crypto_tfm *tfm);
100 void crypto_exit_cipher_ops(struct crypto_tfm *tfm);
101 void crypto_exit_compress_ops(struct crypto_tfm *tfm);
102 
103 struct crypto_larval *crypto_larval_alloc(const char *name, u32 type, u32 mask);
104 void crypto_larval_kill(struct crypto_alg *alg);
105 struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask);
106 void crypto_larval_error(const char *name, u32 type, u32 mask);
107 void crypto_alg_tested(const char *name, int err);
108 
109 void crypto_shoot_alg(struct crypto_alg *alg);
110 struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 type,
111                                       u32 mask);
112 void *crypto_create_tfm(struct crypto_alg *alg,
113                         const struct crypto_type *frontend);
114 void *crypto_alloc_tfm(const char *alg_name,
115                        const struct crypto_type *frontend, u32 type, u32 mask);
116 
117 int crypto_register_instance(struct crypto_template *tmpl,
118                              struct crypto_instance *inst);
119 
120 int crypto_register_notifier(struct notifier_block *nb);
121 int crypto_unregister_notifier(struct notifier_block *nb);
122 int crypto_probing_notify(unsigned long val, void *v);
123 
124 static inline void crypto_alg_put(struct crypto_alg *alg)
125 {
126         if (atomic_dec_and_test(&alg->cra_refcnt) && alg->cra_destroy)
127                 alg->cra_destroy(alg);
128 }
129 
130 static inline int crypto_tmpl_get(struct crypto_template *tmpl)
131 {
132         return try_module_get(tmpl->module);
133 }
134 
135 static inline void crypto_tmpl_put(struct crypto_template *tmpl)
136 {
137         module_put(tmpl->module);
138 }
139 
140 static inline int crypto_is_larval(struct crypto_alg *alg)
141 {
142         return alg->cra_flags & CRYPTO_ALG_LARVAL;
143 }
144 
145 static inline int crypto_is_dead(struct crypto_alg *alg)
146 {
147         return alg->cra_flags & CRYPTO_ALG_DEAD;
148 }
149 
150 static inline int crypto_is_moribund(struct crypto_alg *alg)
151 {
152         return alg->cra_flags & (CRYPTO_ALG_DEAD | CRYPTO_ALG_DYING);
153 }
154 
155 static inline void crypto_notify(unsigned long val, void *v)
156 {
157         blocking_notifier_call_chain(&crypto_chain, val, v);
158 }
159 
160 #endif  /* _CRYPTO_INTERNAL_H */
161 
162 
  This page was automatically generated by the LXR engine.