aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/auth_gss/gss_krb5_crypto.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2006-08-22 06:33:54 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2006-09-20 21:46:15 -0400
commit378c6697a282c383d89428380a3405bf95189347 (patch)
tree3127c641dd07694199cd4e89c9cd5c155c4eb560 /net/sunrpc/auth_gss/gss_krb5_crypto.c
parent6b7326c8497f954c2cfcb4c49fe42be5b80887bc (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.c57
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
50u32 50u32
51krb5_encrypt( 51krb5_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
91u32 92u32
92krb5_decrypt( 93krb5_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
241struct encryptor_desc { 243struct 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
307int 309int
308gss_encrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *buf, int offset, 310gss_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
330struct decryptor_desc { 334struct 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
375int 379int
376gss_decrypt_xdr_buf(struct crypto_tfm *tfm, struct xdr_buf *buf, int offset) 380gss_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);