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.
984 lines
31 KiB
984 lines
31 KiB
5 years ago
|
/*
|
||
|
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__ */
|
||
|
|