diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-11 12:38:37 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-11 12:38:37 -0400 |
| commit | 332a3392188e0ad966543c87b8da2b9d246f301d (patch) | |
| tree | ac0d570590bffdd1924426adc5b255857d2f3297 /include/crypto | |
| parent | a9c86d42599519f3d83b5f46bdab25046fe47b84 (diff) | |
| parent | 81bd5f6c966cf2f137c2759dfc78abdffcff055e (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (102 commits)
crypto: sha-s390 - Fix warnings in import function
crypto: vmac - New hash algorithm for intel_txt support
crypto: api - Do not displace newly registered algorithms
crypto: ansi_cprng - Fix module initialization
crypto: xcbc - Fix alignment calculation of xcbc_tfm_ctx
crypto: fips - Depend on ansi_cprng
crypto: blkcipher - Do not use eseqiv on stream ciphers
crypto: ctr - Use chainiv on raw counter mode
Revert crypto: fips - Select CPRNG
crypto: rng - Fix typo
crypto: talitos - add support for 36 bit addressing
crypto: talitos - align locks on cache lines
crypto: talitos - simplify hmac data size calculation
crypto: mv_cesa - Add support for Orion5X crypto engine
crypto: cryptd - Add support to access underlaying shash
crypto: gcm - Use GHASH digest algorithm
crypto: ghash - Add GHASH digest algorithm for GCM
crypto: authenc - Convert to ahash
crypto: api - Fix aligned ctx helper
crypto: hmac - Prehash ipad/opad
...
Diffstat (limited to 'include/crypto')
| -rw-r--r-- | include/crypto/algapi.h | 37 | ||||
| -rw-r--r-- | include/crypto/cryptd.h | 17 | ||||
| -rw-r--r-- | include/crypto/hash.h | 147 | ||||
| -rw-r--r-- | include/crypto/internal/hash.h | 147 | ||||
| -rw-r--r-- | include/crypto/sha.h | 20 | ||||
| -rw-r--r-- | include/crypto/vmac.h | 61 |
6 files changed, 366 insertions, 63 deletions
diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h index 5a2bd1cc965..1ffb53f74d3 100644 --- a/include/crypto/algapi.h +++ b/include/crypto/algapi.h | |||
| @@ -22,11 +22,9 @@ struct seq_file; | |||
| 22 | 22 | ||
| 23 | struct crypto_type { | 23 | struct crypto_type { |
| 24 | unsigned int (*ctxsize)(struct crypto_alg *alg, u32 type, u32 mask); | 24 | unsigned int (*ctxsize)(struct crypto_alg *alg, u32 type, u32 mask); |
| 25 | unsigned int (*extsize)(struct crypto_alg *alg, | 25 | unsigned int (*extsize)(struct crypto_alg *alg); |
| 26 | const struct crypto_type *frontend); | ||
| 27 | int (*init)(struct crypto_tfm *tfm, u32 type, u32 mask); | 26 | int (*init)(struct crypto_tfm *tfm, u32 type, u32 mask); |
| 28 | int (*init_tfm)(struct crypto_tfm *tfm, | 27 | int (*init_tfm)(struct crypto_tfm *tfm); |
| 29 | const struct crypto_type *frontend); | ||
| 30 | void (*show)(struct seq_file *m, struct crypto_alg *alg); | 28 | void (*show)(struct seq_file *m, struct crypto_alg *alg); |
| 31 | struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask); | 29 | struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask); |
| 32 | 30 | ||
| @@ -52,6 +50,7 @@ struct crypto_template { | |||
| 52 | 50 | ||
| 53 | struct crypto_instance *(*alloc)(struct rtattr **tb); | 51 | struct crypto_instance *(*alloc)(struct rtattr **tb); |
| 54 | void (*free)(struct crypto_instance *inst); | 52 | void (*free)(struct crypto_instance *inst); |
| 53 | int (*create)(struct crypto_template *tmpl, struct rtattr **tb); | ||
| 55 | 54 | ||
| 56 | char name[CRYPTO_MAX_ALG_NAME]; | 55 | char name[CRYPTO_MAX_ALG_NAME]; |
| 57 | }; | 56 | }; |
| @@ -60,6 +59,7 @@ struct crypto_spawn { | |||
| 60 | struct list_head list; | 59 | struct list_head list; |
| 61 | struct crypto_alg *alg; | 60 | struct crypto_alg *alg; |
| 62 | struct crypto_instance *inst; | 61 | struct crypto_instance *inst; |
| 62 | const struct crypto_type *frontend; | ||
| 63 | u32 mask; | 63 | u32 mask; |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| @@ -114,11 +114,19 @@ int crypto_register_template(struct crypto_template *tmpl); | |||
| 114 | void crypto_unregister_template(struct crypto_template *tmpl); | 114 | void crypto_unregister_template(struct crypto_template *tmpl); |
| 115 | struct crypto_template *crypto_lookup_template(const char *name); | 115 | struct crypto_template *crypto_lookup_template(const char *name); |
| 116 | 116 | ||
| 117 | int crypto_register_instance(struct crypto_template *tmpl, | ||
| 118 | struct crypto_instance *inst); | ||
| 119 | |||
| 117 | int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, | 120 | int crypto_init_spawn(struct crypto_spawn *spawn, struct crypto_alg *alg, |
| 118 | struct crypto_instance *inst, u32 mask); | 121 | struct crypto_instance *inst, u32 mask); |
| 122 | int crypto_init_spawn2(struct crypto_spawn *spawn, struct crypto_alg *alg, | ||
| 123 | struct crypto_instance *inst, | ||
| 124 | const struct crypto_type *frontend); | ||
| 125 | |||
| 119 | void crypto_drop_spawn(struct crypto_spawn *spawn); | 126 | void crypto_drop_spawn(struct crypto_spawn *spawn); |
| 120 | struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type, | 127 | struct crypto_tfm *crypto_spawn_tfm(struct crypto_spawn *spawn, u32 type, |
| 121 | u32 mask); | 128 | u32 mask); |
| 129 | void *crypto_spawn_tfm2(struct crypto_spawn *spawn); | ||
| 122 | 130 | ||
| 123 | static inline void crypto_set_spawn(struct crypto_spawn *spawn, | 131 | static inline void crypto_set_spawn(struct crypto_spawn *spawn, |
| 124 | struct crypto_instance *inst) | 132 | struct crypto_instance *inst) |
| @@ -129,8 +137,19 @@ static inline void crypto_set_spawn(struct crypto_spawn *spawn, | |||
| 129 | struct crypto_attr_type *crypto_get_attr_type(struct rtattr **tb); | 137 | struct crypto_attr_type *crypto_get_attr_type(struct rtattr **tb); |
| 130 | int crypto_check_attr_type(struct rtattr **tb, u32 type); | 138 | int crypto_check_attr_type(struct rtattr **tb, u32 type); |
| 131 | const char *crypto_attr_alg_name(struct rtattr *rta); | 139 | const char *crypto_attr_alg_name(struct rtattr *rta); |
| 132 | struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask); | 140 | struct crypto_alg *crypto_attr_alg2(struct rtattr *rta, |
| 141 | const struct crypto_type *frontend, | ||
| 142 | u32 type, u32 mask); | ||
| 143 | |||
| 144 | static inline struct crypto_alg *crypto_attr_alg(struct rtattr *rta, | ||
| 145 | u32 type, u32 mask) | ||
| 146 | { | ||
| 147 | return crypto_attr_alg2(rta, NULL, type, mask); | ||
| 148 | } | ||
| 149 | |||
| 133 | int crypto_attr_u32(struct rtattr *rta, u32 *num); | 150 | int crypto_attr_u32(struct rtattr *rta, u32 *num); |
| 151 | void *crypto_alloc_instance2(const char *name, struct crypto_alg *alg, | ||
| 152 | unsigned int head); | ||
| 134 | struct crypto_instance *crypto_alloc_instance(const char *name, | 153 | struct crypto_instance *crypto_alloc_instance(const char *name, |
| 135 | struct crypto_alg *alg); | 154 | struct crypto_alg *alg); |
| 136 | 155 | ||
| @@ -157,12 +176,8 @@ int blkcipher_walk_virt_block(struct blkcipher_desc *desc, | |||
| 157 | 176 | ||
| 158 | static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) | 177 | static inline void *crypto_tfm_ctx_aligned(struct crypto_tfm *tfm) |
| 159 | { | 178 | { |
| 160 | unsigned long addr = (unsigned long)crypto_tfm_ctx(tfm); | 179 | return PTR_ALIGN(crypto_tfm_ctx(tfm), |
| 161 | unsigned long align = crypto_tfm_alg_alignmask(tfm); | 180 | crypto_tfm_alg_alignmask(tfm) + 1); |
| 162 | |||
| 163 | if (align <= crypto_tfm_ctx_alignment()) | ||
| 164 | align = 1; | ||
| 165 | return (void *)ALIGN(addr, align); | ||
| 166 | } | 181 | } |
| 167 | 182 | ||
| 168 | static inline struct crypto_instance *crypto_tfm_alg_instance( | 183 | static inline struct crypto_instance *crypto_tfm_alg_instance( |
diff --git a/include/crypto/cryptd.h b/include/crypto/cryptd.h index 55fa7bbdbc7..2f65a6e8ea4 100644 --- a/include/crypto/cryptd.h +++ b/include/crypto/cryptd.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | #include <linux/crypto.h> | 8 | #include <linux/crypto.h> |
| 9 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
| 10 | #include <crypto/hash.h> | ||
| 10 | 11 | ||
| 11 | struct cryptd_ablkcipher { | 12 | struct cryptd_ablkcipher { |
| 12 | struct crypto_ablkcipher base; | 13 | struct crypto_ablkcipher base; |
| @@ -24,4 +25,20 @@ struct cryptd_ablkcipher *cryptd_alloc_ablkcipher(const char *alg_name, | |||
| 24 | struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm); | 25 | struct crypto_blkcipher *cryptd_ablkcipher_child(struct cryptd_ablkcipher *tfm); |
| 25 | void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm); | 26 | void cryptd_free_ablkcipher(struct cryptd_ablkcipher *tfm); |
| 26 | 27 | ||
| 28 | struct cryptd_ahash { | ||
| 29 | struct crypto_ahash base; | ||
| 30 | }; | ||
| 31 | |||
| 32 | static inline struct cryptd_ahash *__cryptd_ahash_cast( | ||
| 33 | struct crypto_ahash *tfm) | ||
| 34 | { | ||
| 35 | return (struct cryptd_ahash *)tfm; | ||
| 36 | } | ||
| 37 | |||
| 38 | /* alg_name should be algorithm to be cryptd-ed */ | ||
| 39 | struct cryptd_ahash *cryptd_alloc_ahash(const char *alg_name, | ||
| 40 | u32 type, u32 mask); | ||
| 41 | struct crypto_shash *cryptd_ahash_child(struct cryptd_ahash *tfm); | ||
| 42 | void cryptd_free_ahash(struct cryptd_ahash *tfm); | ||
| 43 | |||
| 27 | #endif | 44 | #endif |
diff --git a/include/crypto/hash.h b/include/crypto/hash.h index d56bb71617c..26cb1eb16f4 100644 --- a/include/crypto/hash.h +++ b/include/crypto/hash.h | |||
| @@ -15,6 +15,42 @@ | |||
| 15 | 15 | ||
| 16 | #include <linux/crypto.h> | 16 | #include <linux/crypto.h> |
| 17 | 17 | ||
| 18 | struct crypto_ahash; | ||
| 19 | |||
| 20 | struct hash_alg_common { | ||
| 21 | unsigned int digestsize; | ||
| 22 | unsigned int statesize; | ||
| 23 | |||
| 24 | struct crypto_alg base; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct ahash_request { | ||
| 28 | struct crypto_async_request base; | ||
| 29 | |||
| 30 | unsigned int nbytes; | ||
| 31 | struct scatterlist *src; | ||
| 32 | u8 *result; | ||
| 33 | |||
| 34 | /* This field may only be used by the ahash API code. */ | ||
| 35 | void *priv; | ||
| 36 | |||
| 37 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
| 38 | }; | ||
| 39 | |||
| 40 | struct ahash_alg { | ||
| 41 | int (*init)(struct ahash_request *req); | ||
| 42 | int (*update)(struct ahash_request *req); | ||
| 43 | int (*final)(struct ahash_request *req); | ||
| 44 | int (*finup)(struct ahash_request *req); | ||
| 45 | int (*digest)(struct ahash_request *req); | ||
| 46 | int (*export)(struct ahash_request *req, void *out); | ||
| 47 | int (*import)(struct ahash_request *req, const void *in); | ||
| 48 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
| 49 | unsigned int keylen); | ||
| 50 | |||
| 51 | struct hash_alg_common halg; | ||
| 52 | }; | ||
| 53 | |||
| 18 | struct shash_desc { | 54 | struct shash_desc { |
| 19 | struct crypto_shash *tfm; | 55 | struct crypto_shash *tfm; |
| 20 | u32 flags; | 56 | u32 flags; |
| @@ -24,7 +60,6 @@ struct shash_desc { | |||
| 24 | 60 | ||
| 25 | struct shash_alg { | 61 | struct shash_alg { |
| 26 | int (*init)(struct shash_desc *desc); | 62 | int (*init)(struct shash_desc *desc); |
| 27 | int (*reinit)(struct shash_desc *desc); | ||
| 28 | int (*update)(struct shash_desc *desc, const u8 *data, | 63 | int (*u |
