forked from jbteam/libemv
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinternal.h
211 lines (183 loc) · 5.72 KB
/
internal.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#ifndef __INTERNAL_H
#define __INTERNAL_H
#include <stddef.h>
// Apdu transmit
extern char (*libemv_ext_apdu)(unsigned char cla, unsigned char ins, unsigned char p1, unsigned char p2,
unsigned char dataSize, const unsigned char* data,
int* outDataSize, unsigned char* outData);
// Alloc
extern void* (*libemv_malloc)(size_t size);
extern void* (*libemv_realloc)(void* ptr, size_t size);
extern void (*libemv_free)(void * ptr);
// Date time
extern void (*libemv_get_date)(char* strdate);
extern void (*libemv_get_time)(char* strtime);
// Random
extern int (*libemv_rand)(void);
// Debug
extern int (*libemv_printf)(const char * format, ...);
// Debug disabled / enabled
extern char libemv_debug_enabled;
// Debug out binary
void libemv_debug_buffer(char* strPre, unsigned char* buf, int size, char* strPost);
// Init and destroy application buffer
void libemv_init_tlv_buffer(void);
void libemv_destroy_tlv_buffer(void);
// Add or update tag in application buffer
void libemv_set_tag(unsigned short tag, unsigned char* data, int size);
// Clear application buffer data (not free memory)
void libemv_clear_tlv_buffer(void);
// Parse custom tlv buffer
// outBuffer will point to inBuffer with some shift
// Returns shift to the end of current [tag length value]
int libemv_parse_tlv(unsigned char* inBuffer, int inBufferSize, unsigned short* outTag, unsigned char** outBuffer, int* outSize);
// Make tlv from data (1 tag)
// Returns maked size of tlvBuffer
int libemv_make_tlv(unsigned char* inBuffer, int inBufferSize, unsigned short tag, unsigned char* tlvBuffer);
// Make data from DOL list. If no data in buffer - fill zeros
// Returns size of outBuffer
int libemv_dol(unsigned char* dol, int dolSize, unsigned char* outBuffer);
// Settings
extern LIBEMV_SETTINGS libemv_settings;
extern LIBEMV_GLOBAL libemv_global;
extern int libemv_applications_count;
extern LIBEMV_APPLICATIONS* libemv_applications;
void libemv_destroy_settings(void);
// Apdu function with debug info
char libemv_apdu(unsigned char cla, unsigned char ins, unsigned char p1, unsigned char p2,
unsigned char dataSize, const unsigned char* data,
int* outDataSize, unsigned char* outData);
// Tags
#define TAG_FCI_TEMPLATE 0x6F
#define TAG_DF_NAME 0x84
#define TAG_FCI_PROP_TEMPLATE 0xA5
#define TAG_SFI_OF_DEF 0x88
#define TAG_LANGUAGE_PREFERENCE 0x5F2D
#define TAG_ISSUER_CODE_TABLE_INDEX 0x9F11
#define TAG_FCI_ISSUER_DISCR_DATA 0xBF0C
#define TAG_APPLICATION_LABEL 0x50
#define TAG_APP_PRIORITY_INDICATOR 0x87
#define TAG_PDOL 0x9F38
#define TAG_TVR 0x95
#define TAG_TSI 0x9B
#define TAG_APPLICATION_TEMPLATE 0x61
#define TAG_ADF_NAME 0x4F
#define TAG_APP_PREFERRED_NAME 0x9F12
#define TAG_TERMINAL_CAPABILITIES 0x9F33
#define TAG_ADDI_TERMINAL_CAPABILITIES 0x9F40
#define TAG_AID 0x9F06
#define TAG_IFD_SERIAL_NUMBER 0x9F1E
#define TAG_TERMINAL_COUNTRY_CODE 0x9F1A
#define TAG_TERMINAL_TYPE 0x9F35
#define TAG_ACQUIRER_ID 0x9F01
#define TAG_APPLICATION_VERSION_NUMBER 0x9F08
#define TAG_MCC 0x9F15
#define TAG_MERCHANT_ID 0x9F16
#define TAG_MERCHANT_NAME_AND_LOCATION 0x9F4E
#define TAG_TERMINAL_FLOOR_LIMIT 0x9F1B
#define TAG_TERMINAL_ID 0x9F1C
#define TAG_RISK_MANAGEMENT_DATA 0x9F1D
#define TAG_TRANSACTION_REFERENCE_CURRENCY 0x9F3C
#define TAG_TRANSACTION_REFERENCE_EXPONENT 0x9F3D
#define TAG_AIP 0x82
#define TAG_AFL 0x94
#define TAG_COMMAND_TEMPLATE 0x83
#define TAG_RESPONSE_FORMAT_1 0x80
#define TAG_RESPONSE_FORMAT_2 0x77
#define TAG_READ_RECORD_RESPONSE_TEMPLATE 0x70
#define TAG_APPLICATION_EXP_DATE 0x5F24
#define TAG_PAN 0x5A
#define TAG_CDOL_1 0x8C
#define TAG_CDOL_2 0x8D
// Bit map, please control out of limits
typedef struct
{
#ifdef BIG_ENDIAN
unsigned char B1b8:1;
unsigned char B1b7:1;
unsigned char B1b6:1;
unsigned char B1b5:1;
unsigned char B1b4:1;
unsigned char B1b3:1;
unsigned char B1b2:1;
unsigned char B1b1:1;
unsigned char B2b8:1;
unsigned char B2b7:1;
unsigned char B2b6:1;
unsigned char B2b5:1;
unsigned char B2b4:1;
unsigned char B2b3:1;
unsigned char B2b2:1;
unsigned char B2b1:1;
unsigned char B3b8:1;
unsigned char B3b7:1;
unsigned char B3b6:1;
unsigned char B3b5:1;
unsigned char B3b4:1;
unsigned char B3b3:1;
unsigned char B3b2:1;
unsigned char B3b1:1;
unsigned char B4b8:1;
unsigned char B4b7:1;
unsigned char B4b6:1;
unsigned char B4b5:1;
unsigned char B4b4:1;
unsigned char B4b3:1;
unsigned char B4b2:1;
unsigned char B4b1:1;
unsigned char B5b8:1;
unsigned char B5b7:1;
unsigned char B5b6:1;
unsigned char B5b5:1;
unsigned char B5b4:1;
unsigned char B5b3:1;
unsigned char B5b2:1;
unsigned char B5b1:1;
#else
unsigned char B1b1:1;
unsigned char B1b2:1;
unsigned char B1b3:1;
unsigned char B1b4:1;
unsigned char B1b5:1;
unsigned char B1b6:1;
unsigned char B1b7:1;
unsigned char B1b8:1;
unsigned char B2b1:1;
unsigned char B2b2:1;
unsigned char B2b3:1;
unsigned char B2b4:1;
unsigned char B2b5:1;
unsigned char B2b6:1;
unsigned char B2b7:1;
unsigned char B2b8:1;
unsigned char B3b1:1;
unsigned char B3b2:1;
unsigned char B3b3:1;
unsigned char B3b4:1;
unsigned char B3b5:1;
unsigned char B3b6:1;
unsigned char B3b7:1;
unsigned char B3b8:1;
unsigned char B4b1:1;
unsigned char B4b2:1;
unsigned char B4b3:1;
unsigned char B4b4:1;
unsigned char B4b5:1;
unsigned char B4b6:1;
unsigned char B4b7:1;
unsigned char B4b8:1;
unsigned char B5b1:1;
unsigned char B5b2:1;
unsigned char B5b3:1;
unsigned char B5b4:1;
unsigned char B5b5:1;
unsigned char B5b6:1;
unsigned char B5b7:1;
unsigned char B5b8:1;
#endif
} EMV_BITS;
extern EMV_BITS* libemv_TVR;
extern EMV_BITS* libemv_TSI;
extern EMV_BITS* libemv_capa;
extern EMV_BITS* libemv_addi_capa;
#endif // __INTERNAL_H