From bdb6cc0eb12be6744081902a7ddd62da338de6ac Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 26 Jul 2012 15:00:32 -0400 Subject: [PATCH] Added digest_len and raw_digest_len fields and replaced strlen() calls --- lib/fko_context.h | 2 ++ lib/fko_digest.c | 15 ++++++++++----- lib/fko_encryption.c | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/fko_context.h b/lib/fko_context.h index 26466257..5d3e52a8 100644 --- a/lib/fko_context.h +++ b/lib/fko_context.h @@ -70,12 +70,14 @@ struct fko_context { /* Computed or predefined data */ char *version; char *digest; + int digest_len; /* Digest of raw encrypted/base64 data - this is used * for replay attack detection */ char *raw_digest; short raw_digest_type; + int raw_digest_len; /* Computed processed data (encodings, etc.) */ char *encoded_msg; diff --git a/lib/fko_digest.c b/lib/fko_digest.c index 6d6015cb..0654c39b 100644 --- a/lib/fko_digest.c +++ b/lib/fko_digest.c @@ -98,7 +98,7 @@ fko_get_raw_spa_digest_type(fko_ctx_t ctx, short *raw_digest_type) } static int -set_digest(char *data, char **digest, short digest_type) +set_digest(char *data, char **digest, short digest_type, int *digest_len) { char *md = NULL; int data_len; @@ -117,6 +117,7 @@ set_digest(char *data, char **digest, short digest_type) md5_base64(md, (unsigned char*)data, data_len); + *digest_len = MD5_B64_LENGTH; break; case FKO_DIGEST_SHA1: @@ -126,6 +127,7 @@ set_digest(char *data, char **digest, short digest_type) sha1_base64(md, (unsigned char*)data, data_len); + *digest_len = SHA1_B64_LENGTH; break; case FKO_DIGEST_SHA256: @@ -135,6 +137,7 @@ set_digest(char *data, char **digest, short digest_type) sha256_base64(md, (unsigned char*)data, data_len); + *digest_len = SHA256_B64_LENGTH; break; case FKO_DIGEST_SHA384: @@ -144,6 +147,7 @@ set_digest(char *data, char **digest, short digest_type) sha384_base64(md, (unsigned char*)data, data_len); + *digest_len = SHA384_B64_LENGTH; break; case FKO_DIGEST_SHA512: @@ -153,6 +157,7 @@ set_digest(char *data, char **digest, short digest_type) sha512_base64(md, (unsigned char*)data, data_len); + *digest_len = SHA512_B64_LENGTH; break; default: @@ -183,8 +188,8 @@ fko_set_spa_digest(fko_ctx_t ctx) if(ctx->encoded_msg == NULL) return(FKO_ERROR_MISSING_ENCODED_DATA); - return set_digest(ctx->encoded_msg, - &ctx->digest, ctx->digest_type); + return set_digest(ctx->encoded_msg, &ctx->digest, + ctx->digest_type, &ctx->digest_len); } int @@ -200,8 +205,8 @@ fko_set_raw_spa_digest(fko_ctx_t ctx) if(ctx->encrypted_msg == NULL) return(FKO_ERROR_MISSING_ENCODED_DATA); - return set_digest(ctx->encrypted_msg, - &ctx->raw_digest, ctx->raw_digest_type); + return set_digest(ctx->encrypted_msg, &ctx->raw_digest, + ctx->raw_digest_type, &ctx->raw_digest_len); } int diff --git a/lib/fko_encryption.c b/lib/fko_encryption.c index 8c34cf67..754822be 100644 --- a/lib/fko_encryption.c +++ b/lib/fko_encryption.c @@ -54,7 +54,7 @@ _rijndael_encrypt(fko_ctx_t ctx, const char *enc_key, const int enc_key_len) * and populate it appropriately. */ plaintext = calloc(1, ctx->encoded_msg_len - + strlen(ctx->digest) + RIJNDAEL_BLOCKSIZE + 2); + + ctx->digest_len + RIJNDAEL_BLOCKSIZE + 2); if(plaintext == NULL) return(FKO_ERROR_MEMORY_ALLOCATION); @@ -219,7 +219,7 @@ gpg_encrypt(fko_ctx_t ctx, const char *enc_key) /* Make a bucket big enough to hold the enc msg + digest (plaintext) * and populate it appropriately. */ - plain = malloc(ctx->encoded_msg_len + strlen(ctx->digest) + 2); + plain = malloc(ctx->encoded_msg_len + ctx->digest_len + 2); if(plain == NULL) return(FKO_ERROR_MEMORY_ALLOCATION);