#ifndef HEIMDAL_HEIMCRED_H
#define HEIMDAL_HEIMCRED_H 1
#include <CoreFoundation/CoreFoundation.h>
#include <dispatch/dispatch.h>
#define HEIMCRED_CONST(_t,_c) extern const _t _c
#include <heimcred-const.h>
#undef HEIMCRED_CONST
typedef struct HeimCred_s *HeimCredRef;
HeimCredRef
HeimCredCreate(CFDictionaryRef attributes, CFErrorRef *error);
CFUUIDRef
HeimCredGetUUID(HeimCredRef);
HeimCredRef
HeimCredCopyFromUUID(CFUUIDRef);
bool
HeimCredSetAttribute(HeimCredRef cred, CFTypeRef key, CFTypeRef value, CFErrorRef *error);
bool
HeimCredSetAttributes(HeimCredRef cred, CFDictionaryRef attributes, CFErrorRef *error);
CFDictionaryRef
HeimCredCopyAttributes(HeimCredRef cred, CFSetRef attributes, CFErrorRef *error);
CFTypeRef
HeimCredCopyAttribute(HeimCredRef cred, CFTypeRef attribute);
CFArrayRef
HeimCredCopyQuery(CFDictionaryRef query);
bool
HeimCredDeleteQuery(CFDictionaryRef query, CFErrorRef *error);
void
HeimCredDelete(HeimCredRef item);
void
HeimCredDeleteByUUID(CFUUIDRef uuid);
void
HeimCredRetainTransient(HeimCredRef cred);
void
HeimCredReleaseTransient(HeimCredRef cred);
bool
HeimCredMove(CFUUIDRef from, CFUUIDRef to);
CFUUIDRef
HeimCredCopyDefaultCredential(CFStringRef mech, CFErrorRef *error);
CFDictionaryRef
HeimCredCopyStatus(CFStringRef mech);
CFDictionaryRef
HeimCredDoAuth(HeimCredRef cred, CFDictionaryRef input);
void
HeimCredSetImpersonateBundle(CFStringRef bundle);
const char *
HeimCredGetImpersonateBundle(void);
typedef CFDictionaryRef (*HeimCredAuthCallback)(HeimCredRef, CFDictionaryRef);
typedef CFTypeRef (*HeimCredStatusCallback)(HeimCredRef);
void
_HeimCredRegisterMech(CFStringRef mech,
CFSetRef publicAttributes,
HeimCredStatusCallback statusCallback,
HeimCredAuthCallback authCallback);
void
_HeimCredRegisterKerberos(void);
void
_HeimCredRegisterNTLM(void);
CFMutableDictionaryRef
_HeimCredCreateBaseSchema(CFStringRef objectType);
#endif