#include "Utilities.h"
#include "SecDigestTransform.h"
#include "Digest.h"
-#include <Security/SecRandom.h>
+#include <Security/SecRandomP.h>
#include <Security/SecKey.h>
#include "SecMaskGenerationFunctionTransform.h"
{
if (NULL != m_processedData)
{
- CFRelease(m_processedData);
+ CFReleaseNull(m_processedData);
m_processedData = NULL;
}
if (NULL != m_accumulator)
{
- CFRelease(m_accumulator);
+ CFReleaseNull(m_accumulator);
m_accumulator = NULL;
}
}
{
CFStringRef result = SecCopyErrorMessageString(err, NULL);
CFErrorRef retValue = CreateSecTransformErrorRef(err, "CDSA error (%@).", result);
- CFRelease(result);
+ CFReleaseNull(result);
return retValue;
}
{
CFStringRef result = SecCopyErrorMessageString(err, NULL);
CFErrorRef retValue = CreateSecTransformErrorRef(err, "CDSA error (%@).", result);
- CFRelease(result);
+ CFReleaseNull(result);
return retValue;
}
if (isSymmetrical)
{
+ // Clang thinks we're leaking initVect.data.
+ // While it's difficult to analyze whether that ends up being true or not, this is not code we love enough to refactor
+#ifndef __clang_analyzer__
CSSM_DATA initVector;
if (hasIVData)
{
{
CFStringRef result = SecCopyErrorMessageString(crtn, NULL);
CFErrorRef retValue = CreateSecTransformErrorRef(kSecTransformErrorNotInitializedCorrectly, "CDSA error (%@).", result);
- CFRelease(result);
+ CFReleaseNull(result);
return retValue;
}
+#endif
}
else
{
{
CFStringRef result = SecCopyErrorMessageString(crtn, NULL);
CFErrorRef retValue = CreateSecTransformErrorRef(kSecTransformErrorNotInitializedCorrectly, "CDSA error (%@).", result);
- CFRelease(result);
+ CFReleaseNull(result);
return retValue;
}
}
{
CFStringRef result = SecCopyErrorMessageString(crtn, NULL);
CFErrorRef retValue = CreateSecTransformErrorRef(kSecTransformErrorNotInitializedCorrectly, "CDSA encrypt/decrypt init error (%@).", result);
- CFRelease(result);
+ CFReleaseNull(result);
return retValue;
}
// make a CFErrorRef for the error message
CFStringRef errorString = SecCopyErrorMessageString(retCode, NULL);
CFErrorRef errorRef = CreateGenericErrorRef(kCFErrorDomainOSStatus, retCode, "%@", errorString);
- CFRelease(errorString);
+ CFReleaseNull(errorString);
SendAttribute(kSecTransformOutputAttributeName, errorRef);
- CFRelease(errorRef);
+ CFReleaseNull(errorRef);
}
void xor_bytes(UInt8 *dst, const UInt8 *src1, const UInt8 *src2, CFIndex length);
if (status != errSecSuccess) {
CFStringRef errorString = SecCopyErrorMessageString(status, NULL);
error = CreateSecTransformErrorRef(kSecTransformErrorInvalidOperation, "CDSA error (%@).", errorString);
- CFRelease(errorString);
+ CFReleaseNull(errorString);
SetAttributeNoCallback(kSecTransformOutputAttributeName, error);
(void)transforms_assume_zero(EM);
return EM;
if (status != errSecSuccess) {
CFStringRef errorString = SecCopyErrorMessageString(status, NULL);
error = CreateSecTransformErrorRef(kSecTransformErrorInvalidOperation, "CDSA error (%@).", errorString);
- CFRelease(errorString);
+ CFReleaseNull(errorString);
goto out;
}
(void)transforms_assume(RSA_size.SizeInputBlock <= RSA_size.SizeOutputBlock);
seed = (CFDataRef)this->GetAttribute(CFSTR("FixedSeedForOAEPTesting"));
raw_seed = NULL;
if (seed) {
- raw_seed = (UInt8*)CFDataGetBytePtr(seed);
(void)transforms_assume(hLen == CFDataGetLength(seed));
CFRetain(seed);
} else {
- raw_seed = (UInt8*)malloc(hLen);
- if (!raw_seed) {
- error = GetNoMemoryErrorAndRetain();
- goto out;
- }
- SecRandomCopyBytes(kSecRandomDefault, hLen, raw_seed);
- seed = CFDataCreateWithBytesNoCopy(NULL, raw_seed, hLen, kCFAllocatorMalloc);
+ seed = SecRandomCopyData(kSecRandomDefault, hLen);
if (!seed) {
- free(raw_seed);
error = GetNoMemoryErrorAndRetain();
+ goto out;
}
}
+ raw_seed = (UInt8*)CFDataGetBytePtr(seed);
// (7) Let dbMask = MGF (seed, emLen − hLen).
mgf_dbMask = transforms_assume(SecCreateMaskGenerationFunctionTransform(hashAlgo, desired_message_length - hLen, &error));
{
CFStringRef realType = CFCopyTypeIDDescription(valueType);
CFErrorRef error = CreateSecTransformErrorRef(kSecTransformErrorNotInitializedCorrectly, "Value is not a CFDataRef -- this one is a %@", realType);
- CFRelease(realType);
+ CFReleaseNull(realType);
SetAttributeNoCallback(kSecTransformOutputAttributeName, error);
return;
}
if (NULL != m_processedData)
{
SendAttribute(kSecTransformOutputAttributeName, m_processedData);
- CFRelease(m_processedData);
+ CFReleaseNull(m_processedData);
m_processedData = NULL;
}
if (m_oaep_padding && m_forEncryption == false) {
CFTypeRef unpadded = remove_oaep_padding(m_accumulator);
SendAttribute(kSecTransformOutputAttributeName, unpadded);
- CFRelease(unpadded);
+ CFReleaseNull(unpadded);
}
SendAttribute(kSecTransformOutputAttributeName, NULL);
}