]>
git.zerfleddert.de Git - proxmark3-svn/blob - client/emv/emvcore.h
94c5d9b02ca625c345fee6e0332377ba7bfe9097
1 //-----------------------------------------------------------------------------
2 // Copyright (C) 2017 Merlok
4 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 // at your option, any later version. See the LICENSE.txt file for the text of
7 //-----------------------------------------------------------------------------
8 // EMV core functionality
9 //-----------------------------------------------------------------------------
23 #include "emv/apduinfo.h"
27 #include "emv/emv_tags.h"
29 #define APDU_RES_LEN 260
30 #define APDU_AID_LEN 50
33 # define EMVAC_AC_MASK 0xC0
34 # define EMVAC_AAC 0x00
35 # define EMVAC_TC 0x40
36 # define EMVAC_ARQC 0x80
37 # define EMVAC_CDAREQ 0x10
39 enum TransactionType
{
41 TT_VSDC
, // not standart for contactless!!!!
64 extern enum CardPSVendor
GetCardPSVendor(uint8_t * AID
, size_t AIDlen
);
66 extern void TLVPrintFromBuffer(uint8_t *data
, int datalen
);
67 extern void TLVPrintFromTLV(struct tlvdb
*tlv
);
68 extern void TLVPrintFromTLVLev(struct tlvdb
*tlv
, int level
);
69 extern void TLVPrintAIDlistFromSelectTLV(struct tlvdb
*tlv
);
71 extern struct tlvdb
*GetPANFromTrack2(const struct tlv
*track2
);
72 extern struct tlvdb
*GetdCVVRawFromTrack2(const struct tlv
*track2
);
74 extern void SetAPDULogging(bool logging
);
77 extern int EMVSearchPSE(bool ActivateField
, bool LeaveFieldON
, bool decodeTLV
, struct tlvdb
*tlv
);
78 extern int EMVSearch(bool ActivateField
, bool LeaveFieldON
, bool decodeTLV
, struct tlvdb
*tlv
);
79 extern int EMVSelectPSE(bool ActivateField
, bool LeaveFieldON
, uint8_t PSENum
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
);
80 extern int EMVSelect(bool ActivateField
, bool LeaveFieldON
, uint8_t *AID
, size_t AIDLen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb
*tlv
);
82 extern int EMVSelectApplication(struct tlvdb
*tlv
, uint8_t *AID
, size_t *AIDlen
);
83 // Get Processing Options
84 extern int EMVGPO(bool LeaveFieldON
, uint8_t *PDOL
, size_t PDOLLen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb
*tlv
);
85 extern int EMVReadRecord(bool LeaveFieldON
, uint8_t SFI
, uint8_t SFIrec
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb
*tlv
);
87 extern int EMVGenerateChallenge(bool LeaveFieldON
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb
*tlv
);
88 extern int EMVAC(bool LeaveFieldON
, uint8_t RefControl
, uint8_t *CDOL
, size_t CDOLLen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb
*tlv
);
90 int MSCComputeCryptoChecksum(bool LeaveFieldON
, uint8_t *UDOL
, uint8_t UDOLlen
, uint8_t *Result
, size_t MaxResultLen
, size_t *ResultLen
, uint16_t *sw
, struct tlvdb
*tlv
);
92 extern int trSDA(uint8_t *AID
, size_t AIDlen
, struct tlvdb
*tlv
);