aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-crypt.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2006-08-24 05:10:20 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2006-09-20 21:46:21 -0400
commit35058687912aa2f0b4554383cc10be4e0683b9a4 (patch)
tree3e18d13aef6682553887076c1e9872e91e6fc5c4 /drivers/md/dm-crypt.c
parentdc64ddf4918f0da52df10d83c2a5941a547c2035 (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/md/dm-crypt.c')
-rw-r--r--drivers/md/dm-crypt.c30
1 files changed, 16 insertions, 14 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);