Commit 9eed129b authored by J. Bruce Fields's avatar J. Bruce Fields Committed by Trond Myklebust

SUNRPC: Update the spkm3 code to use the make_checksum interface

 Also update the tokenlen calculations to accomodate g_token_size().
Signed-off-by: default avatarAndy Adamson <andros@citi.umich.edu>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 26c78e15
...@@ -48,7 +48,7 @@ u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struc ...@@ -48,7 +48,7 @@ u32 spkm3_read_token(struct spkm3_ctx *ctx, struct xdr_netobj *read_token, struc
#define CKSUMTYPE_RSA_MD5 0x0007 #define CKSUMTYPE_RSA_MD5 0x0007
s32 make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body, s32 make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
struct xdr_netobj *cksum); int body_offset, struct xdr_netobj *cksum);
void asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits); void asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits);
int decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen, int decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen,
int explen); int explen);
......
...@@ -59,7 +59,7 @@ spkm3_make_token(struct spkm3_ctx *ctx, ...@@ -59,7 +59,7 @@ spkm3_make_token(struct spkm3_ctx *ctx,
char tokhdrbuf[25]; char tokhdrbuf[25];
struct xdr_netobj md5cksum = {.len = 0, .data = NULL}; struct xdr_netobj md5cksum = {.len = 0, .data = NULL};
struct xdr_netobj mic_hdr = {.len = 0, .data = tokhdrbuf}; struct xdr_netobj mic_hdr = {.len = 0, .data = tokhdrbuf};
int tmsglen, tokenlen = 0; int tokenlen = 0;
unsigned char *ptr; unsigned char *ptr;
s32 now; s32 now;
int ctxelen = 0, ctxzbit = 0; int ctxelen = 0, ctxzbit = 0;
...@@ -92,24 +92,23 @@ spkm3_make_token(struct spkm3_ctx *ctx, ...@@ -92,24 +92,23 @@ spkm3_make_token(struct spkm3_ctx *ctx,
} }
if (toktype == SPKM_MIC_TOK) { if (toktype == SPKM_MIC_TOK) {
tmsglen = 0;
/* Calculate checksum over the mic-header */ /* Calculate checksum over the mic-header */
asn1_bitstring_len(&ctx->ctx_id, &ctxelen, &ctxzbit); asn1_bitstring_len(&ctx->ctx_id, &ctxelen, &ctxzbit);
spkm3_mic_header(&mic_hdr.data, &mic_hdr.len, ctx->ctx_id.data, spkm3_mic_header(&mic_hdr.data, &mic_hdr.len, ctx->ctx_id.data,
ctxelen, ctxzbit); ctxelen, ctxzbit);
if (make_checksum(checksum_type, mic_hdr.data, mic_hdr.len, if (make_checksum(checksum_type, mic_hdr.data, mic_hdr.len,
text, &md5cksum)) text, 0, &md5cksum))
goto out_err; goto out_err;
asn1_bitstring_len(&md5cksum, &md5elen, &md5zbit); asn1_bitstring_len(&md5cksum, &md5elen, &md5zbit);
tokenlen = 10 + ctxelen + 1 + 2 + md5elen + 1; tokenlen = 10 + ctxelen + 1 + md5elen + 1;
/* Create token header using generic routines */ /* Create token header using generic routines */
token->len = g_token_size(&ctx->mech_used, tokenlen + tmsglen); token->len = g_token_size(&ctx->mech_used, tokenlen);
ptr = token->data; ptr = token->data;
g_make_token_header(&ctx->mech_used, tokenlen + tmsglen, &ptr); g_make_token_header(&ctx->mech_used, tokenlen, &ptr);
spkm3_make_mic_token(&ptr, tokenlen, &mic_hdr, &md5cksum, md5elen, md5zbit); spkm3_make_mic_token(&ptr, tokenlen, &mic_hdr, &md5cksum, md5elen, md5zbit);
} else if (toktype == SPKM_WRAP_TOK) { /* Not Supported */ } else if (toktype == SPKM_WRAP_TOK) { /* Not Supported */
......
...@@ -182,6 +182,7 @@ spkm3_mic_header(unsigned char **hdrbuf, unsigned int *hdrlen, unsigned char *ct ...@@ -182,6 +182,7 @@ spkm3_mic_header(unsigned char **hdrbuf, unsigned int *hdrlen, unsigned char *ct
* *tokp points to the beginning of the SPKM_MIC token described * *tokp points to the beginning of the SPKM_MIC token described
* in rfc 2025, section 3.2.1: * in rfc 2025, section 3.2.1:
* *
* toklen is the inner token length
*/ */
void void
spkm3_make_mic_token(unsigned char **tokp, int toklen, struct xdr_netobj *mic_hdr, struct xdr_netobj *md5cksum, int md5elen, int md5zbit) spkm3_make_mic_token(unsigned char **tokp, int toklen, struct xdr_netobj *mic_hdr, struct xdr_netobj *md5cksum, int md5elen, int md5zbit)
...@@ -189,7 +190,7 @@ spkm3_make_mic_token(unsigned char **tokp, int toklen, struct xdr_netobj *mic_hd ...@@ -189,7 +190,7 @@ spkm3_make_mic_token(unsigned char **tokp, int toklen, struct xdr_netobj *mic_hd
unsigned char *ict = *tokp; unsigned char *ict = *tokp;
*(u8 *)ict++ = 0xa4; *(u8 *)ict++ = 0xa4;
*(u8 *)ict++ = toklen - 2; *(u8 *)ict++ = toklen;
memcpy(ict, mic_hdr->data, mic_hdr->len); memcpy(ict, mic_hdr->data, mic_hdr->len);
ict += mic_hdr->len; ict += mic_hdr->len;
......
...@@ -95,7 +95,7 @@ spkm3_read_token(struct spkm3_ctx *ctx, ...@@ -95,7 +95,7 @@ spkm3_read_token(struct spkm3_ctx *ctx,
ret = GSS_S_DEFECTIVE_TOKEN; ret = GSS_S_DEFECTIVE_TOKEN;
code = make_checksum(CKSUMTYPE_RSA_MD5, ptr + 2, code = make_checksum(CKSUMTYPE_RSA_MD5, ptr + 2,
mic_hdrlen + 2, mic_hdrlen + 2,
message_buffer, &md5cksum); message_buffer, 0, &md5cksum);
if (code) if (code)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment