/***********************************************************************
 * 
 *  Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; version 2.1
 *  of the License.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, Novell, Inc.
 * 
 *  To contact Novell about this file by physical or electronic mail, 
 *  you may find current contact information at www.novell.com.
 * 
 ***********************************************************************/

#ifndef		_NSSSCL_H_
#define		_NSSSCL_H_

/* This is the NDK header file for the SecretStore version 3.02. */
#if defined(__cplusplus) || defined(c_plusplus)
extern "C"
{
#endif

#ifndef _SSPROTO_H_
#define _SSPROTO_H_
#if defined(WIN32)

	#define SS_GLOBAL_LIBCALL_PTR(RET)			RET * __stdcall
	#define SS_GLOBAL_LIBCALL(RET)				RET	__stdcall 
	#define SS_EXTERN_LIBCALL_PTR(RET)			extern RET * __stdcall
	#define SS_EXTERN_LIBCALL(RET)				extern RET __stdcall
	#define SS_TYPEDEF_LIBCALL_PTR(RET, PTR)	typedef RET	* (__stdcall *PTR)
	#define SS_TYPEDEF_LIBCALL(RET, PTR)		typedef RET	(__stdcall *PTR)

#else

	#define SS_GLOBAL_LIBCALL_PTR(RET)			RET *
	#define SS_GLOBAL_LIBCALL(RET)				RET
	#define SS_EXTERN_LIBCALL_PTR(RET)			extern RET *
	#define SS_EXTERN_LIBCALL(RET)				extern RET
	#define SS_TYPEDEF_LIBCALL_PTR(RET, PTR)	typedef RET * (*PTR)
	#define SS_TYPEDEF_LIBCALL(RET, PTR)		typedef RET	(*PTR)

#endif

#endif //* _SSPROTO_H_

/* ########################################################################### */
/* ####################### SecretStore Constants ############################# */
/* ########################################################################### */


#ifndef	_SSSHAR_H 

#define 		NSSS_VERSION_NUMBER				0x00030200L	//*  client version number

#define         NSSS_MAX_KEYCHAIN_ID_CHARS              256             //* double bytes including NULL
#define         NSSS_MAX_KEYCHAIN_ID_LEN                        512             //* in bytes including NULL



#define		NSSS_MAX_SECRET_ID_CHARS		256		//* double bytes including NULL
#define		NSSS_MAX_SECRET_ID_LEN			512		//* in bytes including NULL

#define		NSSS_MIN_SECRET_BUF_LEN			3968	//* (4K-128)to match server
#define		NSSS_MID_SECRET_BUF_LEN			32768	//* (4K-128)to match server
#define		NSSS_MAX_SECRET_BUF_LEN			60416	//* (59K)to match server
#define		NSSS_MAX_EP_PWORD_CHARS			64		//* enhanced protection max password (chars)
#define		NSSS_MAX_EP_PWORD_LEN			128		//* enhanced protection max password (bytes)

#define		NSSS_MAX_LDAP_PWORD_LEN			128		//* user's ldap login password

#define		NSSS_MAX_MP_PWORD_HINT_CHARS	64		//* enhanced protection max hint (chars)
#define		NSSS_MAX_MP_PWORD_HINT_LEN		128		//* enhanced protection maximum hint (bytes)

#define		NSSS_MAX_TREE_NAME_CHARS		32		//* max tree name length (chars)
#define		NSSS_MAX_TREE_NAME_LEN			64		//* max tree name length (bytes)
				
#define		NSSS_MAX_DN_CHARS				258		//* max DN length (chars)
#define		NSSS_MAX_DN_LEN					516		//* max DN length (bytes)

#define		NSSS_MAX_IP_ADDR_LEN			16		//* IP address string length (bytes including NULL)
#define		NSSS_MAX_ADDR_LEN				512		//* can be IP or DNS name (bytes including null)

#define		NSSS_NICI_UNDETERMINED_ENGINE	0
#define		NSSS_NICI_DOMESTIC_ENGINE		1
#define		NSSS_NICI_EXPORT_ENGINE			2

#define		NSSS_MIN_IDLIST_BUF_LEN			16384	//* (16K)
#define		NSSS_MID_IDLIST_BUF_LEN			32768	//* (32K)
#define		NSSS_MAX_IDLIST_BUF_LEN			65536	//* (64kK)
#define		NSSS_JUMBO_IDLIST_BUF_LEN		131072	//* (128K)
#define		NSSS_JUMBO_ENUM_BUF_LEN			131072	//* (128K)
#define		NSSS_ENUM_BUFFER_GUESS			32768	//* (32K)

#define		NSSS_MAX_LDAP_CRED_BUF_LEN		65536	//* (64kK)

#define		NSSS_ENUM_DELIM					"*"		//* immutable

/* ########################################################################### */
/* ############################### API FLAGS ################################# */
/* ########################################################################### */

/* input only flag for Unlock API													   
   ============================== */
/* can delete locked secrets from store to remove lock */
#define		NSSS_REMOVE_LOCK_FROM_STORE_F	0x00000004L
/* if the store is not locked return an error otherwise use the info supplied
	 to unlock the store. In the absense of this flag when the store is not 
	 locked the SecretStore returns success. */
#define		NSSS_IS_STORE_LOCKED_F			0x00000008L


/* input only flags for Write	API
   ============================== */
/* Enhanced Protection indicator flag for Read & Write */
#define		NSSS_ENHANCED_PROTECTION_F		0x00000001L
/* Enhanced Protection optional password indicator flag for Read & Write */
#define		NSSS_EP_PASSWORD_USED_F			0x00000040L
/* if Secret ID is in the SecretStore already don't overwrite the secret */
#define 		NSSS_CHK_SID_FOR_COLISION_F		0x00004000L

/* input only flag for Read API 
   ============================ */
/* request all possible repair on damaged store */
#define		NSSS_REPAIR_THE_STORE_F			0x00000008L

/* input only flag for all the APIs
   ================================ */
//* This flag tells the call that the strings such as 
//* secretID, DN, searchString etc. are already converted 
//* to Unicode and no conversion is necessary, results
//* like secretIDList will be returned in unicode. 
#define		NSSS_ALL_STRINGS_UNICODE_F		0x00000010L
#define		NSSS_SET_TREE_NAME_F			0x00000080L
//* Internally destroys the DS context passed in
#define		NSSS_DESTROY_CONTEXT_F			0x00000200L
#define		NSSS_UNBINDLDAP_F				0x00001000L

/* input only flag for GetServiceInformation API
   ============================================= */
//* will return a DS context for reuse in the subsequent calls
#define		NSSS_GET_CONTEXT_F				0x00000100L



/* input flag for all APIs
   ======================= */
//* this flag indicates LDAP based acess to the directory is desired
#define		NSSS_BINDLDAP_F					0x00000800L

/* output only flags from Read API (statFlags on reading a secret)
	also these come back on GetServiceInformation (statFlags on the store)
   ==================================================================== */
/* Non-Repudiation lock on secret */
#define		NSSS_SECRET_LOCKED_F			0x00010000L
/* Secret not initialized with a Write yet */
#define		NSSS_SECRET_NOT_INITIALIZED_F	0x00020000L	
/* Secret is marked for Enhanced Protection */
#define		NSSS_ENHANCED_PROTECT_INFO_F	0x00040000L	
/* Store not synchronized across replicas */
#define		NSSS_STORE_NOT_SYNCED_F			0x00080000L 
/* There is EP password on the secret */
#define		NSSS_EP_PWORD_PRESENT_F			0x00200000L

/* input only flag for Read, Unlock, and SetMP APIs
   ================================================ */
#define		NSSS_EP_MASTER_PWORD_USED_F		0x00000020L

/* output only flags from Read API (statFlags on reading asecret
   ============================================================= */
/* Last secret modification by admin */
#define		NSSS_ADMIN_LAST_MOD_F			0x00100000L 


/* output only flag from GetServiceInformation API statFlags 
   ========================================================= */
/* There is master password on the secretstore  */
#define		NSSS_EP_MASTER_PWORD_PRESENT_F	0x00400000L

/* output only flag from GetServiceInformation, and read API statFlags 
   =================================================================== */
#define		NSSS_MP_NOT_ALLOWED_F			0x00800000L

/* internal flag to the server
   =========================== */
#define 		NSSS_SYNC_IN_PROGRESS_F			0x02000000L 

/* output only flag for last Admin that has unlocked the store 
   =========================================================== */
#define 		NSSS_ADMIN_UNLOCKED_F			0x04000000L 

/* output only flag for server internal features
   ============================================ */
#define 		NSSS_LATSTAMP_ALLOWED_F			0x08000000L /* ss last access time stamp allowed */
#define 		NSSS_ADMIN_AUTHORIZED_F			0x10000000L /* ss admin authorized */

/* output only flag to indicate SecretStore contains hidden secrets
   ================================================================ */
#define		NSSS_HIDDEN_SECRET_F			0x20000000L


#define	NSSSRemoveSecretID	NSSSRemoveSecret

/* ########################################################################### */
/* ###################### CURRENT CONTEXT VERSION ############################ */
/* ########################################################################### */
#define	NSSS_CUR_CTX_VERSION	0x00000001L


/* ########################################################################### */
/* ############################ CONTEXT FLAGS ################################ */
/* ########################################################################### */
/* context flags for the type of context passed in or to initialize (can only use one.) 
   =================================================================================== */
#define		NSSS_NCP_CTX_F					0x00000001L	//* Context is for NCP
#define		NSSS_LDAP_CTX_F					0x00000002L	//* Context is for LDAP
#define		NSSS_CONTEXT_INITIALIZED_F		0x00000004L	//* Context already initialized
#define		NSSS_INIT_LDAP_SS_HANDLE_F		0x00000008L	//* Init handle struct without bind
#define		NSSS_DEINIT_LDAP_SS_HANDLE_F	0x00000010L	//* Deinit handle struct without unbind
#define		NSSS_REINIT_TARGET_DN_F			0x00000020L	//* Reinit the target DN in the context
#define		NSSS_LDAP_CONTEXT_LESS_DN_F		0x00000040L	//* Resolve LDAP DN as contextless
#define		NSSS_ADV_BIND_INFO_F			0x00000080L	//* Use advanced bind structure
															//* and perform service location 


/* ########################################################################### */
/* ################# CURRENT ADVANCED BIND INFO VERSION ###################### */
/* ########################################################################### */
#define	NSSS_CUR_ADV_BIND_INFO_VER	0x00000000L

/* ########################################################################### */
/* ########################## ADVANCED BIND INFO FLAGS ####################### */
/* ########################################################################### */
//* indicates that password struct is supplied for credential to bind
#define	NSSS_PWORD_CRED_F			0x00000001L
												   
//* this flags allows the caller to override the default anonymous port 389 for 
//* service location and contextless name resolution in advance bind
#define	NSSS_SET_ANON_PORT_F		0x00000002L 



/* ########################################################################### */
/* ########################### STRUCTURE DEFINITIONS ######################### */
/* ########################################################################### */

//********************************* NOTE ****************************************
//* All of the character arrays in the structures have the max length in bytes
//* but apps should pass in strings with the number of chars that is half the 
//* length of these char arrays. These arrays are double the size in length 
//* for unicode strings. (Reference the length in chars for each above.)
//********************************* NOTE ****************************************

//* Secret ID type
typedef	struct _ss_secret_id
{
	long				len;						//* max id len in bytes
	char				id[NSSS_MAX_SECRET_ID_LEN]; //* should be passed in # of chars
} SS_SECRET_ID_T;

//* Secret Data type 
typedef	struct	_ss_secret
{
	long				len;
	char				*data;
} SS_SECRET_T;


//* Service location information. Each API-specific extension structures point to a
//* SS_SERVER_INFO_T structure. 
typedef struct _ss_server_info
{
	char				treeName[NSSS_MAX_TREE_NAME_LEN];
	char				ssServerDN[NSSS_MAX_DN_LEN];
	char				ssServerIPAddr[NSSS_MAX_IP_ADDR_LEN];
	char				sssConfigDN[NSSS_MAX_DN_LEN];
} SS_SERVER_INFO_T;

//* new version big enough for unicode IP or DNS address
typedef struct _ss_userver_info
{
	char				treeName[NSSS_MAX_TREE_NAME_LEN];
	char				ssServerDN[NSSS_MAX_DN_LEN];
	char				ssServerIPAddr[NSSS_MAX_ADDR_LEN];
	char				sssConfigDN[NSSS_MAX_DN_LEN];
} SS_USERVER_INFO_T;

typedef struct _ss_advanced_credential
{
	unsigned long		len;
	void				*data;
} SS_ADV_CRED_T, SS_CERT_T;


typedef struct _ss_address
{
	long				len;
	char				addr[NSSS_MAX_ADDR_LEN];
} SS_ADDR_T;


typedef struct _ss_advanced_bind_info
{
	unsigned long		version;		//* ldap bind structure version
	unsigned long		flags;			//* ldap bind structure applicable flags
	unsigned long		portNum;
	SS_ADDR_T			hName;			//* ip address (DNS name) of a servrer in the tree								
	SS_CERT_T			cert;			//* server certificate obtained and used internally
	SS_ADV_CRED_T		*cred;			//* password (struct defined above), adv cred for future
} SS_ADV_BIND_INFO_T;


typedef struct _ss_ldap_bind_info
{
	unsigned long		portNum;								//* default: 636
	char				lHostName[ NSSS_MAX_DN_LEN ]; 		//* Ex: "nsd10.novell.com" or ip addr
	char				trustedRootCert[ NSSS_MAX_DN_LEN ]; 	//* default: "c:\TrustedRootCertificate.der"
	char				loginPword[ NSSS_MAX_LDAP_PWORD_LEN ];	//* LDAP login password (utf8)
} SS_LDAPBIND_INFO_T;

typedef struct _ss_obj_id
{
	long			len;
	char			id[NSSS_MAX_DN_LEN];
} SS_OBJECT_DN_T;


//* password structure
typedef	struct _ss_pword
{
	unsigned long		pwordLen;		//* enhanced protection len & pword to set
	char				pword[NSSS_MAX_EP_PWORD_LEN]; //* should be passed in # of chars
} SS_PWORD_T;


//* hint structure
typedef	struct _ss_hint
{
	unsigned long		hintLen;		//* enhanced protection len & pword to set
	char				hint[NSSS_MAX_MP_PWORD_HINT_LEN];	//* should be passed in # of chars
} SS_HINT_T;

//* Read extended optional data
typedef	struct	_sss_read_extension
{
	unsigned long		statFlags;		//* OUT - return flags on the secret
	unsigned long		crtStamp;		//* OUT - secret creation time stamp
	unsigned long		latStamp;		//* OUT - last accessed time stamp (optional)
	unsigned long		lmtStamp;		//* OUT - last modified time stamp
}	SSS_READEXT_T;

//* Get service info extended data 
typedef	struct	_sss_get_service_information_extension
{
	unsigned long			statusFlags;	//* OUT - return flags on the store
	unsigned long			secretCount;	//* OUT - number of the secrets in the store
	unsigned long			lockCount;		//* OUT - number of lock secrets
	unsigned long			enumBufLen;		//* OUT - secret ID enumeration buffer length
	unsigned long			hidSecCount;	//* OUT - count of hidden secrets
	unsigned long			clientVersion;	//* OUT - client version			
	unsigned long			serverVersion;	//* OUT - server version			
	unsigned long			serverCryptoStrength;	//* OUT - client crypto strength (Domestic/Export)	
	unsigned long			clientCryptoStrength;	//* OUT - client crypto strength (Domestic/Export)	
	unsigned long			unlockTStamp;	//* OUT - last admin unlock timestamp */
	unsigned long			admnDNLen;		//* OUT - last admin DN to unlock the store */
	char					admnDN[NSSS_MAX_DN_LEN];
	unsigned long			hintLen;		//* OUT - master password hint
	char					hint[NSSS_MAX_MP_PWORD_HINT_LEN];
}	SSS_GSINFOEXT_T;


/* ###################################################################################### */
/* #################### Extension Structure definitions for FUTURE ###################### */
/* ###################################################################################### */

//* optional extension structure
typedef	struct	_ss_extension
{
	unsigned long		clientVersion;	//* IN - client version should be passed in
	void				*extParms;		//* IN - extended optional data defined for future
}	SS_EXT_T;


#endif //* SSSHAR_H

typedef	struct	_sss_handles	SSS_HANDLES_T;

//* new context structure to be allocated by the caller
//* caller DN is an out parameter on NCP and can be an in parameter on LDAP
typedef	struct	_sss_context
{
	unsigned long		flags;			//* IN- context type indicator and 
										//* initialization flags
	unsigned long		dsCtx;			//* IN/OUT- ldap/ncp context
	unsigned long		version;		//* IN- context version indicator
	SS_SERVER_INFO_T	ssServerInfo;	//* IN/OUT- preferred SecretStore server info
	SS_OBJECT_DN_T		callerDN; 		//* IN/OUT- DN of the caller. OUT-For NCP.
										//*IN-For LDAP (use LDAP form)
	SSS_HANDLES_T		*handles;		//* OUT- internal, created by GetServiceInfo, 
										//* destroyed with the context
	void				*bindInfo;		//* IN - LDAP or other advanced bind info (non-NCP)
}	SSS_CONTEXT_T;



#ifndef _SSSHS_H_


#define SS_APPLICATION_TYPE_F		0x00000001L
#define SS_CREDENTIAL_TYPE_F		0x00000002L

typedef struct _ss_sh_secret_id
{
	int  	type;								// The shared secret type i.e. SS_App  or  SS_CredSet
	char 	pName[NSSS_MAX_SECRET_ID_LEN];		// The shared secret name. This is the same as the identifier 
	int  	len;								// except that it excludes the header and is not escaped.
} SS_SH_SECRET_ID_T;


/* ########################## FUNCTION PROTOTYPES ######################### */

/* ##################################################################### */
/* ######################### NEW NDK EXPORTED APIS ##################### */
/* ##################################################################### */

//**************************************************************
//* Support Functions for processing (populating or extracting) 
//* data components from a Shared Secret buffers
//**************************************************************
SS_EXTERN_LIBCALL_PTR(void)
NSSSCreateSHSHandle();

SS_EXTERN_LIBCALL(int)
NSSSDestroySHSHandle(void *handle);	// in 

SS_EXTERN_LIBCALL(int)
NSSSGetNextSHSEntry
	(
		int 			bRestart,	//* in (set to 1 to begin from head of list)
		void 			*handle,	//* in 
		int				*keyLen,	//* out
		unsigned char	*key,		//* out 
		int 			*valLen,	//* out
		unsigned char	*val,		//* out
		unsigned long	ssCtxFlags	//* int
	);

SS_EXTERN_LIBCALL(int)
NSSSAddSHSEntry
	(
		void 				*handle,	//* in
		unsigned char		*key,		//* in
		unsigned char		*val,		//* in
		unsigned long		ssCtxFlags	//* in
	);


SS_EXTERN_LIBCALL(int)
NSSSRemoveSHSEntry
	(
		void 			*handle,	//* in 
		unsigned char 	*key,		//* in
		unsigned char 	*value,		//* in
		unsigned long	ssCtxFlags	//* in
	);


//**************************************************************
//* These function calls will utilize the Support Functions for 
//* populating or extracting data from a Shared Secret.
//**************************************************************
SS_EXTERN_LIBCALL(int)
NSSSWriteSharedSecret
(
	void				*	handle,
	SS_SH_SECRET_ID_T	*	pSharedSecret,
	SSS_CONTEXT_T		*	context,
	SS_OBJECT_DN_T		*	targetObjDN,
	unsigned long			ssFlags,
	SS_PWORD_T			*	epPassword,
	SS_EXT_T	 		*	ext
);

SS_EXTERN_LIBCALL(int)
NSSSReadSharedSecret
(
	void				*	handle,
	SS_SH_SECRET_ID_T   *	pSharedSecret,
	SSS_CONTEXT_T		*	context,		
	SS_OBJECT_DN_T		*	targetObjDN, 
	unsigned long			ssFlags,
	SS_PWORD_T			*	epPassword,
	SSS_READEXT_T		*	readData,
	SS_EXT_T	 		*	ext
);

SS_EXTERN_LIBCALL(int)
NSSSRemoveSharedSecret
(
	SS_SH_SECRET_ID_T	*	pSharedSecret,
	SSS_CONTEXT_T		*	context,
	SS_OBJECT_DN_T		*	targetObjDN,
	unsigned long			ssFlags,
	SS_EXT_T	 		*	ext
);

#endif //*_SSSHS_H_

//***********************
//* SecretStore raw APIs
//***********************

SS_EXTERN_LIBCALL(int)
NSSSReadSecret
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
	SS_PWORD_T			*		epPassword,
	SSS_READEXT_T		*		readData,
	SS_SECRET_ID_T		*		secretID,
	SS_SECRET_T 	 	*		secretValue,
	SS_EXT_T	 		*		ext
);

SS_EXTERN_LIBCALL(int)
NSSSWriteSecret
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
	SS_PWORD_T			*		epPassword,
	SS_SECRET_ID_T		*		secretID,
	SS_SECRET_T 		*		secretValue,
	SS_EXT_T			*		ext
);

SS_EXTERN_LIBCALL(int)
NSSSRemoveSecret
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
  SS_SECRET_ID_T		*		secretID,
	SS_EXT_T			*		ext
);

SS_EXTERN_LIBCALL(int)
NSSSGetServiceInformation
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
	SSS_GSINFOEXT_T		*		gsData,
	SS_EXT_T			*		ext
);

SS_EXTERN_LIBCALL(int)
NSSSUnlockSecrets
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
  SS_PWORD_T	 		*		passowrd,
	SS_EXT_T			*		ext
);

SS_EXTERN_LIBCALL(int)
NSSSRemoveSecretStore
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
	SS_EXT_T			*		ext
);

SS_EXTERN_LIBCALL(int)
NSSSEnumerateSecretIDs
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
  char				*		searchString,
	unsigned long		*		count,
  SS_SECRET_T			*		secretIDList,
	SS_EXT_T			*		ext
);


SS_EXTERN_LIBCALL(int)
NSSSSetEPMasterPassword
(
	SSS_CONTEXT_T		*		context,		
	SS_OBJECT_DN_T		*		targetObjDN, 
	unsigned long				ssFlags,
  SS_PWORD_T	 		*		passowrd,
  SS_HINT_T	 		*		hint,
	SS_EXT_T			*		ext
);

/* ####################################################################### */
/* ############################## ERROR CODES ############################ */
/* ####################################################################### */

#ifndef _SSSHAR_H

#define		NSSS_SUCCESS					0x00000000		/*    0 */
#define		NSSS_E_OBJECT_NOT_FOUND			0xFFFFFCE0		/* -800 */
#define		NSSS_E_NICI_FAILURE				0xFFFFFCDF		/* -801 */
#define		NSSS_E_INVALID_SECRET_ID 		0xFFFFFCDE		/* -802 */
#define		NSSS_E_SYSTEM_FAILURE			0xFFFFFCDD		/* -803 */
#define		NSSS_E_ACCESS_DENIED  			0xFFFFFCDC		/* -804 */
#define		NSSS_E_NDS_INTERNAL_FAILURE		0xFFFFFCDB		/* -805 */
#define		NSSS_E_SECRET_UNINITIALIZED		0xFFFFFCDA		/* -806 */
#define		NSSS_E_BUFFER_LEN				0xFFFFFCD9		/* -807 */
#define		NSSS_E_INCOMPATIBLE_VERSION		0xFFFFFCD8		/* -808 */
#define		NSSS_E_CORRUPTED_STORE			0xFFFFFCD7		/* -809 */
#define		NSSS_E_SECRET_ID_EXISTS			0xFFFFFCD6		/* -810 */
#define		NSSS_E_NDS_PWORD_CHANGED		0xFFFFFCD5		/* -811 */
#define		NSSS_E_INVALID_TARGET_OBJECT	0xFFFFFCD4		/* -812 */
#define		NSSS_E_STORE_NOT_FOUND			0xFFFFFCD3		/* -813 */
#define		NSSS_E_SERVICE_NOT_FOUND		0xFFFFFCD2		/* -814 */
#define		NSSS_E_SECRET_ID_TOO_LONG		0xFFFFFCD1		/* -815 */
#define		NSSS_E_ENUM_BUFF_TOO_SHORT		0xFFFFFCD0		/* -816 */
#define		NSSS_E_NOT_AUTHENTICATED		0xFFFFFCCF		/* -817 */
#define		NSSS_E_NOT_SUPPORTED			0xFFFFFCCE		/* -818 */
#define		NSSS_E_NDS_PWORD_INVALID		0xFFFFFCCD		/* -819 */
#define		NSSS_E_NICI_OUTOF_SYNC			0xFFFFFCCC		/* -820 */
#define		NSSS_E_SERVICE_NOT_SUPPORTED	0xFFFFFCCB		/* -821 */
#define		NSSS_E_TOKEN_NOT_SUPPORTED		0xFFFFFCCA		/* -822 */
#define		NSSS_E_UNICODE_OP_FAILURE		0xFFFFFCC9		/* -823 */
#define		NSSS_E_TRANSPORT_FAILURE		0xFFFFFCC8		/* -824 */
#define		NSSS_E_CRYPTO_OP_FAILURE		0xFFFFFCC7		/* -825 */
#define		NSSS_E_SERVER_CONN_FAILURE		0xFFFFFCC6		/* -826 */
#define		NSSS_E_CONN_ACCESS_FAILURE		0xFFFFFCC5		/* -827 */
#define		NSSS_E_ENUM_BUFF_TOO_LONG		0xFFFFFCC4		/* -828 */
#define		NSSS_E_SECRET_BUFF_TOO_LONG		0xFFFFFCC3		/* -829 */
#define		NSSS_E_SECRET_ID_TOO_SHORT		0xFFFFFCC2		/* -830 */
#define		NSSS_E_CORRUPTED_PACKET_DATA	0xFFFFFCC1		/* -831 */
#define		NSSS_E_EP_ACCESS_DENIED			0xFFFFFCC0		/* -832 */
#define		NSSS_E_SCHEMA_NOT_EXTENDED		0xFFFFFCBF		/* -833 */
#define		NSSS_E_ATTR_NOT_FOUND			0xFFFFFCBE		/* -834 */
#define		NSSS_E_MIGRATION_NEEDED			0xFFFFFCBD		/* -835 */
#define		NSSS_E_MP_PWORD_INVALID			0xFFFFFCBC		/* -836 */
#define		NSSS_E_MP_PWORD_NOT_SET			0xFFFFFCBB		/* -837 */
#define		NSSS_E_MP_PWORD_NOT_ALLOWED		0xFFFFFCBA		/* -838 */
#define		NSSS_E_WRONG_REPLICA_TYPE		0xFFFFFCB9		/* -839 */
#define		NSSS_E_ATTR_VAL_NOT_FOUND		0xFFFFFCB8		/* -840 */
#define		NSSS_E_INVALID_PARAM			0xFFFFFCB7		/* -841 */
#define		NSSS_E_NEED_SECURE_CHANNEL		0xFFFFFCB6		/* -842 */
#define		NSSS_E_CONFIG_NOT_SUPPORTED		0xFFFFFCB5		/* -843 */
#define		NSSS_E_STORE_NOT_LOCKED			0xFFFFFCB4		/* -844 */
#define		NSSS_E_TIME_OUT_OF_SYNC			0xFFFFFCB3		/* -845 */
#define		NSSS_E_VERSION_MISMATCH			0xFFFFFCB2		/* -846 */
#define		NSSS_E_SECRET_BUFF_TOO_SHORT	0xFFFFFCB1		/* -847 */
#define	 	NSSS_E_SH_SECRET_FAILURE		0xFFFFFCB0		/* -848 */
#define  		NSSS_E_PARSER_FAILURE			0xFFFFFCAF		/* -849 */
#define  		NSSS_E_UTF8_OP_FAILURE			0xFFFFFCAE		/* -850 */
#define  		NSSS_E_CTX_LESS_CN_NOT_UNIQUE	0xFFFFFCAD		/* -851 */
#define  		NSSS_E_UNSUPPORTED_BIND_CRED	0xFFFFFCAC		/* -852 */
#define  		NSSS_E_CERTIFICATE_NOT_FOUND	0xFFFFFCAB		/* -853 */
					
#define		NSSS_E_NOT_IMPLEMENTED			0xFFFFFC88		/* -888 */
#define		NSSS_E_BETA_EXPIRED				0xFFFFFC7D		/* -899 */


/* #########################################################################
   ########################### ERROR DESCRIPTIONS ########################## 
   #########################################################################

NSSS_E_OBJECT_NOT_FOUND			-800 
	Description: Can't find the target object DN in NDS. (Resolve name failed.)

NSSS_E_NICI_FAILURE				-801
	Description: NICI operations have failed.

NSSS_E_INVALID_SECRET_ID			-802 
	Description: Secret ID is not in the User Secret Store.

NSSS_E_SYSTEM_FAILURE				-803 
	Description: Some internal operating system services have not been available.

NSSS_E_ACCESS_DENIED				-804 
	Description: Access to the target Secret Store has been denied!

NSSS_E_NDS_INTERNAL_FAILURE		-805 
	Description: Some internal NDS services have not been available.

NSSS_E_SECRET_UNINITIALIZED		-806 
	Description: Secret has not been initialized with a write.

NSSS_E_BUFFER_LEN					-807 
	Description: Size of the buffer is not in a nominal range between minimum and maximum.

NSSS_E_INCOMPATIBLE_VERSION		-808 
	Description: Client and server components are not of the compatible versions.

NSSS_E_CORRUPTED_STORE			-809 
	Description: Secret Store data on the server has been corrupted.

NSSS_E_SECRET_ID_EXISTS			-810 
	Description: Secret ID already exists in the Secret Store.

NSSS_E_NDS_PWORD_CHANGED			-811 
	Description: User NDS password has been changed by the administrator.

NSSS_E_INVALID_TARGET_OBJECT		-812 
	Description: Target NDS User object not found.

NSSS_E_STORE_NOT_FOUND			-813 
	Description: Target NDS User object does not have a Secret Store.

NSSS_E_SERVICE_NOT_FOUND			-814 
	Description: Secret Store not on the Network.	

NSSS_E_SECRET_ID_TOO_LONG			-815 
	Description: Lenght of the Secret ID buffer exceeds the limit.

NSSS_E_ENUM_BUFF_TOO_SHORT		-816 
	Description: Lenght of the Enumeration buffer too short.

NSSS_E_NOT_AUTHENTICATED			-817 
	Description: User not authenticated.

NSSS_E_NOT_SUPPORTED				-818 
	Description: Not supported operations.

NSSS_E_NDS_PWORD_INVALID			-819 
	Description: Typed in NDS password not valid.

NSSS_E_NICI_OUTOF_SYNC			-820 
	Description: Session keys of the client and server NICI are out of sync.

NSSS_E_SERVICE_NOT_SUPPORTED		-821 
	Description: Requested service not supported yet.

NSSS_E_TOKEN_NOT_SUPPORTED		-822 
	Description: NDS authentication type not supported.

NSSS_E_UNICODE_OP_FAILURE		 	-823 
	Description: Unicode text conversion operation failed.

NSSS_E_TRANSPORT_FAILURE		 	-824 
	Description: Connection to server is lost.

NSSS_E_CRYPTO_OP_FAILURE			-825 
	Description: Cryptographic operation failed.

NSSS_E_SERVER_CONN_FAILURE		 -826 
	Description: Opening a connection to the server failed.

NSSS_E_CONN_ACCESS_FAILURE		-827 
	Description: Access to server connection failed.

NSSS_E_ENUM_BUFF_TOO_LONG		 	-828 
	Description: Size of the enumeration buffer exceeds the limit.

NSSS_E_SECRET_BUFF_TOO_LONG		 -829 
	Description: Size of the Secret buffer exceeds the limit.

NSSS_E_SECRET_ID_TOO_SHORT		 -830
	Description: Lenght of the Secret ID should be greater than zero.

NSSS_E_CORRUPTED_PACKET_DATA		-831 
	Description: Protocol data corrupted on the wire.

NSSS_E_EP_ACCESS_DENIED			-832
	Description: EP password validation failed. Access to the secret denied!

NSSS_E_SCHEMA_NOT_EXTENDED		-833
	Description: Schema is not extended to support SecreStore on the target tree.
					
NSSS_E_ATTR_NOT_FOUND			 	-834 
	Description: One of the optional service attributes is not instantiated.

NSSS_E_MIGRATION_NEEDED			-835
	Description: Server has been upgraded and user SecretStore should be updated.

NSSS_E_MP_PWORD_INVALID			-836
	Description: Master passwrod could not be verified to read or unlock the secrets.

NSSS_E_MP_PWORD_NOT_SET			-837		
	Description: Master password has not been set on the SecretStore.

NSSS_E_MP_PWORD_NOT_ALLOWED		-838	
	Description: Ability to use master password has been disabled.

NSSS_E_WRONG_REPLICA_TYPE			-839 
	Description: Not a writeable replica of NDS.

NSSS_E_ATTR_VAL_NOT_FOUND			-840 
	Description: Target attrbute is not instantiated in NDS.

NSSS_E_INVALID_PARAM				-841 
	Description: API parameter is not initialized.

NSSS_E_NEED_SECURE_CHANNEL		-842 
	Description: Connection to the SecretStore needs to be over SSL.

NSSS_E_CONFIG_NOT_SUPPORTED		-843
	Description: No server to support the given override configuration is found.

NSSS_E_STORE_NOT_LOCKED			-844
	Description: Attempt to unlock SecretStore failed because the store is not locked.

NSSS_E_TIME_OUT_OF_SYNC			-845
	Description: NDS Replica on the server that holds SecretStore is out of sync with the replica ring.

NSSS_E_VERSION_MISMATCH		    -846
	Description: Versions of the client dlls don't match.

NSSS_E_SECRET_BUFF_TOO_SHORT		-847 
	Description: Buffer supplied for the secret is too short (minimum NSSS_MIN_IDLIST_BUF_LEN).

NSSS_E_SH_SECRET_FAILURE			-848
	Description: Shared Secret processing and operations failed.

NSSS_E_PARSER_FAILURE				-849
	Description: Shared Secret parser operations failed.

NSSS_E_UTF8_OP_FAILURE			-850
	Description: Utf8 string operations failed.

NSSS_E_CTX_LESS_CN_NOT_UNIQUE		-851
	Description: Contextless name for LDAP bind does not resolve to a unique DN

NSSS_E_UNSUPPORTED_BIND_CRED		-852 
	Description: login credential for advanced bind is not supported

NSSS_E_CERTIFICATE_NOT_FOUND		-853
	Description: LDAP Root Cert required for Bind operations not found


NSSS_E_NOT_IMPLEMENTED			-888
	Description: Feature not implemented yet.

NSSS_E_BETA_EXPIRED				-899
	Description: Product's BETA life has expired! Official release copy should be
		purchased.



   ########################### END OFERROR CODES ########################## */


/* ######################################################################## */
/* #################### TRANSLATION MACROS FOR OLD NAMES ################## */
/* ######################################################################## */

#define		NSSO_SUCCESS							NSSS_SUCCESS					
#define		NSSO_E_OBJECT_NOT_FOUND					NSSS_E_OBJECT_NOT_FOUND			
#define		NSSO_E_NICI_FAILURE						NSSS_E_NICI_FAILURE				
#define		NSSO_E_INVALID_SECRET_ID 				NSSS_E_INVALID_SECRET_ID 		
#define		NSSO_E_SYSTEM_FAILURE					NSSS_E_SYSTEM_FAILURE			
#define		NSSO_E_ACCESS_DENIED  					NSSS_E_ACCESS_DENIED  			
#define		NSSO_E_NDS_INTERNAL_FAILURE				NSSS_E_NDS_INTERNAL_FAILURE		
#define		NSSO_E_SECRET_UNINITIALIZED				NSSS_E_SECRET_UNINITIALIZED		
#define		NSSO_E_BUFFER_LEN						NSSS_E_BUFFER_LEN				
#define		NSSO_E_INCOMPATIBLE_VERSION				NSSS_E_INCOMPATIBLE_VERSION		
#define		NSSO_E_CORRUPTED_STORE					NSSS_E_CORRUPTED_STORE			
#define		NSSO_E_SECRET_ID_EXISTS					NSSS_E_SECRET_ID_EXISTS			
#define		NSSO_E_NDS_PWORD_CHANGED				NSSS_E_NDS_PWORD_CHANGED		
#define		NSSO_E_INVALID_TARGET_OBJECT			NSSS_E_INVALID_TARGET_OBJECT	
#define		NSSO_E_STORE_NOT_FOUND					NSSS_E_STORE_NOT_FOUND			
#define		NSSO_E_SERVICE_NOT_FOUND				NSSS_E_SERVICE_NOT_FOUND		
#define		NSSO_E_SECRET_ID_TOO_LONG				NSSS_E_SECRET_ID_TOO_LONG		
#define		NSSO_E_ENUM_BUFF_TOO_SHORT				NSSS_E_ENUM_BUFF_TOO_SHORT		
#define		NSSO_E_NOT_AUTHENTICATED				NSSS_E_NOT_AUTHENTICATED		
#define		NSSO_E_NOT_SUPPORTED					NSSS_E_NOT_SUPPORTED			
#define		NSSO_E_NDS_PWORD_INVALID				NSSS_E_NDS_PWORD_INVALID		
#define		NSSO_E_NICI_OUTOF_SYNC					NSSS_E_NICI_OUTOF_SYNC			
#define		NSSO_E_SERVICE_NOT_SUPPORTED			NSSS_E_SERVICE_NOT_SUPPORTED	
#define		NSSO_E_TOKEN_NOT_SUPPORTED				NSSS_E_TOKEN_NOT_SUPPORTED		
#define		NSSO_E_UNICODE_OP_FAILURE				NSSS_E_UNICODE_OP_FAILURE		
#define		NSSO_E_TRANSPORT_FAILURE				NSSS_E_TRANSPORT_FAILURE		
#define		NSSO_E_CRYPTO_OP_FAILURE				NSSS_E_CRYPTO_OP_FAILURE		
#define		NSSO_E_SERVER_CONN_FAILURE				NSSS_E_SERVER_CONN_FAILURE		
#define		NSSO_E_CONN_ACCESS_FAILURE				NSSS_E_CONN_ACCESS_FAILURE		
#define		NSSO_E_ENUM_BUFF_TOO_LONG				NSSS_E_ENUM_BUFF_TOO_LONG		
#define		NSSO_E_SECRET_BUFF_TOO_LONG				NSSS_E_SECRET_BUFF_TOO_LONG		
#define		NSSO_E_SECRET_ID_TOO_SHORT				NSSS_E_SECRET_ID_TOO_SHORT		
#define		NSSO_E_CORRUPTED_PACKET_DATA			NSSS_E_CORRUPTED_PACKET_DATA	
#define		NSSO_E_EP_ACCESS_DENIED					NSSS_E_EP_ACCESS_DENIED			
#define		NSSO_E_SCHEMA_NOT_EXTENDED				NSSS_E_SCHEMA_NOT_EXTENDED		
#define		NSSO_E_ATTR_NOT_FOUND					NSSS_E_ATTR_NOT_FOUND			
#define		NSSO_E_MIGRATION_NEEDED					NSSS_E_MIGRATION_NEEDED			
#define		NSSO_E_MP_PWORD_INVALID					NSSS_E_MP_PWORD_INVALID			
#define		NSSO_E_MP_PWORD_NOT_SET					NSSS_E_MP_PWORD_NOT_SET			
#define		NSSO_E_MP_PWORD_NOT_ALLOWED				NSSS_E_MP_PWORD_NOT_ALLOWED		
#define		NSSO_E_WRONG_REPLICA_TYPE				NSSS_E_WRONG_REPLICA_TYPE		
#define		NSSO_E_ATTR_VAL_NOT_FOUND				NSSS_E_ATTR_VAL_NOT_FOUND		
#define		NSSO_E_INVALID_PARAM					NSSS_E_INVALID_PARAM			
#define		NSSO_E_NEED_SECURE_CHANNEL				NSSS_E_NEED_SECURE_CHANNEL		
#define		NSSO_E_CONFIG_NOT_SUPPORTED				NSSS_E_CONFIG_NOT_SUPPORTED		
#define		NSSO_E_STORE_NOT_LOCKED					NSSS_E_STORE_NOT_LOCKED
#define		NSSO_E_TIME_OUT_OF_SYNC					NSSS_E_TIME_OUT_OF_SYNC

#define		NSSO_E_NOT_IMPLEMENTED					NSSS_E_NOT_IMPLEMENTED			
#define		NSSO_E_BETA_EXPIRED						NSSS_E_BETA_EXPIRED				

#define		NSSO_NICI_UNDETERMINED_ENGINE			NSSS_NICI_UNDETERMINED_ENGINE
#define		NSSO_NICI_DOMESTIC_ENGINE	 			NSSS_NICI_DOMESTIC_ENGINE	 
#define		NSSO_NICI_EXPORT_ENGINE		 			NSSS_NICI_EXPORT_ENGINE		 

#endif /* _NSSS_H */


#define 		NSSO_VERSION_NUMBER			 	 		NSSS_VERSION_NUMBER			 
#define		NSSO_MAX_SECRET_ID_CHARS				NSSS_MAX_SECRET_ID_CHARS	 	 
#define		NSSO_MAX_SECRET_ID_LEN		 			NSSS_MAX_SECRET_ID_LEN		 
#define		NSSO_MID_SECRET_BUF_LEN		 			NSSS_MID_SECRET_BUF_LEN		 
#define		NSSO_MAX_SECRET_BUF_LEN		 			NSSS_MAX_SECRET_BUF_LEN		 
#define		NSSO_MAX_EP_PWORD_CHARS		 			NSSS_MAX_EP_PWORD_CHARS		 
#define		NSSO_MAX_EP_PWORD_LEN		 			NSSS_MAX_EP_PWORD_LEN		 
#define		NSSO_MAX_LDAP_PWORD_LEN		 			NSSS_MAX_LDAP_PWORD_LEN		 
#define		NSSO_MAX_MP_PWORD_HINT_CHARS 			NSSS_MAX_MP_PWORD_HINT_CHARS 
#define		NSSO_MAX_MP_PWORD_HINT_LEN	 			NSSS_MAX_MP_PWORD_HINT_LEN	 
#define		NSSO_MAX_TREE_NAME_CHARS	 			NSSS_MAX_TREE_NAME_CHARS	 
#define		NSSO_MAX_TREE_NAME_LEN		 			NSSS_MAX_TREE_NAME_LEN		 
#define		NSSO_MAX_DN_CHARS			 			NSSS_MAX_DN_CHARS			 
#define		NSSO_MAX_DN_LEN				 			NSSS_MAX_DN_LEN				 
#define		NSSO_MAX_IP_ADDR_LEN		 			NSSS_MAX_IP_ADDR_LEN		 
#define		NSSO_MIN_IDLIST_BUF_LEN		 			NSSS_MIN_IDLIST_BUF_LEN		 
#define		NSSO_MID_IDLIST_BUF_LEN		 			NSSS_MID_IDLIST_BUF_LEN		 
#define		NSSO_MAX_IDLIST_BUF_LEN		 			NSSS_MAX_IDLIST_BUF_LEN		 
#define		NSSO_JUMBO_IDLIST_BUF_LEN	 			NSSS_JUMBO_IDLIST_BUF_LEN	 
#define		NSSO_JUMBO_ENUM_BUF_LEN		 			NSSS_JUMBO_ENUM_BUF_LEN		 
#define		NSSO_ENUM_BUFFER_GUESS		 			NSSS_ENUM_BUFFER_GUESS		 
#define		NSSO_ENUM_DELIM				 			NSSS_ENUM_DELIM				 

#define		NSSO_REMOVE_LOCK_FROM_STORE_F			NSSS_REMOVE_LOCK_FROM_STORE_F		
#define		NSSO_ENHANCED_PROTECTION_F				NSSS_ENHANCED_PROTECTION_F		
#define		NSSO_CREATE_ID_F						NSSS_CREATE_ID_F				
#define		NSSO_EP_PASSWORD_USED_F					NSSS_EP_PASSWORD_USED_F			
#define		NSSO_REPAIR_THE_STORE_F					NSSS_REPAIR_THE_STORE_F			
#define		NSSO_ALL_STRINGS_UNICODE_F				NSSS_ALL_STRINGS_UNICODE_F		
#define		NSSO_SET_TREE_NAME_F					NSSS_SET_TREE_NAME_F			
#define		NSSO_DESTROY_CONTEXT_F					NSSS_DESTROY_CONTEXT_F			
#define		NSSO_UNBINDLDAP_F						NSSS_UNBINDLDAP_F				
#define		NSSO_GET_CONTEXT_F						NSSS_GET_CONTEXT_F				
#define		NSSO_BINDLDAP_F							NSSS_BINDLDAP_F					
#define		NSSO_SECRET_LOCKED_F					NSSS_SECRET_LOCKED_F			
#define		NSSO_SECRET_NOT_INITIALIZED_F			NSSS_SECRET_NOT_INITIALIZED_F	
#define		NSSO_ENHANCED_PROTECT_INFO_F			NSSS_ENHANCED_PROTECT_INFO_F	
#define		NSSO_STORE_NOT_SYNCED_F					NSSS_STORE_NOT_SYNCED_F			
#define		NSSO_EP_PWORD_PRESENT_F					NSSS_EP_PWORD_PRESENT_F			
#define		NSSO_EP_MASTER_PWORD_USED_F				NSSS_EP_MASTER_PWORD_USED_F		
#define		NSSO_ADMIN_LAST_MOD_F					NSSS_ADMIN_LAST_MOD_F			
#define		NSSO_EP_MASTER_PWORD_PRESENT_F			NSSS_EP_MASTER_PWORD_PRESENT_F
#define		NSSO_MP_NOT_ALLOWED_F					NSSS_MP_NOT_ALLOWED_F			
#define 		NSSO_SYNC_IN_PROGRESS_F					NSSS_SYNC_IN_PROGRESS_F			
#define 		NSSO_ADMIN_UNLOCKED_F					NSSS_ADMIN_UNLOCKED_F			
#define		NSSO_DS_CTX_F							NSSS_NCP_CTX_F					
#define		NSSO_LDAP_CTX_F							NSSS_LDAP_CTX_F					
#define		NSSO_NICI_CTX_F							NSSS_NICI_CTX_F					

#define		NSSO_ReadSecret							NSSS_ReadSecret
#define		NSSO_WriteSecret						NSSS_WriteSecret
#define		NSSO_AddSecretID						NSSS_AddSecretID
#define		NSSO_RemoveSecretID						NSSS_RemoveSecret
#define		NSSO_GetServiceInformation				NSSS_GetServiceInformation
#define		NSSO_UnlockSecrets						NSSS_UnlockSecrets
#define		NSSO_RemoveSecretStore					NSSS_RemoveSecretStore
#define		NSSO_EnumerateSecretIDs					NSSS_EnumerateSecretIDs
#define		NSSO_SetEPMasterPassword				NSSS_SetEPMasterPassword


#if defined(__cplusplus) || defined(c_plusplus)
}
#endif

#endif /* _NSSSCL_H */