Added digest_len and raw_digest_len fields and replaced strlen() calls
This commit is contained in:
@@ -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;
|
||||
|
||||
+10
-5
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user