kc-52-testCFEqualAndHash.c [plain text]
#include <stdlib.h>
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
#include "testmore.h"
#include "testenv.h"
static void tests(void)
{
CFDictionaryRef query = CFDictionaryCreate(NULL, (const void **)&kSecClass, (const void **)&kSecClassCertificate, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
ok_status(NULL != query, "Dictionary Creation");
CFTypeRef result = NULL;
OSStatus err = SecItemCopyMatching(query, &result);
ok_status(noErr == err && NULL != result, "SecItemCopyMatching");
CFRelease(query);
SecCertificateRef cert = (SecCertificateRef)result;
CFDataRef cert_data = SecCertificateCopyData(cert);
ok_status(NULL != cert_data, "SecCertificateCopyData");
SecCertificateRef certs[5];
certs[0] = cert;
for (int iCnt = 1; iCnt < 5; iCnt++)
{
cert = NULL;
cert = SecCertificateCreateWithData(NULL, cert_data);
ok_status(NULL != cert_data, "SecCertificateCreateWithData"); certs[iCnt] = cert;
}
CFSetRef aSet = CFSetCreate(NULL, (const void **)certs, 4, &kCFTypeSetCallBacks);
ok_status(NULL != aSet, "CFSetCreate");
CFIndex count = CFSetGetCount(aSet);
ok_status(count == 1, "CFSetGetCount");
for (int iCnt = 0; iCnt < 5; iCnt++)
{
cert = certs[iCnt];
if (NULL != cert)
{
CFRelease(cert);
certs[iCnt] = NULL;
}
}
}
int main(int argc, char *const *argv)
{
plan_tests(9);
if (!tests_begin(argc, argv))
BAIL_OUT("tests_begin failed");
tests();
return 0;
}