diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-08-22 06:33:54 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2006-09-20 21:46:15 -0400 |
commit | 378c6697a282c383d89428380a3405bf95189347 (patch) | |
tree | 3127c641dd07694199cd4e89c9cd5c155c4eb560 /net/sunrpc/auth_gss/gss_krb5_crypto.c | |
parent | 6b7326c8497f954c2cfcb4c49fe42be5b80887bc (diff) |
[SUNRPC] GSS: Use block ciphers where applicable
This patch converts SUNRPC/GSS to use the new block cipher type where
applicable.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'net/sunrpc/auth_gss/gss_krb5_crypto.c')
-rw-r--r-- | net/sunrpc/auth_gss/gss_krb5_crypto.c | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/net/sunrpc/auth_gss/gss_krb5_crypto.c b/net/sunrpc/auth_gss/gss_krb5_crypto.c index 76b969e6904f..57192dfe3065 100644 --- a/net/sunrpc/auth_gss/gss_krb5_crypto.c +++ b/net/sunrpc/auth_gss/gss_krb5_crypto.c | |||
@@ -49,7 +49,7 @@ | |||
49 | 49 | ||
50 | u32 | 50 | u32 |
51 | krb5_encrypt( | 51 | krb5_encrypt( |
52 | struct crypto_tfm *tfm, | 52 | struct crypto_blkcipher *tfm, |
53 | void * iv, | 53 | void * iv, |
54 | void * in, | 54 | void * in, |
55 | void * out, | 55 | void * out, |
@@ -58,26 +58,27 @@ krb5_encrypt( | |||
58 | u32 ret = -EINVAL; | 58 | u32 ret = -EINVAL; |
59 | struct scatterlist sg[1]; | 59 | struct scatterlist sg[1]; |
60 | u8 local_iv[16] = {0}; | 60 | u8 local_iv[16] = {0}; |
61 | struct blkcipher_desc desc = { .tfm = tfm, .info = local_iv }; | ||
61 | 62 | ||
62 | dprintk("RPC: krb5_encrypt: input data:\n"); | 63 | dprintk("RPC: krb5_encrypt: input data:\n"); |
63 | print_hexl((u32 *)in, length, 0); | 64 | print_hexl((u32 *)in, length, 0); |
64 | 65 | ||
65 | if (length % crypto_tfm_alg_blocksize(tfm) != 0) | 66 | if (length % crypto_blkcipher_blocksize(tfm) != 0) |
66 | goto out; | 67 | goto out; |
67 | 68 | ||
68 | if (crypto_tfm_alg_ivsize(tfm) > 16) { | 69 | if (crypto_blkcipher_ivsize(tfm) > 16) { |
69 | dprintk("RPC: gss_k5encrypt: tfm iv size to large %d\n", | 70 | dprintk("RPC: gss_k5encrypt: tfm iv size to large %d\n", |
70 | crypto_tfm_alg_ivsize(tfm)); | 71 | crypto_blkcipher_ivsize(tfm)); |
71 | goto out; | 72 | goto out; |
72 | } | 73 | } |
73 | 74 | ||
74 | if (iv) | 75 | if (iv) |
75 | memcpy(local_iv, iv, crypto_tfm_alg_ivsize(tfm)); | 76 | memcpy(local_iv, iv, crypto_blkcipher_ivsize(tfm)); |
76 | 77 | ||
77 | memcpy(out, in, length); | 78 | memcpy(out, in, length); |
78 | sg_set_buf(sg, out, length); | 79 | sg_set_buf(sg, out, length); |
79 | 80 | ||
80 | ret = crypto_cipher_encrypt_iv(tfm, sg, sg, length, local_iv); | 81 | ret = crypto_blkcipher_encrypt_iv(&desc, sg, sg, length); |
81 | 82 | ||
82 | dprintk("RPC: krb5_encrypt: output data:\n"); | 83 | dprintk("RPC: krb5_encrypt: output data:\n"); |
83 | print_hexl((u32 *)out, length, 0); | 84 | print_hexl((u32 *)out, length, 0); |
@@ -90,7 +91,7 @@ EXPORT_SYMBOL(krb5_encrypt); | |||
90 | 91 | ||
91 | u32 | 92 | u32 |
92 | krb5_decrypt( | 93 | krb5_decrypt( |
93 | struct crypto_tfm *tfm, | 94 | struct crypto_blkcipher *tfm, |
94 | void * iv, | 95 | void * iv, |
95 | void * in, | 96 | void * in, |
96 | void * out, | 97 | void * out, |
@@ -99,25 +100,26 @@ krb5_decrypt( | |||
99 | u32 ret = -EINVAL; | 100 | u32 ret = -EINVAL; |
100 | struct scatterlist sg[1]; | 101 | struct scatterlist sg[1]; |
101 | u8 local_iv[16] = {0}; | 102 | u8 local_iv[16] = {0}; |
103 | struct blkcipher_desc desc = { .tfm = tfm, .info = local_iv }; | ||
102 | 104 | ||
103 | dprintk("RPC: krb5_decrypt: input data:\n"); | 105 | dprintk("RPC: krb5_decrypt: input data:\n"); |
104 | print_hexl((u32 *)in, length, 0); | 106 | print_hexl((u32 *)in, length, 0); |
105 | 107 | ||
106 | if (length % crypto_tfm_alg_blocksize(tfm) != 0) | 108 | if (length % crypto_blkcipher_blocksize(tfm) != 0) |
107 | goto out; | 109 | goto out; |
108 | 110 | ||
109 | if (crypto_tfm_alg_ivsize(tfm) > 16) { | 111 | if (crypto_blkcipher_ivsize(tfm) > 16) { |
110 | dprintk("RPC: gss_k5decrypt: tfm iv size to large %d\n", | 112 | dprintk("RPC: gss_k5decrypt: tfm iv size to large %d\n", |
111 | crypto_tfm_alg_ivsize(tfm)); | 113 | crypto_blkcipher_ivsize(tfm)); |
112 | goto out; | 114 | goto out; |
113 | } | 115 | } |
114 | if (iv) | 116 | if (iv) |
115 | memcpy(local_iv,iv, crypto_tfm_alg_ivsize(tfm)); | 117 | memcpy(local_iv,iv, crypto_blkcipher_ivsize(tfm)); |
116 | 118 | ||
117 | memcpy(out, in, length); | 119 | memcpy(out, in, length); |
118 | sg_set_buf(sg, out, length); | 120 | sg_set_buf(sg, out, length); |
119 | 121 | ||
120 | ret = crypto_cipher_decrypt_iv(tfm, sg, sg, length, local_iv); | 122 | ret = crypto_blkcipher_decrypt_iv(&desc, sg, sg, length); |
121 | 123 | ||
122 | dprintk("RPC: krb5_decrypt: output_data:\n"); | 124 | dprintk("RPC: krb5_decrypt: output_data:\n"); |
123 | print_hexl((u32 *)out, length, 0); | 125 | print_hexl((u32 *)out, length, 0); |
@@ -240,7 +242,7 @@ EXPORT_SYMBOL(make_checksum); | |||
240 | 242 | ||
241 | struct encryptor_desc { | 243 | struct encryptor_desc { |
242 | u8 iv[8]; /* XXX hard-coded blocksize */ | 244 | u8 iv[8]; /* XXX hard-coded blocksize */ |
243 | struct crypto_tfm *tfm; | 245 | struct blkcipher_desc desc; |
244 | int pos; | 246 | int pos; |
245 | struct xdr_buf *outbuf; | 247 | struct xdr_buf *outbuf; |
246 | struct page **pages; | 248 | struct page **pages; |
@@ -285,8 +287,8 @@ encryptor(struct scatterlist *sg, void *data) | |||
285 | if (thislen == 0) | 287 | if (thislen == 0) |
286 | return 0; | 288 | return 0; |
287 | 289 | ||
288 | ret = crypto_cipher_encrypt_iv(desc->tfm, desc->outfrags, desc->infrags, | 290 | ret = crypto_blkcipher_encrypt_iv(&desc->desc, desc->outfrags, |
289 | thislen, desc->iv); | 291 | desc->infrags, thislen); |
290 | if (ret) | 292 | if (ret) |
291 | return ret; | 293 | return ret; |
292 | if (fraglen) { | 294 | if (fraglen) { |
@@ -305,16 +307,18 @@ encryptor(struct scatterlist *sg, void *data) | |||
305 | } | 307 | } |
306 | 308 | ||
307 | int | 309 | int |
308 | gss_encrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *buf, int offset, | 310 | gss_encrypt_xdr_buf(struct crypto_blkcipher *tfm, struct xdr_buf *buf, |
309 | struct page **pages) | 311 | int offset, struct page **pages) |
310 | { | 312 | { |
311 | int ret; | 313 | int ret; |
312 | struct encryptor_desc desc; | 314 | struct encryptor_desc desc; |
313 | 315 | ||
314 | BUG_ON((buf->len - offset) % crypto_tfm_alg_blocksize(tfm) != 0); | 316 | BUG_ON((buf->len - offset) % crypto_blkcipher_blocksize(tfm) != 0); |
315 | 317 | ||
316 | memset(desc.iv, 0, sizeof(desc.iv)); | 318 | memset(desc.iv, 0, sizeof(desc.iv)); |
317 | desc.tfm = tfm; | 319 | desc.desc.tfm = tfm; |
320 | desc.desc.info = desc.iv; | ||
321 | desc.desc.flags = 0; | ||
318 | desc.pos = offset; | 322 | desc.pos = offset; |
319 | desc.outbuf = buf; | 323 | desc.outbuf = buf; |
320 | desc.pages = pages; | 324 | desc.pages = pages; |
@@ -329,7 +333,7 @@ EXPORT_SYMBOL(gss_encrypt_xdr_buf); | |||
329 | 333 | ||
330 | struct decryptor_desc { | 334 | struct decryptor_desc { |
331 | u8 iv[8]; /* XXX hard-coded blocksize */ | 335 | u8 iv[8]; /* XXX hard-coded blocksize */ |
332 | struct crypto_tfm *tfm; | 336 | struct blkcipher_desc desc; |
333 | struct scatterlist frags[4]; | 337 | struct scatterlist frags[4]; |
334 | int fragno; | 338 | int fragno; |
335 | int fraglen; | 339 | int fraglen; |
@@ -355,8 +359,8 @@ decryptor(struct scatterlist *sg, void *data) | |||
355 | if (thislen == 0) | 359 | if (thislen == 0) |
356 | return 0; | 360 | return 0; |
357 | 361 | ||
358 | ret = crypto_cipher_decrypt_iv(desc->tfm, desc->frags, desc->frags, | 362 | ret = crypto_blkcipher_decrypt_iv(&desc->desc, desc->frags, |
359 | thislen, desc->iv); | 363 | desc->frags, thislen); |
360 | if (ret) | 364 | if (ret) |
361 | return ret; | 365 | return ret; |
362 | if (fraglen) { | 366 | if (fraglen) { |
@@ -373,15 +377,18 @@ decryptor(struct scatterlist *sg, void *data) | |||
373 | } | 377 | } |
374 | 378 | ||
375 | int | 379 | int |
376 | gss_decrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *buf, int offset) | 380 | gss_decrypt_xdr_buf(struct crypto_blkcipher *tfm, struct xdr_buf *buf, |
381 | int offset) | ||
377 | { | 382 | { |
378 | struct decryptor_desc desc; | 383 | struct decryptor_desc desc; |
379 | 384 | ||
380 | /* XXXJBF: */ | 385 | /* XXXJBF: */ |
381 | BUG_ON((buf->len - offset) % crypto_tfm_alg_blocksize(tfm) != 0); | 386 | BUG_ON((buf->len - offset) % crypto_blkcipher_blocksize(tfm) != 0); |
382 | 387 | ||
383 | memset(desc.iv, 0, sizeof(desc.iv)); | 388 | memset(desc.iv, 0, sizeof(desc.iv)); |
384 | desc.tfm = tfm; | 389 | desc.desc.tfm = tfm; |
390 | desc.desc.info = desc.iv; | ||
391 | desc.desc.flags = 0; | ||
385 | desc.fragno = 0; | 392 | desc.fragno = 0; |
386 | desc.fraglen = 0; | 393 | desc.fraglen = 0; |
387 | return process_xdr_buf(buf, offset, buf->len - offset, decryptor, &desc); | 394 | return process_xdr_buf(buf, offset, buf->len - offset, decryptor, &desc); |