]>
Commit | Line | Data |
---|---|---|
9206d3b0 | 1 | //----------------------------------------------------------------------------- |
2 | // Peter Fillmore 2014 | |
3 | // code derived off merloks mifare code | |
4 | // | |
5 | // | |
6 | // This code is licensed to you under the terms of the GNU GPL, version 2 or, | |
7 | // at your option, any later version. See the LICENSE.txt file for the text of | |
8 | // the license. | |
9 | //----------------------------------------------------------------------------- | |
10 | // structure to hold EMV card and terminal parameters | |
11 | //----------------------------------------------------------------------------- | |
12 | #ifndef __EMVCARD_H | |
13 | #define __EMVCARD_H | |
14 | ||
15 | //structure to hold received/set tag values | |
16 | //variable data inputs have length specifiers | |
17 | typedef struct { | |
18 | //ISO14443-A card stuff | |
19 | uint8_t ATQA[2]; //Answer to Request | |
20 | uint8_t UID_len; | |
21 | uint8_t UID[10]; | |
22 | uint8_t SAK; | |
23 | uint8_t ATS_len; //Answer to select | |
24 | uint8_t ATS[256]; | |
25 | //ATS | |
26 | uint8_t TL; | |
27 | uint8_t T0; | |
28 | uint8_t TA1; | |
29 | uint8_t TB1; | |
30 | uint8_t TC1; | |
31 | uint8_t* historicalbytes; | |
32 | //PPS response | |
33 | uint8_t PPSS; | |
34 | //SFI 2 record 1 | |
35 | uint8_t tag_4F_len; //length of AID | |
36 | uint8_t tag_4F[16]; //Application Identifier (AID) | |
37 | uint8_t tag_50_len; //length of application label | |
38 | uint8_t tag_50[16]; //Application Label | |
39 | uint8_t tag_56_len; //track1 length | |
40 | uint8_t tag_56[76]; //Track 1 Data | |
41 | uint8_t tag_57_len; //track2 equiv len | |
42 | uint8_t tag_57[19]; //Track 2 Equivalent Data | |
43 | uint8_t tag_5A_len; //PAN length | |
44 | uint8_t tag_5A[10]; //Application Primary Account Number (PAN) | |
45 | //uint8_t tag_6F[]; //File Control Information (FCI) Template | |
46 | //uint8_t tag_70[255]; //Record Template | |
47 | //uint8_t tag_77[]; //Response Message Template Format 2 | |
48 | //uint8_t tag_80[]; //Response Message Template Format 1 | |
49 | uint8_t tag_82[2]; //Application Interchange Profile AIP | |
50 | //uint8_t tag_83[]; //Command Template | |
51 | uint8_t tag_84_len; | |
52 | uint8_t tag_84[16]; //DF Name | |
53 | uint8_t tag_86_len; | |
54 | uint8_t tag_86[261]; //Issuer Script Command | |
55 | uint8_t tag_87[1]; //Application Priority Indicator | |
56 | uint8_t tag_88[1]; //Short File Identifier | |
57 | uint8_t tag_8A[2]; //Authorisation Response Code | |
58 | uint8_t tag_8C_len; | |
59 | uint8_t tag_8C[252]; //CDOL1 | |
60 | uint8_t tag_8D_len; | |
61 | uint8_t tag_8D[252]; //CDOL2 | |
62 | uint8_t tag_8E_len; | |
63 | uint8_t tag_8E[252]; //Cardholder Verification Method (CVM) List | |
64 | uint8_t tag_8F[1]; //Certification Authority Public Key Index | |
65 | uint8_t tag_90_len; | |
66 | uint8_t tag_90[255]; //ssuer Public Key Certificate | |
67 | uint8_t tag_92_len; | |
68 | uint8_t tag_92[255]; //Issuer Public Key Remainder | |
69 | uint8_t tag_93_len; | |
70 | uint8_t tag_93[255]; //Signed Static Application Data | |
71 | uint8_t tag_94_len; | |
72 | uint8_t tag_94[252]; //Application File Locator AFL | |
73 | uint8_t tag_95[5]; //Terminal Verification Results | |
74 | uint8_t tag_97_len; | |
75 | uint8_t tag_97[252]; //Transaction Certificate Data Object List (TDOL) | |
76 | uint8_t tag_98[20]; //Transaction Certificate (TC) Hash Value | |
77 | //assume 20 bytes, change after testing | |
78 | uint8_t tag_99_len; | |
79 | uint8_t tag_99[20]; //Transaction Personal Identification Number (PIN) Data | |
80 | uint8_t tag_9A[3]; //Transaction Date | |
81 | uint8_t tag_9B[2]; //Transaction Status Information | |
82 | uint8_t tag_9C[1]; //Transaction Type | |
83 | uint8_t tag_9D_len; | |
84 | uint8_t tag_9D[16]; //Directory Definition File | |
85 | ||
86 | uint8_t tag_CD[3]; //Card Issuer Action Codes Paypass | |
87 | uint8_t tag_CE[3]; | |
88 | uint8_t tag_CF[3]; | |
89 | ||
90 | uint8_t tag_D7[3]; //Application Control (PayPass) | |
91 | uint8_t tag_D8[2]; //Application Interchange Profile (PayPass) | |
92 | uint8_t tag_D9_len; //Application File Locator (PayPass) | |
93 | uint8_t tag_D9[16]; | |
94 | uint8_t tag_DA[2]; //Static CVC3track1 | |
95 | uint8_t tag_DB[2]; //Static CVC3track2 | |
96 | uint8_t tag_DC[2]; //IVCVC3 CVC3track1 | |
97 | uint8_t tag_DD[2]; //IVCVC3 CVC3track2 | |
98 | ||
99 | uint8_t tag_AF_len; | |
100 | uint8_t tag_AF[255]; //Proprietary Information | |
101 | ||
102 | uint8_t tag_5F20_len; | |
103 | uint8_t tag_5F20[26]; //Cardholder Name | |
104 | uint8_t tag_5F24[3]; //Application Expiry Date | |
105 | uint8_t tag_5F25[3]; //Application Effective Date YYMMDD | |
106 | uint8_t tag_5F28[2]; //Issuer Country Code | |
107 | uint8_t tag_5F2A[2]; //Transaction Currency Code | |
108 | uint8_t tag_5F2D_len; | |
109 | uint8_t tag_5F2D[8]; //Language Preference | |
110 | uint8_t tag_5F30[2]; //Service Code | |
111 | uint8_t tag_5F34[1]; //Application Primary Account Number (PAN) Sequence Number | |
112 | uint8_t tag_5F36[2]; //ATC | |
113 | uint8_t tag_5F50_len; | |
114 | uint8_t tag_5F50[255]; //Issuer URL | |
115 | uint8_t tag_5F54_len; | |
116 | uint8_t tag_5F54[11]; //Bank Identifier Code (BIC) | |
117 | uint8_t tag_9F01[6]; //Acquirer Identifier | |
118 | uint8_t tag_9F02[6]; // Amount, Authorised (Numeric) | |
119 | uint8_t tag_9F03[6]; //Amount, Other (Numeric) | |
120 | uint8_t tag_9F04[4]; //Amount, Other (Binary) | |
121 | uint8_t tag_9F05_len; | |
122 | uint8_t tag_9F05[32]; //Application Discretionary Data | |
123 | uint8_t tag_9F06_len; | |
124 | uint8_t tag_9F06[16]; //AID terminal | |
125 | uint8_t tag_9F07[2]; //Application Usage Control | |
126 | uint8_t tag_9F08[2]; //Application Version Number | |
127 | uint8_t tag_9F09[2]; //Application Version Number | |
128 | //uint8_t tag_9F0A[2] | |
129 | uint8_t tag_9F0B_len; | |
130 | uint8_t tag_9F0B[45]; //Cardholder Name Extended | |
131 | uint8_t tag_9F0D[5]; //Issuer Action Code - Default | |
132 | uint8_t tag_9F0E[5]; //Issuer Action Code - Denial | |
133 | uint8_t tag_9F0F[5]; //Issuer Action Code - Online | |
134 | uint8_t tag_9F10_len; //Issuer Application Data | |
135 | uint8_t tag_9F10[32]; | |
136 | uint8_t tag_9F11[1]; //Issuer Code Table Index | |
137 | uint8_t tag_9F12_len; | |
138 | uint8_t tag_9F12[255]; //Application Preferred Name | |
139 | uint8_t tag_9F13[2]; //Last Online Application Transaction Counter (ATC) Registerjk | |
140 | uint8_t tag_9F14[1]; //Lower Consecutive Offline Limit | |
141 | uint8_t tag_9F15[2]; //Merchant Category Code | |
142 | uint8_t tag_9F16[15]; //Merchant Identifier | |
143 | uint8_t tag_9F17[1]; //Personal Identification Number (PIN) Try Counter | |
144 | uint8_t tag_9F18[4]; //Issuer Script Identifier | |
145 | //uint8_t tag_9F19[] | |
146 | uint8_t tag_9F1A[2]; //Terminal Country Code | |
147 | uint8_t tag_9F1B[4]; //Terminal Floor Limit | |
148 | uint8_t tag_9F1C[8]; //Terminal Identification | |
149 | uint8_t tag_9F1D_len; | |
150 | uint8_t tag_9F1D[8]; //Terminal Risk Management Data | |
151 | uint8_t tag_9F1E[8]; //Interface Device (IFD) Serial Number | |
152 | uint8_t tag_9F1F_len; | |
153 | uint8_t tag_9F1F[255]; //Track 1 Discretionary Data | |
154 | uint8_t tag_9F20_len; | |
155 | uint8_t tag_9F20[255]; //Track 2 DD | |
156 | uint8_t tag_9F21[3]; //Transaction Time | |
157 | uint8_t tag_9F22[1]; //Certification Authority Public Key Index | |
158 | uint8_t tag_9F23[1]; //Upper Consecutive Offline Limit | |
159 | //uint8_t tag_9F24 | |
160 | //uint8_t tag_9F25 | |
161 | uint8_t tag_9F26[8]; //Application Cryptogram | |
162 | uint8_t tag_9F27[1]; //Cryptogram Information Data | |
163 | //uint8_t tag_9F28 | |
164 | //uint8_t tag_9F29 | |
165 | //uint8_t tag_9F2A | |
166 | //uint8_t tag_9F2B | |
167 | //uint8_t tag_9F2C | |
168 | uint8_t tag_9F2D_len; | |
169 | uint8_t tag_9F2D[255]; //Integrated Circuit Card (ICC) PIN Encipherment Public Key Certificate | |
170 | uint8_t tag_9F2E[3]; //Integrated Circuit Card (ICC) PIN Encipherment Public Key Exponent | |
171 | uint8_t tag_9F2F_len; | |
172 | uint8_t tag_9F2F[255]; //Integrated Circuit Card (ICC) PIN Encipherment Public Key Remainder | |
173 | //uint8_t tag_9F30 | |
174 | //uint8_t tag_9F31 | |
175 | uint8_t tag_9F32_len; | |
176 | uint8_t tag_9F32[3]; //Issuer Public Key Exponent | |
177 | uint8_t tag_9F33[3]; //Terminal Capabilities | |
178 | uint8_t tag_9F34[3]; //Cardholder Verification Method (CVM) Results | |
179 | uint8_t tag_9F35[1]; //Terminal Type | |
180 | uint8_t tag_9F36[2]; //Application Transaction Counter (ATC) | |
181 | uint8_t tag_9F37[4]; //Unpredictable Number | |
182 | uint8_t tag_9F38_len; | |
183 | uint8_t tag_9F38[255]; //PDOL | |
184 | uint8_t tag_9F39[1]; //Point-of-Service (POS) Entry Mode | |
185 | uint8_t tag_9F40[5]; //Additional Terminal Capabilities | |
186 | uint8_t tag_9F41[4]; //Transaction Sequence Counter | |
187 | uint8_t tag_9F42[2]; //Application Currency Code | |
188 | uint8_t tag_9F43[4]; //Application Reference Currency Exponent | |
189 | uint8_t tag_9F44[1]; //Application Currency Exponent | |
190 | uint8_t tag_9F45[2]; //Data Authentication Code | |
191 | uint8_t tag_9F46_len; | |
192 | uint8_t tag_9F46[255]; //ICC Public Key Certificate | |
193 | uint8_t tag_9F47_len; | |
194 | uint8_t tag_9F47[3]; //ICC Public Key Exponent | |
195 | uint8_t tag_9F48_len; | |
196 | uint8_t tag_9F48[255]; //ICC Public Key Remainder | |
197 | uint8_t tag_9F49_len; | |
198 | uint8_t tag_9F49[252]; | |
199 | uint8_t tag_9F4A[1]; //SDA Tag list | |
200 | uint8_t tag_9F4B_len; | |
201 | uint8_t tag_9F4B[255]; //Signed Dynamic Application Data | |
202 | uint8_t tag_9F4C[8]; //ICC Dynamic Number | |
203 | uint8_t tag_9F4D[2]; //Log Entry | |
204 | uint8_t tag_9F4E[255]; //Merchant Name and Location | |
205 | //9F50-9F7F are payment system specific | |
206 | uint8_t tag_9F60[2]; //CVC3 track1 | |
207 | uint8_t tag_9F61[2]; //CVC3 track2 | |
208 | uint8_t tag_9F62[6]; //Track 1 Bit Map for CVC3 (PCVC3TRACK1) | |
209 | uint8_t tag_9F63[6]; //Track 1 Bit Map for UN and ATC (PUNATCTRACK1) | |
210 | uint8_t tag_9F64[1]; //Track 1 Number of ATC Digits (NATCTRACK1) | |
211 | uint8_t tag_9F65[2]; //rack 2 Bit Map for CVC3 (PCVC3TRACK2) | |
212 | uint8_t tag_9F66[2]; //Track 2 Bit Map for UN and ATC (PUNATCTRACK2), or VISA card type | |
213 | uint8_t tag_9F67[1]; //Track 2 Number of ATC Digits (NATCTRACK2) | |
214 | uint8_t tag_9F68_len; | |
215 | uint8_t tag_9F68[252]; //Mag Stripe CVM List | |
216 | uint8_t tag_9F69_len; | |
217 | uint8_t tag_9F69[255]; //Unpredictable Number Data Object List (UDOL) | |
218 | uint8_t tag_9F6A[8]; //Unpredictable Number (Numeric) | |
219 | uint8_t tag_9F6B_len; | |
220 | uint8_t tag_9F6B[19]; //track 2 data | |
221 | uint8_t tag_9F6C[2]; //Mag Stripe Application Version Number(Card) | |
222 | //template holders | |
223 | uint8_t tag_61_len; | |
224 | uint8_t tag_61[255]; //Application template | |
225 | uint8_t tag_6F_len; | |
226 | uint8_t tag_6F[255]; //6F template | |
227 | uint8_t tag_A5_len; | |
228 | uint8_t tag_A5[255]; //A5 template | |
229 | uint8_t tag_DFNAME_len; | |
230 | uint8_t tag_DFNAME[255]; //A5 template | |
231 | uint8_t tag_70_len; | |
232 | uint8_t tag_70[255]; //70 template | |
233 | uint8_t tag_77_len; | |
234 | uint8_t tag_77[255]; //77 template | |
235 | uint8_t tag_80_len; | |
236 | uint8_t tag_80[255]; //80 template | |
237 | uint8_t tag_91_len; //Issuer Authentication Data | |
238 | uint8_t tag_91[16]; | |
239 | uint8_t tag_BF0C_len; | |
240 | uint8_t tag_BF0C[222]; //File Control Information (FCI) Issuer Discretionary Data | |
241 | uint8_t tag_DFName[16]; | |
242 | uint8_t tag_DFName_len; | |
243 | }emvtags; | |
244 | ||
245 | #endif //__EMVCARD_H |