}
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;
md5_base64(md,
(unsigned char*)data, data_len);
+ *digest_len = MD5_B64_LENGTH;
break;
case FKO_DIGEST_SHA1:
sha1_base64(md,
(unsigned char*)data, data_len);
+ *digest_len = SHA1_B64_LENGTH;
break;
case FKO_DIGEST_SHA256:
sha256_base64(md,
(unsigned char*)data, data_len);
+ *digest_len = SHA256_B64_LENGTH;
break;
case FKO_DIGEST_SHA384:
sha384_base64(md,
(unsigned char*)data, data_len);
+ *digest_len = SHA384_B64_LENGTH;
break;
case FKO_DIGEST_SHA512:
sha512_base64(md,
(unsigned char*)data, data_len);
+ *digest_len = SHA512_B64_LENGTH;
break;
default:
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
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
* 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);
/* 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);