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/md/dm-crypt.c | |
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/md/dm-crypt.c')
-rw-r--r-- | drivers/md/dm-crypt.c | 30 |
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); |