I got that!!!
Steps:
1 Encrypt data blocks using first des key with cbc mode;
2 Decrypt the result with second des key;
3 Encrypt the result of step 2 with first des key;
The AC calculated.
Example:
Session key: 7CBA97ABD6CB6E0B 29A7457A7332DFC4
Fist des key: 7CBA97ABD6CB6E0B
Second des key: 29A7457A7332DFC4
Data: Terminal Data + ICC Data + 800000(Pad)
Data: 0000000010000000000000000710000000000007101302050030901B6A + 3C00005503A4A082 + 800000
Calculate:
1Key: 7CBA97ABD6CB6E0B
IV: 0000000000000000
m: 0000000010000000000000000710000000000007101302050030901B6A3C00005503A4A082800000
s: AB45C4A8204CA392374F2F5FCAE5A8A2E18B65F7554966C5E3697C946CD8B284EFC6ECB7A354B1CA
2 Key: 29A7457A7332DFC4
IV: 0000000000000000
m: EFC6ECB7A354B1CA
s: 388B6AA70A89AB7C
3 Key: 7CBA97ABD6CB6E0B
IV: 0000000000000000
m: 388B6AA70A89AB7C
s: 50C221AF54C1706A
The result is: 50C221AF54C1706A
Same as the
tool calculated.
Session key: 7CBA97ABD6CB6E0B29A7457A7332DFC4
Terminal data: 0000000010000000000000000710000000000007101302050030901B6A
ICC data: 3C00005503A4A082
Padding method: Method 2 (EMV spec or e.g. VISA CV14)
----------------------------------------
AC generated: 50C221AF54C1706A
Note:
The implementation of this algorithm in javacard is: Signature.ALG_DES_MAC8_ISO9797_1_M2_ALG3