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 |