PBOC代码回顾(1)(3)

2020-05-05 13:54

#define CVM_TC_ID 0x01 // 持卡人证件验证

//终端所知的(最近一次的)CVM执行结果 #define CVMR_UNKNOWN 0 //未知(例如,签名 #define CVMR_FAILED 1 //失败(例如,脱机PIN) #define CVMR_SUCCESS 2 //成功

//持卡人证件类型

#define CCT_IDCARD 0x00 //身份证 #define CCT_MILITARYOFFICER 0x01 //军官证 #define CCT_PASSPORT 0x02 //护照 #define CCT_ENTERCOUNTRY 0x03 //入境证 #define CCT_TEMPIDCARD 0x04 //临时身份证 #define CCT_OTHER 0x05 //其它证件

#define CVM_TYPE_00 0x00 //CVM 失败处理 #define CVM_TYPE_01 0x01 //卡片执行明文PIN 核对 #define CVM_TYPE_02 0x02 //联机加密PIN 验证 #define CVM_TYPE_03 0x03 //卡片执行明文PIN 核对+签名(纸上) #define CVM_TYPE_1E 0x1E //签名(纸上) #define CVM_TYPE_1F 0x1F //无需CVM

#define AIP_SDA 2 // 支持SDA静态数据认证 #define AIP_DDA 3 // 支持DDA动态数据认证 #define AIP_CARDHOLDER_VERIFY 4 // 支持持卡人认证 #define AIP_RISK_MANAGEMENT 5 // 执行终端风险管理 #define AIP_ISSUER_AUTHENTICATION 6 // 支持发卡行认证 #define AIP_CDA 8 // 支持CDA符合动态数据认证

//下面是终端行为分析的返回数据

#define TERMINAL_ACTION_DECLINED 1 //脱机拒绝 #define TERMINAL_ACTION_ONLINE 2 //联机发送授权请求 #define TERMINAL_ACTION_APPROVED 3 //脱机批准

//GENERATE AC引用控制参数(EMV2000中还有应用授权参考(AAR) ) #define GAC_AAC 0x00 // 应用认证密文(AAC) #define GAC_TC 0x40 // 交易证书(TC) #define GAC_ARQC 0x80 // 授权请求密文(ARQC)

#define PIN_ENTRY_OK 0 #define PIN_ENTRY_NOT_POSSIBLE 1 //要求输入PIN,但密码键盘不存在或工作不正常

#define PIN_NOT_ENTERED 2 //要求输入PIN,密码键盘存在,但未输入PIN

#define PIN_ENTRY_BYPASSED 3 //PIN重试次数超限

//ICC借贷记数据域包含的标签存在性 #define TYPE_MANDATORY 0 #define TYPE_OPTIONAL 1

#define TYPE_RESETRELATEDDATA_BEFORE 1 #define TYPE_RESETRELATEDDATA_AFTER 2

#define TYPE_AIDSELECTED 1

#define TYPE_CALLBACK 1 #define TYPE_CardReader 2 #define TYPE_IDC 3

#define TYPE_ALL_DATA 1 #define TYPE_ONLY_CONSTRUCTEDDATA 2 #define TYPE_EXCEPT_CONSTRUCTEDDATA 3

struct PBOC_C_APDU { char chHeader[4]; char chBody[1+256+1]; };

typedef int (_stdcall *PFCALLBACK)(int _dataLen, BYTE _APDUData[], BYTE _exData[], int *_exdataLen) ;

#pragma pack (pop)

#ifdef __cplusplus } #endif

#endif

// !defined(AFX_GLOBALINFO_H__22678551_34B5_453E_BD7F_6BDD5BE581BB__INCLUDED_)

// TLVEntity.h: interface for the CTLVEntity class. //

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TLVENTITY_H__529895E3_5EB4_4696_9455_0687582B1195__INCLUDED_) #define AFX_TLVENTITY_H__529895E3_5EB4_4696_9455_0687582B1195__INCLUDED_

#if _MSC_VER > 1000 #pragma once

#endif // _MSC_VER > 1000

#include \

class CTLVEntity {

public: CTLVEntity(); //CTLVEntity(CTLVEntity *pEntity); virtual ~CTLVEntity(); public: int EntityToTLVBuf(TLVDATA *pTlvData, BYTE *pDataBuf); BOOL CanConstructed(); UINT m_nTag; //标签 INT m_nLength; //长度 BYTE *m_pValue; //值 BOOL m_bConstructed; //是否为结构数据对象,否就为基本数据对象 BOOL m_bOptionalStatic; //是否为可选静态 INT m_nMinLen; //最小长度 INT m_nMaxLen; //最大长度 EICDataFormat m_eFormat; //数据格式 BYTE m_ucSource; //数据来源 BYTE m_ucGetData; //是否可被Get Data命令取回数据 UINT m_nTemplate1; UINT m_nTemplate2; CString m_strName; //数据名称

private: void InitEntity(); };

#endif

// !defined(AFX_TLVENTITY_H__529895E3_5EB4_4696_9455_0687582B1195__INCLUDED_)

// TLVEntity.cpp: implementation of the CTLVEntity class. //

//////////////////////////////////////////////////////////////////////

#include \#include \

#ifdef _DEBUG #undef THIS_FILE

static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif

////////////////////////////////////////////////////////////////////// // Construction/Destruction

//////////////////////////////////////////////////////////////////////

CTLVEntity::CTLVEntity() {

InitEntity(); }

// CTLVEntity::CTLVEntity(CTLVEntity *pEntity) // {

// m_nTag = pEntity->m_nTag;

// m_bConstructed = pEntity->m_bConstructed; // m_bOptionalStatic = pEntity->m_bOptionalStatic; // m_nMinLen = pEntity->m_nMinLen; // m_nMaxLen = pEntity->m_nMaxLen; // m_eFormat = pEntity->m_eFormat; // m_ucSource = pEntity->m_ucSource; // m_nTemplate1 = pEntity->m_nTemplate1; // m_nTemplate2 = pEntity->m_nTemplate2; // m_strName = pEntity->m_strName; // m_nLength = 0; // m_pValue = NULL; // }

CTLVEntity::~CTLVEntity() { //这里不能释放内存,需要在map里统一释放 // if (m_pValue != NULL) // free(m_pValue); // m_pValue = NULL; }

void CTLVEntity::InitEntity() { m_nTag = 0; m_bConstructed = TRUE; m_bOptionalStatic = FALSE; m_nMinLen = m_nMaxLen = m_nLength = 0; m_eFormat = IC_FORMAT_B; m_ucSource = IC_SOURCE_ICC; m_nTemplate1 = m_nTemplate2 = 0; m_ucGetData = 0; m_strName.Empty(); m_pValue = NULL; }

BOOL CTLVEntity::CanConstructed() { UINT iTemp;

if (m_nTag >= 256) {

iTemp = (BYTE)(m_nTag / 256); } else {

iTemp = (BYTE)(m_nTag % 256); }

if ((iTemp & 0x20) != 0) {

return TRUE; }

return FALSE; }

//把Entity转化为TLV数据对象集合

int CTLVEntity::EntityToTLVBuf(TLVDATA *pTlvData, BYTE *pDataBuf) { int iOffset = 0; if (pTlvData->nTag >= 256) { pDataBuf[iOffset++] = (BYTE)(pTlvData->nTag / 256); pDataBuf[iOffset++] = (BYTE)(pTlvData->nTag % 256); } else { pDataBuf[iOffset++] = (BYTE)(pTlvData->nTag % 256); } if (pTlvData->nLength >= 0x80) { if (pTlvData->nLength >= 256) { pDataBuf[iOffset++] = 0x82; pDataBuf[iOffset++] = (BYTE)(pTlvData->nLength /256 ); pDataBuf[iOffset++] = (BYTE)(pTlvData->nLength % 256); } else { pDataBuf[iOffset++] = 0x81; pDataBuf[iOffset++] = (BYTE)(pTlvData->nLength % 256); } } else { pDataBuf[iOffset++] = (BYTE)pTlvData->nLength; } memcpy(pDataBuf+iOffset,pTlvData->pValue,pTlvData->nLength); iOffset += pTlvData->nLength; return iOffset; }

// AIDListApp.h: interface for the CAIDListApp class. //

//////////////////////////////////////////////////////////////////////


PBOC代码回顾(1)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《圆明园的毁灭》图片

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: