You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
983 lines
31 KiB
983 lines
31 KiB
/* |
|
File: KeychainCore.h |
|
|
|
Contains: Keychain low-level Interfaces |
|
|
|
Version: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 2000-2001 by Apple Computer, Inc., all rights reserved |
|
|
|
Bugs?: For bug reports, consult the following page on |
|
the World Wide Web: |
|
|
|
http://developer.apple.com/bugreporter/ |
|
|
|
*/ |
|
#ifndef __KEYCHAINCORE__ |
|
#define __KEYCHAINCORE__ |
|
|
|
#ifndef __MACTYPES__ |
|
#include <MacTypes.h> |
|
#endif |
|
|
|
#ifndef __FILES__ |
|
#include <Files.h> |
|
#endif |
|
|
|
#ifndef __ALIASES__ |
|
#include <Aliases.h> |
|
#endif |
|
|
|
#ifndef __CODEFRAGMENTS__ |
|
#include <CodeFragments.h> |
|
#endif |
|
|
|
#ifndef __MACERRORS__ |
|
#include <MacErrors.h> |
|
#endif |
|
|
|
|
|
|
|
|
|
#if PRAGMA_ONCE |
|
#pragma once |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#if PRAGMA_IMPORT |
|
#pragma import on |
|
#endif |
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
/* Data structures and types */ |
|
#ifndef __SEC_TYPES__ |
|
#define __SEC_TYPES__ |
|
typedef struct OpaqueSecKeychainRef* SecKeychainRef; |
|
typedef struct OpaqueSecKeychainItemRef* SecKeychainItemRef; |
|
typedef struct OpaqueSecKeychainSearchRef* SecKeychainSearchRef; |
|
typedef OSType SecKeychainAttrType; |
|
typedef UInt32 SecKeychainStatus; |
|
struct SecKeychainAttribute { |
|
SecKeychainAttrType tag; /* 4-byte attribute tag */ |
|
UInt32 length; /* Length of attribute data */ |
|
void * data; /* Pointer to attribute data */ |
|
}; |
|
typedef struct SecKeychainAttribute SecKeychainAttribute; |
|
typedef SecKeychainAttribute * SecKeychainAttributePtr; |
|
struct SecKeychainAttributeList { |
|
UInt32 count; /* How many attributes in the array */ |
|
SecKeychainAttribute * attr; /* Pointer to first attribute in array */ |
|
}; |
|
typedef struct SecKeychainAttributeList SecKeychainAttributeList; |
|
#endif |
|
|
|
typedef SecKeychainRef KCRef; |
|
typedef SecKeychainItemRef KCItemRef; |
|
typedef SecKeychainSearchRef KCSearchRef; |
|
typedef SecKeychainAttribute KCAttribute; |
|
typedef SecKeychainAttributeList KCAttributeList; |
|
typedef SecKeychainAttrType KCAttrType; |
|
typedef SecKeychainStatus KCStatus; |
|
typedef UInt16 KCEvent; |
|
enum { |
|
kIdleKCEvent = 0, /* null event */ |
|
kLockKCEvent = 1, /* a keychain was locked */ |
|
kUnlockKCEvent = 2, /* a keychain was unlocked */ |
|
kAddKCEvent = 3, /* an item was added to a keychain */ |
|
kDeleteKCEvent = 4, /* an item was deleted from a keychain */ |
|
kUpdateKCEvent = 5, /* an item was updated */ |
|
kPasswordChangedKCEvent = 6, /* the keychain identity was changed */ |
|
kSystemKCEvent = 8, /* the keychain client can process events */ |
|
kDefaultChangedKCEvent = 9, /* the default keychain was changed */ |
|
kDataAccessKCEvent = 10, /* a process has accessed a keychain item's data */ |
|
kKeychainListChangedKCEvent = 11 /* the list of keychains has changed */ |
|
}; |
|
|
|
typedef UInt16 KCEventMask; |
|
enum { |
|
kIdleKCEventMask = 1 << kIdleKCEvent, |
|
kLockKCEventMask = 1 << kLockKCEvent, |
|
kUnlockKCEventMask = 1 << kUnlockKCEvent, |
|
kAddKCEventMask = 1 << kAddKCEvent, |
|
kDeleteKCEventMask = 1 << kDeleteKCEvent, |
|
kUpdateKCEventMask = 1 << kUpdateKCEvent, |
|
kPasswordChangedKCEventMask = 1 << kPasswordChangedKCEvent, |
|
kSystemEventKCEventMask = 1 << kSystemKCEvent, |
|
kDefaultChangedKCEventMask = 1 << kDefaultChangedKCEvent, |
|
kDataAccessKCEventMask = 1 << kDataAccessKCEvent, |
|
kEveryKCEventMask = 0xFFFF /* all of the above*/ |
|
}; |
|
|
|
typedef UInt8 AFPServerSignature[16]; |
|
typedef UInt8 KCPublicKeyHash[20]; |
|
struct KCCallbackInfo { |
|
UInt32 version; |
|
KCItemRef item; |
|
long processID[2]; /* unavailable on Mac OS X*/ |
|
long event[4]; /* unavailable on Mac OS X*/ |
|
KCRef keychain; |
|
}; |
|
typedef struct KCCallbackInfo KCCallbackInfo; |
|
enum { |
|
kUnlockStateKCStatus = 1, |
|
kRdPermKCStatus = 2, |
|
kWrPermKCStatus = 4 |
|
}; |
|
|
|
|
|
enum { |
|
kCertificateKCItemClass = FOUR_CHAR_CODE('cert'), /* Certificate */ |
|
kAppleSharePasswordKCItemClass = FOUR_CHAR_CODE('ashp'), /* Appleshare password */ |
|
kInternetPasswordKCItemClass = FOUR_CHAR_CODE('inet'), /* Internet password */ |
|
kGenericPasswordKCItemClass = FOUR_CHAR_CODE('genp') /* Generic password */ |
|
}; |
|
|
|
|
|
typedef FourCharCode KCItemClass; |
|
enum { |
|
/* Common attributes */ |
|
kClassKCItemAttr = FOUR_CHAR_CODE('clas'), /* Item class (KCItemClass) */ |
|
kCreationDateKCItemAttr = FOUR_CHAR_CODE('cdat'), /* Date the item was created (UInt32) */ |
|
kModDateKCItemAttr = FOUR_CHAR_CODE('mdat'), /* Last time the item was updated (UInt32) */ |
|
kDescriptionKCItemAttr = FOUR_CHAR_CODE('desc'), /* User-visible description string (string) */ |
|
kCommentKCItemAttr = FOUR_CHAR_CODE('icmt'), /* User's comment about the item (string) */ |
|
kCreatorKCItemAttr = FOUR_CHAR_CODE('crtr'), /* Item's creator (OSType) */ |
|
kTypeKCItemAttr = FOUR_CHAR_CODE('type'), /* Item's type (OSType) */ |
|
kScriptCodeKCItemAttr = FOUR_CHAR_CODE('scrp'), /* Script code for all strings (ScriptCode) */ |
|
kLabelKCItemAttr = FOUR_CHAR_CODE('labl'), /* Item label (string) */ |
|
kInvisibleKCItemAttr = FOUR_CHAR_CODE('invi'), /* Invisible (boolean) */ |
|
kNegativeKCItemAttr = FOUR_CHAR_CODE('nega'), /* Negative (boolean) */ |
|
kCustomIconKCItemAttr = FOUR_CHAR_CODE('cusi'), /* Custom icon (boolean) */ |
|
kAccountKCItemAttr = FOUR_CHAR_CODE('acct'), /* User account (string) */ |
|
/* Unique Generic password attributes */ |
|
kServiceKCItemAttr = FOUR_CHAR_CODE('svce'), /* Service (string) */ |
|
kGenericKCItemAttr = FOUR_CHAR_CODE('gena'), /* User-defined attribute (untyped bytes) */ |
|
/* Unique Internet password attributes */ |
|
kSecurityDomainKCItemAttr = FOUR_CHAR_CODE('sdmn'), /* Security domain (string) */ |
|
kServerKCItemAttr = FOUR_CHAR_CODE('srvr'), /* Server's domain name or IP address (string) */ |
|
kAuthTypeKCItemAttr = FOUR_CHAR_CODE('atyp'), /* Authentication Type (KCAuthType) */ |
|
kPortKCItemAttr = FOUR_CHAR_CODE('port'), /* Port (UInt16) */ |
|
kPathKCItemAttr = FOUR_CHAR_CODE('path'), /* Path (string) */ |
|
/* Unique Appleshare password attributes */ |
|
kVolumeKCItemAttr = FOUR_CHAR_CODE('vlme'), /* Volume (string) */ |
|
kAddressKCItemAttr = FOUR_CHAR_CODE('addr'), /* Server address (IP or domain name) or zone name (string) */ |
|
kSignatureKCItemAttr = FOUR_CHAR_CODE('ssig'), /* Server signature block (AFPServerSignature) */ |
|
/* Unique AppleShare and Internet attributes */ |
|
kProtocolKCItemAttr = FOUR_CHAR_CODE('ptcl'), /* Protocol (KCProtocolType) */ |
|
/* Certificate attributes */ |
|
kSubjectKCItemAttr = FOUR_CHAR_CODE('subj'), /* Subject distinguished name (DER-encoded data) */ |
|
kCommonNameKCItemAttr = FOUR_CHAR_CODE('cn '), /* Common Name (UTF8-encoded string) */ |
|
kIssuerKCItemAttr = FOUR_CHAR_CODE('issu'), /* Issuer distinguished name (DER-encoded data) */ |
|
kSerialNumberKCItemAttr = FOUR_CHAR_CODE('snbr'), /* Certificate serial number (DER-encoded data) */ |
|
kEMailKCItemAttr = FOUR_CHAR_CODE('mail'), /* E-mail address (ASCII-encoded string) */ |
|
kPublicKeyHashKCItemAttr = FOUR_CHAR_CODE('hpky'), /* Hash of public key (KCPublicKeyHash), 20 bytes max. */ |
|
kIssuerURLKCItemAttr = FOUR_CHAR_CODE('iurl'), /* URL of the certificate issuer (ASCII-encoded string) */ |
|
/* Shared by keys and certificates */ |
|
kEncryptKCItemAttr = FOUR_CHAR_CODE('encr'), /* Encrypt (Boolean) */ |
|
kDecryptKCItemAttr = FOUR_CHAR_CODE('decr'), /* Decrypt (Boolean) */ |
|
kSignKCItemAttr = FOUR_CHAR_CODE('sign'), /* Sign (Boolean) */ |
|
kVerifyKCItemAttr = FOUR_CHAR_CODE('veri'), /* Verify (Boolean) */ |
|
kWrapKCItemAttr = FOUR_CHAR_CODE('wrap'), /* Wrap (Boolean) */ |
|
kUnwrapKCItemAttr = FOUR_CHAR_CODE('unwr'), /* Unwrap (Boolean) */ |
|
kStartDateKCItemAttr = FOUR_CHAR_CODE('sdat'), /* Start Date (UInt32) */ |
|
kEndDateKCItemAttr = FOUR_CHAR_CODE('edat') /* End Date (UInt32) */ |
|
}; |
|
|
|
typedef FourCharCode KCItemAttr; |
|
enum { |
|
kKCAuthTypeNTLM = FOUR_CHAR_CODE('ntlm'), |
|
kKCAuthTypeMSN = FOUR_CHAR_CODE('msna'), |
|
kKCAuthTypeDPA = FOUR_CHAR_CODE('dpaa'), |
|
kKCAuthTypeRPA = FOUR_CHAR_CODE('rpaa'), |
|
kKCAuthTypeHTTPDigest = FOUR_CHAR_CODE('httd'), |
|
kKCAuthTypeDefault = FOUR_CHAR_CODE('dflt') |
|
}; |
|
|
|
typedef FourCharCode KCAuthType; |
|
enum { |
|
kKCProtocolTypeFTP = FOUR_CHAR_CODE('ftp '), |
|
kKCProtocolTypeFTPAccount = FOUR_CHAR_CODE('ftpa'), |
|
kKCProtocolTypeHTTP = FOUR_CHAR_CODE('http'), |
|
kKCProtocolTypeIRC = FOUR_CHAR_CODE('irc '), |
|
kKCProtocolTypeNNTP = FOUR_CHAR_CODE('nntp'), |
|
kKCProtocolTypePOP3 = FOUR_CHAR_CODE('pop3'), |
|
kKCProtocolTypeSMTP = FOUR_CHAR_CODE('smtp'), |
|
kKCProtocolTypeSOCKS = FOUR_CHAR_CODE('sox '), |
|
kKCProtocolTypeIMAP = FOUR_CHAR_CODE('imap'), |
|
kKCProtocolTypeLDAP = FOUR_CHAR_CODE('ldap'), |
|
kKCProtocolTypeAppleTalk = FOUR_CHAR_CODE('atlk'), |
|
kKCProtocolTypeAFP = FOUR_CHAR_CODE('afp '), |
|
kKCProtocolTypeTelnet = FOUR_CHAR_CODE('teln') |
|
}; |
|
|
|
typedef FourCharCode KCProtocolType; |
|
typedef UInt32 KCCertAddOptions; |
|
enum { |
|
kSecOptionReserved = 0x000000FF, /* First byte reserved for SecOptions flags */ |
|
kCertUsageShift = 8, /* start at bit 8 */ |
|
kCertUsageSigningAdd = 1 << (kCertUsageShift + 0), |
|
kCertUsageSigningAskAndAdd = 1 << (kCertUsageShift + 1), |
|
kCertUsageVerifyAdd = 1 << (kCertUsageShift + 2), |
|
kCertUsageVerifyAskAndAdd = 1 << (kCertUsageShift + 3), |
|
kCertUsageEncryptAdd = 1 << (kCertUsageShift + 4), |
|
kCertUsageEncryptAskAndAdd = 1 << (kCertUsageShift + 5), |
|
kCertUsageDecryptAdd = 1 << (kCertUsageShift + 6), |
|
kCertUsageDecryptAskAndAdd = 1 << (kCertUsageShift + 7), |
|
kCertUsageKeyExchAdd = 1 << (kCertUsageShift + 8), |
|
kCertUsageKeyExchAskAndAdd = 1 << (kCertUsageShift + 9), |
|
kCertUsageRootAdd = 1 << (kCertUsageShift + 10), |
|
kCertUsageRootAskAndAdd = 1 << (kCertUsageShift + 11), |
|
kCertUsageSSLAdd = 1 << (kCertUsageShift + 12), |
|
kCertUsageSSLAskAndAdd = 1 << (kCertUsageShift + 13), |
|
kCertUsageAllAdd = 0x7FFFFF00 |
|
}; |
|
|
|
typedef UInt16 KCVerifyStopOn; |
|
enum { |
|
kPolicyKCStopOn = 0, |
|
kNoneKCStopOn = 1, |
|
kFirstPassKCStopOn = 2, |
|
kFirstFailKCStopOn = 3 |
|
}; |
|
|
|
typedef UInt32 KCCertSearchOptions; |
|
enum { |
|
kCertSearchShift = 0, /* start at bit 0 */ |
|
kCertSearchSigningIgnored = 0, |
|
kCertSearchSigningAllowed = 1 << (kCertSearchShift + 0), |
|
kCertSearchSigningDisallowed = 1 << (kCertSearchShift + 1), |
|
kCertSearchSigningMask = ((kCertSearchSigningAllowed) | (kCertSearchSigningDisallowed)), |
|
kCertSearchVerifyIgnored = 0, |
|
kCertSearchVerifyAllowed = 1 << (kCertSearchShift + 2), |
|
kCertSearchVerifyDisallowed = 1 << (kCertSearchShift + 3), |
|
kCertSearchVerifyMask = ((kCertSearchVerifyAllowed) | (kCertSearchVerifyDisallowed)), |
|
kCertSearchEncryptIgnored = 0, |
|
kCertSearchEncryptAllowed = 1 << (kCertSearchShift + 4), |
|
kCertSearchEncryptDisallowed = 1 << (kCertSearchShift + 5), |
|
kCertSearchEncryptMask = ((kCertSearchEncryptAllowed) | (kCertSearchEncryptDisallowed)), |
|
kCertSearchDecryptIgnored = 0, |
|
kCertSearchDecryptAllowed = 1 << (kCertSearchShift + 6), |
|
kCertSearchDecryptDisallowed = 1 << (kCertSearchShift + 7), |
|
kCertSearchDecryptMask = ((kCertSearchDecryptAllowed) | (kCertSearchDecryptDisallowed)), |
|
kCertSearchWrapIgnored = 0, |
|
kCertSearchWrapAllowed = 1 << (kCertSearchShift + 8), |
|
kCertSearchWrapDisallowed = 1 << (kCertSearchShift + 9), |
|
kCertSearchWrapMask = ((kCertSearchWrapAllowed) | (kCertSearchWrapDisallowed)), |
|
kCertSearchUnwrapIgnored = 0, |
|
kCertSearchUnwrapAllowed = 1 << (kCertSearchShift + 10), |
|
kCertSearchUnwrapDisallowed = 1 << (kCertSearchShift + 11), |
|
kCertSearchUnwrapMask = ((kCertSearchUnwrapAllowed) | (kCertSearchUnwrapDisallowed)), |
|
kCertSearchPrivKeyRequired = 1 << (kCertSearchShift + 12), |
|
kCertSearchAny = 0 |
|
}; |
|
|
|
/* Other constants */ |
|
enum { |
|
kAnyPort = 0 |
|
}; |
|
|
|
enum { |
|
kAnyProtocol = 0, |
|
kAnyAuthType = 0 |
|
}; |
|
|
|
/* Opening and getting information about the Keychain Manager */ |
|
/* |
|
* KCGetKeychainManagerVersion() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetKeychainManagerVersion(UInt32 * returnVers); |
|
|
|
|
|
#if TARGET_RT_MAC_CFM |
|
#ifdef __cplusplus |
|
inline pascal Boolean KeychainManagerAvailable() { return ((KCGetKeychainManagerVersion != (void*)kUnresolvedCFragSymbolAddress) && (KCGetKeychainManagerVersion(nil) != cfragNoSymbolErr)); } |
|
#else |
|
#define KeychainManagerAvailable() ((KCGetKeychainManagerVersion != (void*)kUnresolvedCFragSymbolAddress) && (KCGetKeychainManagerVersion(nil) != cfragNoSymbolErr)) |
|
#endif |
|
#elif TARGET_RT_MAC_MACHO |
|
/* Keychain is always available on OS X */ |
|
#ifdef __cplusplus |
|
inline pascal Boolean KeychainManagerAvailable() { return true; } |
|
#else |
|
#define KeychainManagerAvailable() (true) |
|
#endif |
|
#endif /* */ |
|
|
|
/* Managing the Human Interface */ |
|
/* |
|
* KCSetInteractionAllowed() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCSetInteractionAllowed(Boolean state); |
|
|
|
|
|
/* |
|
* KCIsInteractionAllowed() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( Boolean ) |
|
KCIsInteractionAllowed(void); |
|
|
|
|
|
/* Creating references to keychains */ |
|
/* |
|
* KCMakeKCRefFromFSSpec() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCMakeKCRefFromFSSpec( |
|
FSSpec * keychainFSSpec, |
|
KCRef * keychain); |
|
|
|
|
|
/* |
|
* KCMakeKCRefFromAlias() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCMakeKCRefFromAlias( |
|
AliasHandle keychainAlias, |
|
KCRef * keychain); |
|
|
|
|
|
/* |
|
* KCMakeAliasFromKCRef() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCMakeAliasFromKCRef( |
|
KCRef keychain, |
|
AliasHandle * keychainAlias); |
|
|
|
|
|
/* |
|
* KCReleaseKeychain() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCReleaseKeychain(KCRef * keychain); |
|
|
|
|
|
/* Specifying the default keychain */ |
|
/* |
|
* KCGetDefaultKeychain() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetDefaultKeychain(KCRef * keychain); |
|
|
|
|
|
/* |
|
* KCSetDefaultKeychain() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCSetDefaultKeychain(KCRef keychain); |
|
|
|
|
|
/* Getting information about a keychain */ |
|
/* |
|
* KCGetStatus() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetStatus( |
|
KCRef keychain, /* can be NULL */ |
|
UInt32 * keychainStatus); |
|
|
|
|
|
/* |
|
* KCGetKeychain() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetKeychain( |
|
KCItemRef item, |
|
KCRef * keychain); |
|
|
|
|
|
/* |
|
* KCGetKeychainName() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetKeychainName( |
|
KCRef keychain, |
|
StringPtr keychainName); |
|
|
|
|
|
/* Enumerating available keychains */ |
|
/* |
|
* KCCountKeychains() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( UInt16 ) |
|
KCCountKeychains(void); |
|
|
|
|
|
/* |
|
* KCGetIndKeychain() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetIndKeychain( |
|
UInt16 index, |
|
KCRef * keychain); |
|
|
|
|
|
typedef CALLBACK_API( OSStatus , KCCallbackProcPtr )(KCEvent keychainEvent, KCCallbackInfo *info, void *userContext); |
|
typedef STACK_UPP_TYPE(KCCallbackProcPtr) KCCallbackUPP; |
|
/* |
|
* NewKCCallbackUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( KCCallbackUPP ) |
|
NewKCCallbackUPP(KCCallbackProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppKCCallbackProcInfo = 0x00000FB0 }; /* pascal 4_bytes Func(2_bytes, 4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(KCCallbackUPP) NewKCCallbackUPP(KCCallbackProcPtr userRoutine) { return (KCCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppKCCallbackProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewKCCallbackUPP(userRoutine) (KCCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppKCCallbackProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeKCCallbackUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeKCCallbackUPP(KCCallbackUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeKCCallbackUPP(KCCallbackUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeKCCallbackUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeKCCallbackUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
InvokeKCCallbackUPP( |
|
KCEvent keychainEvent, |
|
KCCallbackInfo * info, |
|
void * userContext, |
|
KCCallbackUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(OSStatus) InvokeKCCallbackUPP(KCEvent keychainEvent, KCCallbackInfo * info, void * userContext, KCCallbackUPP userUPP) { return (OSStatus)CALL_THREE_PARAMETER_UPP(userUPP, uppKCCallbackProcInfo, keychainEvent, info, userContext); } |
|
#else |
|
#define InvokeKCCallbackUPP(keychainEvent, info, userContext, userUPP) (OSStatus)CALL_THREE_PARAMETER_UPP((userUPP), uppKCCallbackProcInfo, (keychainEvent), (info), (userContext)) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES |
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ |
|
#define NewKCCallbackProc(userRoutine) NewKCCallbackUPP(userRoutine) |
|
#define CallKCCallbackProc(userRoutine, keychainEvent, info, userContext) InvokeKCCallbackUPP(keychainEvent, info, userContext, userRoutine) |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* High-level interface for retrieving passwords */ |
|
/* |
|
* KCFindAppleSharePassword() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCFindAppleSharePassword( |
|
AFPServerSignature * serverSignature, /* can be NULL */ |
|
StringPtr serverAddress, /* can be NULL */ |
|
StringPtr serverName, /* can be NULL */ |
|
StringPtr volumeName, /* can be NULL */ |
|
StringPtr accountName, /* can be NULL */ |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* |
|
* KCFindInternetPassword() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCFindInternetPassword( |
|
StringPtr serverName, /* can be NULL */ |
|
StringPtr securityDomain, /* can be NULL */ |
|
StringPtr accountName, /* can be NULL */ |
|
UInt16 port, |
|
OSType protocol, |
|
OSType authType, |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* |
|
* KCFindInternetPasswordWithPath() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCFindInternetPasswordWithPath( |
|
StringPtr serverName, /* can be NULL */ |
|
StringPtr securityDomain, /* can be NULL */ |
|
StringPtr accountName, /* can be NULL */ |
|
StringPtr path, /* can be NULL */ |
|
UInt16 port, |
|
OSType protocol, |
|
OSType authType, |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* |
|
* KCFindGenericPassword() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCFindGenericPassword( |
|
StringPtr serviceName, /* can be NULL */ |
|
StringPtr accountName, /* can be NULL */ |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* Keychain Manager callbacks */ |
|
/* |
|
* KCAddCallback() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCAddCallback( |
|
KCCallbackUPP callbackProc, |
|
KCEventMask eventMask, |
|
void * userContext); |
|
|
|
|
|
/* |
|
* KCRemoveCallback() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCRemoveCallback(KCCallbackUPP callbackProc); |
|
|
|
|
|
/* Creating and editing a keychain item */ |
|
/* |
|
* KCNewItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCNewItem( |
|
KCItemClass itemClass, |
|
OSType itemCreator, |
|
UInt32 length, |
|
const void * data, |
|
KCItemRef * item); |
|
|
|
|
|
/* |
|
* KCSetAttribute() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCSetAttribute( |
|
KCItemRef item, |
|
KCAttribute * attr); |
|
|
|
|
|
/* |
|
* KCGetAttribute() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetAttribute( |
|
KCItemRef item, |
|
KCAttribute * attr, |
|
UInt32 * actualLength); |
|
|
|
|
|
/* |
|
* KCSetData() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCSetData( |
|
KCItemRef item, |
|
UInt32 length, |
|
const void * data); |
|
|
|
|
|
/* Managing keychain items */ |
|
/* |
|
* KCUpdateItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCUpdateItem(KCItemRef item); |
|
|
|
|
|
/* |
|
* KCReleaseItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCReleaseItem(KCItemRef * item); |
|
|
|
|
|
/* |
|
* KCCopyItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCCopyItem( |
|
KCItemRef item, |
|
KCRef destKeychain, |
|
KCItemRef * copy); |
|
|
|
|
|
/* Searching and enumerating keychain items */ |
|
/* |
|
* KCFindFirstItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCFindFirstItem( |
|
KCRef keychain, /* can be NULL */ |
|
const KCAttributeList * attrList, /* can be NULL */ |
|
KCSearchRef * search, |
|
KCItemRef * item); |
|
|
|
|
|
/* |
|
* KCFindNextItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCFindNextItem( |
|
KCSearchRef search, |
|
KCItemRef * item); |
|
|
|
|
|
/* |
|
* KCReleaseSearch() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCReleaseSearch(KCSearchRef * search); |
|
|
|
|
|
/* Managing keychain items */ |
|
/* |
|
* KCDeleteItem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCDeleteItem(KCItemRef item); |
|
|
|
|
|
/* |
|
* KCGetData() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCGetData( |
|
KCItemRef item, |
|
UInt32 maxLength, |
|
void * data, |
|
UInt32 * actualLength); |
|
|
|
|
|
/* Locking a keychain */ |
|
/* |
|
* KCLock() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
KCLock(KCRef keychain); |
|
|
|
|
|
/* Routines that use "C" strings */ |
|
/* |
|
* kcgetkeychainname() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
kcgetkeychainname( |
|
KCRef keychain, |
|
char * keychainName); |
|
|
|
|
|
/* |
|
* kcfindapplesharepassword() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
kcfindapplesharepassword( |
|
AFPServerSignature * serverSignature, /* can be NULL */ |
|
const char * serverAddress, /* can be NULL */ |
|
const char * serverName, /* can be NULL */ |
|
const char * volumeName, /* can be NULL */ |
|
const char * accountName, /* can be NULL */ |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* |
|
* kcfindinternetpassword() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
kcfindinternetpassword( |
|
const char * serverName, /* can be NULL */ |
|
const char * securityDomain, /* can be NULL */ |
|
const char * accountName, /* can be NULL */ |
|
UInt16 port, |
|
OSType protocol, |
|
OSType authType, |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* |
|
* kcfindinternetpasswordwithpath() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
kcfindinternetpasswordwithpath( |
|
const char * serverName, /* can be NULL */ |
|
const char * securityDomain, /* can be NULL */ |
|
const char * accountName, /* can be NULL */ |
|
const char * path, /* can be NULL */ |
|
UInt16 port, |
|
OSType protocol, |
|
OSType authType, |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
/* |
|
* kcfindgenericpassword() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in KeychainLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
kcfindgenericpassword( |
|
const char * serviceName, /* can be NULL */ |
|
const char * accountName, /* can be NULL */ |
|
UInt32 maxLength, |
|
void * passwordData, |
|
UInt32 * actualLength, |
|
KCItemRef * item); /* can be NULL */ |
|
|
|
|
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=reset |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(pop) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack() |
|
#endif |
|
|
|
#ifdef PRAGMA_IMPORT_OFF |
|
#pragma import off |
|
#elif PRAGMA_IMPORT |
|
#pragma import reset |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif /* __KEYCHAINCORE__ */ |
|
|
|
|