KeychainCore.pas 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806
  1. {
  2. File: KeychainCore.p
  3. Contains: Keychain low-level Interfaces
  4. Version: Technology: Keychain 3.0
  5. Release: Universal Interfaces 3.4.2
  6. Copyright: © 2000-2002 by Apple Computer, Inc., all rights reserved
  7. Bugs?: For bug reports, consult the following page on
  8. the World Wide Web:
  9. http://www.freepascal.org/bugs.html
  10. }
  11. {
  12. Modified for use with Free Pascal
  13. Version 200
  14. Please report any bugs to <[email protected]>
  15. }
  16. {$mode macpas}
  17. {$packenum 1}
  18. {$macro on}
  19. {$inline on}
  20. {$CALLING MWPASCAL}
  21. unit KeychainCore;
  22. interface
  23. {$setc UNIVERSAL_INTERFACES_VERSION := $0342}
  24. {$setc GAP_INTERFACES_VERSION := $0200}
  25. {$ifc not defined USE_CFSTR_CONSTANT_MACROS}
  26. {$setc USE_CFSTR_CONSTANT_MACROS := TRUE}
  27. {$endc}
  28. {$ifc defined CPUPOWERPC and defined CPUI386}
  29. {$error Conflicting initial definitions for CPUPOWERPC and CPUI386}
  30. {$endc}
  31. {$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN}
  32. {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN}
  33. {$endc}
  34. {$ifc not defined __ppc__ and defined CPUPOWERPC}
  35. {$setc __ppc__ := 1}
  36. {$elsec}
  37. {$setc __ppc__ := 0}
  38. {$endc}
  39. {$ifc not defined __i386__ and defined CPUI386}
  40. {$setc __i386__ := 1}
  41. {$elsec}
  42. {$setc __i386__ := 0}
  43. {$endc}
  44. {$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__}
  45. {$error Conflicting definitions for __ppc__ and __i386__}
  46. {$endc}
  47. {$ifc defined __ppc__ and __ppc__}
  48. {$setc TARGET_CPU_PPC := TRUE}
  49. {$setc TARGET_CPU_X86 := FALSE}
  50. {$elifc defined __i386__ and __i386__}
  51. {$setc TARGET_CPU_PPC := FALSE}
  52. {$setc TARGET_CPU_X86 := TRUE}
  53. {$elsec}
  54. {$error Neither __ppc__ nor __i386__ is defined.}
  55. {$endc}
  56. {$setc TARGET_CPU_PPC_64 := FALSE}
  57. {$ifc defined FPC_BIG_ENDIAN}
  58. {$setc TARGET_RT_BIG_ENDIAN := TRUE}
  59. {$setc TARGET_RT_LITTLE_ENDIAN := FALSE}
  60. {$elifc defined FPC_LITTLE_ENDIAN}
  61. {$setc TARGET_RT_BIG_ENDIAN := FALSE}
  62. {$setc TARGET_RT_LITTLE_ENDIAN := TRUE}
  63. {$elsec}
  64. {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.}
  65. {$endc}
  66. {$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE}
  67. {$setc CALL_NOT_IN_CARBON := FALSE}
  68. {$setc OLDROUTINENAMES := FALSE}
  69. {$setc OPAQUE_TOOLBOX_STRUCTS := TRUE}
  70. {$setc OPAQUE_UPP_TYPES := TRUE}
  71. {$setc OTCARBONAPPLICATION := TRUE}
  72. {$setc OTKERNEL := FALSE}
  73. {$setc PM_USE_SESSION_APIS := TRUE}
  74. {$setc TARGET_API_MAC_CARBON := TRUE}
  75. {$setc TARGET_API_MAC_OS8 := FALSE}
  76. {$setc TARGET_API_MAC_OSX := TRUE}
  77. {$setc TARGET_CARBON := TRUE}
  78. {$setc TARGET_CPU_68K := FALSE}
  79. {$setc TARGET_CPU_MIPS := FALSE}
  80. {$setc TARGET_CPU_SPARC := FALSE}
  81. {$setc TARGET_OS_MAC := TRUE}
  82. {$setc TARGET_OS_UNIX := FALSE}
  83. {$setc TARGET_OS_WIN32 := FALSE}
  84. {$setc TARGET_RT_MAC_68881 := FALSE}
  85. {$setc TARGET_RT_MAC_CFM := FALSE}
  86. {$setc TARGET_RT_MAC_MACHO := TRUE}
  87. {$setc TYPED_FUNCTION_POINTERS := TRUE}
  88. {$setc TYPE_BOOL := FALSE}
  89. {$setc TYPE_EXTENDED := FALSE}
  90. {$setc TYPE_LONGLONG := TRUE}
  91. uses MacTypes,Files,Aliases,CodeFragments,MacErrors,Processes,Events;
  92. {$ALIGN MAC68K}
  93. { Data structures and types }
  94. type
  95. SecKeychainRef = ^SInt32; { an opaque 32-bit type }
  96. SecKeychainRefPtr = ^SecKeychainRef; { when a var xx:SecKeychainRef parameter can be nil, it is changed to xx: SecKeychainRefPtr }
  97. SecKeychainItemRef = ^SInt32; { an opaque 32-bit type }
  98. SecKeychainItemRefPtr = ^SecKeychainItemRef; { when a var xx:SecKeychainItemRef parameter can be nil, it is changed to xx: SecKeychainItemRefPtr }
  99. SecKeychainSearchRef = ^SInt32; { an opaque 32-bit type }
  100. SecKeychainSearchRefPtr = ^SecKeychainSearchRef; { when a var xx:SecKeychainSearchRef parameter can be nil, it is changed to xx: SecKeychainSearchRefPtr }
  101. SecKeychainAttrType = OSType;
  102. SecKeychainStatus = UInt32;
  103. SecKeychainAttributePtr = ^SecKeychainAttribute;
  104. SecKeychainAttribute = record
  105. tag: SecKeychainAttrType; { 4-byte attribute tag }
  106. length: UInt32; { Length of attribute data }
  107. data: Ptr; { Pointer to attribute data }
  108. end;
  109. SecKeychainAttributeListPtr = ^SecKeychainAttributeList;
  110. SecKeychainAttributeList = record
  111. count: UInt32; { How many attributes in the array }
  112. attr: SecKeychainAttributePtr; { Pointer to first attribute in array }
  113. end;
  114. KCRef = SecKeychainRef;
  115. KCItemRef = SecKeychainItemRef;
  116. KCSearchRef = SecKeychainSearchRef;
  117. KCRefPtr = ^KCRef;
  118. KCItemRefPtr = ^KCItemRef;
  119. KCSearchRefPtr = ^KCSearchRef;
  120. KCAttribute = SecKeychainAttribute;
  121. KCAttributePtr = ^KCAttribute;
  122. KCAttributeList = SecKeychainAttributeList;
  123. KCAttributeListPtr = ^KCAttributeList;
  124. KCAttrType = SecKeychainAttrType;
  125. KCStatus = SecKeychainStatus;
  126. KCEvent = UInt16;
  127. const
  128. kIdleKCEvent = 0; { null event }
  129. kLockKCEvent = 1; { a keychain was locked }
  130. kUnlockKCEvent = 2; { a keychain was unlocked }
  131. kAddKCEvent = 3; { an item was added to a keychain }
  132. kDeleteKCEvent = 4; { an item was deleted from a keychain }
  133. kUpdateKCEvent = 5; { an item was updated }
  134. kPasswordChangedKCEvent = 6; { the keychain identity was changed }
  135. kSystemKCEvent = 8; { the keychain client can process events }
  136. kDefaultChangedKCEvent = 9; { the default keychain was changed }
  137. kDataAccessKCEvent = 10; { a process has accessed a keychain item's data }
  138. kKeychainListChangedKCEvent = 11; { the list of keychains has changed }
  139. type
  140. KCEventMask = UInt16;
  141. const
  142. kIdleKCEventMask = $01;
  143. kLockKCEventMask = $02;
  144. kUnlockKCEventMask = $04;
  145. kAddKCEventMask = $08;
  146. kDeleteKCEventMask = $10;
  147. kUpdateKCEventMask = $20;
  148. kPasswordChangedKCEventMask = $40;
  149. kSystemEventKCEventMask = $0100;
  150. kDefaultChangedKCEventMask = $0200;
  151. kDataAccessKCEventMask = $0400;
  152. kEveryKCEventMask = $FFFF; { all of the above }
  153. type
  154. AFPServerSignature = packed array [0..15] of UInt8;
  155. AFPServerSignaturePtr = ^AFPServerSignature; { when a VAR xx: AFPServerSignature parameter can be nil, it is changed to xx: AFPServerSignaturePtr }
  156. KCPublicKeyHash = packed array [0..19] of UInt8;
  157. KCCallbackInfoPtr = ^KCCallbackInfo;
  158. KCCallbackInfo = record
  159. version: UInt32;
  160. item: KCItemRef;
  161. processID: ProcessSerialNumber;
  162. event: EventRecord;
  163. keychain: KCRef;
  164. end;
  165. const
  166. kUnlockStateKCStatus = 1;
  167. kRdPermKCStatus = 2;
  168. kWrPermKCStatus = 4;
  169. kCertificateKCItemClass = $63657274 (* 'cert' *); { Certificate }
  170. kAppleSharePasswordKCItemClass = $61736870 (* 'ashp' *); { Appleshare password }
  171. kInternetPasswordKCItemClass = $696E6574 (* 'inet' *); { Internet password }
  172. kGenericPasswordKCItemClass = $67656E70 (* 'genp' *); { Generic password }
  173. type
  174. KCItemClass = FourCharCode;
  175. const
  176. { Common attributes }
  177. kClassKCItemAttr = $636C6173 (* 'clas' *); { Item class (KCItemClass) }
  178. kCreationDateKCItemAttr = $63646174 (* 'cdat' *); { Date the item was created (UInt32) }
  179. kModDateKCItemAttr = $6D646174 (* 'mdat' *); { Last time the item was updated (UInt32) }
  180. kDescriptionKCItemAttr = $64657363 (* 'desc' *); { User-visible description string (string) }
  181. kCommentKCItemAttr = $69636D74 (* 'icmt' *); { User's comment about the item (string) }
  182. kCreatorKCItemAttr = $63727472 (* 'crtr' *); { Item's creator (OSType) }
  183. kTypeKCItemAttr = $74797065 (* 'type' *); { Item's type (OSType) }
  184. kScriptCodeKCItemAttr = $73637270 (* 'scrp' *); { Script code for all strings (ScriptCode) }
  185. kLabelKCItemAttr = $6C61626C (* 'labl' *); { Item label (string) }
  186. kInvisibleKCItemAttr = $696E7669 (* 'invi' *); { Invisible (boolean) }
  187. kNegativeKCItemAttr = $6E656761 (* 'nega' *); { Negative (boolean) }
  188. kCustomIconKCItemAttr = $63757369 (* 'cusi' *); { Custom icon (boolean) }
  189. kAccountKCItemAttr = $61636374 (* 'acct' *); { User account (string) }
  190. { Unique Generic password attributes }
  191. kServiceKCItemAttr = $73766365 (* 'svce' *); { Service (string) }
  192. kGenericKCItemAttr = $67656E61 (* 'gena' *); { User-defined attribute (untyped bytes) }
  193. { Unique Internet password attributes }
  194. kSecurityDomainKCItemAttr = $73646D6E (* 'sdmn' *); { Security domain (string) }
  195. kServerKCItemAttr = $73727672 (* 'srvr' *); { Server's domain name or IP address (string) }
  196. kAuthTypeKCItemAttr = $61747970 (* 'atyp' *); { Authentication Type (KCAuthType) }
  197. kPortKCItemAttr = $706F7274 (* 'port' *); { Port (UInt16) }
  198. kPathKCItemAttr = $70617468 (* 'path' *); { Path (string) }
  199. { Unique Appleshare password attributes }
  200. kVolumeKCItemAttr = $766C6D65 (* 'vlme' *); { Volume (string) }
  201. kAddressKCItemAttr = $61646472 (* 'addr' *); { Server address (IP or domain name) or zone name (string) }
  202. kSignatureKCItemAttr = $73736967 (* 'ssig' *); { Server signature block (AFPServerSignature) }
  203. { Unique AppleShare and Internet attributes }
  204. kProtocolKCItemAttr = $7074636C (* 'ptcl' *); { Protocol (KCProtocolType) }
  205. { Certificate attributes }
  206. kSubjectKCItemAttr = $7375626A (* 'subj' *); { Subject distinguished name (DER-encoded data) }
  207. kCommonNameKCItemAttr = $636E2020 (* 'cn ' *); { Common Name (UTF8-encoded string) }
  208. kIssuerKCItemAttr = $69737375 (* 'issu' *); { Issuer distinguished name (DER-encoded data) }
  209. kSerialNumberKCItemAttr = $736E6272 (* 'snbr' *); { Certificate serial number (DER-encoded data) }
  210. kEMailKCItemAttr = $6D61696C (* 'mail' *); { E-mail address (ASCII-encoded string) }
  211. kPublicKeyHashKCItemAttr = $68706B79 (* 'hpky' *); { Hash of public key (KCPublicKeyHash), 20 bytes max. }
  212. kIssuerURLKCItemAttr = $6975726C (* 'iurl' *); { URL of the certificate issuer (ASCII-encoded string) }
  213. { Shared by keys and certificates }
  214. kEncryptKCItemAttr = $656E6372 (* 'encr' *); { Encrypt (Boolean) }
  215. kDecryptKCItemAttr = $64656372 (* 'decr' *); { Decrypt (Boolean) }
  216. kSignKCItemAttr = $7369676E (* 'sign' *); { Sign (Boolean) }
  217. kVerifyKCItemAttr = $76657269 (* 'veri' *); { Verify (Boolean) }
  218. kWrapKCItemAttr = $77726170 (* 'wrap' *); { Wrap (Boolean) }
  219. kUnwrapKCItemAttr = $756E7772 (* 'unwr' *); { Unwrap (Boolean) }
  220. kStartDateKCItemAttr = $73646174 (* 'sdat' *); { Start Date (UInt32) }
  221. kEndDateKCItemAttr = $65646174 (* 'edat' *); { End Date (UInt32) }
  222. type
  223. KCItemAttr = FourCharCode;
  224. const
  225. kKCAuthTypeNTLM = $6E746C6D (* 'ntlm' *);
  226. kKCAuthTypeMSN = $6D736E61 (* 'msna' *);
  227. kKCAuthTypeDPA = $64706161 (* 'dpaa' *);
  228. kKCAuthTypeRPA = $72706161 (* 'rpaa' *);
  229. kKCAuthTypeHTTPDigest = $68747464 (* 'httd' *);
  230. kKCAuthTypeDefault = $64666C74 (* 'dflt' *);
  231. type
  232. KCAuthType = FourCharCode;
  233. const
  234. kKCProtocolTypeFTP = $66747020 (* 'ftp ' *);
  235. kKCProtocolTypeFTPAccount = $66747061 (* 'ftpa' *);
  236. kKCProtocolTypeHTTP = $68747470 (* 'http' *);
  237. kKCProtocolTypeIRC = $69726320 (* 'irc ' *);
  238. kKCProtocolTypeNNTP = $6E6E7470 (* 'nntp' *);
  239. kKCProtocolTypePOP3 = $706F7033 (* 'pop3' *);
  240. kKCProtocolTypeSMTP = $736D7470 (* 'smtp' *);
  241. kKCProtocolTypeSOCKS = $736F7820 (* 'sox ' *);
  242. kKCProtocolTypeIMAP = $696D6170 (* 'imap' *);
  243. kKCProtocolTypeLDAP = $6C646170 (* 'ldap' *);
  244. kKCProtocolTypeAppleTalk = $61746C6B (* 'atlk' *);
  245. kKCProtocolTypeAFP = $61667020 (* 'afp ' *);
  246. kKCProtocolTypeTelnet = $74656C6E (* 'teln' *);
  247. type
  248. KCProtocolType = FourCharCode;
  249. KCCertAddOptions = UInt32;
  250. const
  251. kSecOptionReserved = $000000FF; { First byte reserved for SecOptions flags }
  252. kCertUsageShift = 8; { start at bit 8 }
  253. kCertUsageSigningAdd = $0100;
  254. kCertUsageSigningAskAndAdd = $0200;
  255. kCertUsageVerifyAdd = $0400;
  256. kCertUsageVerifyAskAndAdd = $0800;
  257. kCertUsageEncryptAdd = $1000;
  258. kCertUsageEncryptAskAndAdd = $2000;
  259. kCertUsageDecryptAdd = $4000;
  260. kCertUsageDecryptAskAndAdd = $8000;
  261. kCertUsageKeyExchAdd = $00010000;
  262. kCertUsageKeyExchAskAndAdd = $00020000;
  263. kCertUsageRootAdd = $00040000;
  264. kCertUsageRootAskAndAdd = $00080000;
  265. kCertUsageSSLAdd = $00100000;
  266. kCertUsageSSLAskAndAdd = $00200000;
  267. kCertUsageAllAdd = $7FFFFF00;
  268. type
  269. KCVerifyStopOn = UInt16;
  270. const
  271. kPolicyKCStopOn = 0;
  272. kNoneKCStopOn = 1;
  273. kFirstPassKCStopOn = 2;
  274. kFirstFailKCStopOn = 3;
  275. type
  276. KCCertSearchOptions = UInt32;
  277. const
  278. kCertSearchShift = 0; { start at bit 0 }
  279. kCertSearchSigningIgnored = 0;
  280. kCertSearchSigningAllowed = $01;
  281. kCertSearchSigningDisallowed = $02;
  282. kCertSearchSigningMask = $03;
  283. kCertSearchVerifyIgnored = 0;
  284. kCertSearchVerifyAllowed = $04;
  285. kCertSearchVerifyDisallowed = $08;
  286. kCertSearchVerifyMask = $0C;
  287. kCertSearchEncryptIgnored = 0;
  288. kCertSearchEncryptAllowed = $10;
  289. kCertSearchEncryptDisallowed = $20;
  290. kCertSearchEncryptMask = $30;
  291. kCertSearchDecryptIgnored = 0;
  292. kCertSearchDecryptAllowed = $40;
  293. kCertSearchDecryptDisallowed = $80;
  294. kCertSearchDecryptMask = $C0;
  295. kCertSearchWrapIgnored = 0;
  296. kCertSearchWrapAllowed = $0100;
  297. kCertSearchWrapDisallowed = $0200;
  298. kCertSearchWrapMask = $0300;
  299. kCertSearchUnwrapIgnored = 0;
  300. kCertSearchUnwrapAllowed = $0400;
  301. kCertSearchUnwrapDisallowed = $0800;
  302. kCertSearchUnwrapMask = $0C00;
  303. kCertSearchPrivKeyRequired = $1000;
  304. kCertSearchAny = 0;
  305. { Other constants }
  306. kAnyPort = 0;
  307. kAnyProtocol = 0;
  308. kAnyAuthType = 0;
  309. { Opening and getting information about the Keychain Manager }
  310. {
  311. * KCGetKeychainManagerVersion()
  312. *
  313. * Availability:
  314. * Non-Carbon CFM: in KeychainLib 1.0 and later
  315. * CarbonLib: in CarbonLib 1.1 and later
  316. * Mac OS X: not available
  317. }
  318. function KCGetKeychainManagerVersion(var returnVers: UInt32): OSStatus; external name '_KCGetKeychainManagerVersion';
  319. {$ifc TARGET_RT_MAC_CFM}
  320. {
  321. KeychainManagerAvailable() is a macro/inline available only in C/C++.
  322. To get the same functionality from pascal or assembly, you need
  323. to test if KCGetKeychainManagerVersion function is not NULL. For instance:
  324. gKeychainManagerAvailable = FALSE;
  325. IF @KCGetKeychainManagerVersion <> kUnresolvedCFragSymbolAddress THEN
  326. gKeychainManagerAvailable = TRUE;
  327. end
  328. }
  329. {$elsec}
  330. {$ifc TARGET_RT_MAC_MACHO}
  331. {$endc}
  332. {$endc}
  333. { Managing the Human Interface }
  334. {
  335. * KCSetInteractionAllowed()
  336. *
  337. * Availability:
  338. * Non-Carbon CFM: in KeychainLib 2.0 and later
  339. * CarbonLib: in CarbonLib 1.1 and later
  340. * Mac OS X: in version 10.0 and later
  341. }
  342. function KCSetInteractionAllowed(state: boolean): OSStatus; external name '_KCSetInteractionAllowed';
  343. {
  344. * KCIsInteractionAllowed()
  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. function KCIsInteractionAllowed: boolean; external name '_KCIsInteractionAllowed';
  352. { Creating references to keychains }
  353. {
  354. * KCMakeKCRefFromFSSpec()
  355. *
  356. * Availability:
  357. * Non-Carbon CFM: in KeychainLib 2.0 and later
  358. * CarbonLib: in CarbonLib 1.1 and later
  359. * Mac OS X: in version 10.0 and later
  360. }
  361. function KCMakeKCRefFromFSSpec(var keychainFSSpec: FSSpec; var keychain: KCRef): OSStatus; external name '_KCMakeKCRefFromFSSpec';
  362. {
  363. * KCMakeKCRefFromAlias()
  364. *
  365. * Availability:
  366. * Non-Carbon CFM: in KeychainLib 2.0 and later
  367. * CarbonLib: in CarbonLib 1.1 and later
  368. * Mac OS X: in version 10.0 and later
  369. }
  370. function KCMakeKCRefFromAlias(keychainAlias: AliasHandle; var keychain: KCRef): OSStatus; external name '_KCMakeKCRefFromAlias';
  371. {
  372. * KCMakeAliasFromKCRef()
  373. *
  374. * Availability:
  375. * Non-Carbon CFM: in KeychainLib 2.0 and later
  376. * CarbonLib: in CarbonLib 1.1 and later
  377. * Mac OS X: in version 10.0 and later
  378. }
  379. function KCMakeAliasFromKCRef(keychain: KCRef; var keychainAlias: AliasHandle): OSStatus; external name '_KCMakeAliasFromKCRef';
  380. {
  381. * KCReleaseKeychain()
  382. *
  383. * Availability:
  384. * Non-Carbon CFM: in KeychainLib 2.0 and later
  385. * CarbonLib: in CarbonLib 1.1 and later
  386. * Mac OS X: in version 10.0 and later
  387. }
  388. function KCReleaseKeychain(var keychain: KCRef): OSStatus; external name '_KCReleaseKeychain';
  389. { Specifying the default keychain }
  390. {
  391. * KCGetDefaultKeychain()
  392. *
  393. * Availability:
  394. * Non-Carbon CFM: in KeychainLib 2.0 and later
  395. * CarbonLib: in CarbonLib 1.1 and later
  396. * Mac OS X: in version 10.0 and later
  397. }
  398. function KCGetDefaultKeychain(var keychain: KCRef): OSStatus; external name '_KCGetDefaultKeychain';
  399. {
  400. * KCSetDefaultKeychain()
  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. function KCSetDefaultKeychain(keychain: KCRef): OSStatus; external name '_KCSetDefaultKeychain';
  408. { Getting information about a keychain }
  409. {
  410. * KCGetStatus()
  411. *
  412. * Availability:
  413. * Non-Carbon CFM: in KeychainLib 1.0 and later
  414. * CarbonLib: in CarbonLib 1.1 and later
  415. * Mac OS X: in version 10.0 and later
  416. }
  417. function KCGetStatus(keychain: KCRef; var keychainStatus: UInt32): OSStatus; external name '_KCGetStatus';
  418. {
  419. * KCGetKeychain()
  420. *
  421. * Availability:
  422. * Non-Carbon CFM: in KeychainLib 1.0 and later
  423. * CarbonLib: in CarbonLib 1.1 and later
  424. * Mac OS X: in version 10.0 and later
  425. }
  426. function KCGetKeychain(item: KCItemRef; var keychain: KCRef): OSStatus; external name '_KCGetKeychain';
  427. {
  428. * KCGetKeychainName()
  429. *
  430. * Availability:
  431. * Non-Carbon CFM: in KeychainLib 2.0 and later
  432. * CarbonLib: in CarbonLib 1.1 and later
  433. * Mac OS X: in version 10.0 and later
  434. }
  435. function KCGetKeychainName(keychain: KCRef; keychainName: StringPtr): OSStatus; external name '_KCGetKeychainName';
  436. { Enumerating available keychains }
  437. {
  438. * KCCountKeychains()
  439. *
  440. * Availability:
  441. * Non-Carbon CFM: in KeychainLib 1.0 and later
  442. * CarbonLib: in CarbonLib 1.1 and later
  443. * Mac OS X: in version 10.0 and later
  444. }
  445. function KCCountKeychains: UInt16; external name '_KCCountKeychains';
  446. {
  447. * KCGetIndKeychain()
  448. *
  449. * Availability:
  450. * Non-Carbon CFM: in KeychainLib 1.0 and later
  451. * CarbonLib: in CarbonLib 1.1 and later
  452. * Mac OS X: in version 10.0 and later
  453. }
  454. function KCGetIndKeychain(index: UInt16; var keychain: KCRef): OSStatus; external name '_KCGetIndKeychain';
  455. type
  456. {$ifc TYPED_FUNCTION_POINTERS}
  457. KCCallbackProcPtr = function(keychainEvent: KCEvent; var info: KCCallbackInfo; userContext: UnivPtr): OSStatus;
  458. {$elsec}
  459. KCCallbackProcPtr = ProcPtr;
  460. {$endc}
  461. {$ifc OPAQUE_UPP_TYPES}
  462. KCCallbackUPP = ^SInt32; { an opaque UPP }
  463. {$elsec}
  464. KCCallbackUPP = UniversalProcPtr;
  465. {$endc}
  466. const
  467. uppKCCallbackProcInfo = $00000FB0;
  468. {
  469. * NewKCCallbackUPP()
  470. *
  471. * Availability:
  472. * Non-Carbon CFM: available as macro/inline
  473. * CarbonLib: in CarbonLib 1.1 and later
  474. * Mac OS X: in version 10.0 and later
  475. }
  476. function NewKCCallbackUPP(userRoutine: KCCallbackProcPtr): KCCallbackUPP; external name '_NewKCCallbackUPP'; { old name was NewKCCallbackProc }
  477. {
  478. * DisposeKCCallbackUPP()
  479. *
  480. * Availability:
  481. * Non-Carbon CFM: available as macro/inline
  482. * CarbonLib: in CarbonLib 1.1 and later
  483. * Mac OS X: in version 10.0 and later
  484. }
  485. procedure DisposeKCCallbackUPP(userUPP: KCCallbackUPP); external name '_DisposeKCCallbackUPP';
  486. {
  487. * InvokeKCCallbackUPP()
  488. *
  489. * Availability:
  490. * Non-Carbon CFM: available as macro/inline
  491. * CarbonLib: in CarbonLib 1.1 and later
  492. * Mac OS X: in version 10.0 and later
  493. }
  494. function InvokeKCCallbackUPP(keychainEvent: KCEvent; var info: KCCallbackInfo; userContext: UnivPtr; userRoutine: KCCallbackUPP): OSStatus; external name '_InvokeKCCallbackUPP'; { old name was CallKCCallbackProc }
  495. { Keychain Manager callbacks }
  496. {
  497. * KCAddCallback()
  498. *
  499. * Availability:
  500. * Non-Carbon CFM: in KeychainLib 1.0 and later
  501. * CarbonLib: in CarbonLib 1.1 and later
  502. * Mac OS X: in version 10.0 and later
  503. }
  504. function KCAddCallback(callbackProc: KCCallbackUPP; eventMask: KCEventMask; userContext: UnivPtr): OSStatus; external name '_KCAddCallback';
  505. {
  506. * KCRemoveCallback()
  507. *
  508. * Availability:
  509. * Non-Carbon CFM: in KeychainLib 1.0 and later
  510. * CarbonLib: in CarbonLib 1.1 and later
  511. * Mac OS X: in version 10.0 and later
  512. }
  513. function KCRemoveCallback(callbackProc: KCCallbackUPP): OSStatus; external name '_KCRemoveCallback';
  514. { Creating and editing a keychain item }
  515. {
  516. * KCNewItem()
  517. *
  518. * Availability:
  519. * Non-Carbon CFM: in KeychainLib 1.0 and later
  520. * CarbonLib: in CarbonLib 1.1 and later
  521. * Mac OS X: in version 10.0 and later
  522. }
  523. function KCNewItem(itemClass: KCItemClass; itemCreator: OSType; length: UInt32; data: UnivPtr; var item: KCItemRef): OSStatus; external name '_KCNewItem';
  524. {
  525. * KCSetAttribute()
  526. *
  527. * Availability:
  528. * Non-Carbon CFM: in KeychainLib 1.0 and later
  529. * CarbonLib: in CarbonLib 1.1 and later
  530. * Mac OS X: in version 10.0 and later
  531. }
  532. function KCSetAttribute(item: KCItemRef; var attr: KCAttribute): OSStatus; external name '_KCSetAttribute';
  533. {
  534. * KCGetAttribute()
  535. *
  536. * Availability:
  537. * Non-Carbon CFM: in KeychainLib 1.0 and later
  538. * CarbonLib: in CarbonLib 1.1 and later
  539. * Mac OS X: in version 10.0 and later
  540. }
  541. function KCGetAttribute(item: KCItemRef; var attr: KCAttribute; var actualLength: UInt32): OSStatus; external name '_KCGetAttribute';
  542. {
  543. * KCSetData()
  544. *
  545. * Availability:
  546. * Non-Carbon CFM: in KeychainLib 1.0 and later
  547. * CarbonLib: in CarbonLib 1.1 and later
  548. * Mac OS X: in version 10.0 and later
  549. }
  550. function KCSetData(item: KCItemRef; length: UInt32; data: UnivPtr): OSStatus; external name '_KCSetData';
  551. { Managing keychain items }
  552. {
  553. * KCUpdateItem()
  554. *
  555. * Availability:
  556. * Non-Carbon CFM: in KeychainLib 1.0 and later
  557. * CarbonLib: in CarbonLib 1.1 and later
  558. * Mac OS X: in version 10.0 and later
  559. }
  560. function KCUpdateItem(item: KCItemRef): OSStatus; external name '_KCUpdateItem';
  561. {
  562. * KCReleaseItem()
  563. *
  564. * Availability:
  565. * Non-Carbon CFM: in KeychainLib 1.0 and later
  566. * CarbonLib: in CarbonLib 1.1 and later
  567. * Mac OS X: in version 10.0 and later
  568. }
  569. function KCReleaseItem(var item: KCItemRef): OSStatus; external name '_KCReleaseItem';
  570. {
  571. * KCCopyItem()
  572. *
  573. * Availability:
  574. * Non-Carbon CFM: in KeychainLib 2.0 and later
  575. * CarbonLib: in CarbonLib 1.1 and later
  576. * Mac OS X: in version 10.0 and later
  577. }
  578. function KCCopyItem(item: KCItemRef; destKeychain: KCRef; var copy: KCItemRef): OSStatus; external name '_KCCopyItem';
  579. { Searching and enumerating keychain items }
  580. {
  581. * KCFindFirstItem()
  582. *
  583. * Availability:
  584. * Non-Carbon CFM: in KeychainLib 1.0 and later
  585. * CarbonLib: in CarbonLib 1.1 and later
  586. * Mac OS X: in version 10.0 and later
  587. }
  588. function KCFindFirstItem(keychain: KCRef; attrList: {Const}KCAttributeListPtr; var search: KCSearchRef; var item: KCItemRef): OSStatus; external name '_KCFindFirstItem';
  589. {
  590. * KCFindNextItem()
  591. *
  592. * Availability:
  593. * Non-Carbon CFM: in KeychainLib 1.0 and later
  594. * CarbonLib: in CarbonLib 1.1 and later
  595. * Mac OS X: in version 10.0 and later
  596. }
  597. function KCFindNextItem(search: KCSearchRef; var item: KCItemRef): OSStatus; external name '_KCFindNextItem';
  598. {
  599. * KCReleaseSearch()
  600. *
  601. * Availability:
  602. * Non-Carbon CFM: in KeychainLib 1.0 and later
  603. * CarbonLib: in CarbonLib 1.1 and later
  604. * Mac OS X: in version 10.0 and later
  605. }
  606. function KCReleaseSearch(var search: KCSearchRef): OSStatus; external name '_KCReleaseSearch';
  607. { Managing keychain items }
  608. {
  609. * KCDeleteItem()
  610. *
  611. * Availability:
  612. * Non-Carbon CFM: in KeychainLib 1.0 and later
  613. * CarbonLib: in CarbonLib 1.1 and later
  614. * Mac OS X: in version 10.0 and later
  615. }
  616. function KCDeleteItem(item: KCItemRef): OSStatus; external name '_KCDeleteItem';
  617. {
  618. * KCGetData()
  619. *
  620. * Availability:
  621. * Non-Carbon CFM: in KeychainLib 1.0 and later
  622. * CarbonLib: in CarbonLib 1.1 and later
  623. * Mac OS X: in version 10.0 and later
  624. }
  625. function KCGetData(item: KCItemRef; maxLength: UInt32; data: UnivPtr; var actualLength: UInt32): OSStatus; external name '_KCGetData';
  626. { Storing and retrieving AppleShare passwords }
  627. {
  628. * KCAddAppleSharePassword()
  629. *
  630. * Availability:
  631. * Non-Carbon CFM: in KeychainLib 1.0 and later
  632. * CarbonLib: in CarbonLib 1.1 and later
  633. * Mac OS X: in version 10.0 and later
  634. }
  635. function KCAddAppleSharePassword(var serverSignature: AFPServerSignature; serverAddress: StringPtr; serverName: StringPtr; volumeName: StringPtr; accountName: StringPtr; passwordLength: UInt32; passwordData: UnivPtr; item: KCItemRefPtr): OSStatus; external name '_KCAddAppleSharePassword';
  636. {
  637. * KCFindAppleSharePassword()
  638. *
  639. * Availability:
  640. * Non-Carbon CFM: in KeychainLib 1.0 and later
  641. * CarbonLib: in CarbonLib 1.1 and later
  642. * Mac OS X: in version 10.0 and later
  643. }
  644. function KCFindAppleSharePassword(serverSignature: AFPServerSignaturePtr; serverAddress: StringPtr; serverName: StringPtr; volumeName: StringPtr; accountName: StringPtr; maxLength: UInt32; passwordData: UnivPtr; var actualLength: UInt32; item: KCItemRefPtr): OSStatus; external name '_KCFindAppleSharePassword';
  645. { Storing and retrieving Internet passwords }
  646. {
  647. * KCAddInternetPassword()
  648. *
  649. * Availability:
  650. * Non-Carbon CFM: in KeychainLib 1.0 and later
  651. * CarbonLib: in CarbonLib 1.1 and later
  652. * Mac OS X: in version 10.0 and later
  653. }
  654. function KCAddInternetPassword(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; port: UInt16; protocol: OSType; authType: OSType; passwordLength: UInt32; passwordData: UnivPtr; item: KCItemRefPtr): OSStatus; external name '_KCAddInternetPassword';
  655. {
  656. * KCAddInternetPasswordWithPath()
  657. *
  658. * Availability:
  659. * Non-Carbon CFM: in KeychainLib 2.0 and later
  660. * CarbonLib: in CarbonLib 1.1 and later
  661. * Mac OS X: in version 10.0 and later
  662. }
  663. function KCAddInternetPasswordWithPath(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; path: StringPtr; port: UInt16; protocol: OSType; authType: OSType; passwordLength: UInt32; passwordData: UnivPtr; item: KCItemRefPtr): OSStatus; external name '_KCAddInternetPasswordWithPath';
  664. {
  665. * KCFindInternetPassword()
  666. *
  667. * Availability:
  668. * Non-Carbon CFM: in KeychainLib 1.0 and later
  669. * CarbonLib: in CarbonLib 1.1 and later
  670. * Mac OS X: in version 10.0 and later
  671. }
  672. function KCFindInternetPassword(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; port: UInt16; protocol: OSType; authType: OSType; maxLength: UInt32; passwordData: UnivPtr; var actualLength: UInt32; item: KCItemRefPtr): OSStatus; external name '_KCFindInternetPassword';
  673. {
  674. * KCFindInternetPasswordWithPath()
  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. function KCFindInternetPasswordWithPath(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; path: StringPtr; port: UInt16; protocol: OSType; authType: OSType; maxLength: UInt32; passwordData: UnivPtr; var actualLength: UInt32; item: KCItemRefPtr): OSStatus; external name '_KCFindInternetPasswordWithPath';
  682. { Storing and retrieving other types of passwords }
  683. {
  684. * KCAddGenericPassword()
  685. *
  686. * Availability:
  687. * Non-Carbon CFM: in KeychainLib 1.0 and later
  688. * CarbonLib: in CarbonLib 1.1 and later
  689. * Mac OS X: in version 10.0 and later
  690. }
  691. function KCAddGenericPassword(serviceName: StringPtr; accountName: StringPtr; passwordLength: UInt32; passwordData: UnivPtr; item: KCItemRefPtr): OSStatus; external name '_KCAddGenericPassword';
  692. {
  693. * KCFindGenericPassword()
  694. *
  695. * Availability:
  696. * Non-Carbon CFM: in KeychainLib 1.0 and later
  697. * CarbonLib: in CarbonLib 1.1 and later
  698. * Mac OS X: in version 10.0 and later
  699. }
  700. function KCFindGenericPassword(serviceName: StringPtr; accountName: StringPtr; maxLength: UInt32; passwordData: UnivPtr; var actualLength: UInt32; item: KCItemRefPtr): OSStatus; external name '_KCFindGenericPassword';
  701. {
  702. * KCLock()
  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. function KCLock(keychain: KCRef): OSStatus; external name '_KCLock';
  710. {$ALIGN MAC68K}
  711. end.