/* * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. * See the COPYING.LIB file in the top-level directory. */ #ifndef VCARD_H #define VCARD_H 1 #include "vcardt.h" /* * response buffer constructors and destructors. * * response buffers are used when we need to return more data than will fit in * a normal APDU response (nominally 254 bytes). */ VCardBufferResponse *vcard_buffer_response_new(unsigned char *buffer, int size); void vcard_buffer_response_delete(VCardBufferResponse *buffer_response); /* * clean up state on reset */ void vcard_reset(VCard *card, VCardPower power); /* * applet utilities */ /* * Constructor for a VCardApplet */ VCardApplet *vcard_new_applet(VCardProcessAPDU applet_process_function, VCardResetApplet applet_reset_function, unsigned char *aid, int aid_len); /* * destructor for a VCardApplet * Can be called with a NULL applet */ void vcard_delete_applet(VCardApplet *applet); /* accessor - set the card type specific private data */ void vcard_set_applet_private(VCardApplet *applet, VCardAppletPrivate *_private, VCardAppletPrivateFree private_free); /* set type of vcard */ void vcard_set_type(VCard *card, VCardType type); /* * utilities interacting with the current applet */ /* add a new applet to a card */ VCardStatus vcard_add_applet(VCard *card, VCardApplet *applet); /* find the applet on the card with the given aid */ VCardApplet *vcard_find_applet(VCard *card, unsigned char *aid, int aid_len); /* set the following applet to be current on the given channel */ void vcard_select_applet(VCard *card, int channel, VCardApplet *applet); /* get the card type specific private data on the given channel */ VCardAppletPrivate *vcard_get_current_applet_private(VCard *card, int channel); /* fetch the applet's id */ unsigned char *vcard_applet_get_aid(VCardApplet *applet, int *aid_len); /* process the apdu for the current selected applet/file */ VCardStatus vcard_process_applet_apdu(VCard *card, VCardAPDU *apdu, VCardResponse **response); /* * VCard utilities */ /* constructor */ VCard *vcard_new(VCardEmul *_private, VCardEmulFree private_free); /* get a reference */ VCard *vcard_reference(VCard *); /* destructor (reference counted) */ void vcard_free(VCard *); /* get the atr from the card */ void vcard_get_atr(VCard *card, unsigned char *atr, int *atr_len); void vcard_set_atr_func(VCard *card, VCardGetAtr vcard_get_atr); /* accessor functions for the response buffer */ VCardBufferResponse *vcard_get_buffer_response(VCard *card); void vcard_set_buffer_response(VCard *card, VCardBufferResponse *buffer); /* accessor functions for the type */ VCardType vcard_get_type(VCard *card); /* get the private data */ VCardEmul *vcard_get_private(VCard *card); #endif