Team Fortress 2 Source Code as on 22/4/2020
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

  1. /*
  2. File: KeychainCore.h
  3. Contains: Keychain low-level Interfaces
  4. Version: QuickTime 7.3
  5. Copyright: (c) 2007 (c) 2000-2001 by Apple Computer, Inc., all rights reserved
  6. Bugs?: For bug reports, consult the following page on
  7. the World Wide Web:
  8. http://developer.apple.com/bugreporter/
  9. */
  10. #ifndef __KEYCHAINCORE__
  11. #define __KEYCHAINCORE__
  12. #ifndef __MACTYPES__
  13. #include <MacTypes.h>
  14. #endif
  15. #ifndef __FILES__
  16. #include <Files.h>
  17. #endif
  18. #ifndef __ALIASES__
  19. #include <Aliases.h>
  20. #endif
  21. #ifndef __CODEFRAGMENTS__
  22. #include <CodeFragments.h>
  23. #endif
  24. #ifndef __MACERRORS__
  25. #include <MacErrors.h>
  26. #endif
  27. #if PRAGMA_ONCE
  28. #pragma once
  29. #endif
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. #if PRAGMA_IMPORT
  34. #pragma import on
  35. #endif
  36. #if PRAGMA_STRUCT_ALIGN
  37. #pragma options align=mac68k
  38. #elif PRAGMA_STRUCT_PACKPUSH
  39. #pragma pack(push, 2)
  40. #elif PRAGMA_STRUCT_PACK
  41. #pragma pack(2)
  42. #endif
  43. /* Data structures and types */
  44. #ifndef __SEC_TYPES__
  45. #define __SEC_TYPES__
  46. typedef struct OpaqueSecKeychainRef* SecKeychainRef;
  47. typedef struct OpaqueSecKeychainItemRef* SecKeychainItemRef;
  48. typedef struct OpaqueSecKeychainSearchRef* SecKeychainSearchRef;
  49. typedef OSType SecKeychainAttrType;
  50. typedef UInt32 SecKeychainStatus;
  51. struct SecKeychainAttribute {
  52. SecKeychainAttrType tag; /* 4-byte attribute tag */
  53. UInt32 length; /* Length of attribute data */
  54. void * data; /* Pointer to attribute data */
  55. };
  56. typedef struct SecKeychainAttribute SecKeychainAttribute;
  57. typedef SecKeychainAttribute * SecKeychainAttributePtr;
  58. struct SecKeychainAttributeList {
  59. UInt32 count; /* How many attributes in the array */
  60. SecKeychainAttribute * attr; /* Pointer to first attribute in array */
  61. };
  62. typedef struct SecKeychainAttributeList SecKeychainAttributeList;
  63. #endif
  64. typedef SecKeychainRef KCRef;
  65. typedef SecKeychainItemRef KCItemRef;
  66. typedef SecKeychainSearchRef KCSearchRef;
  67. typedef SecKeychainAttribute KCAttribute;
  68. typedef SecKeychainAttributeList KCAttributeList;
  69. typedef SecKeychainAttrType KCAttrType;
  70. typedef SecKeychainStatus KCStatus;
  71. typedef UInt16 KCEvent;
  72. enum {
  73. kIdleKCEvent = 0, /* null event */
  74. kLockKCEvent = 1, /* a keychain was locked */
  75. kUnlockKCEvent = 2, /* a keychain was unlocked */
  76. kAddKCEvent = 3, /* an item was added to a keychain */
  77. kDeleteKCEvent = 4, /* an item was deleted from a keychain */
  78. kUpdateKCEvent = 5, /* an item was updated */
  79. kPasswordChangedKCEvent = 6, /* the keychain identity was changed */
  80. kSystemKCEvent = 8, /* the keychain client can process events */
  81. kDefaultChangedKCEvent = 9, /* the default keychain was changed */
  82. kDataAccessKCEvent = 10, /* a process has accessed a keychain item's data */
  83. kKeychainListChangedKCEvent = 11 /* the list of keychains has changed */
  84. };
  85. typedef UInt16 KCEventMask;
  86. enum {
  87. kIdleKCEventMask = 1 << kIdleKCEvent,
  88. kLockKCEventMask = 1 << kLockKCEvent,
  89. kUnlockKCEventMask = 1 << kUnlockKCEvent,
  90. kAddKCEventMask = 1 << kAddKCEvent,
  91. kDeleteKCEventMask = 1 << kDeleteKCEvent,
  92. kUpdateKCEventMask = 1 << kUpdateKCEvent,
  93. kPasswordChangedKCEventMask = 1 << kPasswordChangedKCEvent,
  94. kSystemEventKCEventMask = 1 << kSystemKCEvent,
  95. kDefaultChangedKCEventMask = 1 << kDefaultChangedKCEvent,
  96. kDataAccessKCEventMask = 1 << kDataAccessKCEvent,
  97. kEveryKCEventMask = 0xFFFF /* all of the above*/
  98. };
  99. typedef UInt8 AFPServerSignature[16];
  100. typedef UInt8 KCPublicKeyHash[20];
  101. struct KCCallbackInfo {
  102. UInt32 version;
  103. KCItemRef item;
  104. long processID[2]; /* unavailable on Mac OS X*/
  105. long event[4]; /* unavailable on Mac OS X*/
  106. KCRef keychain;
  107. };
  108. typedef struct KCCallbackInfo KCCallbackInfo;
  109. enum {
  110. kUnlockStateKCStatus = 1,
  111. kRdPermKCStatus = 2,
  112. kWrPermKCStatus = 4
  113. };
  114. enum {
  115. kCertificateKCItemClass = FOUR_CHAR_CODE('cert'), /* Certificate */
  116. kAppleSharePasswordKCItemClass = FOUR_CHAR_CODE('ashp'), /* Appleshare password */
  117. kInternetPasswordKCItemClass = FOUR_CHAR_CODE('inet'), /* Internet password */
  118. kGenericPasswordKCItemClass = FOUR_CHAR_CODE('genp') /* Generic password */
  119. };
  120. typedef FourCharCode KCItemClass;
  121. enum {
  122. /* Common attributes */
  123. kClassKCItemAttr = FOUR_CHAR_CODE('clas'), /* Item class (KCItemClass) */
  124. kCreationDateKCItemAttr = FOUR_CHAR_CODE('cdat'), /* Date the item was created (UInt32) */
  125. kModDateKCItemAttr = FOUR_CHAR_CODE('mdat'), /* Last time the item was updated (UInt32) */
  126. kDescriptionKCItemAttr = FOUR_CHAR_CODE('desc'), /* User-visible description string (string) */
  127. kCommentKCItemAttr = FOUR_CHAR_CODE('icmt'), /* User's comment about the item (string) */
  128. kCreatorKCItemAttr = FOUR_CHAR_CODE('crtr'), /* Item's creator (OSType) */
  129. kTypeKCItemAttr = FOUR_CHAR_CODE('type'), /* Item's type (OSType) */
  130. kScriptCodeKCItemAttr = FOUR_CHAR_CODE('scrp'), /* Script code for all strings (ScriptCode) */
  131. kLabelKCItemAttr = FOUR_CHAR_CODE('labl'), /* Item label (string) */
  132. kInvisibleKCItemAttr = FOUR_CHAR_CODE('invi'), /* Invisible (boolean) */
  133. kNegativeKCItemAttr = FOUR_CHAR_CODE('nega'), /* Negative (boolean) */
  134. kCustomIconKCItemAttr = FOUR_CHAR_CODE('cusi'), /* Custom icon (boolean) */
  135. kAccountKCItemAttr = FOUR_CHAR_CODE('acct'), /* User account (string) */
  136. /* Unique Generic password attributes */
  137. kServiceKCItemAttr = FOUR_CHAR_CODE('svce'), /* Service (string) */
  138. kGenericKCItemAttr = FOUR_CHAR_CODE('gena'), /* User-defined attribute (untyped bytes) */
  139. /* Unique Internet password attributes */
  140. kSecurityDomainKCItemAttr = FOUR_CHAR_CODE('sdmn'), /* Security domain (string) */
  141. kServerKCItemAttr = FOUR_CHAR_CODE('srvr'), /* Server's domain name or IP address (string) */
  142. kAuthTypeKCItemAttr = FOUR_CHAR_CODE('atyp'), /* Authentication Type (KCAuthType) */
  143. kPortKCItemAttr = FOUR_CHAR_CODE('port'), /* Port (UInt16) */
  144. kPathKCItemAttr = FOUR_CHAR_CODE('path'), /* Path (string) */
  145. /* Unique Appleshare password attributes */
  146. kVolumeKCItemAttr = FOUR_CHAR_CODE('vlme'), /* Volume (string) */
  147. kAddressKCItemAttr = FOUR_CHAR_CODE('addr'), /* Server address (IP or domain name) or zone name (string) */
  148. kSignatureKCItemAttr = FOUR_CHAR_CODE('ssig'), /* Server signature block (AFPServerSignature) */
  149. /* Unique AppleShare and Internet attributes */
  150. kProtocolKCItemAttr = FOUR_CHAR_CODE('ptcl'), /* Protocol (KCProtocolType) */
  151. /* Certificate attributes */
  152. kSubjectKCItemAttr = FOUR_CHAR_CODE('subj'), /* Subject distinguished name (DER-encoded data) */
  153. kCommonNameKCItemAttr = FOUR_CHAR_CODE('cn '), /* Common Name (UTF8-encoded string) */
  154. kIssuerKCItemAttr = FOUR_CHAR_CODE('issu'), /* Issuer distinguished name (DER-encoded data) */
  155. kSerialNumberKCItemAttr = FOUR_CHAR_CODE('snbr'), /* Certificate serial number (DER-encoded data) */
  156. kEMailKCItemAttr = FOUR_CHAR_CODE('mail'), /* E-mail address (ASCII-encoded string) */
  157. kPublicKeyHashKCItemAttr = FOUR_CHAR_CODE('hpky'), /* Hash of public key (KCPublicKeyHash), 20 bytes max. */
  158. kIssuerURLKCItemAttr = FOUR_CHAR_CODE('iurl'), /* URL of the certificate issuer (ASCII-encoded string) */
  159. /* Shared by keys and certificates */
  160. kEncryptKCItemAttr = FOUR_CHAR_CODE('encr'), /* Encrypt (Boolean) */
  161. kDecryptKCItemAttr = FOUR_CHAR_CODE('decr'), /* Decrypt (Boolean) */
  162. kSignKCItemAttr = FOUR_CHAR_CODE('sign'), /* Sign (Boolean) */
  163. kVerifyKCItemAttr = FOUR_CHAR_CODE('veri'), /* Verify (Boolean) */
  164. kWrapKCItemAttr = FOUR_CHAR_CODE('wrap'), /* Wrap (Boolean) */
  165. kUnwrapKCItemAttr = FOUR_CHAR_CODE('unwr'), /* Unwrap (Boolean) */
  166. kStartDateKCItemAttr = FOUR_CHAR_CODE('sdat'), /* Start Date (UInt32) */
  167. kEndDateKCItemAttr = FOUR_CHAR_CODE('edat') /* End Date (UInt32) */
  168. };
  169. typedef FourCharCode KCItemAttr;
  170. enum {
  171. kKCAuthTypeNTLM = FOUR_CHAR_CODE('ntlm'),
  172. kKCAuthTypeMSN = FOUR_CHAR_CODE('msna'),
  173. kKCAuthTypeDPA = FOUR_CHAR_CODE('dpaa'),
  174. kKCAuthTypeRPA = FOUR_CHAR_CODE('rpaa'),
  175. kKCAuthTypeHTTPDigest = FOUR_CHAR_CODE('httd'),
  176. kKCAuthTypeDefault = FOUR_CHAR_CODE('dflt')
  177. };
  178. typedef FourCharCode KCAuthType;
  179. enum {
  180. kKCProtocolTypeFTP = FOUR_CHAR_CODE('ftp '),
  181. kKCProtocolTypeFTPAccount = FOUR_CHAR_CODE('ftpa'),
  182. kKCProtocolTypeHTTP = FOUR_CHAR_CODE('http'),
  183. kKCProtocolTypeIRC = FOUR_CHAR_CODE('irc '),
  184. kKCProtocolTypeNNTP = FOUR_CHAR_CODE('nntp'),
  185. kKCProtocolTypePOP3 = FOUR_CHAR_CODE('pop3'),
  186. kKCProtocolTypeSMTP = FOUR_CHAR_CODE('smtp'),
  187. kKCProtocolTypeSOCKS = FOUR_CHAR_CODE('sox '),
  188. kKCProtocolTypeIMAP = FOUR_CHAR_CODE('imap'),
  189. kKCProtocolTypeLDAP = FOUR_CHAR_CODE('ldap'),
  190. kKCProtocolTypeAppleTalk = FOUR_CHAR_CODE('atlk'),
  191. kKCProtocolTypeAFP = FOUR_CHAR_CODE('afp '),
  192. kKCProtocolTypeTelnet = FOUR_CHAR_CODE('teln')
  193. };
  194. typedef FourCharCode KCProtocolType;
  195. typedef UInt32 KCCertAddOptions;
  196. enum {
  197. kSecOptionReserved = 0x000000FF, /* First byte reserved for SecOptions flags */
  198. kCertUsageShift = 8, /* start at bit 8 */
  199. kCertUsageSigningAdd = 1 << (kCertUsageShift + 0),
  200. kCertUsageSigningAskAndAdd = 1 << (kCertUsageShift + 1),
  201. kCertUsageVerifyAdd = 1 << (kCertUsageShift + 2),
  202. kCertUsageVerifyAskAndAdd = 1 << (kCertUsageShift + 3),
  203. kCertUsageEncryptAdd = 1 << (kCertUsageShift + 4),
  204. kCertUsageEncryptAskAndAdd = 1 << (kCertUsageShift + 5),
  205. kCertUsageDecryptAdd = 1 << (kCertUsageShift + 6),
  206. kCertUsageDecryptAskAndAdd = 1 << (kCertUsageShift + 7),
  207. kCertUsageKeyExchAdd = 1 << (kCertUsageShift + 8),
  208. kCertUsageKeyExchAskAndAdd = 1 << (kCertUsageShift + 9),
  209. kCertUsageRootAdd = 1 << (kCertUsageShift + 10),
  210. kCertUsageRootAskAndAdd = 1 << (kCertUsageShift + 11),
  211. kCertUsageSSLAdd = 1 << (kCertUsageShift + 12),
  212. kCertUsageSSLAskAndAdd = 1 << (kCertUsageShift + 13),
  213. kCertUsageAllAdd = 0x7FFFFF00
  214. };
  215. typedef UInt16 KCVerifyStopOn;
  216. enum {
  217. kPolicyKCStopOn = 0,
  218. kNoneKCStopOn = 1,
  219. kFirstPassKCStopOn = 2,
  220. kFirstFailKCStopOn = 3
  221. };
  222. typedef UInt32 KCCertSearchOptions;
  223. enum {
  224. kCertSearchShift = 0, /* start at bit 0 */
  225. kCertSearchSigningIgnored = 0,
  226. kCertSearchSigningAllowed = 1 << (kCertSearchShift + 0),
  227. kCertSearchSigningDisallowed = 1 << (kCertSearchShift + 1),
  228. kCertSearchSigningMask = ((kCertSearchSigningAllowed) | (kCertSearchSigningDisallowed)),
  229. kCertSearchVerifyIgnored = 0,
  230. kCertSearchVerifyAllowed = 1 << (kCertSearchShift + 2),
  231. kCertSearchVerifyDisallowed = 1 << (kCertSearchShift + 3),
  232. kCertSearchVerifyMask = ((kCertSearchVerifyAllowed) | (kCertSearchVerifyDisallowed)),
  233. kCertSearchEncryptIgnored = 0,
  234. kCertSearchEncryptAllowed = 1 << (kCertSearchShift + 4),
  235. kCertSearchEncryptDisallowed = 1 << (kCertSearchShift + 5),
  236. kCertSearchEncryptMask = ((kCertSearchEncryptAllowed) | (kCertSearchEncryptDisallowed)),
  237. kCertSearchDecryptIgnored = 0,
  238. kCertSearchDecryptAllowed = 1 << (kCertSearchShift + 6),
  239. kCertSearchDecryptDisallowed = 1 << (kCertSearchShift + 7),
  240. kCertSearchDecryptMask = ((kCertSearchDecryptAllowed) | (kCertSearchDecryptDisallowed)),
  241. kCertSearchWrapIgnored = 0,
  242. kCertSearchWrapAllowed = 1 << (kCertSearchShift + 8),
  243. kCertSearchWrapDisallowed = 1 << (kCertSearchShift + 9),
  244. kCertSearchWrapMask = ((kCertSearchWrapAllowed) | (kCertSearchWrapDisallowed)),
  245. kCertSearchUnwrapIgnored = 0,
  246. kCertSearchUnwrapAllowed = 1 << (kCertSearchShift + 10),
  247. kCertSearchUnwrapDisallowed = 1 << (kCertSearchShift + 11),
  248. kCertSearchUnwrapMask = ((kCertSearchUnwrapAllowed) | (kCertSearchUnwrapDisallowed)),
  249. kCertSearchPrivKeyRequired = 1 << (kCertSearchShift + 12),
  250. kCertSearchAny = 0
  251. };
  252. /* Other constants */
  253. enum {
  254. kAnyPort = 0
  255. };
  256. enum {
  257. kAnyProtocol = 0,
  258. kAnyAuthType = 0
  259. };
  260. /* Opening and getting information about the Keychain Manager */
  261. /*
  262. * KCGetKeychainManagerVersion()
  263. *
  264. * Availability:
  265. * Non-Carbon CFM: in KeychainLib 1.0 and later
  266. * CarbonLib: in CarbonLib 1.1 and later
  267. * Mac OS X: not available
  268. */
  269. EXTERN_API( OSStatus )
  270. KCGetKeychainManagerVersion(UInt32 * returnVers);
  271. #if TARGET_RT_MAC_CFM
  272. #ifdef __cplusplus
  273. inline pascal Boolean KeychainManagerAvailable() { return ((KCGetKeychainManagerVersion != (void*)kUnresolvedCFragSymbolAddress) && (KCGetKeychainManagerVersion(nil) != cfragNoSymbolErr)); }
  274. #else
  275. #define KeychainManagerAvailable() ((KCGetKeychainManagerVersion != (void*)kUnresolvedCFragSymbolAddress) && (KCGetKeychainManagerVersion(nil) != cfragNoSymbolErr))
  276. #endif
  277. #elif TARGET_RT_MAC_MACHO
  278. /* Keychain is always available on OS X */
  279. #ifdef __cplusplus
  280. inline pascal Boolean KeychainManagerAvailable() { return true; }
  281. #else
  282. #define KeychainManagerAvailable() (true)
  283. #endif
  284. #endif /* */
  285. /* Managing the Human Interface */
  286. /*
  287. * KCSetInteractionAllowed()
  288. *
  289. * Availability:
  290. * Non-Carbon CFM: in KeychainLib 2.0 and later
  291. * CarbonLib: in CarbonLib 1.1 and later
  292. * Mac OS X: in version 10.0 and later
  293. */
  294. EXTERN_API( OSStatus )
  295. KCSetInteractionAllowed(Boolean state);
  296. /*
  297. * KCIsInteractionAllowed()
  298. *
  299. * Availability:
  300. * Non-Carbon CFM: in KeychainLib 2.0 and later
  301. * CarbonLib: in CarbonLib 1.1 and later
  302. * Mac OS X: in version 10.0 and later
  303. */
  304. EXTERN_API( Boolean )
  305. KCIsInteractionAllowed(void);
  306. /* Creating references to keychains */
  307. /*
  308. * KCMakeKCRefFromFSSpec()
  309. *
  310. * Availability:
  311. * Non-Carbon CFM: in KeychainLib 2.0 and later
  312. * CarbonLib: in CarbonLib 1.1 and later
  313. * Mac OS X: in version 10.0 and later
  314. */
  315. EXTERN_API( OSStatus )
  316. KCMakeKCRefFromFSSpec(
  317. FSSpec * keychainFSSpec,
  318. KCRef * keychain);
  319. /*
  320. * KCMakeKCRefFromAlias()
  321. *
  322. * Availability:
  323. * Non-Carbon CFM: in KeychainLib 2.0 and later
  324. * CarbonLib: in CarbonLib 1.1 and later
  325. * Mac OS X: in version 10.0 and later
  326. */
  327. EXTERN_API( OSStatus )
  328. KCMakeKCRefFromAlias(
  329. AliasHandle keychainAlias,
  330. KCRef * keychain);
  331. /*
  332. * KCMakeAliasFromKCRef()
  333. *
  334. * Availability:
  335. * Non-Carbon CFM: in KeychainLib 2.0 and later
  336. * CarbonLib: in CarbonLib 1.1 and later
  337. * Mac OS X: in version 10.0 and later
  338. */
  339. EXTERN_API( OSStatus )
  340. KCMakeAliasFromKCRef(
  341. KCRef keychain,
  342. AliasHandle * keychainAlias);
  343. /*
  344. * KCReleaseKeychain()
  345. *
  346. * Availability:
  347. * Non-Carbon CFM: in KeychainLib 2.0 and later
  348. * CarbonLib: in CarbonLib 1.1 and later
  349. * Mac OS X: in version 10.0 and later
  350. */
  351. EXTERN_API( OSStatus )
  352. KCReleaseKeychain(KCRef * keychain);
  353. /* Specifying the default keychain */
  354. /*
  355. * KCGetDefaultKeychain()
  356. *
  357. * Availability:
  358. * Non-Carbon CFM: in KeychainLib 2.0 and later
  359. * CarbonLib: in CarbonLib 1.1 and later
  360. * Mac OS X: in version 10.0 and later
  361. */
  362. EXTERN_API( OSStatus )
  363. KCGetDefaultKeychain(KCRef * keychain);
  364. /*
  365. * KCSetDefaultKeychain()
  366. *
  367. * Availability:
  368. * Non-Carbon CFM: in KeychainLib 2.0 and later
  369. * CarbonLib: in CarbonLib 1.1 and later
  370. * Mac OS X: in version 10.0 and later
  371. */
  372. EXTERN_API( OSStatus )
  373. KCSetDefaultKeychain(KCRef keychain);
  374. /* Getting information about a keychain */
  375. /*
  376. * KCGetStatus()
  377. *
  378. * Availability:
  379. * Non-Carbon CFM: in KeychainLib 1.0 and later
  380. * CarbonLib: in CarbonLib 1.1 and later
  381. * Mac OS X: in version 10.0 and later
  382. */
  383. EXTERN_API( OSStatus )
  384. KCGetStatus(
  385. KCRef keychain, /* can be NULL */
  386. UInt32 * keychainStatus);
  387. /*
  388. * KCGetKeychain()
  389. *
  390. * Availability:
  391. * Non-Carbon CFM: in KeychainLib 1.0 and later
  392. * CarbonLib: in CarbonLib 1.1 and later
  393. * Mac OS X: in version 10.0 and later
  394. */
  395. EXTERN_API( OSStatus )
  396. KCGetKeychain(
  397. KCItemRef item,
  398. KCRef * keychain);
  399. /*
  400. * KCGetKeychainName()
  401. *
  402. * Availability:
  403. * Non-Carbon CFM: in KeychainLib 2.0 and later
  404. * CarbonLib: in CarbonLib 1.1 and later
  405. * Mac OS X: in version 10.0 and later
  406. */
  407. EXTERN_API( OSStatus )
  408. KCGetKeychainName(
  409. KCRef keychain,
  410. StringPtr keychainName);
  411. /* Enumerating available keychains */
  412. /*
  413. * KCCountKeychains()
  414. *
  415. * Availability:
  416. * Non-Carbon CFM: in KeychainLib 1.0 and later
  417. * CarbonLib: in CarbonLib 1.1 and later
  418. * Mac OS X: in version 10.0 and later
  419. */
  420. EXTERN_API( UInt16 )
  421. KCCountKeychains(void);
  422. /*
  423. * KCGetIndKeychain()
  424. *
  425. * Availability:
  426. * Non-Carbon CFM: in KeychainLib 1.0 and later
  427. * CarbonLib: in CarbonLib 1.1 and later
  428. * Mac OS X: in version 10.0 and later
  429. */
  430. EXTERN_API( OSStatus )
  431. KCGetIndKeychain(
  432. UInt16 index,
  433. KCRef * keychain);
  434. typedef CALLBACK_API( OSStatus , KCCallbackProcPtr )(KCEvent keychainEvent, KCCallbackInfo *info, void *userContext);
  435. typedef STACK_UPP_TYPE(KCCallbackProcPtr) KCCallbackUPP;
  436. /*
  437. * NewKCCallbackUPP()
  438. *
  439. * Availability:
  440. * Non-Carbon CFM: available as macro/inline
  441. * CarbonLib: in CarbonLib 1.1 and later
  442. * Mac OS X: in version 10.0 and later
  443. */
  444. EXTERN_API_C( KCCallbackUPP )
  445. NewKCCallbackUPP(KCCallbackProcPtr userRoutine);
  446. #if !OPAQUE_UPP_TYPES
  447. enum { uppKCCallbackProcInfo = 0x00000FB0 }; /* pascal 4_bytes Func(2_bytes, 4_bytes, 4_bytes) */
  448. #ifdef __cplusplus
  449. inline DEFINE_API_C(KCCallbackUPP) NewKCCallbackUPP(KCCallbackProcPtr userRoutine) { return (KCCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppKCCallbackProcInfo, GetCurrentArchitecture()); }
  450. #else
  451. #define NewKCCallbackUPP(userRoutine) (KCCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppKCCallbackProcInfo, GetCurrentArchitecture())
  452. #endif
  453. #endif
  454. /*
  455. * DisposeKCCallbackUPP()
  456. *
  457. * Availability:
  458. * Non-Carbon CFM: available as macro/inline
  459. * CarbonLib: in CarbonLib 1.1 and later
  460. * Mac OS X: in version 10.0 and later
  461. */
  462. EXTERN_API_C( void )
  463. DisposeKCCallbackUPP(KCCallbackUPP userUPP);
  464. #if !OPAQUE_UPP_TYPES
  465. #ifdef __cplusplus
  466. inline DEFINE_API_C(void) DisposeKCCallbackUPP(KCCallbackUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); }
  467. #else
  468. #define DisposeKCCallbackUPP(userUPP) DisposeRoutineDescriptor(userUPP)
  469. #endif
  470. #endif
  471. /*
  472. * InvokeKCCallbackUPP()
  473. *
  474. * Availability:
  475. * Non-Carbon CFM: available as macro/inline
  476. * CarbonLib: in CarbonLib 1.1 and later
  477. * Mac OS X: in version 10.0 and later
  478. */
  479. EXTERN_API_C( OSStatus )
  480. InvokeKCCallbackUPP(
  481. KCEvent keychainEvent,
  482. KCCallbackInfo * info,
  483. void * userContext,
  484. KCCallbackUPP userUPP);
  485. #if !OPAQUE_UPP_TYPES
  486. #ifdef __cplusplus
  487. 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); }
  488. #else
  489. #define InvokeKCCallbackUPP(keychainEvent, info, userContext, userUPP) (OSStatus)CALL_THREE_PARAMETER_UPP((userUPP), uppKCCallbackProcInfo, (keychainEvent), (info), (userContext))
  490. #endif
  491. #endif
  492. #if CALL_NOT_IN_CARBON || OLDROUTINENAMES
  493. /* support for pre-Carbon UPP routines: New...Proc and Call...Proc */
  494. #define NewKCCallbackProc(userRoutine) NewKCCallbackUPP(userRoutine)
  495. #define CallKCCallbackProc(userRoutine, keychainEvent, info, userContext) InvokeKCCallbackUPP(keychainEvent, info, userContext, userRoutine)
  496. #endif /* CALL_NOT_IN_CARBON */
  497. /* High-level interface for retrieving passwords */
  498. /*
  499. * KCFindAppleSharePassword()
  500. *
  501. * Availability:
  502. * Non-Carbon CFM: in KeychainLib 1.0 and later
  503. * CarbonLib: in CarbonLib 1.1 and later
  504. * Mac OS X: in version 10.0 and later
  505. */
  506. EXTERN_API( OSStatus )
  507. KCFindAppleSharePassword(
  508. AFPServerSignature * serverSignature, /* can be NULL */
  509. StringPtr serverAddress, /* can be NULL */
  510. StringPtr serverName, /* can be NULL */
  511. StringPtr volumeName, /* can be NULL */
  512. StringPtr accountName, /* can be NULL */
  513. UInt32 maxLength,
  514. void * passwordData,
  515. UInt32 * actualLength,
  516. KCItemRef * item); /* can be NULL */
  517. /*
  518. * KCFindInternetPassword()
  519. *
  520. * Availability:
  521. * Non-Carbon CFM: in KeychainLib 1.0 and later
  522. * CarbonLib: in CarbonLib 1.1 and later
  523. * Mac OS X: in version 10.0 and later
  524. */
  525. EXTERN_API( OSStatus )
  526. KCFindInternetPassword(
  527. StringPtr serverName, /* can be NULL */
  528. StringPtr securityDomain, /* can be NULL */
  529. StringPtr accountName, /* can be NULL */
  530. UInt16 port,
  531. OSType protocol,
  532. OSType authType,
  533. UInt32 maxLength,
  534. void * passwordData,
  535. UInt32 * actualLength,
  536. KCItemRef * item); /* can be NULL */
  537. /*
  538. * KCFindInternetPasswordWithPath()
  539. *
  540. * Availability:
  541. * Non-Carbon CFM: in KeychainLib 2.0 and later
  542. * CarbonLib: in CarbonLib 1.1 and later
  543. * Mac OS X: in version 10.0 and later
  544. */
  545. EXTERN_API( OSStatus )
  546. KCFindInternetPasswordWithPath(
  547. StringPtr serverName, /* can be NULL */
  548. StringPtr securityDomain, /* can be NULL */
  549. StringPtr accountName, /* can be NULL */
  550. StringPtr path, /* can be NULL */
  551. UInt16 port,
  552. OSType protocol,
  553. OSType authType,
  554. UInt32 maxLength,
  555. void * passwordData,
  556. UInt32 * actualLength,
  557. KCItemRef * item); /* can be NULL */
  558. /*
  559. * KCFindGenericPassword()
  560. *
  561. * Availability:
  562. * Non-Carbon CFM: in KeychainLib 1.0 and later
  563. * CarbonLib: in CarbonLib 1.1 and later
  564. * Mac OS X: in version 10.0 and later
  565. */
  566. EXTERN_API( OSStatus )
  567. KCFindGenericPassword(
  568. StringPtr serviceName, /* can be NULL */
  569. StringPtr accountName, /* can be NULL */
  570. UInt32 maxLength,
  571. void * passwordData,
  572. UInt32 * actualLength,
  573. KCItemRef * item); /* can be NULL */
  574. /* Keychain Manager callbacks */
  575. /*
  576. * KCAddCallback()
  577. *
  578. * Availability:
  579. * Non-Carbon CFM: in KeychainLib 1.0 and later
  580. * CarbonLib: in CarbonLib 1.1 and later
  581. * Mac OS X: in version 10.0 and later
  582. */
  583. EXTERN_API( OSStatus )
  584. KCAddCallback(
  585. KCCallbackUPP callbackProc,
  586. KCEventMask eventMask,
  587. void * userContext);
  588. /*
  589. * KCRemoveCallback()
  590. *
  591. * Availability:
  592. * Non-Carbon CFM: in KeychainLib 1.0 and later
  593. * CarbonLib: in CarbonLib 1.1 and later
  594. * Mac OS X: in version 10.0 and later
  595. */
  596. EXTERN_API( OSStatus )
  597. KCRemoveCallback(KCCallbackUPP callbackProc);
  598. /* Creating and editing a keychain item */
  599. /*
  600. * KCNewItem()
  601. *
  602. * Availability:
  603. * Non-Carbon CFM: in KeychainLib 1.0 and later
  604. * CarbonLib: in CarbonLib 1.1 and later
  605. * Mac OS X: in version 10.0 and later
  606. */
  607. EXTERN_API( OSStatus )
  608. KCNewItem(
  609. KCItemClass itemClass,
  610. OSType itemCreator,
  611. UInt32 length,
  612. const void * data,
  613. KCItemRef * item);
  614. /*
  615. * KCSetAttribute()
  616. *
  617. * Availability:
  618. * Non-Carbon CFM: in KeychainLib 1.0 and later
  619. * CarbonLib: in CarbonLib 1.1 and later
  620. * Mac OS X: in version 10.0 and later
  621. */
  622. EXTERN_API( OSStatus )
  623. KCSetAttribute(
  624. KCItemRef item,
  625. KCAttribute * attr);
  626. /*
  627. * KCGetAttribute()
  628. *
  629. * Availability:
  630. * Non-Carbon CFM: in KeychainLib 1.0 and later
  631. * CarbonLib: in CarbonLib 1.1 and later
  632. * Mac OS X: in version 10.0 and later
  633. */
  634. EXTERN_API( OSStatus )
  635. KCGetAttribute(
  636. KCItemRef item,
  637. KCAttribute * attr,
  638. UInt32 * actualLength);
  639. /*
  640. * KCSetData()
  641. *
  642. * Availability:
  643. * Non-Carbon CFM: in KeychainLib 1.0 and later
  644. * CarbonLib: in CarbonLib 1.1 and later
  645. * Mac OS X: in version 10.0 and later
  646. */
  647. EXTERN_API( OSStatus )
  648. KCSetData(
  649. KCItemRef item,
  650. UInt32 length,
  651. const void * data);
  652. /* Managing keychain items */
  653. /*
  654. * KCUpdateItem()
  655. *
  656. * Availability:
  657. * Non-Carbon CFM: in KeychainLib 1.0 and later
  658. * CarbonLib: in CarbonLib 1.1 and later
  659. * Mac OS X: in version 10.0 and later
  660. */
  661. EXTERN_API( OSStatus )
  662. KCUpdateItem(KCItemRef item);
  663. /*
  664. * KCReleaseItem()
  665. *
  666. * Availability:
  667. * Non-Carbon CFM: in KeychainLib 1.0 and later
  668. * CarbonLib: in CarbonLib 1.1 and later
  669. * Mac OS X: in version 10.0 and later
  670. */
  671. EXTERN_API( OSStatus )
  672. KCReleaseItem(KCItemRef * item);
  673. /*
  674. * KCCopyItem()
  675. *
  676. * Availability:
  677. * Non-Carbon CFM: in KeychainLib 2.0 and later
  678. * CarbonLib: in CarbonLib 1.1 and later
  679. * Mac OS X: in version 10.0 and later
  680. */
  681. EXTERN_API( OSStatus )
  682. KCCopyItem(
  683. KCItemRef item,
  684. KCRef destKeychain,
  685. KCItemRef * copy);
  686. /* Searching and enumerating keychain items */
  687. /*
  688. * KCFindFirstItem()
  689. *
  690. * Availability:
  691. * Non-Carbon CFM: in KeychainLib 1.0 and later
  692. * CarbonLib: in CarbonLib 1.1 and later
  693. * Mac OS X: in version 10.0 and later
  694. */
  695. EXTERN_API( OSStatus )
  696. KCFindFirstItem(
  697. KCRef keychain, /* can be NULL */
  698. const KCAttributeList * attrList, /* can be NULL */
  699. KCSearchRef * search,
  700. KCItemRef * item);
  701. /*
  702. * KCFindNextItem()
  703. *
  704. * Availability:
  705. * Non-Carbon CFM: in KeychainLib 1.0 and later
  706. * CarbonLib: in CarbonLib 1.1 and later
  707. * Mac OS X: in version 10.0 and later
  708. */
  709. EXTERN_API( OSStatus )
  710. KCFindNextItem(
  711. KCSearchRef search,
  712. KCItemRef * item);
  713. /*
  714. * KCReleaseSearch()
  715. *
  716. * Availability:
  717. * Non-Carbon CFM: in KeychainLib 1.0 and later
  718. * CarbonLib: in CarbonLib 1.1 and later
  719. * Mac OS X: in version 10.0 and later
  720. */
  721. EXTERN_API( OSStatus )
  722. KCReleaseSearch(KCSearchRef * search);
  723. /* Managing keychain items */
  724. /*
  725. * KCDeleteItem()
  726. *
  727. * Availability:
  728. * Non-Carbon CFM: in KeychainLib 1.0 and later
  729. * CarbonLib: in CarbonLib 1.1 and later
  730. * Mac OS X: in version 10.0 and later
  731. */
  732. EXTERN_API( OSStatus )
  733. KCDeleteItem(KCItemRef item);
  734. /*
  735. * KCGetData()
  736. *
  737. * Availability:
  738. * Non-Carbon CFM: in KeychainLib 1.0 and later
  739. * CarbonLib: in CarbonLib 1.1 and later
  740. * Mac OS X: in version 10.0 and later
  741. */
  742. EXTERN_API( OSStatus )
  743. KCGetData(
  744. KCItemRef item,
  745. UInt32 maxLength,
  746. void * data,
  747. UInt32 * actualLength);
  748. /* Locking a keychain */
  749. /*
  750. * KCLock()
  751. *
  752. * Availability:
  753. * Non-Carbon CFM: in KeychainLib 1.0 and later
  754. * CarbonLib: in CarbonLib 1.1 and later
  755. * Mac OS X: in version 10.0 and later
  756. */
  757. EXTERN_API( OSStatus )
  758. KCLock(KCRef keychain);
  759. /* Routines that use "C" strings */
  760. /*
  761. * kcgetkeychainname()
  762. *
  763. * Availability:
  764. * Non-Carbon CFM: in KeychainLib 2.0 and later
  765. * CarbonLib: in CarbonLib 1.1 and later
  766. * Mac OS X: in version 10.0 and later
  767. */
  768. EXTERN_API_C( OSStatus )
  769. kcgetkeychainname(
  770. KCRef keychain,
  771. char * keychainName);
  772. /*
  773. * kcfindapplesharepassword()
  774. *
  775. * Availability:
  776. * Non-Carbon CFM: in KeychainLib 1.0 and later
  777. * CarbonLib: in CarbonLib 1.1 and later
  778. * Mac OS X: in version 10.0 and later
  779. */
  780. EXTERN_API_C( OSStatus )
  781. kcfindapplesharepassword(
  782. AFPServerSignature * serverSignature, /* can be NULL */
  783. const char * serverAddress, /* can be NULL */
  784. const char * serverName, /* can be NULL */
  785. const char * volumeName, /* can be NULL */
  786. const char * accountName, /* can be NULL */
  787. UInt32 maxLength,
  788. void * passwordData,
  789. UInt32 * actualLength,
  790. KCItemRef * item); /* can be NULL */
  791. /*
  792. * kcfindinternetpassword()
  793. *
  794. * Availability:
  795. * Non-Carbon CFM: in KeychainLib 1.0 and later
  796. * CarbonLib: in CarbonLib 1.1 and later
  797. * Mac OS X: in version 10.0 and later
  798. */
  799. EXTERN_API_C( OSStatus )
  800. kcfindinternetpassword(
  801. const char * serverName, /* can be NULL */
  802. const char * securityDomain, /* can be NULL */
  803. const char * accountName, /* can be NULL */
  804. UInt16 port,
  805. OSType protocol,
  806. OSType authType,
  807. UInt32 maxLength,
  808. void * passwordData,
  809. UInt32 * actualLength,
  810. KCItemRef * item); /* can be NULL */
  811. /*
  812. * kcfindinternetpasswordwithpath()
  813. *
  814. * Availability:
  815. * Non-Carbon CFM: in KeychainLib 2.0 and later
  816. * CarbonLib: in CarbonLib 1.1 and later
  817. * Mac OS X: in version 10.0 and later
  818. */
  819. EXTERN_API_C( OSStatus )
  820. kcfindinternetpasswordwithpath(
  821. const char * serverName, /* can be NULL */
  822. const char * securityDomain, /* can be NULL */
  823. const char * accountName, /* can be NULL */
  824. const char * path, /* can be NULL */
  825. UInt16 port,
  826. OSType protocol,
  827. OSType authType,
  828. UInt32 maxLength,
  829. void * passwordData,
  830. UInt32 * actualLength,
  831. KCItemRef * item); /* can be NULL */
  832. /*
  833. * kcfindgenericpassword()
  834. *
  835. * Availability:
  836. * Non-Carbon CFM: in KeychainLib 1.0 and later
  837. * CarbonLib: in CarbonLib 1.1 and later
  838. * Mac OS X: in version 10.0 and later
  839. */
  840. EXTERN_API_C( OSStatus )
  841. kcfindgenericpassword(
  842. const char * serviceName, /* can be NULL */
  843. const char * accountName, /* can be NULL */
  844. UInt32 maxLength,
  845. void * passwordData,
  846. UInt32 * actualLength,
  847. KCItemRef * item); /* can be NULL */
  848. #if PRAGMA_STRUCT_ALIGN
  849. #pragma options align=reset
  850. #elif PRAGMA_STRUCT_PACKPUSH
  851. #pragma pack(pop)
  852. #elif PRAGMA_STRUCT_PACK
  853. #pragma pack()
  854. #endif
  855. #ifdef PRAGMA_IMPORT_OFF
  856. #pragma import off
  857. #elif PRAGMA_IMPORT
  858. #pragma import reset
  859. #endif
  860. #ifdef __cplusplus
  861. }
  862. #endif
  863. #endif /* __KEYCHAINCORE__ */