/*
 * Copyright (c) 1999, 2001 by Sun Microsystems, Inc.
 * All rights reserved.
 *
*/

#pragma ident	"@(#)llib-lsmartcard	1.15	01/08/20 SMI"

#include <sys/types.h>
#include <smartcard.h>

/* Prototypes */
uint32_t OCF_RegisterClient(int8_t*, int8_t*,
						OCF_ClientHandle_t *);
uint32_t OCF_DeregisterClient(OCF_ClientHandle_t);



/*
 * Prototype of Client Event Handler
 */
uint32_t OCF_RegisterEventHandler(OCF_ClientHandle_t, void*,
							OCF_EventHandler_t);
uint32_t OCF_DeregisterEventHandler(OCF_ClientHandle_t);


/*
 * OCF_RegisterForEvent - Re gister for an OCF event.
 * OCF_DeregisterForEvent - Deregister for an OCF event.
 *
 */
uint32_t OCF_RegisterForEvent(OCF_ClientHandle_t,
					OCF_Event_t,
					OCF_EventRegistrationData_t,
					void*,
					OCF_EventHandle_t *);
uint32_t OCF_DeregisterForEvent(OCF_EventHandle_t);


/*
 * OCF_WaitForCardInserted - Waits for the specified card to be
 *	inserted in the specified reader.
 * OCF_WaitForCardRemoved - Waits for the specified card to be
 *	removed from the reader.
 * OCF_CardPresent - Check if the specified card is present in the
 *	specified reader.
 */

/* Prototypes */
uint32_t OCF_WaitForCardInserted(OCF_ClientHandle_t,
					OCF_CardSpec_t,
					OCF_CardHandle_t *);
uint32_t OCF_WaitForCardRemoved(OCF_ClientHandle_t, OCF_CardHandle_t,
					OCF_Timeout_t);
uint32_t OCF_CardPresent(OCF_ClientHandle_t, OCF_CardSpec_t);


/*
 * OCF_LockCard - Locks card with client.
 * OCF_UnlockCard - Unlocks card with client.
 *
 */

/* Prototypes */
uint32_t OCF_LockCard(OCF_ClientHandle_t, OCF_CardHandle_t, OCF_Timeout_t);
uint32_t OCF_UnlockCard(OCF_ClientHandle_t, OCF_CardHandle_t);


/*
 * OCF Property Interface - provides a basic get/set property
 *	interface.
 */

/* Prototypes for properties */

int8_t* OCF_ListProperty_First(OCF_PropertyList_t);
int8_t* OCF_ListProperty_Next(OCF_PropertyList_t);
uint32_t OCF_DestroyPropertiesList(OCF_PropertyList_t);

/* set/get OCF Server properties */
uint32_t OCF_SetProperty(int8_t*, int8_t*);
uint32_t OCF_GetProperty(int8_t*, int8_t* *);
uint32_t OCF_DeleteProperty(int8_t*);
uint32_t OCF_ListProperties(OCF_PropertyList_t *);

/* set/get Client Handle properties */
uint32_t OCF_SetClientProperty(OCF_ClientHandle_t, int8_t*,
					int8_t*);
uint32_t OCF_GetClientProperty(OCF_ClientHandle_t, int8_t*,
					int8_t* *);
uint32_t OCF_DeleteClientProperty(OCF_ClientHandle_t, int8_t*);
uint32_t OCF_ListClientProperties(OCF_ClientHandle_t, OCF_PropertyList_t *);

/* set/get Card properties */
uint32_t OCF_SetCardProperty(OCF_ClientHandle_t, OCF_CardHandle_t,
	int8_t*, int8_t*);
uint32_t OCF_GetCardProperty(OCF_ClientHandle_t, OCF_CardHandle_t,
	int8_t*, int8_t* *);
uint32_t OCF_DeleteCardProperty(OCF_ClientHandle_t, OCF_CardHandle_t,
	int8_t*);
uint32_t OCF_ListCardProperties(OCF_ClientHandle_t, OCF_CardHandle_t,
	OCF_PropertyList_t *);

/* set/get Card Handle properties */
uint32_t OCF_SetCardInfoProperty(OCF_ClientHandle_t, OCF_CardHandle_t,
					int8_t*,
					int8_t*);
uint32_t OCF_GetCardInfoProperty(OCF_ClientHandle_t, OCF_CardHandle_t,
					int8_t*,
					int8_t* *);

/*
 * Lists returned from OCF.
 *
 * OCF_CardServicesList_t - a list of card services
 * OCF_CardsList_t - a list of cards
 * OCF_ReadersList_t - a list of readers
 */

/* Prototypes */
uint32_t OCF_ListCardServices(int8_t*, OCF_CardServicesList_t *);

/* Present list */
uint32_t OCF_ListCardsPresent(OCF_CardsList_t *);
uint32_t OCF_ListReadersPresent(OCF_ReadersList_t *);

/* Configured list */
uint32_t OCF_ListCardsConfigured(OCF_CardsList_t *);
uint32_t OCF_ListReadersConfigured(OCF_ReadersList_t *);

/* Prototype to iterate the list */
int8_t* OCF_ListCardServices_First(OCF_CardServicesList_t);
int8_t* OCF_ListCardServices_Next(OCF_CardServicesList_t);
int8_t* OCF_ListCards_First(OCF_CardsList_t);
int8_t* OCF_ListCards_Next(OCF_CardsList_t);
int8_t* OCF_ListReaders_First(OCF_ReadersList_t);
int8_t* OCF_ListReaders_Next(OCF_ReadersList_t);

/* Routines to destroy lists */
uint32_t OCF_DestroyCardServicesList(OCF_CardServicesList_t);
uint32_t OCF_DestroyCardsList(OCF_CardsList_t);
uint32_t OCF_DestroyReadersList(OCF_ReadersList_t);

/* Routine to get time_t since a card has been validated */
uint32_t OCF_TimeSinceValidated(OCF_ClientHandle_t, OCF_CardHandle_t,
    uint64_t *);

/* Routine to check if the card is a valid card for the application */
uint32_t OCF_CardValid(OCF_ClientHandle_t, OCF_CardHandle_t);


/*
 * OCF_Authenticate - Perform card authentication.
 *
 */
/*
 * User info structire for validating password
 */

/* Prototypes */
uint32_t OCF_Authenticate(OCF_ClientHandle_t,
					OCF_CardHandle_t, void*,
					OCF_ClientAuthenticationCallback_t);


/*
 * OCF_SignatureCardService
 */
uint32_t OCF_SignatureCardService(OCF_CardServiceMethod_t,
					OCF_ClientHandle_t,
					OCF_CardHandle_t,
					OCF_CardServiceParams_t,
					OCF_CardServiceReturn_t);

/*
 * OCF_KeyImportCardService
 */
uint32_t OCF_KeyImportCardService(OCF_CardServiceMethod_t,
					OCF_ClientHandle_t,
					OCF_CardHandle_t,
					OCF_CardServiceParams_t,
					OCF_CardServiceReturn_t);

/*
 * OCF_FileAccessCardService
 */
uint32_t OCF_FileAccessCardService(OCF_CardServiceMethod_t,
					OCF_ClientHandle_t,
					OCF_CardHandle_t,
					OCF_CardServiceParams_t,
					OCF_CardServiceReturn_t);


/*
 * OCF_PINCardService
 */

/* PIN card service methods */
uint32_t OCF_PINCardService(OCF_CardServiceMethod_t,
    OCF_ClientHandle_t,	OCF_CardHandle_t, OCF_CardServiceParams_t,
    OCF_CardServiceReturn_t);

/*
 * OCF_PassThruCardService
 */
uint32_t OCF_PassThruCardService(OCF_CardServiceMethod_t,
    OCF_ClientHandle_t, OCF_CardHandle_t, uint8_t *, size_t,
    uint8_t **, size_t *);


/*
 * OCF_UserInfoCardService
 */
/* User info method names */
uint32_t OCF_UserInfoCardService(OCF_CardServiceMethod_t,
    OCF_ClientHandle_t, OCF_CardHandle_t, OCF_CardServiceParams_t,
    OCF_CardServiceReturn_t);

/*
 * OCF_CardletAdminCardService
 */
uint32_t OCF_CardletAdminCardService(OCF_CardServiceMethod_t,
						OCF_ClientHandle_t,
						OCF_CardHandle_t,
						OCF_CardServiceParams_t,
						OCF_CardServiceReturn_t);

/*
 * OCF_CardPropertyCardService
 */
uint32_t OCF_CardPropertyCardService(OCF_CardServiceMethod_t,
						OCF_ClientHandle_t,
						OCF_CardHandle_t,
						OCF_CardServiceParams_t,
						OCF_CardServiceReturn_t);

/*
 * OCF_CardService
 */
uint32_t OCF_CardService(OCF_CardServiceClass_t, OCF_CardServiceMethod_t,
    OCF_ClientHandle_t, OCF_CardHandle_t, OCF_CardServiceParams_t,
    OCF_CardServiceReturn_t);
