view dstep/coreservices/osservices/KeychainCore.d @ 11:07194b026fa4

Added bindings to a couple of frameworks, new license + some other things
author Jacob Carlborg <doob@me.com>
date Sat, 01 Aug 2009 15:03:28 +0200
parents
children
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Jul 22, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.coreservices.osservices.KeychainCore;

//import dstep.AvailabilityMacros;
import dstep.coreservices.carboncore.Aliases;
import dstep.coreservices.carboncore.CodeFragments;
import dstep.coreservices.carboncore.Files;
import dstep.coreservices.carboncore.MacErrors;
import dstep.coreservices.carboncore.MacTypes;
import dstep.objc.bridge.TypeEncoding;

struct OpaqueSecKeychainRef;
struct OpaqueSecKeychainItemRef;
struct OpaqueSecKeychainSearchRef;

alias OpaqueSecKeychainRef* SecKeychainRef;
alias OpaqueSecKeychainItemRef* SecKeychainItemRef;
alias OpaqueSecKeychainSearchRef* SecKeychainSearchRef;
alias uint SecKeychainAttrType;
alias uint SecKeychainStatus;
alias SecKeychainAttribute* SecKeychainAttributePtr;
alias SecKeychainRef KCRef;
alias SecKeychainItemRef KCItemRef;
alias SecKeychainSearchRef KCSearchRef;
alias SecKeychainAttribute KCAttribute;
alias SecKeychainAttributeList KCAttributeList;
alias uint KCAttrType;
alias uint KCStatus;
alias ushort KCEvent;
alias ushort KCEventMask;
alias uint KCItemClass;
alias uint KCItemAttr;
alias uint KCAuthType;
alias uint KCProtocolType;
alias uint KCCertAddOptions;
alias ushort KCVerifyStopOn;
alias uint KCCertSearchOptions;
alias KCCallbackProcPtr KCCallbackUPP;
alias ubyte[16] AFPServerSignature;

extern (C)
{
	alias int function (ushort, KCCallbackInfo*, void*) KCCallbackProcPtr;
}

// This is needed otherwise the enums will fail compiling with gdc
version (GNU)
{
	private
	{
		const __kCertificateKCItemClass = getOSType!("cert");
		const __kAppleSharePasswordKCItemClass = getOSType!("ashp");
		const __kInternetPasswordKCItemClass = getOSType!("inet");
		const __kGenericPasswordKCItemClass = getOSType!("genp");
		const __kClassKCItemAttr = getOSType!("clas");
		const __kCreationDateKCItemAttr = getOSType!("cdat");
		const __kModDateKCItemAttr = getOSType!("mdat");
		const __kDescriptionKCItemAttr = getOSType!("desc");
		const __kCommentKCItemAttr = getOSType!("icmt");
		const __kCreatorKCItemAttr = getOSType!("crtr");
		const __kTypeKCItemAttr = getOSType!("type");
		const __kScriptCodeKCItemAttr = getOSType!("scrp");
		const __kLabelKCItemAttr = getOSType!("labl");
		const __kInvisibleKCItemAttr = getOSType!("invi");
		const __kNegativeKCItemAttr = getOSType!("nega");
		const __kCustomIconKCItemAttr = getOSType!("cusi");
		const __kAccountKCItemAttr = getOSType!("acct");
		const __kServiceKCItemAttr = getOSType!("svce");
		const __kGenericKCItemAttr = getOSType!("gena");
		const __kSecurityDomainKCItemAttr = getOSType!("sdmn");
		const __kServerKCItemAttr = getOSType!("srvr");
		const __kAuthTypeKCItemAttr = getOSType!("atyp");
		const __kPortKCItemAttr = getOSType!("port");
		const __kPathKCItemAttr = getOSType!("path");
		const __kVolumeKCItemAttr = getOSType!("vlme");
		const __kAddressKCItemAttr = getOSType!("addr");
		const __kSignatureKCItemAttr = getOSType!("ssig");
		const __kProtocolKCItemAttr = getOSType!("ptcl");
		const __kSubjectKCItemAttr = getOSType!("subj");
		const __kCommonNameKCItemAttr = getOSType!("cn  ");
		const __kIssuerKCItemAttr = getOSType!("issu");
		const __kSerialNumberKCItemAttr = getOSType!("snbr");
		const __kEMailKCItemAttr = getOSType!("mail");
		const __kPublicKeyHashKCItemAttr = getOSType!("hpky");
		const __kIssuerURLKCItemAttr = getOSType!("iurl");
		const __kEncryptKCItemAttr = getOSType!("encr");
		const __kDecryptKCItemAttr = getOSType!("decr");
		const __kSignKCItemAttr = getOSType!("sign");
		const __kVerifyKCItemAttr = getOSType!("veri");
		const __kWrapKCItemAttr = getOSType!("wrap");
		const __kUnwrapKCItemAttr = getOSType!("unwr");
		const __kStartDateKCItemAttr = getOSType!("sdat");
		const __kEndDateKCItemAttr = getOSType!("edat");
		const __kKCAuthTypeNTLM = getOSType!("ntlm");
		const __kKCAuthTypeMSN = getOSType!("msna");
		const __kKCAuthTypeDPA = getOSType!("dpaa");
		const __kKCAuthTypeRPA = getOSType!("rpaa");
		const __kKCAuthTypeHTTPDigest = getOSType!("httd");
		const __kKCAuthTypeDefault = getOSType!("dflt");
		const __kKCProtocolTypeFTP = getOSType!("ftp ");
		const __kKCProtocolTypeFTPAccount = getOSType!("ftpa");
		const __kKCProtocolTypeHTTP = getOSType!("http");
		const __kKCProtocolTypeIRC = getOSType!("irc ");
		const __kKCProtocolTypeNNTP = getOSType!("nntp");
		const __kKCProtocolTypePOP3 = getOSType!("pop3");
		const __kKCProtocolTypeSMTP = getOSType!("smtp");
		const __kKCProtocolTypeSOCKS = getOSType!("sox ");
		const __kKCProtocolTypeIMAP = getOSType!("imap");
		const __kKCProtocolTypeLDAP = getOSType!("ldap");
		const __kKCProtocolTypeAppleTalk = getOSType!("atlk");
		const __kKCProtocolTypeAFP = getOSType!("afp ");
		const __kKCProtocolTypeTelnet = getOSType!("teln");
	}
}

enum
{
	kIdleKCEvent = 0,
	kLockKCEvent = 1,
	kUnlockKCEvent = 2,
	kAddKCEvent = 3,
	kDeleteKCEvent = 4,
	kUpdateKCEvent = 5,
	kPasswordChangedKCEvent = 6,
	kSystemKCEvent = 8,
	kDefaultChangedKCEvent = 9,
	kDataAccessKCEvent = 10,
	kKeychainListChangedKCEvent = 11
}

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
}

enum
{
	kUnlockStateKCStatus = 1,
	kRdPermKCStatus = 2,
	kWrPermKCStatus = 4
}

enum
{
	kCertificateKCItemClass = getOSType!("cert"),
	kAppleSharePasswordKCItemClass = getOSType!("ashp"),
	kInternetPasswordKCItemClass = getOSType!("inet"),
	kGenericPasswordKCItemClass = getOSType!("genp")
}

enum
{
	kClassKCItemAttr = getOSType!("clas"),
	kCreationDateKCItemAttr = getOSType!("cdat"),
	kModDateKCItemAttr = getOSType!("mdat"),
	kDescriptionKCItemAttr = getOSType!("desc"),
	kCommentKCItemAttr = getOSType!("icmt"),
	kCreatorKCItemAttr = getOSType!("crtr"),
	kTypeKCItemAttr = getOSType!("type"),
	kScriptCodeKCItemAttr = getOSType!("scrp"),
	kLabelKCItemAttr = getOSType!("labl"),
	kInvisibleKCItemAttr = getOSType!("invi"),
	kNegativeKCItemAttr = getOSType!("nega"),
	kCustomIconKCItemAttr = getOSType!("cusi"),
	kAccountKCItemAttr = getOSType!("acct"),
	kServiceKCItemAttr = getOSType!("svce"),
	kGenericKCItemAttr = getOSType!("gena"),
	kSecurityDomainKCItemAttr = getOSType!("sdmn"),
	kServerKCItemAttr = getOSType!("srvr"),
	kAuthTypeKCItemAttr = getOSType!("atyp"),
	kPortKCItemAttr = getOSType!("port"),
	kPathKCItemAttr = getOSType!("path"),
	kVolumeKCItemAttr = getOSType!("vlme"),
	kAddressKCItemAttr = getOSType!("addr"),
	kSignatureKCItemAttr = getOSType!("ssig"),
	kProtocolKCItemAttr = getOSType!("ptcl"),
	kSubjectKCItemAttr = getOSType!("subj"),
	kCommonNameKCItemAttr = getOSType!("cn  "),
	kIssuerKCItemAttr = getOSType!("issu"),
	kSerialNumberKCItemAttr = getOSType!("snbr"),
	kEMailKCItemAttr = getOSType!("mail"),
	kPublicKeyHashKCItemAttr = getOSType!("hpky"),
	kIssuerURLKCItemAttr = getOSType!("iurl"),
	kEncryptKCItemAttr = getOSType!("encr"),
	kDecryptKCItemAttr = getOSType!("decr"),
	kSignKCItemAttr = getOSType!("sign"),
	kVerifyKCItemAttr = getOSType!("veri"),
	kWrapKCItemAttr = getOSType!("wrap"),
	kUnwrapKCItemAttr = getOSType!("unwr"),
	kStartDateKCItemAttr = getOSType!("sdat"),
	kEndDateKCItemAttr = getOSType!("edat")
}

enum
{
	kKCAuthTypeNTLM = getOSType!("ntlm"),
	kKCAuthTypeMSN = getOSType!("msna"),
	kKCAuthTypeDPA = getOSType!("dpaa"),
	kKCAuthTypeRPA = getOSType!("rpaa"),
	kKCAuthTypeHTTPDigest = getOSType!("httd"),
	kKCAuthTypeDefault = getOSType!("dflt")
}

enum
{
	kKCProtocolTypeFTP = getOSType!("ftp "),
	kKCProtocolTypeFTPAccount = getOSType!("ftpa"),
	kKCProtocolTypeHTTP = getOSType!("http"),
	kKCProtocolTypeIRC = getOSType!("irc "),
	kKCProtocolTypeNNTP = getOSType!("nntp"),
	kKCProtocolTypePOP3 = getOSType!("pop3"),
	kKCProtocolTypeSMTP = getOSType!("smtp"),
	kKCProtocolTypeSOCKS = getOSType!("sox "),
	kKCProtocolTypeIMAP = getOSType!("imap"),
	kKCProtocolTypeLDAP = getOSType!("ldap"),
	kKCProtocolTypeAppleTalk = getOSType!("atlk"),
	kKCProtocolTypeAFP = getOSType!("afp "),
	kKCProtocolTypeTelnet = getOSType!("teln")
}

enum
{
	kSecOptionReserved = 0x000000FF,
	kCertUsageShift = 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
}

enum
{
	kPolicyKCStopOn = 0,
	kNoneKCStopOn = 1,
	kFirstPassKCStopOn = 2,
	kFirstFailKCStopOn = 3
}

enum
{
	kCertSearchShift = 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
}

enum
{
	kAnyPort = 0
}

enum
{
	kAnyProtocol = 0,
	kAnyAuthType = 0
}

struct SecKeychainAttribute
{
	uint tag;
	uint length;
	void* data;
}


struct SecKeychainAttributeList
{
	uint count;
	SecKeychainAttribute* attr;
}


struct KCCallbackInfo
{
	uint version_;
	KCItemRef item;
	SInt32* processID;
	SInt32* event;
	KCRef keychain;
}

extern (C)
{
	int KCGetKeychainManagerVersion (UInt32* returnVers);
	int KCSetInteractionAllowed (ubyte state);
	ubyte KCIsInteractionAllowed ();
	int KCMakeKCRefFromFSRef (FSRef* keychainFSRef, KCRef* keychain);
	int KCMakeKCRefFromAlias (AliasHandle keychainAlias, KCRef* keychain);
	int KCMakeAliasFromKCRef (KCRef keychain, AliasHandle* keychainAlias);
	int KCReleaseKeychain (KCRef* keychain);
	int KCGetDefaultKeychain (KCRef* keychain);
	int KCSetDefaultKeychain (KCRef keychain);
	int KCGetStatus (KCRef keychain, UInt32* keychainStatus);
	int KCGetKeychain (KCItemRef item, KCRef* keychain);
	int KCGetKeychainName (KCRef keychain, char* keychainName);
	ushort KCCountKeychains ();
	int KCGetIndKeychain (ushort index, KCRef* keychain);
	KCCallbackUPP NewKCCallbackUPP (KCCallbackProcPtr userRoutine);
	void DisposeKCCallbackUPP (KCCallbackUPP userUPP);
	int InvokeKCCallbackUPP (ushort keychainEvent, KCCallbackInfo* info, void* userContext, KCCallbackUPP userUPP);
	int KCFindAppleSharePassword (AFPServerSignature* serverSignature, char* serverAddress, char* serverName, char* volumeName, char* accountName, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int KCFindInternetPassword (char* serverName, char* securityDomain, char* accountName, ushort port, uint protocol, uint authType, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int KCFindInternetPasswordWithPath (char* serverName, char* securityDomain, char* accountName, char* path, ushort port, uint protocol, uint authType, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int KCFindGenericPassword (char* serviceName, char* accountName, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int KCAddCallback (KCCallbackUPP callbackProc, ushort eventMask, void* userContext);
	int KCRemoveCallback (KCCallbackUPP callbackProc);
	int KCNewItem (uint itemClass, uint itemCreator, uint length, void* data, KCItemRef* item);
	int KCSetAttribute (KCItemRef item, KCAttribute* attr);
	int KCGetAttribute (KCItemRef item, KCAttribute* attr, UInt32* actualLength);
	int KCSetData (KCItemRef item, uint length, void* data);
	int KCUpdateItem (KCItemRef item);
	int KCReleaseItem (KCItemRef* item);
	int KCCopyItem (KCItemRef item, KCRef destKeychain, KCItemRef* copy);
	int KCFindFirstItem (KCRef keychain, KCAttributeList* attrList, KCSearchRef* search, KCItemRef* item);
	int KCFindNextItem (KCSearchRef search, KCItemRef* item);
	int KCReleaseSearch (KCSearchRef* search);
	int KCDeleteItem (KCItemRef item);
	int KCGetData (KCItemRef item, uint maxLength, void* data, UInt32* actualLength);
	int KCLock (KCRef keychain);
	int kcgetkeychainname (KCRef keychain, char* keychainName);
	int kcfindapplesharepassword (AFPServerSignature* serverSignature, char* serverAddress, char* serverName, char* volumeName, char* accountName, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int kcfindinternetpassword (char* serverName, char* securityDomain, char* accountName, ushort port, uint protocol, uint authType, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int kcfindinternetpasswordwithpath (char* serverName, char* securityDomain, char* accountName, char* path, ushort port, uint protocol, uint authType, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
	int kcfindgenericpassword (char* serviceName, char* accountName, uint maxLength, void* passwordData, UInt32* actualLength, KCItemRef* item);
}