Annotation of qemu/libcacard/card_7816t.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Implement the 7816 portion of the card spec
                      3:  *
                      4:  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
                      5:  * See the COPYING.LIB file in the top-level directory.
                      6:  */
                      7: #ifndef CARD_7816T_H
                      8: #define CARD_7816T_H 1
                      9: 
                     10: typedef unsigned short vcard_7816_status_t;
                     11: 
                     12: struct VCardResponseStruct {
                     13:     unsigned char *b_data;
                     14:     vcard_7816_status_t b_status;
                     15:     unsigned char b_sw1;
                     16:     unsigned char b_sw2;
                     17:     int b_len;
                     18:     int b_total_len;
                     19:     enum VCardResponseBufferType {
                     20:         VCARD_MALLOC,
                     21:         VCARD_MALLOC_DATA,
                     22:         VCARD_MALLOC_STRUCT,
                     23:         VCARD_STATIC
                     24:     } b_type;
                     25: };
                     26: 
                     27: #define VCARD_RESPONSE_NEW_STATIC_STATUS(stat) \
                     28: static const VCardResponse VCardResponse##stat = \
                     29:         {(unsigned char *)&VCardResponse##stat.b_sw1, (stat), ((stat) >> 8), \
                     30:          ((stat) & 0xff), 0, 2, VCARD_STATIC};
                     31: 
                     32: #define VCARD_RESPONSE_NEW_STATIC_STATUS_BYTES(sw1, sw2) \
                     33: static const VCardResponse VCARDResponse##sw1 = \
                     34:         {(unsigned char *)&VCardResponse##name.b_sw1, ((sw1) << 8 | (sw2)), \
                     35:          (sw1), (sw2), 0, 2, VCARD_STATIC};
                     36: 
                     37: /* cast away the const, callers need may need to 'free' the
                     38:  * result, and const implies that they don't */
                     39: #define VCARD_RESPONSE_GET_STATIC(name) \
                     40:         ((VCardResponse *)(&VCardResponse##name))
                     41: 
                     42: typedef enum {
                     43:     VCARD_7816_ISO,
                     44:     VCARD_7816_RFU,
                     45:     VCARD_7816_PTS,
                     46:     VCARD_7816_PROPIETARY
                     47: } VCardAPDUType;
                     48: 
                     49: 
                     50: /*
                     51:  * 7816 header. All APDU's have this header.
                     52:  * They must be laid out in this order.
                     53:  */
                     54: struct VCardAPDUHeader {
                     55:     unsigned char ah_cla;
                     56:     unsigned char ah_ins;
                     57:     unsigned char ah_p1;
                     58:     unsigned char ah_p2;
                     59:     unsigned char ah_Le;
                     60:     unsigned char ah_body[1]; /* indefinate length */
                     61: };
                     62: 
                     63: /*
                     64:  * 7816 APDU structure. The raw bytes are stored in the union and can be
                     65:  * accessed directly through u.data (which is aliased as a_data).
                     66:  *
                     67:  * Names of the fields match the 7816 documentation.
                     68:  */
                     69: struct VCardAPDUStruct {
                     70:     int a_len;                /* length of the whole buffer, including header */
                     71:     int a_Lc;                 /* 7816 Lc (parameter length) value */
                     72:     int a_Le;                 /* 7816 Le (expected result length) value */
                     73:     unsigned char *a_body;    /* pointer to the parameter */
                     74:     int a_channel;            /* decoded channel */
                     75:     int a_secure_messaging;   /* decoded secure messaging type */
                     76:     int a_type;               /* decoded type from cla (top nibble of class) */
                     77:     VCardAPDUType a_gen_type; /* generic type (7816, PROPRIETARY, RFU, etc) */
                     78:     union {
                     79:         struct VCardAPDUHeader *header;
                     80:         unsigned char   *data;
                     81:     } u;
                     82: /* give the subfields a unified look */
                     83: #define a_header u.header
                     84: #define a_data u.data
                     85: #define a_cla a_header->ah_cla /* class */
                     86: #define a_ins a_header->ah_ins /* instruction */
                     87: #define a_p1 a_header->ah_p1   /* parameter 1 */
                     88: #define a_p2 a_header->ah_p2   /* parameter 2 */
                     89: };
                     90: 
                     91: /* 7816 status codes */
                     92: #define VCARD7816_STATUS_SUCCESS                              0x9000
                     93: #define VCARD7816_STATUS_WARNING                              0x6200
                     94: #define VCARD7816_STATUS_WARNING_RET_CORUPT                   0x6281
                     95: #define VCARD7816_STATUS_WARNING_BUF_END_BEFORE_LE            0x6282
                     96: #define VCARD7816_STATUS_WARNING_INVALID_FILE_SELECTED        0x6283
                     97: #define VCARD7816_STATUS_WARNING_FCI_FORMAT_INVALID           0x6284
                     98: #define VCARD7816_STATUS_WARNING_CHANGE                       0x6300
                     99: #define VCARD7816_STATUS_WARNING_FILE_FILLED                  0x6381
                    100: #define VCARD7816_STATUS_EXC_ERROR                            0x6400
                    101: #define VCARD7816_STATUS_EXC_ERROR_CHANGE                     0x6500
                    102: #define VCARD7816_STATUS_EXC_ERROR_MEMORY_FAILURE             0x6581
                    103: #define VCARD7816_STATUS_ERROR_WRONG_LENGTH                   0x6700
                    104: #define VCARD7816_STATUS_ERROR_CLA_NOT_SUPPORTED              0x6800
                    105: #define VCARD7816_STATUS_ERROR_CHANNEL_NOT_SUPPORTED          0x6881
                    106: #define VCARD7816_STATUS_ERROR_SECURE_NOT_SUPPORTED           0x6882
                    107: #define VCARD7816_STATUS_ERROR_COMMAND_NOT_SUPPORTED          0x6900
                    108: #define VCARD7816_STATUS_ERROR_COMMAND_INCOMPATIBLE_WITH_FILE 0x6981
                    109: #define VCARD7816_STATUS_ERROR_SECURITY_NOT_SATISFIED         0x6982
                    110: #define VCARD7816_STATUS_ERROR_AUTHENTICATION_BLOCKED         0x6983
                    111: #define VCARD7816_STATUS_ERROR_DATA_INVALID                   0x6984
                    112: #define VCARD7816_STATUS_ERROR_CONDITION_NOT_SATISFIED        0x6985
                    113: #define VCARD7816_STATUS_ERROR_DATA_NO_EF                     0x6986
                    114: #define VCARD7816_STATUS_ERROR_SM_OBJECT_MISSING              0x6987
                    115: #define VCARD7816_STATUS_ERROR_SM_OBJECT_INCORRECT            0x6988
                    116: #define VCARD7816_STATUS_ERROR_WRONG_PARAMETERS               0x6a00
                    117: #define VCARD7816_STATUS_ERROR_WRONG_PARAMETERS_IN_DATA       0x6a80
                    118: #define VCARD7816_STATUS_ERROR_FUNCTION_NOT_SUPPORTED         0x6a81
                    119: #define VCARD7816_STATUS_ERROR_FILE_NOT_FOUND                 0x6a82
                    120: #define VCARD7816_STATUS_ERROR_RECORD_NOT_FOUND               0x6a83
                    121: #define VCARD7816_STATUS_ERROR_NO_SPACE_FOR_FILE              0x6a84
                    122: #define VCARD7816_STATUS_ERROR_LC_TLV_INCONSISTENT            0x6a85
                    123: #define VCARD7816_STATUS_ERROR_P1_P2_INCORRECT                0x6a86
                    124: #define VCARD7816_STATUS_ERROR_LC_P1_P2_INCONSISTENT          0x6a87
                    125: #define VCARD7816_STATUS_ERROR_DATA_NOT_FOUND                 0x6a88
                    126: #define VCARD7816_STATUS_ERROR_WRONG_PARAMETERS_2             0x6b00
                    127: #define VCARD7816_STATUS_ERROR_INS_CODE_INVALID               0x6d00
                    128: #define VCARD7816_STATUS_ERROR_CLA_INVALID                    0x6e00
                    129: #define VCARD7816_STATUS_ERROR_GENERAL                        0x6f00
                    130: /* 7816 sw1 codes */
                    131: #define VCARD7816_SW1_SUCCESS               0x90
                    132: #define VCARD7816_SW1_RESPONSE_BYTES        0x61
                    133: #define VCARD7816_SW1_WARNING               0x62
                    134: #define VCARD7816_SW1_WARNING_CHANGE        0x63
                    135: #define VCARD7816_SW1_EXC_ERROR             0x64
                    136: #define VCARD7816_SW1_EXC_ERROR_CHANGE      0x65
                    137: #define VCARD7816_SW1_ERROR_WRONG_LENGTH    0x67
                    138: #define VCARD7816_SW1_CLA_ERROR             0x68
                    139: #define VCARD7816_SW1_COMMAND_ERROR         0x69
                    140: #define VCARD7816_SW1_P1_P2_ERROR           0x6a
                    141: #define VCARD7816_SW1_LE_ERROR              0x6c
                    142: #define VCARD7816_SW1_INS_ERROR             0x6d
                    143: #define VCARD7816_SW1_CLA_NOT_SUPPORTED     0x6e
                    144: 
                    145: /* 7816 Instructions */
                    146: #define VCARD7816_INS_MANAGE_CHANNEL        0x70
                    147: #define VCARD7816_INS_EXTERNAL_AUTHENTICATE 0x82
                    148: #define VCARD7816_INS_GET_CHALLENGE         0x84
                    149: #define VCARD7816_INS_INTERNAL_AUTHENTICATE 0x88
                    150: #define VCARD7816_INS_ERASE_BINARY          0x0e
                    151: #define VCARD7816_INS_READ_BINARY           0xb0
                    152: #define VCARD7816_INS_WRITE_BINARY          0xd0
                    153: #define VCARD7816_INS_UPDATE_BINARY         0xd6
                    154: #define VCARD7816_INS_READ_RECORD           0xb2
                    155: #define VCARD7816_INS_WRITE_RECORD          0xd2
                    156: #define VCARD7816_INS_UPDATE_RECORD         0xdc
                    157: #define VCARD7816_INS_APPEND_RECORD         0xe2
                    158: #define VCARD7816_INS_ENVELOPE              0xc2
                    159: #define VCARD7816_INS_PUT_DATA              0xda
                    160: #define VCARD7816_INS_GET_DATA              0xca
                    161: #define VCARD7816_INS_SELECT_FILE           0xa4
                    162: #define VCARD7816_INS_VERIFY                0x20
                    163: #define VCARD7816_INS_GET_RESPONSE          0xc0
                    164: 
                    165: #endif

unix.superglobalmegacorp.com