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 | |
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>
-rw-r--r-- | drivers/md/dm-crypt.c | 30 | ||||
-rw-r--r-- | drivers/net/ppp_mppe.c | 34 | ||||
-rw-r--r-- | fs/nfsd/nfs4recover.c | 21 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_crypt_tkip.c | 25 | ||||
-rw-r--r-- | net/sunrpc/auth_gss/gss_krb5_crypto.c | 38 | ||||
-rw-r--r-- | security/seclvl.c | 18 |
6 files changed, 97 insertions, 69 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); |
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index 06da7506363c..e35d7e52fdeb 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
@@ -33,7 +33,7 @@ | |||
33 | * | 33 | * |
34 | */ | 34 | */ |
35 | 35 | ||
36 | 36 | #include <linux/err.h> | |
37 | #include <linux/sunrpc/svc.h> | 37 | #include <linux/sunrpc/svc.h> |
38 | #include <linux/nfsd/nfsd.h> | 38 | #include <linux/nfsd/nfsd.h> |
39 | #include <linux/nfs4.h> | 39 | #include <linux/nfs4.h> |
@@ -87,34 +87,35 @@ int | |||
87 | nfs4_make_rec_clidname(char *dname, struct xdr_netobj *clname) | 87 | nfs4_make_rec_clidname(char *dname, struct xdr_netobj *clname) |
88 | { | 88 | { |
89 | struct xdr_netobj cksum; | 89 | struct xdr_netobj cksum; |
90 | struct crypto_tfm *tfm; | 90 | struct hash_desc desc; |
91 | struct scatterlist sg[1]; | 91 | struct scatterlist sg[1]; |
92 | int status = nfserr_resource; | 92 | int status = nfserr_resource; |
93 | 93 | ||
94 | dprintk("NFSD: nfs4_make_rec_clidname for %.*s\n", | 94 | dprintk("NFSD: nfs4_make_rec_clidname for %.*s\n", |
95 | clname->len, clname->data); | 95 | clname->len, clname->data); |
96 | tfm = crypto_alloc_tfm("md5", CRYPTO_TFM_REQ_MAY_SLEEP); | 96 | desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; |
97 | if (tfm == NULL) | 97 | desc.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC); |
98 | goto out; | 98 | if (IS_ERR(desc.tfm)) |
99 | cksum.len = crypto_tfm_alg_digestsize(tfm); | 99 | goto out_no_tfm; |
100 | cksum.len = crypto_hash_digestsize(desc.tfm); | ||
100 | cksum.data = kmalloc(cksum.len, GFP_KERNEL); | 101 | cksum.data = kmalloc(cksum.len, GFP_KERNEL); |
101 | if (cksum.data == NULL) | 102 | if (cksum.data == NULL) |
102 | goto out; | 103 | goto out; |
103 | crypto_digest_init(tfm); | ||
104 | 104 | ||
105 | sg[0].page = virt_to_page(clname->data); | 105 | sg[0].page = virt_to_page(clname->data); |
106 | sg[0].offset = offset_in_page(clname->data); | 106 | sg[0].offset = offset_in_page(clname->data); |
107 | sg[0].length = clname->len; | 107 | sg[0].length = clname->len; |
108 | 108 | ||
109 | crypto_digest_update(tfm, sg, 1); | 109 | if (crypto_hash_digest(&desc, sg, sg->length, cksum.data)) |
110 | crypto_digest_final(tfm, cksum.data); | 110 | goto out; |
111 | 111 | ||
112 | md5_to_hex(dname, cksum.data); | 112 | md5_to_hex(dname, cksum.data); |
113 | 113 | ||
114 | kfree(cksum.data); | 114 | kfree(cksum.data); |
115 | status = nfs_ok; | 115 | status = nfs_ok; |
116 | out: | 116 | out: |
117 | crypto_free_tfm(tfm); | 117 | crypto_free_hash(desc.tfm); |
118 | out_no_tfm: | ||
118 | return status; | 119 | return status; |
119 | } | 120 | } |
120 | 121 | ||
diff --git a/net/ieee80211/ieee80211_crypt_tkip.c b/net/ieee80211/ieee80211_crypt_tkip.c index d60ce9b49b4f..407a17495b61 100644 --- a/net/ieee80211/ieee80211_crypt_tkip.c +++ b/net/ieee80211/ieee80211_crypt_tkip.c | |||
@@ -54,7 +54,7 @@ struct ieee80211_tkip_data { | |||
54 | int key_idx; | 54 | int key_idx; |
55 | 55 | ||
56 | struct crypto_blkcipher *tfm_arc4; | 56 | struct crypto_blkcipher *tfm_arc4; |
57 | struct crypto_tfm *tfm_michael; | 57 | struct crypto_hash *tfm_michael; |
58 | 58 | ||
59 | /* scratch buffers for virt_to_page() (crypto API) */ | 59 | /* scratch buffers for virt_to_page() (crypto API) */ |
60 | u8 rx_hdr[16], tx_hdr[16]; | 60 | u8 rx_hdr[16], tx_hdr[16]; |
@@ -95,10 +95,12 @@ static void *ieee80211_tkip_init(int key_idx) | |||
95 | goto fail; | 95 | goto fail; |
96 | } | 96 | } |
97 | 97 | ||
98 | priv->tfm_michael = crypto_alloc_tfm("michael_mic", 0); | 98 | priv->tfm_michael = crypto_alloc_hash("michael_mic", 0, |
99 | if (priv->tfm_michael == NULL) { | 99 | CRYPTO_ALG_ASYNC); |
100 | if (IS_ERR(priv->tfm_michael)) { | ||
100 | printk(KERN_DEBUG "ieee80211_crypt_tkip: could not allocate " | 101 | printk(KERN_DEBUG "ieee80211_crypt_tkip: could not allocate " |
101 | "crypto API michael_mic\n"); | 102 | "crypto API michael_mic\n"); |
103 | priv->tfm_michael = NULL; | ||
102 | goto fail; | 104 | goto fail; |
103 | } | 105 | } |
104 | 106 | ||
@@ -107,7 +109,7 @@ static void *ieee80211_tkip_init(int key_idx) | |||
107 | fail: | 109 | fail: |
108 | if (priv) { | 110 | if (priv) { |
109 | if (priv->tfm_michael) | 111 | if (priv->tfm_michael) |
110 | crypto_free_tfm(priv->tfm_michael); | 112 | crypto_free_hash(priv->tfm_michael); |
111 | if (priv->tfm_arc4) | 113 | if (priv->tfm_arc4) |
112 | crypto_free_blkcipher(priv->tfm_arc4); | 114 | crypto_free_blkcipher(priv->tfm_arc4); |
113 | kfree(priv); | 115 | kfree(priv); |
@@ -120,7 +122,7 @@ static void ieee80211_tkip_deinit(void *priv) | |||
120 | { | 122 | { |
121 | struct ieee80211_tkip_data *_priv = priv; | 123 | struct ieee80211_tkip_data *_priv = priv; |
122 | if (_priv && _priv->tfm_michael) | 124 | if (_priv && _priv->tfm_michael) |
123 | crypto_free_tfm(_priv->tfm_michael); | 125 | crypto_free_hash(_priv->tfm_michael); |
124 | if (_priv && _priv->tfm_arc4) | 126 | if (_priv && _priv->tfm_arc4) |
125 | crypto_free_blkcipher(_priv->tfm_arc4); | 127 | crypto_free_blkcipher(_priv->tfm_arc4); |
126 | kfree(priv); | 128 | kfree(priv); |
@@ -485,6 +487,7 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) | |||
485 | static int michael_mic(struct ieee80211_tkip_data *tkey, u8 * key, u8 * hdr, | 487 | static int michael_mic(struct ieee80211_tkip_data *tkey, u8 * key, u8 * hdr, |
486 | u8 * data, size_t data_len, u8 * mic) | 488 | u8 * data, size_t data_len, u8 * mic) |
487 | { | 489 | { |
490 | struct hash_desc desc; | ||
488 | struct scatterlist sg[2]; | 491 | struct scatterlist sg[2]; |
489 | 492 | ||
490 | if (tkey->tfm_michael == NULL) { | 493 | if (tkey->tfm_michael == NULL) { |
@@ -499,12 +502,12 @@ static int michael_mic(struct ieee80211_tkip_data *tkey, u8 * key, u8 * hdr, | |||
499 | sg[1].offset = offset_in_page(data); | 502 | sg[1].offset = offset_in_page(data); |
500 | sg[1].length = data_len; | 503 | sg[1].length = data_len; |
501 | 504 | ||
502 | crypto_digest_init(tkey->tfm_michael); | 505 | if (crypto_hash_setkey(tkey->tfm_michael, key, 8)) |
503 | crypto_digest_setkey(tkey->tfm_michael, key, 8); | 506 | return -1; |
504 | crypto_digest_update(tkey->tfm_michael, sg, 2); | ||
505 | crypto_digest_final(tkey->tfm_michael, mic); | ||
506 | 507 | ||
507 | return 0; | 508 | desc.tfm = tkey->tfm_michael; |
509 | desc.flags = 0; | ||
510 | return crypto_hash_digest(&desc, sg, data_len + 16, mic); | ||
508 | } | 511 | } |
509 | 512 | ||
510 | static void michael_mic_hdr(struct sk_buff *skb, u8 * hdr) | 513 | static void michael_mic_hdr(struct sk_buff *skb, u8 * hdr) |
@@ -628,7 +631,7 @@ static int ieee80211_tkip_set_key(void *key, int len, u8 * seq, void *priv) | |||
628 | { | 631 | { |
629 | struct ieee80211_tkip_data *tkey = priv; | 632 | struct ieee80211_tkip_data *tkey = priv; |
630 | int keyidx; | 633 | int keyidx; |
631 | struct crypto_tfm *tfm = tkey->tfm_michael; | 634 | struct crypto_hash *tfm = tkey->tfm_michael; |
632 | struct crypto_blkcipher *tfm2 = tkey->tfm_arc4; | 635 | struct crypto_blkcipher *tfm2 = tkey->tfm_arc4; |
633 | 636 | ||
634 | keyidx = tkey->key_idx; | 637 | keyidx = tkey->key_idx; |
diff --git a/net/sunrpc/auth_gss/gss_krb5_crypto.c b/net/sunrpc/auth_gss/gss_krb5_crypto.c index 57192dfe3065..e11a40b25cce 100644 --- a/net/sunrpc/auth_gss/gss_krb5_crypto.c +++ b/net/sunrpc/auth_gss/gss_krb5_crypto.c | |||
@@ -34,6 +34,7 @@ | |||
34 | * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 34 | * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
35 | */ | 35 | */ |
36 | 36 | ||
37 | #include <linux/err.h> | ||
37 | #include <linux/types.h> | 38 | #include <linux/types.h> |
38 | #include <linux/mm.h> | 39 | #include <linux/mm.h> |
39 | #include <linux/slab.h> | 40 | #include <linux/slab.h> |
@@ -199,11 +200,9 @@ out: | |||
199 | static int | 200 | static int |
200 | checksummer(struct scatterlist *sg, void *data) | 201 | checksummer(struct scatterlist *sg, void *data) |
201 | { | 202 | { |
202 | struct crypto_tfm *tfm = (struct crypto_tfm *)data; | 203 | struct hash_desc *desc = data; |
203 | 204 | ||
204 | crypto_digest_update(tfm, sg, 1); | 205 | return crypto_hash_update(desc, sg, sg->length); |
205 | |||
206 | return 0; | ||
207 | } | 206 | } |
208 | 207 | ||
209 | /* checksum the plaintext data and hdrlen bytes of the token header */ | 208 | /* checksum the plaintext data and hdrlen bytes of the token header */ |
@@ -212,8 +211,9 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, | |||
212 | int body_offset, struct xdr_netobj *cksum) | 211 | int body_offset, struct xdr_netobj *cksum) |
213 | { | 212 | { |
214 | char *cksumname; | 213 | char *cksumname; |
215 | struct crypto_tfm *tfm = NULL; /* XXX add to ctx? */ | 214 | struct hash_desc desc; /* XXX add to ctx? */ |
216 | struct scatterlist sg[1]; | 215 | struct scatterlist sg[1]; |
216 | int err; | ||
217 | 217 | ||
218 | switch (cksumtype) { | 218 | switch (cksumtype) { |
219 | case CKSUMTYPE_RSA_MD5: | 219 | case CKSUMTYPE_RSA_MD5: |
@@ -224,18 +224,28 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, | |||
224 | " unsupported checksum %d", cksumtype); | 224 | " unsupported checksum %d", cksumtype); |
225 | return GSS_S_FAILURE; | 225 | return GSS_S_FAILURE; |
226 | } | 226 | } |
227 | if (!(tfm = crypto_alloc_tfm(cksumname, CRYPTO_TFM_REQ_MAY_SLEEP))) | 227 | desc.tfm = crypto_alloc_hash(cksumname, 0, CRYPTO_ALG_ASYNC); |
228 | if (IS_ERR(desc.tfm)) | ||
228 | return GSS_S_FAILURE; | 229 | return GSS_S_FAILURE; |
229 | cksum->len = crypto_tfm_alg_digestsize(tfm); | 230 | cksum->len = crypto_hash_digestsize(desc.tfm); |
231 | desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; | ||
230 | 232 | ||
231 | crypto_digest_init(tfm); | 233 | err = crypto_hash_init(&desc); |
234 | if (err) | ||
235 | goto out; | ||
232 | sg_set_buf(sg, header, hdrlen); | 236 | sg_set_buf(sg, header, hdrlen); |
233 | crypto_digest_update(tfm, sg, 1); | 237 | err = crypto_hash_update(&desc, sg, hdrlen); |
234 | process_xdr_buf(body, body_offset, body->len - body_offset, | 238 | if (err) |
235 | checksummer, tfm); | 239 | goto out; |
236 | crypto_digest_final(tfm, cksum->data); | 240 | err = process_xdr_buf(body, body_offset, body->len - body_offset, |
237 | crypto_free_tfm(tfm); | 241 | checksummer, &desc); |
238 | return 0; | 242 | if (err) |
243 | goto out; | ||
244 | err = crypto_hash_final(&desc, cksum->data); | ||
245 | |||
246 | out: | ||
247 | crypto_free_hash(desc.tfm); | ||
248 | return err ? GSS_S_FAILURE : 0; | ||
239 | } | 249 | } |
240 | 250 | ||
241 | EXPORT_SYMBOL(make_checksum); | 251 | EXPORT_SYMBOL(make_checksum); |
diff --git a/security/seclvl.c b/security/seclvl.c index c26dd7de0471..8f6291991fbc 100644 --- a/security/seclvl.c +++ b/security/seclvl.c | |||
@@ -16,6 +16,7 @@ | |||
16 | * (at your option) any later version. | 16 | * (at your option) any later version. |
17 | */ | 17 | */ |
18 | 18 | ||
19 | #include <linux/err.h> | ||
19 | #include <linux/module.h> | 20 | #include <linux/module.h> |
20 | #include <linux/moduleparam.h> | 21 | #include <linux/moduleparam.h> |
21 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
@@ -197,26 +198,27 @@ static unsigned char hashedPassword[SHA1_DIGEST_SIZE]; | |||
197 | static int | 198 | static int |
198 | plaintext_to_sha1(unsigned char *hash, const char *plaintext, unsigned int len) | 199 | plaintext_to_sha1(unsigned char *hash, const char *plaintext, unsigned int len) |
199 | { | 200 | { |
200 | struct crypto_tfm *tfm; | 201 | struct hash_desc desc; |
201 | struct scatterlist sg; | 202 | struct scatterlist sg; |
203 | int err; | ||
204 | |||
202 | if (len > PAGE_SIZE) { | 205 | if (len > PAGE_SIZE) { |
203 | seclvl_printk(0, KERN_ERR, "Plaintext password too large (%d " | 206 | seclvl_printk(0, KERN_ERR, "Plaintext password too large (%d " |
204 | "characters). Largest possible is %lu " | 207 | "characters). Largest possible is %lu " |
205 | "bytes.\n", len, PAGE_SIZE); | 208 | "bytes.\n", len, PAGE_SIZE); |
206 | return -EINVAL; | 209 | return -EINVAL; |
207 | } | 210 | } |
208 | tfm = crypto_alloc_tfm("sha1", CRYPTO_TFM_REQ_MAY_SLEEP); | 211 | desc.tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC); |
209 | if (tfm == NULL) { | 212 | if (IS_ERR(desc.tfm)) { |
210 | seclvl_printk(0, KERN_ERR, | 213 | seclvl_printk(0, KERN_ERR, |
211 | "Failed to load transform for SHA1\n"); | 214 | "Failed to load transform for SHA1\n"); |
212 | return -EINVAL; | 215 | return -EINVAL; |
213 | } | 216 | } |
214 | sg_init_one(&sg, (u8 *)plaintext, len); | 217 | sg_init_one(&sg, (u8 *)plaintext, len); |
215 | crypto_digest_init(tfm); | 218 | desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; |
216 | crypto_digest_update(tfm, &sg, 1); | 219 | err = crypto_hash_digest(&desc, &sg, len, hash); |
217 | crypto_digest_final(tfm, hash); | 220 | crypto_free_hash(desc.tfm); |
218 | crypto_free_tfm(tfm); | 221 | return err; |
219 | return 0; | ||
220 | } | 222 | } |
221 | 223 | ||
222 | /** | 224 | /** |