Lines Matching refs:buf
49 gss_krb5_add_padding(struct xdr_buf *buf, int offset, int blocksize) in gss_krb5_add_padding() argument
51 int padding = gss_krb5_padding(blocksize, buf->len - offset); in gss_krb5_add_padding()
55 if (buf->page_len || buf->tail[0].iov_len) in gss_krb5_add_padding()
56 iov = &buf->tail[0]; in gss_krb5_add_padding()
58 iov = &buf->head[0]; in gss_krb5_add_padding()
61 buf->len += padding; in gss_krb5_add_padding()
66 gss_krb5_remove_padding(struct xdr_buf *buf, int blocksize) in gss_krb5_remove_padding() argument
70 size_t len = buf->len; in gss_krb5_remove_padding()
72 if (len <= buf->head[0].iov_len) { in gss_krb5_remove_padding()
73 pad = *(u8 *)(buf->head[0].iov_base + len - 1); in gss_krb5_remove_padding()
74 if (pad > buf->head[0].iov_len) in gss_krb5_remove_padding()
76 buf->head[0].iov_len -= pad; in gss_krb5_remove_padding()
79 len -= buf->head[0].iov_len; in gss_krb5_remove_padding()
80 if (len <= buf->page_len) { in gss_krb5_remove_padding()
81 unsigned int last = (buf->page_base + len - 1) in gss_krb5_remove_padding()
83 unsigned int offset = (buf->page_base + len - 1) in gss_krb5_remove_padding()
85 ptr = kmap_atomic(buf->pages[last]); in gss_krb5_remove_padding()
90 len -= buf->page_len; in gss_krb5_remove_padding()
91 BUG_ON(len > buf->tail[0].iov_len); in gss_krb5_remove_padding()
92 pad = *(u8 *)(buf->tail[0].iov_base + len - 1); in gss_krb5_remove_padding()
109 if (buf->len > pad) in gss_krb5_remove_padding()
110 buf->len -= pad; in gss_krb5_remove_padding()
159 struct xdr_buf *buf, struct page **pages) in gss_wrap_kerberos_v1() argument
178 gss_krb5_add_padding(buf, offset, blocksize); in gss_wrap_kerberos_v1()
179 BUG_ON((buf->len - offset) % blocksize); in gss_wrap_kerberos_v1()
180 plainlen = conflen + buf->len - offset; in gss_wrap_kerberos_v1()
184 (buf->len - offset); in gss_wrap_kerberos_v1()
186 ptr = buf->head[0].iov_base + offset; in gss_wrap_kerberos_v1()
188 xdr_extend_head(buf, offset, headlen); in gss_wrap_kerberos_v1()
191 BUG_ON((buf->len - offset - headlen) % blocksize); in gss_wrap_kerberos_v1()
222 tmp_pages = buf->pages; in gss_wrap_kerberos_v1()
223 buf->pages = pages; in gss_wrap_kerberos_v1()
224 if (make_checksum(kctx, ptr, 8, buf, offset + headlen - conflen, in gss_wrap_kerberos_v1()
227 buf->pages = tmp_pages; in gss_wrap_kerberos_v1()
251 err = gss_encrypt_xdr_buf(cipher, buf, in gss_wrap_kerberos_v1()
257 if (gss_encrypt_xdr_buf(kctx->enc, buf, in gss_wrap_kerberos_v1()
266 gss_unwrap_kerberos_v1(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf) in gss_unwrap_kerberos_v1() argument
287 ptr = (u8 *)buf->head[0].iov_base + offset; in gss_unwrap_kerberos_v1()
289 buf->len - offset)) in gss_unwrap_kerberos_v1()
316 (unsigned char *)buf->head[0].iov_base; in gss_unwrap_kerberos_v1()
340 err = gss_decrypt_xdr_buf(cipher, buf, crypt_offset); in gss_unwrap_kerberos_v1()
345 if (gss_decrypt_xdr_buf(kctx->enc, buf, crypt_offset)) in gss_unwrap_kerberos_v1()
354 if (make_checksum(kctx, ptr, 8, buf, crypt_offset, in gss_unwrap_kerberos_v1()
377 orig_start = buf->head[0].iov_base + offset; in gss_unwrap_kerberos_v1()
378 data_len = (buf->head[0].iov_base + buf->head[0].iov_len) - data_start; in gss_unwrap_kerberos_v1()
380 buf->head[0].iov_len -= (data_start - orig_start); in gss_unwrap_kerberos_v1()
381 buf->len -= (data_start - orig_start); in gss_unwrap_kerberos_v1()
383 if (gss_krb5_remove_padding(buf, blocksize)) in gss_unwrap_kerberos_v1()
401 static void rotate_buf_a_little(struct xdr_buf *buf, unsigned int shift) in rotate_buf_a_little() argument
409 read_bytes_from_xdr_buf(buf, 0, head, shift); in rotate_buf_a_little()
410 for (i = 0; i + shift < buf->len; i += LOCAL_BUF_LEN) { in rotate_buf_a_little()
411 this_len = min(LOCAL_BUF_LEN, buf->len - (i + shift)); in rotate_buf_a_little()
412 read_bytes_from_xdr_buf(buf, i+shift, tmp, this_len); in rotate_buf_a_little()
413 write_bytes_to_xdr_buf(buf, i, tmp, this_len); in rotate_buf_a_little()
415 write_bytes_to_xdr_buf(buf, buf->len - shift, head, shift); in rotate_buf_a_little()
418 static void _rotate_left(struct xdr_buf *buf, unsigned int shift) in _rotate_left() argument
423 shift %= buf->len; in _rotate_left()
426 rotate_buf_a_little(buf, this_shift); in _rotate_left()
431 static void rotate_left(u32 base, struct xdr_buf *buf, unsigned int shift) in rotate_left() argument
435 xdr_buf_subsegment(buf, &subbuf, base, buf->len - base); in rotate_left()
441 struct xdr_buf *buf, struct page **pages) in gss_wrap_kerberos_v2() argument
457 if (xdr_extend_head(buf, offset, GSS_KRB5_TOK_HDR_LEN)) in gss_wrap_kerberos_v2()
461 ptr = plainhdr = buf->head[0].iov_base + offset; in gss_wrap_kerberos_v2()
486 err = (*kctx->gk5e->encrypt_v2)(kctx, offset, buf, pages); in gss_wrap_kerberos_v2()
495 gss_unwrap_kerberos_v2(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf) in gss_unwrap_kerberos_v2() argument
512 ptr = buf->head[0].iov_base + offset; in gss_unwrap_kerberos_v2()
539 rotate_left(offset + 16, buf, rrc); in gss_unwrap_kerberos_v2()
541 err = (*kctx->gk5e->decrypt_v2)(kctx, offset, buf, in gss_unwrap_kerberos_v2()
550 err = read_bytes_from_xdr_buf(buf, in gss_unwrap_kerberos_v2()
551 buf->len - GSS_KRB5_TOK_HDR_LEN - tailskip, in gss_unwrap_kerberos_v2()
577 movelen = min_t(unsigned int, buf->head[0].iov_len, buf->len); in gss_unwrap_kerberos_v2()
580 buf->head[0].iov_len); in gss_unwrap_kerberos_v2()
582 buf->head[0].iov_len -= GSS_KRB5_TOK_HDR_LEN + headskip; in gss_unwrap_kerberos_v2()
583 buf->len -= GSS_KRB5_TOK_HDR_LEN + headskip; in gss_unwrap_kerberos_v2()
586 xdr_buf_trim(buf, ec + GSS_KRB5_TOK_HDR_LEN + tailskip); in gss_unwrap_kerberos_v2()
592 struct xdr_buf *buf, struct page **pages) in gss_wrap_kerberos() argument
602 return gss_wrap_kerberos_v1(kctx, offset, buf, pages); in gss_wrap_kerberos()
605 return gss_wrap_kerberos_v2(kctx, offset, buf, pages); in gss_wrap_kerberos()
610 gss_unwrap_kerberos(struct gss_ctx *gctx, int offset, struct xdr_buf *buf) in gss_unwrap_kerberos() argument
620 return gss_unwrap_kerberos_v1(kctx, offset, buf); in gss_unwrap_kerberos()
623 return gss_unwrap_kerberos_v2(kctx, offset, buf); in gss_unwrap_kerberos()