diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-08-24 05:10:20 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2006-09-20 21:46:21 -0400 |
commit | 35058687912aa2f0b4554383cc10be4e0683b9a4 (patch) | |
tree | 3e18d13aef6682553887076c1e9872e91e6fc5c4 /drivers | |
parent | dc64ddf4918f0da52df10d83c2a5941a547c2035 (diff) |
[CRYPTO] users: Use crypto_hash interface instead of crypto_digest
This patch converts all remaining crypto_digest users to use the new
crypto_hash interface.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/md/dm-crypt.c | 30 | ||||
-rw-r--r-- | drivers/net/ppp_mppe.c | 34 |
2 files changed, 38 insertions, 26 deletions
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 91d4081cb00e..73f8be837a45 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c | |||
@@ -122,7 +122,8 @@ static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, | |||
122 | const char *opts) | 122 | const char *opts) |
123 | { | 123 | { |
124 | struct crypto_cipher *essiv_tfm; | 124 | struct crypto_cipher *essiv_tfm; |
125 | struct crypto_tfm *hash_tfm; | 125 | struct crypto_hash *hash_tfm; |
126 | struct hash_desc desc; | ||
126 | struct scatterlist sg; | 127 | struct scatterlist sg; |
127 | unsigned int saltsize; | 128 | unsigned int saltsize; |
128 | u8 *salt; | 129 | u8 *salt; |
@@ -134,29 +135,30 @@ static int crypt_iv_essiv_ctr(struct crypt_config *cc, struct dm_target *ti, | |||
134 | } | 135 | } |
135 | 136 | ||
136 | /* Hash the cipher key with the given hash algorithm */ | 137 | /* Hash the cipher key with the given hash algorithm */ |
137 | hash_tfm = crypto_alloc_tfm(opts, CRYPTO_TFM_REQ_MAY_SLEEP); | 138 | hash_tfm = crypto_alloc_hash(opts, 0, CRYPTO_ALG_ASYNC); |
138 | if (hash_tfm == NULL) { | 139 | if (IS_ERR(hash_tfm)) { |
139 | ti->error = "Error initializing ESSIV hash"; | 140 | ti->error = "Error initializing ESSIV hash"; |
140 | return -EINVAL; | 141 | return PTR_ERR(hash_tfm); |
141 | } | ||
142 | |||
143 | if (crypto_tfm_alg_type(hash_tfm) != CRYPTO_ALG_TYPE_DIGEST) { | ||
144 | ti->error = "Expected digest algorithm for ESSIV hash"; | ||
145 | crypto_free_tfm(hash_tfm); | ||
146 | return -EINVAL; | ||
147 | } | 142 | } |
148 | 143 | ||
149 | saltsize = crypto_tfm_alg_digestsize(hash_tfm); | 144 | saltsize = crypto_hash_digestsize(hash_tfm); |
150 | salt = kmalloc(saltsize, GFP_KERNEL); | 145 | salt = kmalloc(saltsize, GFP_KERNEL); |
151 | if (salt == NULL) { | 146 | if (salt == NULL) { |
152 | ti->error = "Error kmallocing salt storage in ESSIV"; | 147 | ti->error = "Error kmallocing salt storage in ESSIV"; |
153 | crypto_free_tfm(hash_tfm); | 148 | crypto_free_hash(hash_tfm); |
154 | return -ENOMEM; | 149 | return -ENOMEM; |
155 | } | 150 | } |
156 | 151 | ||
157 | sg_set_buf(&sg, cc->key, cc->key_size); | 152 | sg_set_buf(&sg, cc->key, cc->key_size); |
158 | crypto_digest_digest(hash_tfm, &sg, 1, salt); | 153 | desc.tfm = hash_tfm; |
159 | crypto_free_tfm(hash_tfm); | 154 | desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; |
155 | err = crypto_hash_digest(&desc, &sg, cc->key_size, salt); | ||
156 | crypto_free_hash(hash_tfm); | ||
157 | |||
158 | if (err) { | ||
159 | ti->error = "Error calculating hash in ESSIV"; | ||
160 | return err; | ||
161 | } | ||
160 | 162 | ||
161 | /* Setup the essiv_tfm with the given salt */ | 163 | /* Setup the essiv_tfm with the given salt */ |
162 | essiv_tfm = crypto_alloc_cipher(cc->cipher, 0, CRYPTO_ALG_ASYNC); | 164 | essiv_tfm = crypto_alloc_cipher(cc->cipher, 0, CRYPTO_ALG_ASYNC); |
diff --git a/drivers/net/ppp_mppe.c b/drivers/net/ppp_mppe.c index 495d8667419a..e7a0eb4fca60 100644 --- a/drivers/net/ppp_mppe.c +++ b/drivers/net/ppp_mppe.c | |||
@@ -65,12 +65,13 @@ MODULE_LICENSE("Dual BSD/GPL"); | |||
65 | MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE)); | 65 | MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE)); |
66 | MODULE_VERSION("1.0.2"); | 66 | MODULE_VERSION("1.0.2"); |
67 | 67 | ||
68 | static void | 68 | static unsigned int |
69 | setup_sg(struct scatterlist *sg, const void *address, unsigned int length) | 69 | setup_sg(struct scatterlist *sg, const void *address, unsigned int length) |
70 | { | 70 | { |
71 | sg[0].page = virt_to_page(address); | 71 | sg[0].page = virt_to_page(address); |
72 | sg[0].offset = offset_in_page(address); | 72 | sg[0].offset = offset_in_page(address); |
73 | sg[0].length = length; | 73 | sg[0].length = length; |
74 | return length; | ||
74 | } | 75 | } |
75 | 76 | ||
76 | #define SHA1_PAD_SIZE 40 | 77 | #define SHA1_PAD_SIZE 40 |
@@ -97,7 +98,7 @@ static inline void sha_pad_init(struct sha_pad *shapad) | |||
97 | */ | 98 | */ |
98 | struct ppp_mppe_state { | 99 | struct ppp_mppe_state { |
99 | struct crypto_blkcipher *arc4; | 100 | struct crypto_blkcipher *arc4; |
100 | struct crypto_tfm *sha1; | 101 | struct crypto_hash *sha1; |
101 | unsigned char *sha1_digest; | 102 | unsigned char *sha1_digest; |
102 | unsigned char master_key[MPPE_MAX_KEY_LEN]; | 103 | unsigned char master_key[MPPE_MAX_KEY_LEN]; |
103 | unsigned char session_key[MPPE_MAX_KEY_LEN]; | 104 | unsigned char session_key[MPPE_MAX_KEY_LEN]; |
@@ -137,14 +138,21 @@ struct ppp_mppe_state { | |||
137 | */ | 138 | */ |
138 | static void get_new_key_from_sha(struct ppp_mppe_state * state, unsigned char *InterimKey) | 139 | static void get_new_key_from_sha(struct ppp_mppe_state * state, unsigned char *InterimKey) |
139 | { | 140 | { |
141 | struct hash_desc desc; | ||
140 | struct scatterlist sg[4]; | 142 | struct scatterlist sg[4]; |
143 | unsigned int nbytes; | ||
141 | 144 | ||
142 | setup_sg(&sg[0], state->master_key, state->keylen); | 145 | nbytes = setup_sg(&sg[0], state->master_key, state->keylen); |
143 | setup_sg(&sg[1], sha_pad->sha_pad1, sizeof(sha_pad->sha_pad1)); | 146 | nbytes += setup_sg(&sg[1], sha_pad->sha_pad1, |
144 | setup_sg(&sg[2], state->session_key, state->keylen); | 147 | sizeof(sha_pad->sha_pad1)); |
145 | setup_sg(&sg[3], sha_pad->sha_pad2, sizeof(sha_pad->sha_pad2)); | 148 | nbytes += setup_sg(&sg[2], state->session_key, state->keylen); |
149 | nbytes += setup_sg(&sg[3], sha_pad->sha_pad2, | ||
150 | sizeof(sha_pad->sha_pad2)); | ||
146 | 151 | ||
147 | crypto_digest_digest (state->sha1, sg, 4, state->sha1_digest); | 152 | desc.tfm = state->sha1; |
153 | desc.flags = 0; | ||
154 | |||
155 | crypto_hash_digest(&desc, sg, nbytes, state->sha1_digest); | ||
148 | 156 | ||
149 | memcpy(InterimKey, state->sha1_digest, state->keylen); | 157 | memcpy(InterimKey, state->sha1_digest, state->keylen); |
150 | } | 158 | } |
@@ -204,11 +212,13 @@ static void *mppe_alloc(unsigned char *options, int optlen) | |||
204 | goto out_free; | 212 | goto out_free; |
205 | } | 213 | } |
206 | 214 | ||
207 | state->sha1 = crypto_alloc_tfm("sha1", 0); | 215 | state->sha1 = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC); |
208 | if (!state->sha1) | 216 | if (IS_ERR(state->sha1)) { |
217 | state->sha1 = NULL; | ||
209 | goto out_free; | 218 | goto out_free; |
219 | } | ||
210 | 220 | ||
211 | digestsize = crypto_tfm_alg_digestsize(state->sha1); | 221 | digestsize = crypto_hash_digestsize(state->sha1); |
212 | if (digestsize < MPPE_MAX_KEY_LEN) | 222 | if (digestsize < MPPE_MAX_KEY_LEN) |
213 | goto out_free; | 223 | goto out_free; |
214 | 224 | ||
@@ -233,7 +243,7 @@ static void *mppe_alloc(unsigned char *options, int optlen) | |||
233 | if (state->sha1_digest) | 243 | if (state->sha1_digest) |
234 | kfree(state->sha1_digest); | 244 | kfree(state->sha1_digest); |
235 | if (state->sha1) | 245 | if (state->sha1) |
236 | crypto_free_tfm(state->sha1); | 246 | crypto_free_hash(state->sha1); |
237 | if (state->arc4) | 247 | if (state->arc4) |
238 | crypto_free_blkcipher(state->arc4); | 248 | crypto_free_blkcipher(state->arc4); |
239 | kfree(state); | 249 | kfree(state); |
@@ -251,7 +261,7 @@ static void mppe_free(void *arg) | |||
251 | if (state->sha1_digest) | 261 | if (state->sha1_digest) |
252 | kfree(state->sha1_digest); | 262 | kfree(state->sha1_digest); |
253 | if (state->sha1) | 263 | if (state->sha1) |
254 | crypto_free_tfm(state->sha1); | 264 | crypto_free_hash(state->sha1); |
255 | if (state->arc4) | 265 | if (state->arc4) |
256 | crypto_free_blkcipher(state->arc4); | 266 | crypto_free_blkcipher(state->arc4); |
257 | kfree(state); | 267 | kfree(state); |