#include <Security/SecIdentity.h>
#include <Security/SecIdentityPriv.h>
#include "SecBridge.h"
#include <Security/Certificate.h>
#include <Security/Identity.h>
#include <Security/KeyItem.h>
CFTypeID
SecIdentityGetTypeID(void)
{
BEGIN_SECAPI
return gTypes().Identity.typeID;
END_SECAPI1(_kCFRuntimeNotATypeID)
}
OSStatus
SecIdentityCopyCertificate(
SecIdentityRef identityRef,
SecCertificateRef *certificateRef)
{
BEGIN_SECAPI
SecPointer<Certificate> certificatePtr(Identity::required(identityRef)->certificate());
Required(certificateRef) = certificatePtr->handle();
END_SECAPI
}
OSStatus
SecIdentityCopyPrivateKey(
SecIdentityRef identityRef,
SecKeyRef *privateKeyRef)
{
BEGIN_SECAPI
SecPointer<KeyItem> keyItemPtr(Identity::required(identityRef)->privateKey());
Required(privateKeyRef) = keyItemPtr->handle();
END_SECAPI
}
OSStatus
SecIdentityCreateWithCertificate(CFTypeRef keychainOrArray, SecCertificateRef certificateRef,
SecIdentityRef *identityRef)
{
BEGIN_SECAPI
SecPointer<Certificate> certificatePtr(Certificate::required(certificateRef));
StorageManager::KeychainList keychains;
globals().storageManager.optionalSearchList(keychainOrArray, keychains);
SecPointer<Identity> identityPtr(new Identity(keychains, certificatePtr));
Required(identityRef) = identityPtr->handle();
END_SECAPI
}