/* * Implement the 7816 portion of the card spec * * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. * See the COPYING file in the top-level directory. */ #ifndef CARD_7816_H #define CARD_7816_H 1 #include "card_7816t.h" #include "vcardt.h" /* * constructors for VCardResponse's */ /* response from a return buffer and a status */ VCardResponse *vcard_response_new(VCard *card, const unsigned char *buf, int len, int Le, vcard_7816_status_t status); /* response from a return buffer and status bytes */ VCardResponse *vcard_response_new_bytes(VCard *card, unsigned char *buf, int len, int Le, unsigned char sw1, unsigned char sw2); /* response from just status bytes */ VCardResponse *vcard_response_new_status_bytes(unsigned char sw1, unsigned char sw2); /* response from just status: NOTE this cannot fail, it will always return a * valid response, if it can't allocate memory, the response will be * VCARD7816_STATUS_EXC_ERROR_MEMORY_FAILURE */ VCardResponse *vcard_make_response(vcard_7816_status_t status); /* create a raw response (status has already been encoded */ VCardResponse *vcard_response_new_data(const unsigned char *buf, int len); void vcard_response_set_status_bytes(VCardResponse *response, unsigned char sw1, unsigned char sw2); /* * destructor for VCardResponse. * Can be called with a NULL response */ void vcard_response_delete(VCardResponse *response); /* * constructor for VCardAPDU */ VCardAPDU *vcard_apdu_new(unsigned char *raw_apdu, int len, unsigned short *status); /* * destructor for VCardAPDU * Can be called with a NULL apdu */ void vcard_apdu_delete(VCardAPDU *apdu); /* * APDU processing starts here. This routes the card processing stuff to the * right location. Always returns a valid response. */ VCardStatus vcard_process_apdu(VCard *card, VCardAPDU *apdu, VCardResponse **response); #endif