Audit libcrypto for unchecked return values: fix all cases enountered

This commit is contained in:
Dr. Stephen Henson
2009-09-23 23:43:49 +00:00
parent cd4f7cddc7
commit b6dcdbfc94
39 changed files with 496 additions and 245 deletions

View File

@@ -89,7 +89,15 @@ unsigned char * PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass,
goto err;
}
EVP_CipherUpdate(&ctx, out, &i, in, inlen);
if (!EVP_CipherUpdate(&ctx, out, &i, in, inlen))
{
OPENSSL_free(out);
out = NULL;
PKCS12err(PKCS12_F_PKCS12_PBE_CRYPT,ERR_R_EVP_LIB);
goto err;
}
outlen += i;
outlen = i;
if(!EVP_CipherFinal_ex(&ctx, out + i, &i)) {
OPENSSL_free(out);

View File

@@ -153,14 +153,16 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
for (i = 0; i < Slen; i++) *p++ = salt[i % saltlen];
for (i = 0; i < Plen; i++) *p++ = pass[i % passlen];
for (;;) {
EVP_DigestInit_ex(&ctx, md_type, NULL);
EVP_DigestUpdate(&ctx, D, v);
EVP_DigestUpdate(&ctx, I, Ilen);
EVP_DigestFinal_ex(&ctx, Ai, NULL);
if (!EVP_DigestInit_ex(&ctx, md_type, NULL)
|| !EVP_DigestUpdate(&ctx, D, v)
|| !EVP_DigestUpdate(&ctx, I, Ilen)
|| !EVP_DigestFinal_ex(&ctx, Ai, NULL))
goto err;
for (j = 1; j < iter; j++) {
EVP_DigestInit_ex(&ctx, md_type, NULL);
EVP_DigestUpdate(&ctx, Ai, u);
EVP_DigestFinal_ex(&ctx, Ai, NULL);
if (!EVP_DigestInit_ex(&ctx, md_type, NULL)
|| !EVP_DigestUpdate(&ctx, Ai, u)
|| !EVP_DigestFinal_ex(&ctx, Ai, NULL))
goto err;
}
memcpy (out, Ai, min (n, u));
if (u >= n) {
@@ -201,6 +203,9 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
} else BN_bn2bin (Ij, I + j);
}
}
err:
EVP_MD_CTX_cleanup(&ctx);
return 0;
}
#ifdef DEBUG_KEYGEN
void h__dump (unsigned char *p, int len)

View File

@@ -97,10 +97,14 @@ int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,
return 0;
}
HMAC_CTX_init(&hmac);
HMAC_Init_ex(&hmac, key, md_size, md_type, NULL);
HMAC_Update(&hmac, p12->authsafes->d.data->data,
p12->authsafes->d.data->length);
HMAC_Final(&hmac, mac, maclen);
if (!HMAC_Init_ex(&hmac, key, md_size, md_type, NULL)
|| !HMAC_Update(&hmac, p12->authsafes->d.data->data,
p12->authsafes->d.data->length)
|| !HMAC_Final(&hmac, mac, maclen))
{
HMAC_CTX_cleanup(&hmac);
return 0;
}
HMAC_CTX_cleanup(&hmac);
return 1;
}