API C/C++
HSM Dinamo
Carregando...
Procurando...
Nenhuma entrada encontrado
EFT

Descrição detalhada

Operações para Transferência Eletrônica de Fundos.

Consulte a documentação técnica do HSM.

Definições e Macros

#define DN_CALC_ARPC_EMV_4_2_M1_ICC   (1)
 
#define DN_CALC_ARPC_EMV_4_2_M1_SK   (2)
 
#define DN_CALC_ARPC_EMV_4_2_M2   (3)
 
#define DN_EFT_AES_KCV_TYPE_CMAC   (1)
 
#define DN_EFT_GET_KCV_TYPE_X9_24   (1)
 
#define DN_EFT_GET_KCV_TYPE_CMAC   (2)
 
#define DN_EXP_ZPK_FLAG_FULL_CKS   (1)
 
#define DN_EFT_GET_KCV_MAX_LEN   (3)
 
#define DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24   (1)
 
#define DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC   (2)
 
#define DN_EFT_KCV_TYPE_X9_24_LEN   (3)
 
#define DN_EFT_KCV_TYPE_CMAC_LEN   (3)
 

Funções

int AAP_API DPINBlockTranslate (HSESSIONCTX hSession, char *szSrcPEK, char *szDstPEK, BYTE bTransBlockType, char *szPAN, BYTE *pbInPinBlock, BYTE *pbOutPinBlock, DWORD dwParam)
 
int AAP_API DGenerateCVV (HSESSIONCTX hSession, char *szKeyId, char *szPAN, char *szExpirationDate, char *szServiceCode, char *szCVV, DWORD dwParam)
 
int AAP_API DVerifyCVV (HSESSIONCTX hSession, char *szKeyId, char *szPAN, char *szExpirationDate, char *szServiceCode, char *szCVV, DWORD dwParam)
 
int AAP_API DGeneratePIN (HSESSIONCTX hSession, char *szPGK, char *szPAN, DWORD dwOperation, int nPinLen, char *szInPin, char *szOffset, char *szOutPin, DWORD dwParam)
 
int AAP_API DVerifyPINBlock (HSESSIONCTX hSession, char *szPTK, char *szPGK, char *szPAN, char *szOffset, BYTE *pbInPinBlock, DWORD dwParam)
 
int AAP_API DEFTCheckKeyParts (int nKeyAlgId, EFT_VISA_KEY_PARTS *pstKeyParts, DWORD dwParam)
 
int AAP_API DGenerateDUKPT (HSESSIONCTX hSession, BYTE *pbKSI, BYTE *pbDID_CTR, char *szDUKPT, DWORD dwParam)
 
void AAP_API DGenerateBDKName (BYTE *pbKSI, char *szBDKName, DWORD dwParam)
 
void AAP_API DGenerateDUKPTName (BYTE *pbKSI, BYTE *pbDID_CTR, char *szDUKPTName, DWORD dwParam)
 
int AAP_API DGeneratePVV (HSESSIONCTX hSession, char *szPGK, BYTE bPVKI, char *szPAN, char *szPIN, char *szPVV, DWORD dwParam)
 
int AAP_API DGenerateDAC (HSESSIONCTX hSession, char *szIMKDAC, char *szPAN, BYTE *pbSEQ, BYTE *pbDAC, DWORD dwParam)
 
int AAP_API DVerifyDAC (HSESSIONCTX hSession, char *szIMKDAC, char *szPAN, BYTE *pbSEQ, BYTE *pbDAC, DWORD dwParam)
 
int AAP_API DSignSDA (HSESSIONCTX hSession, char *szIK, BYTE *pbDAC, DWORD dwSDA_DATALen, BYTE *pbSDA_DATA, DWORD *pdwSigLen, BYTE *pbSig, DWORD dwParam)
 
int AAP_API DGenerateDDA_ICCCert (HSESSIONCTX hSession, BYTE bOP, char *szIK, char *szPAN, DWORD dwDDA_DATALen, BYTE *pbDDA_DATA, DWORD *pdwSigLen, BYTE *pbSig, DWORD dwParam)
 
int AAP_API DGenerateICCMK (HSESSIONCTX hSession, BYTE bOP, char *szIK, char *szKeK, char *szPAN, BYTE *pbSEQ, DWORD *pdwEnvelopeLen, BYTE *pbEnvelope, DWORD dwParam)
 
int AAP_API DGenerateEMV_HMAC (HSESSIONCTX hSession, BYTE bOP, char *szIK, char *szPAN, BYTE *pbSEQ, BYTE *pbNONCE, DWORD dwDataLen, BYTE *pbData, BYTE *pbMAC, DWORD dwParam)
 
int AAP_API DGenerateEMV_MAC (HSESSIONCTX hSession, BYTE bOP, char *szIK, char *szPAN, BYTE *pbSEQ, BYTE *pbNONCE, DWORD dwDataLen, BYTE *pbData, BYTE *pbMAC, DWORD dwParam)
 
int AAP_API DCheckIDN (HSESSIONCTX hSession, char *szIK, char *szPAN, BYTE *pbSEQ, BYTE *pbATC, BYTE *pbUN, BYTE *pbIDN, DWORD dwParam)
 
int AAP_API DEncryptEMV (HSESSIONCTX hSession, BYTE bEncOP, char *szEncIK, BYTE *pbEncNONCE, BYTE bMacOP, char *szMacIK, BYTE *pbMacNONCE, char *szPAN, BYTE *pbSEQ, DWORD dwDataLen, BYTE *pbData, DWORD *pdwEncDataLen, BYTE *pbEncData, BYTE *pbMAC, DWORD dwParam)
 
int AAP_API DGenerateEMV_CSR (HSESSIONCTX hSession, BYTE bOP, char *szIK, BYTE *pbTrackNum, BYTE *pbServiceID, BYTE *pbIssuerID, BYTE *pbExpDate, DWORD *pdwCSRLen, BYTE *pbCSR, DWORD dwParam)
 
int AAP_API DGenerateEMV_CSREx (HSESSIONCTX hSession, BYTE bOP, char *szIK, BYTE *pbTrackNum, BYTE *pbServiceID, BYTE *pbIssuerID, BYTE *pbExpDate, DBLOB *pdbCSR, BYTE *pbHash, DWORD dwParam)
 
int AAP_API DGenerateEMV_PinBlock (HSESSIONCTX hSession, BYTE bOP, BYTE *pbNONCE, char *szTransportKey, char *szISSUER_MK, char *szISSUER_SMC_MK, char *szPAN, BYTE *pbSEQ, BYTE *pbOLD_PB, BYTE *pbNEW_PB, BYTE *pbOutBlock, DWORD *pdwOutBlockLen, DWORD dwParam)
 
int AAP_API DDeriveEMV_Key (HSESSIONCTX hSession, char *szSrcKey, WORD wBufferLen, BYTE *pbBuffer, BYTE bOP, DWORD dwAttrib, char *szDstKey, HKEYCTX *phKey, DWORD dwParam)
 
int AAP_API DCalculateARPC (HSESSIONCTX hSession, char *szIssuerMK, char *szPAN, BYTE *pbSEQ, BYTE *pbARQC, BYTE *pbARC, BYTE *pbARPC, DWORD dwParam)
 
int AAP_API DCalculateARPC_Ex (HSESSIONCTX hSession, DWORD dwOp, void *pvInData, BYTE *pbARPC, DWORD dwParam)
 
int AAP_API DMAC_ISO9797_1_Met2 (DWORD dwType, BYTE *pbKey, DWORD dwAlg, const BYTE *pbMsg, DWORD dwMsgLen, BYTE *pbMAC)
 
int AAP_API DEFTImportKey (HSESSIONCTX hSession, char *szKeyId, int nKeyAlgId, void *pstKeyParts, DWORD dwParam)
 
int AAP_API DEFTExportAESKeyParts (HSESSIONCTX hSession, BYTE bKcvType, const char *szKeyId, void *pvKeyParts, DWORD dwReserved)
 
int AAP_API DEFTExportKey (HSESSIONCTX hSession, BYTE bExportMode, char *szKEKId, char *szKeyId, BYTE *pbEncryptedBlock, DWORD *pdwEncryptedBlockLen, BYTE *pbKeyCheckValue, DWORD dwParam)
 
int AAP_API DEFTKeKImport (HSESSIONCTX hSession, BYTE bOP, DWORD dwAlgId, char *szKeKName, char *szKeyName, DWORD dwAttr, BYTE *pbKCV1, BYTE *pbKCV2, BYTE *pbKCV3, BYTE *pbKCVFinal, BYTE *pbBlob, DWORD dwFlags)
 
int AAP_API DEFTExportZPK (HSESSIONCTX hSession, char *szKeyId, int *pnKeyAlg, int *pnKeySize, EFT_VISA_KEY_PARTS *pstKeyParts, DWORD dwParam)
 
int AAP_API DEFTGetKcv (HSESSIONCTX hSession, BYTE bType, const char *szKeyId, BYTE *pbKcv, DWORD *pdwKcvLen, DWORD dwReserved)
 
int AAP_API DEFTGenKCVOffline (DWORD dwType, int nAlgId, const BYTE *pbKey, DWORD dwKeyLen, BYTE *pbKCV, DWORD *pdwKCVLen, DWORD reserved)
 
int AAP_API DEFTExportTR31 (HSESSIONCTX hSession, const char *szKBPK, const char *szKey, void *pvReserved, WORD wUsage, BYTE bMode, BYTE bExport, BYTE *pbOutBlock, DWORD *pdwOutBlockLen, DWORD dwParam)
 
int AAP_API DEFTImportTR31 (HSESSIONCTX hSession, const char *szKBPK, const char *szKey, DWORD dwKeyAttributes, BYTE *pbKeyBlock, DWORD dwKeyBlockLen, DWORD dwParam)
 

Definições e macros

◆ DN_CALC_ARPC_EMV_4_2_M1_ICC

#define DN_CALC_ARPC_EMV_4_2_M1_ICC   (1)

#include <dinamo.h>

◆ DN_CALC_ARPC_EMV_4_2_M1_SK

#define DN_CALC_ARPC_EMV_4_2_M1_SK   (2)

#include <dinamo.h>

◆ DN_CALC_ARPC_EMV_4_2_M2

#define DN_CALC_ARPC_EMV_4_2_M2   (3)

#include <dinamo.h>

◆ DN_EFT_AES_KCV_TYPE_CMAC

#define DN_EFT_AES_KCV_TYPE_CMAC   (1)

#include <dinamo.h>

KCV do tipo CMAC. De acordo com o PCI "PIN Security Requirements".

◆ DN_EFT_GET_KCV_TYPE_X9_24

#define DN_EFT_GET_KCV_TYPE_X9_24   (1)

#include <dinamo.h>

Exporta uma chave AES por partes no formato ANSI X9.24.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bKcvTypeTipo de KCV a ser utilizado na exportação.
Valor Significado
DN_EFT_GET_KCV_TYPE_X9_24 Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de 3 bytes.
DN_EFT_GET_KCV_TYPE_CMAC Gera o KCV (Key Check Value) da chave como definido no PCI PIN Security Requirements com tamanho de 3 bytes.
[in]szKeyIdNome da chave a ser exportada.
[out]pvKeyPartsPonteiro para uma estrutura EFT_AES_KEY_PARTS que conterá os dados para reconstrução da chave.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores. Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de 3 bytes.

◆ DN_EFT_GET_KCV_TYPE_CMAC

#define DN_EFT_GET_KCV_TYPE_CMAC   (2)

#include <dinamo.h>

Gera o KCV (Key Check Value) da chave como definido no PCI PIN Security Requirements com tamanho de 3 bytes.

◆ DN_EXP_ZPK_FLAG_FULL_CKS

#define DN_EXP_ZPK_FLAG_FULL_CKS   (1)

#include <dinamo.h>

◆ DN_EFT_GET_KCV_MAX_LEN

#define DN_EFT_GET_KCV_MAX_LEN   (3)

#include <dinamo.h>

Tamanho máximo do KCV (Key Check Value) gerado.

◆ DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24

#define DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24   (1)

#include <dinamo.h>

Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de 3 bytes.

◆ DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC

#define DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC   (2)

#include <dinamo.h>

Gera o KCV (Key Check Value) da chave como definido no PCI PIN Security Requirements com tamanho de 3 bytes.

◆ DN_EFT_KCV_TYPE_X9_24_LEN

#define DN_EFT_KCV_TYPE_X9_24_LEN   (3)

#include <dinamo.h>

Tamanho do KCV (Key Check Value) gerado.

◆ DN_EFT_KCV_TYPE_CMAC_LEN

#define DN_EFT_KCV_TYPE_CMAC_LEN   (3)

#include <dinamo.h>

Tamanho do KCV (Key Check Value) gerado.

Funções

◆ DPINBlockTranslate()

int AAP_API DPINBlockTranslate ( HSESSIONCTX hSession,
char * szSrcPEK,
char * szDstPEK,
BYTE bTransBlockType,
char * szPAN,
BYTE * pbInPinBlock,
BYTE * pbOutPinBlock,
DWORD dwParam )

#include <dinamo.h>

Faz a tradução de um PIN Block, decriptando o bloco com uma chave e encriptando com outra. O formato de bloco de entrada é identificado automaticamente, e o formato de bloco de saída pode ser definido pelo chamador, desde que a troca do formato não seja de um PAN Unbound para um PAN Bound. Os formatos PAN Bound são aqueles que utilizam informação de PAN em sua composição. É possível, portanto, realizar tanto tradução de chaves quanto tradução de formato. O chamador pode fazer uma validação forçada do formato indicando para o formato de saída, o mesmo que está usando no PIN Block de entrada.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szSrcPEKIdentificador da chave de decriptação dentro do HSM.
[in]szDstPEKIdentificador da chave de encriptação dentro do HSM.
[in]bTransBlockTypeIdentificador do formato do bloco de saída. De acordo com a tabela abaixo.
Valor Significado
TP_TRANSLATE_TYPE_AUTO Faz uma conversão de forma opaca, traduzindo do bloco com a chave de origem para o bloco com a chave de destino, sem análise do formato ou conteúdo do bloco.
PAN Bound: não se aplica.
TP_TRANSLATE_TYPE_ISO_0 Utiliza o tipo de bloco ISO PIN Block Format 0 (equivalente ao ANSI PIN Block Format 0 e ao VISA PIN Block Format 1).
PAN Bound: sim.
TP_TRANSLATE_TYPE_ISO_1 Utiliza o tipo de bloco ISO PIN Block Format 1.
PAN Bound: não.
TP_TRANSLATE_TYPE_ISO_3 Utiliza o tipo de bloco ISO PIN Block Format 3.
PAN Bound: sim.
TP_TRANSLATE_TYPE_IBM_3624 Utilizada o tipo de bloco IBM 3624.
Não implementado.
[in]szPANPAN (Primary Account Number).
[in]pbInPinBlockBuffer contendo o PIN Block de entrada. O buffer deve ter o tamanho de um PIN Block, DES_BLOCK (8 bytes) .
[out]pbOutPinBlockBuffer que conterá o PIN Block de saída. O buffer deve ter o tamanho de um PIN Block, DES_BLOCK (8 bytes).
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
No caso de uma conversão não opaca, ou seja de uma tradução de formato, se o formato do PIN Block de entrada não puder ser reconhecido, será retornado erro D_ERR_OPERATION_FAILED.
O método ISO PIN Block Format 2 não é implementado no HSM, pois este formato é destinado para ser usado na proteção do PIN quando é submetido da leitora do chip do cartão.
Exemplos
pin_block_translate.c.

◆ DGenerateCVV()

int AAP_API DGenerateCVV ( HSESSIONCTX hSession,
char * szKeyId,
char * szPAN,
char * szExpirationDate,
char * szServiceCode,
char * szCVV,
DWORD dwParam )

#include <dinamo.h>

Gera um CVV (Card Verification Value), CVV2 ou iCVV utilizando uma chave dentro do HSM.

Esta API também pode ser usada para a geração dos códigos de verificação de cartão que suportam o protocolo 3-D Secure. No caso da Visa o serviço que implementa o protocolo é o Verified by Visa, e o HSM suporta o padrão CAVV (Cardholder Authentication Verification Value, que é o CVV2 com método ATN). No caso da Mastercard o protocolo 3-D Secure é implementado no serviço SecureCode, o HSM suporta os padrões CVC2 (Card Verification Code 2) e HMAC SHA1.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szKeyIdIdentificador da chave dentro do HSM. Este identificador não deve conter espaços ou caracteres especiais. Caracteres maiúsculos e minúsculos são diferenciados (case-sensitive).
Esta chave é a CVK (Card Verification Key), uma chave 3DES de 112 bits, e deve ser a mesma que será usada para a verificação do CVV. Esta chave pode ser gerada internamente no HSM ou importada manualmente.
Normalmente esta chave também é usada na Visa, enviada cifrada pela ZCMK (Zone Contro Master Key).
Conforme determinado no manual da Visa, a chave 3DES 112 usada como CVK deve ser diferente da chave usada para geração e verificação de PIN e não deve ser usada para outras aplicações do emissor, com exceção do CVV2 e iCVV.
[in]szPANPAN (Primary Account Number). Tamanho de de 12 a 19 caracteres.
Para o cálculo de CVV, CVV2 e iCVV, conforme o padrão da Visa, no documento Payment Technology Standards Manual, de 2007, é independente do tamanho do PAN. Para o cálculo de CVC2, conforme o documento da Mastercard SPA Algorithm for the MasterCard Implementation of 3-D Secure – v1.04, o tamanho do PAN deve ser exatamente de 16 dígitos; quando for menor precisa se completado à esquerda com zeros, e quando for maior devem ser usados apenas os 16 dígitos mais à direita.
[in]szExpirationDateData de expiração. Tamanho de 4 dígitos.
Na geração de CVV e iCVV o formato deve ser YYMM.
Na geração de CVV2 o formato deve ser MMYY.
No cáculo de CVC2 este campo deve ser uma string terminada em zero com os 4 dígitos menos significativos do Transaction Sequence Number, contido no AVV (Accountholder Authentication Value) convertido no BCD decimal equivalente. Qualquer valor menor que 4 dígitos deve ser completado à esquerda com zeros até inteirar os 4 dígitos. Para mais detalhes consulte o documento da Mastercard SPA Algorithm for the MasterCard Implementation of 3-D Secure – v1.04.
No cáculo de CAVV (CVV2 com o Método ATN), este campo deve ser uma string terminada em zero com os 4 dígitos menos significativos do ATN (Authentication Tracking Number). Para mais detalhes consulte o documento da Visa 3-D Secure Functional Requirements Access Control Server v. 1.0.2.
[in]szServiceCodeService Code. Tamanho de 3 dígitos.
Para a geração de iCVV (Alternate Card Verification Value), o Service Code deve ser 999.
Para a geração de CVV 2, o Service Code deve ser 000.
Para a geração de CVV tradicional, o Service Code normalmente é 101.
[out]szCVVBuffer de saída que conterá a string do CVV gerado. Tamanho de 3 dígitos.
O valor gerado pode também ser um CVV2 ou iCVV, conforme os valores informados de Service Code.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
A API também é compatível com o padrão da bandeira American Express.
Exemplos
eft_validate_cvv.c.

◆ DVerifyCVV()

int AAP_API DVerifyCVV ( HSESSIONCTX hSession,
char * szKeyId,
char * szPAN,
char * szExpirationDate,
char * szServiceCode,
char * szCVV,
DWORD dwParam )

#include <dinamo.h>

Verifica um CVV (Card Verification Value), , CVV2 ou iCVV utilizando uma chave dentro do HSM. A API também pode ser usada para a verificação dos códigos de verificação de cartão que suportam o protocolo 3-D Secure. Veja mais detalhes na API DGenerateCVV().

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szKeyIdIdentificador da chave dentro do HSM. Este identificador não deve conter espaços ou caracteres especiais. Caracteres maiúsculos e minúsculos são diferenciados (case-sensitive).
Esta chave é a CVK (Card Verification Key), uma chave 3DES de 112 bits, e deve ser a mesma que foi usada na geração do CVV.
[in]szPANPAN (Primary Account Number). Tamanho de de 12 a 19 caracteres.
Veja mais detalhes sobre este campo na API DGenerateCVV().
[in]szExpirationDateData de expiração. Tamanho de 4 dígitos.
Na verificação de CVV e iCVV o formato deve ser YYMM.
Na verificação de CVV 2 o formato deve ser MMYY.
Para informações sobre o suporte aos algoritmos do protocolo 3-D Secure veja mais detalhes sobre este campo na API DGenerateCVV().
[in]szServiceCodeService Code. Tamanho de 3 dígitos.
Para a verificação de iCVV (Alternate Card Verification Value), o Service Code deve ser 999.
Para a verificação de CVV 2, o Service Code deve ser 000
[in]szCVVCVV a ser validado. Tamanho de 3 dígitos.
O valor informado pode também ser um CVV2 ou iCVV, conforme os valores informados de Service Code.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
eft_validate_cvv.c.

◆ DGeneratePIN()

int AAP_API DGeneratePIN ( HSESSIONCTX hSession,
char * szPGK,
char * szPAN,
DWORD dwOperation,
int nPinLen,
char * szInPin,
char * szOffset,
char * szOutPin,
DWORD dwParam )

#include <dinamo.h>

Faz operações de geração de PIN a partir dos dados de PAN (Personal Account Number) e nome de chave (PGK) informadas, com ou sem uso de offset.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szPGKIdentificador da chave dentro do HSM.
[in]szPANPAN (Primary Account Number).
[in]dwOperationTipo da geração do PIN. Segundo a tabela abaixo.
Valor Significado
GP_DEFAULT_PIN Gera o PIN padrão baseado no PAN e PGK. O parâmetro szInPin deve ser NULL.
GP_USER_DEF_PIN Gera um offset referente ao PIN definido pelo chamador. O parâmetro szInPin deve conter uma string contendo o PIN.
GP_RANDOM_PIN Gera um PIN e offset aleatoriamente baseados no PAN e PGK. szInPin deve ser NULL.
[in]nPinLenTamanho de PIN a ser utilizado/gerado na operação. Deve ter tamanho entre MIN_EFT_PIN_LEN e MAX_EFT_PIN_LEN.
[in]szInPinPIN de entrada. O buffer deve ter tamanho entre MIN_EFT_PIN_LEN + 1 e MAX_EFT_PIN_LEN + 1.
[out]szOffsetBuffer que conterá a string do offset. O buffer deve ter tamanho entre MIN_EFT_PIN_LEN + 1 e MAX_EFT_PIN_LEN + 1.
[out]szOutPinBuffer que conterá a string do PIN de saída. O buffer deve ter tamanho entre MIN_EFT_PIN_LEN + 1 e MAX_EFT_PIN_LEN + 1.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DVerifyPINBlock()

int AAP_API DVerifyPINBlock ( HSESSIONCTX hSession,
char * szPTK,
char * szPGK,
char * szPAN,
char * szOffset,
BYTE * pbInPinBlock,
DWORD dwParam )

#include <dinamo.h>

Verifica a validade de um PIN em um PIN Block. Primeiro o PIN é extraído do PIN Block com a chave PTK, e depois é feita sua verificação com a chave PGK, a mesma que foi usada para geração do PIN, com a função DGeneratePIN().

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szPTKIdentificador da chave de decriptação do “PIN Block” dentro do HSM. É a PIN Transport Key.
[in]szPGKIdentificador da chave a ser utilizada na verificação do PIN dentro do HSM. É a PIN Generation Key.
[in]szPANPAN (Primary Account Number).
[in]szOffsetOffset do PIN. O buffer deve ter tamanho entre MIN_EFT_PIN_LEN + 1 e MAX_EFT_PIN_LEN + 1.
[in]pbInPinBlockBuffer que conterá o Pin Block de entrada que será verificado. O formato de PIN Block esperado é ISO PIN Block Format 0 (equivalente ao ANSI PIN Block Format 0 e ao VISA PIN Block Format 1). O buffer deve ter o tamanho de um PIN Block, DES_BLOCK (8 bytes).
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
verify_pin_block.c.

◆ DEFTCheckKeyParts()

int AAP_API DEFTCheckKeyParts ( int nKeyAlgId,
EFT_VISA_KEY_PARTS * pstKeyParts,
DWORD dwParam )

#include <dinamo.h>

Verifica a validade das partes de uma chave VISA com os seus respectivos valores de verificação, no formato descrito no VISA Payment Technology Standards Manual, october 2007.

Parâmetros
[in]nKeyAlgIdAlgoritmo da chave a ser verificada.
[in]pstKeyPartsPonteiro para uma estrutura EFT_VISA_KEY_PARTS contendo as partes da chave a ser verificada seus valores de verificação por partes.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Apenas as partes são verificadas com os seus respectivos valores de verificação, a chave completa e montada não é verificada neste teste.

◆ DGenerateDUKPT()

int AAP_API DGenerateDUKPT ( HSESSIONCTX hSession,
BYTE * pbKSI,
BYTE * pbDID_CTR,
char * szDUKPT,
DWORD dwParam )

#include <dinamo.h>

Gera uma chave DUKPT dentro do HSM utilizando uma KSI (Key Serial Identification), um DID (Device ID) e um CTR (Transaction Counter) de uma mesma KSN (Key Serial Number).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]pbKSIBuffer de tamanho MIN_KSI_LEN contendo o KSI (primeiros 05 bytes do KSN).
[in]pbDID_CTRBuffer de tamanho MIN_CTR_LEN contendo o DID e CTR (últimos 05 bytes do KSN).
[out]szDUKPTBuffer de tamanho MAX_OBJ_ID que conterá o nome da chave DKUPT gerado a partir dos parâmetros informados.
[in]dwParamFlags de operação de acordo com a tabela abaixo.
Valor Significado
NEW_DUKPT_MODE_DUK Gera uma chave DUK (Derived Unique Key) padrão de acordo com o manual ISO X9.24-1-2004.
NEW_DUKPT_MODE_PEK Gera uma chave PEK (PIN Encryption Key) de acordo com o manual ISO X9.24-1-2004 A aplicando o XOR da máscara 0000 0000 0000 FF00 nas partes da chave.
NEW_DUKPT_MODE_MEK Gera uma chave MEK (MAC Encryption Key) de acordo com o manual ISO X9.24-1-2004 A aplicando o XOR da máscara 0000 0000 0000 00FF nas partes da chave.
NEW_DUKPT_MODE_DE Diversifica a chave gerada no formato Data Encryption. Aplica um XOR da máscara 0000 0000 00FF 0000 0000 0000 00FF 0000 sobre a chave DUKPT gerada, encripta a chave esquerda da DUKPT utilizando a DUKPT gerada e repete a encriptação com a chave direita. Após esta operação junta as partes esquerda e direita encriptadas para formar a Data Encryption Key. Como descrito em IDTECH USER MANUAL SecureMag Encrypted MagStripe Reader (80096504-001 RevL 06/19/14).
Deve ser utilizada combinada (via operação OR) com uma das flags: NEW_DUKPT_MODE_DUK, NEW_DUKPT_MODE_PEK ou NEW_DUKPT_MODE_MEK
NEW_DUKPT_MODE_EXP Gera uma chave DUKPT exportável. Esta é uma flag de atributo e deve ser utilizada combinada com outras flags. Utilizar apenas se especificamente necessário.
NEW_DUKPT_MODE_TMP Gera uma chave DUKPT temporária. Esta é uma flag de atributo e deve ser utilizada combinada com outras flags.
NEW_DUKPT_MODE_IPEK Gera uma chave IPEK (Initially Loaded PIN Entry Device Key) de acordo com o manual ISO X9.24-1-2004 A-6.
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
gen_dukpt.c.

◆ DGenerateBDKName()

void AAP_API DGenerateBDKName ( BYTE * pbKSI,
char * szBDKName,
DWORD dwParam )

#include <dinamo.h>

Gera o nome da BDK a partir de uma KSI (Key Serial Identification).

Parâmetros
[in]pbKSIBuffer de tamanho MIN_KSI_LEN contendo o KSI.
[out]szBDKNameBuffer de tamanho MAX_OBJ_ID que conterá o nome de chave BDK gerado a partir do KSI informado em pbKSI.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
Não retorna valor.
Exemplos
gen_dukpt.c.

◆ DGenerateDUKPTName()

void AAP_API DGenerateDUKPTName ( BYTE * pbKSI,
BYTE * pbDID_CTR,
char * szDUKPTName,
DWORD dwParam )

#include <dinamo.h>

Gera o nome da DUKPT a partir de uma KSI e CTR informados.

Parâmetros
[in]pbKSIBuffer de tamanho MIN_KSI_LEN contendo o KSI (Key Serial Identification).
[in]pbDID_CTRBuffer de tamanho MIN_CTR_LEN contendo o CTR (Device ID e Transaction Counter).
[out]szDUKPTNameBuffer de tamanho MAX_OBJ_ID que conterá o nome de chave DKUPT gerado a partir do KSI e CTR informados em pbKSI e pbCTR.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
Não retorna valor.

◆ DGeneratePVV()

int AAP_API DGeneratePVV ( HSESSIONCTX hSession,
char * szPGK,
BYTE bPVKI,
char * szPAN,
char * szPIN,
char * szPVV,
DWORD dwParam )

#include <dinamo.h>

Gera um PVV (Pin Verification Value) a partir de um PAN (Primary Account Number), um PIN (Personal Identification Number) e uma PGK.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szPGKIdentificador da chave dentro do HSM.
[in]bPVKIIdentificador de chave variando de EFT_MIN_PVKI até EFT_MAX_PVKI.
[in]szPANPAN (Primary Account Number).
[in]szPINPIN (Personal Identification Number).
[out]szPVVBuffer que conterá a string do PVV gerado. Deve ter tamanho mínimo de EFT_PVV_LEN + 1 (terminador zero).
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateDAC()

int AAP_API DGenerateDAC ( HSESSIONCTX hSession,
char * szIMKDAC,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbDAC,
DWORD dwParam )

#include <dinamo.h>

Gera um DAC (Data Authentication Code) recebendo como parâmetros o PAN (Primary Account Number), a SEQ (PAN Sequence Number) e a chave IMKDAC (Issuer Master Key) utilizada no DAC.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szIMKDACIdentificador da chave dentro do HSM.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number).
[out]pbDACBuffer de tamanho EFT_EMV_SDA_DAC_LEN contendo o DAC (Data Authentication Code) a ser verificado.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DVerifyDAC()

int AAP_API DVerifyDAC ( HSESSIONCTX hSession,
char * szIMKDAC,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbDAC,
DWORD dwParam )

#include <dinamo.h>

Verifica um DAC (Data Authentication Code) recebendo como parâmetros o PAN (Primary Account Number), a SEQ (PAN Sequence Number) e a chave IMKDAC (Issuer Master Key) utilizada no DAC.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szIMKDACIdentificador da chave dentro do HSM.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number).
[in]pbDACBuffer de tamanho EFT_EMV_SDA_DAC_LEN contendo o DAC (Data Authentication Code) a ser verificado.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DSignSDA()

int AAP_API DSignSDA ( HSESSIONCTX hSession,
char * szIK,
BYTE * pbDAC,
DWORD dwSDA_DATALen,
BYTE * pbSDA_DATA,
DWORD * pdwSigLen,
BYTE * pbSig,
DWORD dwParam )

#include <dinamo.h>

Assina um SAD (Static Application Data) para cartões SDA (Static Data Authentication) gerando um SSDA (Signed Static Application Data).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szIKNome da chave privada dentro do HSM que será utilizada para assinar o SAD.
[in]pbDACBuffer de tamanho EFT_EMV_SDA_DAC_LEN contendo o DAC (Data Authentication Code) a ser verificado.
[in]dwSDA_DATALenTamanho do buffer apontado por pbSDA_DATA .
[in]pbSDA_DATABuffer que contém o SDA (Static Application Data) a ser assinado de tamanho especificado em dwSDA_DATALen.
[in,out]pdwSigLenPonteiro para um DWORD que contém o tamanho do buffer apontado por pbSig.
[out]pbSigBuffer de tamanho apontado por pdwSigLen que receberá o SSDA (Signed Static Application Data). Pode ser passado NULL para recuperar o tamanho necessário de pbSig, que será retornado em pdwSigLen.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateDDA_ICCCert()

int AAP_API DGenerateDDA_ICCCert ( HSESSIONCTX hSession,
BYTE bOP,
char * szIK,
char * szPAN,
DWORD dwDDA_DATALen,
BYTE * pbDDA_DATA,
DWORD * pdwSigLen,
BYTE * pbSig,
DWORD dwParam )

#include <dinamo.h>

Gera o Certificado do ICC (Integrated Circuit Card) utilizada em autenticação DDA (Dynamic Data Authentication).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bOPTipo da operação a ser aplicada de acordo com a tabela abaixo.
Valor Signficado
EFT_EMV_DDA_OP_RSA_SIGN1 RSA + SHA1
[in]szIKNome da chave privada dentro do HSM que será utilizada para assinar o Certificado.
[in]szPANPAN (Primary Account Number).
[in]dwDDA_DATALenTamanho do buffer apontado por pbDDA_DATA.
[in]pbDDA_DATABuffer que contém os dados do certificado a ser assinado. Passar a estrutura descrita no EMV Book 2 Tabelas 10 a 14, sem incluir os campos Recovered Data Header e Trailer.
[in,out]pdwSigLenPonteiro para um DWORD que contém o tamanho do buffer pbSig.
[out]pbSigBuffer que receberá o certificado assinado. Pode ser passado NULL para recuperar o tamanho necessário de pbSig, que será retornado em pdwSigLen.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateICCMK()

int AAP_API DGenerateICCMK ( HSESSIONCTX hSession,
BYTE bOP,
char * szIK,
char * szKeK,
char * szPAN,
BYTE * pbSEQ,
DWORD * pdwEnvelopeLen,
BYTE * pbEnvelope,
DWORD dwParam )

#include <dinamo.h>

Gera Master Keysdo ICC (Integrated Circuit Card).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bOPTipo da operação a ser aplicada de acordo com a tabela abaixo.
Valor Significado
EFT_EMV_GEN_ICC_MK_OP_CBC_EXP Operação em modo CBC
EFT_EMV_GEN_ICC_MK_OP_ECB_EXP Operação em modo ECB
[in]szIKNome da chave dentro do HSM que será utilizada para gerar a Master Key.
[in]szKeKNome da chave de transporte utilizada para encriptar a chave gerada.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number).
[in,out]pdwEnvelopeLenPonteiro para um DWORD que contém o tamanho do buffer apontado por pbEnvelope.
[out]pbEnvelopeBuffer que receberá o envelope com a chave gerada. Pode ser passado NULL para recuperar o tamanho necessário de pbSig, que será retornado em pdwEnvelopeLen.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateEMV_HMAC()

int AAP_API DGenerateEMV_HMAC ( HSESSIONCTX hSession,
BYTE bOP,
char * szIK,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbNONCE,
DWORD dwDataLen,
BYTE * pbData,
BYTE * pbMAC,
DWORD dwParam )

#include <dinamo.h>

Obsoleto(a)
A API DGenerateEMV_MAC() é funcional e sintáticamente equivalente à API DGenerateEMV_HMAC. A referência à DGenerateEMV_HMAC continue ativa na biblioteca (internamente ela é redirecionada para DGenerateEMV_MAC() ). As aplicações que fazem chamada à DGenerateEMV_HMAC não precisam ser alteradas.

◆ DGenerateEMV_MAC()

int AAP_API DGenerateEMV_MAC ( HSESSIONCTX hSession,
BYTE bOP,
char * szIK,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbNONCE,
DWORD dwDataLen,
BYTE * pbData,
BYTE * pbMAC,
DWORD dwParam )

#include <dinamo.h>

Gera um criptograma padrão EMV ou MAC (Message Authentication Code), utilizado nos comandos EMV.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bOPTipo da operação (padding, derivação de chave, etc) a ser aplicada na construção do criptograma (MAC) de acordo com a tabela abaixo.
Valor Significado
EMV_OP_ISO_9797_1_M2_COMMON Padrão ISO 9797-1 Padding Method 2 COMMON.
EMV_OP_ISO_9797_1_M2_MCHIP Padrão ISO 9797-1 Padding Method 2 MCHIP.
EMV_OP_ISO_9797_1_M2_VISA Padrão ISO 9797-1 Padding Method 2 VISA.
EMV_OP_ISO_9797_1_M2_VISA_CRYPTOGRAM Padrão ISO 9797-1 Padding Method 2 VISA_CRYPTOGRAM.
EMV_OP_ISO_9797_1_M2_RAW Padrão ISO 9797-1 Padding Method 2 Algorithm 3.Deve ser passado NULL nos parâmetros szPAN, pbSEQ e pbNONCE.
EMV_OP_ISO_9797_1_M1_VISA_CRYPTOGRAM_PADD_V10 Padrão ISO 9797-1 Padding Method 1 VISA.
EMV_OP_ISO_9797_1_M2_ELO Padrão ISO 9797-1 Padding Method 2 COMMON.
EMV_OP_ISO_9797_1_M2_JCB Padrão ISO 9797-1 Padding Method 2. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB Padrão ISO 9797-1 Padding Method 1. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB_CRYPTOGRAM Padrão ISO 9797-1 Padding Method 1. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szIKNome da chave dentro do HSM que será utilizada para gerar o MAC.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number). Deve ser em formato ASCII.
[in]pbNONCEBuffer contendo o material diversificador utilizado na geração do MAC, deve ter tamanho DES_BLOCK.
Tipo da operação conforme parâmetro bOP NONCE
EMV_OP_ISO_9797_1_M2_COMMON ATC (2 bytes)||00||00||00||00||00||00
EMV_OP_ISO_9797_1_M2_MCHIP CVN10 e CVN11:
ATC (2 bytes)||00||00||UC (Unpredictable Number)

CVN14 e CVN15:
ATC (2 bytes)||00||00||00||00||00||00
EMV_OP_ISO_9797_1_M2_VISA 00||00||00||00||00||00||ATC (2 bytes)
EMV_OP_ISO_9797_1_M2_VISA_CRYPTOGRAM 00||00||00||00||00||00||00||00
ou
NULL
EMV_OP_ISO_9797_1_M2_RAW NULL
EMV_OP_ISO_9797_1_M1_VISA_CRYPTOGRAM_PADD_V10 00||00||00||00||00||00||00||00
ou
NULL
EMV_OP_ISO_9797_1_M2_ELO ATC (2 bytes)||00||00||00||00||00||00
EMV_OP_ISO_9797_1_M2_JCB 00||00||00||00||00||00||ATC (2 bytes)
EMV_OP_ISO_9797_1_M1_JCB 00||00||00||00||00||00||ATC (2 bytes)
EMV_OP_ISO_9797_1_M1_JCB_CRYPTOGRAM 00||00||00||00||00||00||ATC (2 bytes)

O CVN (Cryptogram Version Number) determina a versão do criptograma utilizado e depende de definições de negócio. A aplicação deve utilizar o NONCE seguindo a versão do CVN, quando aplicável.
Para maiores informações sobre qual CVN utilizar consulte a administradora do esquema do cartão.

Parâmetros
[in]dwDataLenTamanho do buffer apontado por pbData.
[in]pbDataBuffer de tamanho especificado por dwDataLen contendo os dados que serão utilizados na geração do MAC. Observe que o padding será feito pelo HSM, conforme o parâmetro bOP, portanto a aplicação chamadora não deve fazer padding nos dados em pbData.
[out]pbMACBuffer de tamanho DES_BLOCK que conterá o MAC gerado.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DCheckIDN()

int AAP_API DCheckIDN ( HSESSIONCTX hSession,
char * szIK,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbATC,
BYTE * pbUN,
BYTE * pbIDN,
DWORD dwParam )

#include <dinamo.h>

Verifica o IDN (ICC Dynamic Number).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szIKNome da chave dentro do HSM que será utilizada para verificar o IDN.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number).
[in]pbATCBuffer de tamanho EFT_EMV_IDN_ATC_LEN contendo o ATC (Application Transaction Counter).
[in]pbUNBuffer de tamanho EFT_EMV_IDN_UN_LEN contendo o UN (Unpredictable Number).
[in]pbIDNBuffer de tamanho EFT_EMV_IDN_LEN contendo o IDN (ICC Dynamic Number).
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DEncryptEMV()

int AAP_API DEncryptEMV ( HSESSIONCTX hSession,
BYTE bEncOP,
char * szEncIK,
BYTE * pbEncNONCE,
BYTE bMacOP,
char * szMacIK,
BYTE * pbMacNONCE,
char * szPAN,
BYTE * pbSEQ,
DWORD dwDataLen,
BYTE * pbData,
DWORD * pdwEncDataLen,
BYTE * pbEncData,
BYTE * pbMAC,
DWORD dwParam )

#include <dinamo.h>

Encripta dados em SMC (Secure Message with Confidentiality) e gera MACs (Message Authenticatino Code) em SMC/SMI (Secure Messaging for Confidentiality/Integrity).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bEncOPTipo da operação a ser aplicada de acordo com a tabela abaixo.
Valor Significado
EMV_OP_ISO_9797_1_M2_COMMON Padrão ISO 9797-1 Method 2 COMMON.
EMV_OP_ISO_9797_1_M2_MCHIP Padrão ISO 9797-1 Method 2 MCHIP.
EMV_OP_ISO_9797_1_M2_VISA Padrão ISO 9797-1 Method 2 VISA.
EMV_OP_ISO_9797_1_M2_ELO Padrão ISO 9797-1 Padding Method 2 COMMON.
EMV_OP_ISO_9797_1_M2_JCB Padrão ISO 9797-1 Padding Method 2. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szEncIKNome da chave dentro do HSM que será utilizada para encriptar os dados.
[in]pbEncNONCEBuffer contendo o material diversificador utilizado na encriptação dos dados, deve ter tamanho DES_BLOCK.
[in]bMacOPTipo da operação a ser aplicada de acordo com a tabela abaixo.
Valor Significado
EMV_OP_ISO_9797_1_M2_COMMON Padrão ISO 9797-1 Method 2 COMMON.
EMV_OP_ISO_9797_1_M2_MCHIP Padrão ISO 9797-1 Method 2 MCHIP.
EMV_OP_ISO_9797_1_M2_VISA Padrão ISO 9797-1 Method 2 VISA.
EMV_OP_ISO_9797_1_M2_ELO Padrão ISO 9797-1 Padding Method 2 COMMON.
EMV_OP_ISO_9797_1_M2_JCB Padrão ISO 9797-1 Padding Method 2. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB Padrão ISO 9797-1 Padding Method 1. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB_CRYPTOGRAM Padrão ISO 9797-1 Padding Method 1. Como descrito em JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szMacIKNome da chave dentro do HSM que será utilizada para gerar o MAC.
[in]pbMacNONCEBuffer contendo o material diversificador utilizado na geração do MAC, deve ter tamanho DES_BLOCK.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number).
[in]dwDataLenTamanho do buffer apontado por pbData.
[in]pbDataBuffer de tamanho especificado por dwDataLen contendo os dados que serão utilizados na encriptação/geração do MAC.
[in,out]pdwEncDataLenPonteiro para um DWORD que contém o tamanho do buffer apontado por pbEncData.
[out]pbEncDataBuffer que conterá os dados encriptados. Pode ser passado NULL para recuperar o tamanho necessário de pdwEncDataLen, que será retornado em pdwEncDataLen.
[out]pbMACBuffer de tamanho DES_BLOCK que conterá o MAC gerado. Pode ser NULL se szMacIK e pbMacNONCE forem NULL.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateEMV_CSR()

int AAP_API DGenerateEMV_CSR ( HSESSIONCTX hSession,
BYTE bOP,
char * szIK,
BYTE * pbTrackNum,
BYTE * pbServiceID,
BYTE * pbIssuerID,
BYTE * pbExpDate,
DWORD * pdwCSRLen,
BYTE * pbCSR,
DWORD dwParam )

#include <dinamo.h>

Gera CSR (Certificate Signing Request) do Emissor.

Obsoleto(a)
Utilize a API DGenerateEMV_CSREx().
Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bOPTipo da operação a ser aplicada de acordo com a tabela abaixo.
Valor Significado
EFT_EMV_OP_CSR_VISA Padrão de processo VISA. O buffer pbCSR conterá CSR + HASH. Sendo HASH de tamanho EFT_EMV_CSR_VISA_HASH_SIZE.
EFT_EMV_OP_CSR_MASTER Padrão de processo MASTERCARD. O buffer pbCSR conterá CSR + HASH. Sendo HASH de tamanho EFT_EMV_CSR_MASTER_HASH_SIZE.
EFT_EMV_OP_CSR_ELO Padrão de processo ELO. O buffer pbCSR conterá o CSR.
[in]szIKNome da chave dentro do HSM que será utilizada para gerar o CSR (Chave do Emissor).
[in]pbTrackNumBuffer de tamanho EFT_EMV_CSR_VISA_TRACK_NUM_LEN contendo o Track Number.
[in]pbServiceIDBuffer de tamanho EFT_EMV_CSR_VISA_SERVICE_ID_LEN contendo o Service ID.
[in]pbIssuerIDBuffer de tamanho EFT_EMV_CSR_VISA_ISSUER_ID_LEN contendo o Issuer ID.
[in]pbExpDateBuffer de tamanho EFT_EXP_DATE_LEN contendo a data de expiração no formato MMYY. Deve estar no formato ASCII.
[in,out]pdwCSRLenPonteiro para um DWORD que contém o tamanho do buffer apontado por pbCSR.
[out]pbCSRBuffer que conterá o CSR. Pode ser passado NULL para recuperar o tamanho necessário de pbCSR, que será retornado em pdwCSRLen.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateEMV_CSREx()

int AAP_API DGenerateEMV_CSREx ( HSESSIONCTX hSession,
BYTE bOP,
char * szIK,
BYTE * pbTrackNum,
BYTE * pbServiceID,
BYTE * pbIssuerID,
BYTE * pbExpDate,
DBLOB * pdbCSR,
BYTE * pbHash,
DWORD dwParam )

#include <dinamo.h>

Gera CSR (Certificate Signing Request) do Emissor;

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bOPTipo da operação a ser aplicada de acordo com a tabela abaixo.
Valor Significado
EFT_EMV_OP_CSR_VISA Padrão de processo VISA. O buffer pdbCSR conterá a CSR e pbHash o HASH. pbHash deverá ser previamente alocado com tamanho EFT_EMV_CSR_VISA_HASH_SIZE.
EFT_EMV_OP_CSR_MASTER Padrão de processo MASTERCARD. O buffer pdbCSR conterá a CSR e pbHash o HASH. pbHash deverá ser previamente alocado com EFT_EMV_CSR_MASTER_HASH_SIZE.
EFT_EMV_OP_CSR_ELO Padrão de processo ELO. O buffer pdbCSR conterá o CSR. pbHash deverá ser NULL e não será retornado HASH.
EFT_EMV_OP_CSR_JCB Padrão de processo JCB. O buffer pdbCSR conterá o CSR. pbHash deverá ser NULL e não será retornado HASH. Segue o padrão JCB CA Interface Guide, 04/01/2014 no file layout descrito na seção 5.1.2.2.
[in]szIKNome da chave dentro do HSM que será utilizada para gerar o CSR (Chave do Emissor).
[in]pbTrackNumBuffer de tamanho EFT_EMV_CSR_VISA_TRACK_NUM_LEN contendo o Track Number. Caso EFT_EMV_OP_CSR_JCB seja definido em bOP este campo deverá conter o Serial Number de tamanho EFT_EMV_CSR_VISA_TRACK_NUM_LEN.
[in]pbServiceIDBuffer de tamanho EFT_EMV_CSR_VISA_SERVICE_ID_LEN contendo o Service ID.
[in]pbIssuerIDBuffer de tamanho EFT_EMV_CSR_VISA_ISSUER_ID_LEN contendo o Issuer ID.
[in]pbExpDateBuffer de tamanho EFT_EXP_DATE_LEN contendo a data de expiração no formato MMYY. Deve estar no formato ASCII.
[out]pdbCSRPonteiro para um DBLOB que conterá o CSR e seu tamanho. O membro pvData deverá ser liberado com DFree() após seu uso.
[out]pbHashBuffer que conterá o HASH. Ver tabela em bOP para os valores esperados neste parâmetro.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DGenerateEMV_PinBlock()

int AAP_API DGenerateEMV_PinBlock ( HSESSIONCTX hSession,
BYTE bOP,
BYTE * pbNONCE,
char * szTransportKey,
char * szISSUER_MK,
char * szISSUER_SMC_MK,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbOLD_PB,
BYTE * pbNEW_PB,
BYTE * pbOutBlock,
DWORD * pdwOutBlockLen,
DWORD dwParam )

#include <dinamo.h>

Gera um segmento de dados para um comando de alteração de PIN (Personal Identification Number) a partir de PIN Blocks. Este comando é tipicamente um APDU (Application Protocol Data Unit) para um cartão ISO-7816.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bOPIdentificador do tipo de derivação das chaves de operação para geração do bloco de saída. De acordo com a tabela abaixo.
Valor Significado
PBC_EMV_PIN_BLOCK_OP_MCHIP Serão geradas chaves operacionais e o bloco de saída de acordo com o "M/Chip 4 Version 1.1 Issuer Guide, chapter 6", "M/Chip Lite 2.1 Card Application Specifications for Debit and Credit, section: 2.7 Secure Messaging" e "M/Chip 4 Version 1.1, Section 7.2.8".
PBC_EMV_PIN_BLOCK_OP_VISA Serão geradas chaves operacionais e o bloco de saída de acordo com o "EMV book 2 v4.2, A1.4.1 option A e A1.4.2 option B", "VISA ICC specification 1.4.0 apêndice B.4/EMV Book 2 v4.2 A1.3" - para as chaves de cartão e sessão, respectivamente. "VISA ICC spec 1.4.0, B.3.3 Data Encipherment Calculation, C.11.1 PIN Data Generated Using the Current PIN e C.11.2 PIN Data Generated Without Using the Current PIN", para o bloco.
PBC_EMV_PIN_BLOCK_OP_VISA_CRYPTOGRAM Serão geradas chaves operacionais e o bloco de saída de acordo com o "EMV book 2 v4.2, A1.4.1 option A e A1.4.2 option B" - para as chaves de cartão e sessão(a chave de sessão é igual à chave de ICC). "VISA ICC spec 1.4.0, B.3.3 Data Encipherment Calculation, C.11.1 PIN Data Generated Using the Current PIN e C.11.2 PIN Data Generated Without Using the Current PIN", para o bloco.
PBC_EMV_PIN_BLOCK_OP_ELO Serão geradas chaves operacionais e blocos de saída de acordo com o Manual ELO Chip Card, CCD Cryptographic Algorithms, A5, seção TDES Keys Usage Algorithm (Script Processing Command Data Encryption in Change PIN script cmd), Algorithm no. 4.
PBC_EMV_PIN_BLOCK_OP_JCB Serão geradas chaves operacionais e blocos de saída de acordo com o Manual JCB IC Card Specification, Version 2.0 - October, 2012.
[in]pbNONCEBuffer contendo o material diversificador, deve ter tamanho DES_BLOCK.
Identificador usado no parâmetro bOP NONCE
PBC_EMV_PIN_BLOCK_OP_MCHIP Codifique como determina o manual MCHIP:
ATC (2 bytes) ||00||00||00||00||00||00.
PBC_EMV_PIN_BLOCK_OP_VISA 00||00||00||00||00||00||ATC (2 bytes).
PBC_EMV_PIN_BLOCK_OP_VISA_CRYPTOGRAM 00||00||00||00||00||00||00||00.
PBC_EMV_PIN_BLOCK_OP_ELO ATC (2 bytes)||00||00||00||00||00||00
PBC_EMV_PIN_BLOCK_OP_JCB 00||00||00||00||00||00||ATC (2 bytes). JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szTransportKeyIdentificador da chave de transporte dentro do HSM. Esta chave deve ser do tipo DES ou 3DES.
[in]szISSUER_MKIdentificador da chave "Issuer MK" dentro doHSM. Esta chave deve ser do tipo 3DES 112 bits. Esta chave pode ser igual a chave "Issuer SMC MK" em determinados casos.
[in]szISSUER_SMC_MKIdentificador da chave "Issuer SMC MK" dentro do HSM. Esta chave deve ser do tipo 3DES 112 bits.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number). Deve ser em formato ASCII.
[in]pbOLD_PBBuffer contendo o PIN Block com o PIN atual. O buffer deve ter o tamanho DES_BLOCK (8 bytes). Deve ser passado NULL caso o PIN Block com a senha atual não seja necessário. São suportados blocos no formato ISO 0/1/2/3.
[in]pbNEW_PBBuffer contendo o PIN Block com o novo PIN. O buffer deve ter o tamanho de um DES_BLOCK (8 bytes). São suportados blocos no formato ISO 0/1/2/3.
[out]pbOutBlockBuffer que conterá o segmento de dados de saída. Pode se utilizar um buffer de tamanho máximo PBC_EMV_PIN_BLOCK_MAX_OUTPUT que será suficiente para todos os casos.
[in,out]pdwOutBlockLenPonteiro para um DWORD contendo o tamanho do buffer disponibilizado em pbOutPinblock. Ele conterá o tamanho dos dados escritos em pbOutPinblock em caso de sucesso. Em caso de falha conterá o tamanho necessário de pbOutPinblock.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Caso o erro D_ERR_OPERATION_FAILED seja retornado, pode ser indicativo de que:
  1. A chave de transporte esteja errada;
  2. Os PIN Blocks de entrada sejam desconhecidos ou inválidos;
  3. Tenha ocorrido falha na derivação das chaves de ICC ou sessão;
  4. O tipo de operação não seja válido.

◆ DDeriveEMV_Key()

int AAP_API DDeriveEMV_Key ( HSESSIONCTX hSession,
char * szSrcKey,
WORD wBufferLen,
BYTE * pbBuffer,
BYTE bOP,
DWORD dwAttrib,
char * szDstKey,
HKEYCTX * phKey,
DWORD dwParam )

#include <dinamo.h>

◆ DCalculateARPC()

int AAP_API DCalculateARPC ( HSESSIONCTX hSession,
char * szIssuerMK,
char * szPAN,
BYTE * pbSEQ,
BYTE * pbARQC,
BYTE * pbARC,
BYTE * pbARPC,
DWORD dwParam )

#include <dinamo.h>

Calcula um ARPC (Authorisation Response Cryptogram) seguindo o padrão EMV Book 2 (v4.2, 2008), Section 8.2.1, ARPC Method 1.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szIssuerMKNome da chave do emissor dentro do HSM que será utilizada para gerar o MAC.
[in]szPANPAN (Primary Account Number).
[in]pbSEQBuffer de tamanho EFT_EMV_SDA_SEQ_LEN contendo o SEQ (PAN Sequence Number).
[in]pbARQCBuffer de tamanho DES_BLOCK contendo o ARQC (Authorisation Request Cryptogram).
[in]pbARCBuffer de tamanho 2 (dois bytes) contendo o ARC (Authorisation Response Code).
[out]pbARPCBuffer de tamanho DES_BLOCK que conterá o ARPC gerado.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
O cálculo do Método 2 do ARPC EMV Book 2 (v4.2, 2008), Section 8.2.1, ARPC Method 2 pode ser feito utilizando a função DGenerateEMV_MAC().

◆ DCalculateARPC_Ex()

int AAP_API DCalculateARPC_Ex ( HSESSIONCTX hSession,
DWORD dwOp,
void * pvInData,
BYTE * pbARPC,
DWORD dwParam )

#include <dinamo.h>

Calcula um ARPC (Authorisation Response Cryptogram).

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]dwOpTipo da operação ARPC que será executada.
Valor Significado
DN_CALC_ARPC_EMV_4_2_M1_ICC Calcula um ARPC no padrão EMV Book 2 (v4.2, 2008), Section 8.2.1, ARPC Method 1 utilizando a chave do emissor dentro do HSM. Utilizar a estrutura DN_CALC_ARPC_EMV_METHOD_1 como parâmetro de pvInData.
DN_CALC_ARPC_EMV_4_2_M1_SK Calcula um ARPC no padrão EMV Book 2 (v4.2, 2008), Section 8.2.1, ARPC Method 1 utilizando a chave de sessão derivada da chave do emisor dentro do HSM. Utilizar a estrutura DN_CALC_ARPC_EMV_METHOD_1 como parâmetro de pvInData.
DN_CALC_ARPC_EMV_4_2_M2 Calcula um ARPC no padrão EMV Book 2 (v4.2, 2008), Section 8.2.1, ARPC Method 2 utilizando a chave de sessão derivada da chave do emisor dentro do HSM. Utilizar a estrutura DN_CALC_ARPC_EMV_METHOD_2 como parâmetro de pvInData.
[in]pvInDataDados de entrada para cálculo do ARPC, de acordo com o descrito no parâmetro dwOP.
[out]pbARPCBuffer de tamanho DES_BLOCK que conterá o ARPC gerado.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
O cálculo do Método 2 do ARPC EMV Book 2 (v4.2, 2008), Section 8.2.1, ARPC Method 2 também pode ser feito utilizando a função DGenerateEMV_MAC().

◆ DMAC_ISO9797_1_Met2()

int AAP_API DMAC_ISO9797_1_Met2 ( DWORD dwType,
BYTE * pbKey,
DWORD dwAlg,
const BYTE * pbMsg,
DWORD dwMsgLen,
BYTE * pbMAC )

#include <dinamo.h>

Gera um MAC (Message Authentication Code) no padrão ISO/IEC 9797-1 Method 2. Esta operação é feita offline na biblioteca, fora do HSM.

Parâmetros
[in]dwTypeTipo da operação a ser feita, de acordo com a tabela abaixo.
[in]pbKeyBuffer contendo a chave utilizada para a geração do MAC, deve ter o tamanho referente ao tipo de chave informado em dwAlg.
[in]dwAlgTipo da chave utilizada na geração do MAC.
[in]pbMsgBuffer que passará pelo processo de MAC.
[in]dwMsgLenTamanho do buffer pbMsg.
[out]pbMACBuffer que conterá o MAC gerado, deve ter tamanho DES_BLOCK.
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DEFTImportKey()

int AAP_API DEFTImportKey ( HSESSIONCTX hSession,
char * szKeyId,
int nKeyAlgId,
void * pstKeyParts,
DWORD dwParam )

#include <dinamo.h>

Importa uma chave por partes em formatos EFT.

Utilizados para importação de chaves por partes:

  • DES e 3DES: ZMK (Zone Master Key), também conhecida como ZCMK (Zone Control Master Key) no formato VISA;
  • AES: no formato ANSI X9.24.
    Parâmetros
    [in]hSessionContexto adquirido através da função DOpenSession().
    [in]szKeyIdNome da chave que será importada no HSM.
    [in]nKeyAlgIdSuporta os seguintes algoritmos.
    Valor Significado
    ALG_DES, ALG_3DES_112 ou ALG_3DES_168 Importa uma chave DES no formato descrito no VISA Payment Technology Standards Manual, october 2007 Chapter 7 e Appendix C. Utilizar a estrutura EFT_VISA_KEY_PARTS como parâmetro pstKeyParts.
    ALG_AES_128, ALG_AES_192 ou ALG_AES_256 Importa uma chave AES no formato ANSI X9.24 (2004), XOR method (KCV descrito no anexo C). Utilizar a estrutura EFT_AES_KEY_PARTS_DATA como parâmetro pstKeyParts.
    [in]pstKeyPartsPonteiro para uma estrutura contendo os dados para reconstrução da chave de acordo com o descrito em nKeyAlgId.
    [in]dwParamPassar 0. Ou algum dos valores abaixo.
    Valor Significado
    DN_EFT_AES_KCV_TYPE_CMAC Utilizado para importação de chaves AES no formato ANSI X9.24, com KCV do tipo CMAC. De acordo com o PCI "PIN Security Requirements".
    Retorna
    0 (ZERO) se a função for bem sucedida.
    Consulte a seção Códigos de Retorno sobre outros valores.

◆ DEFTExportAESKeyParts()

int AAP_API DEFTExportAESKeyParts ( HSESSIONCTX hSession,
BYTE bKcvType,
const char * szKeyId,
void * pvKeyParts,
DWORD dwReserved )

#include <dinamo.h>

◆ DEFTExportKey()

int AAP_API DEFTExportKey ( HSESSIONCTX hSession,
BYTE bExportMode,
char * szKEKId,
char * szKeyId,
BYTE * pbEncryptedBlock,
DWORD * pdwEncryptedBlockLen,
BYTE * pbKeyCheckValue,
DWORD dwParam )

#include <dinamo.h>

◆ DEFTKeKImport()

int AAP_API DEFTKeKImport ( HSESSIONCTX hSession,
BYTE bOP,
DWORD dwAlgId,
char * szKeKName,
char * szKeyName,
DWORD dwAttr,
BYTE * pbKCV1,
BYTE * pbKCV2,
BYTE * pbKCV3,
BYTE * pbKCVFinal,
BYTE * pbBlob,
DWORD dwFlags )

#include <dinamo.h>

◆ DEFTExportZPK()

int AAP_API DEFTExportZPK ( HSESSIONCTX hSession,
char * szKeyId,
int * pnKeyAlg,
int * pnKeySize,
EFT_VISA_KEY_PARTS * pstKeyParts,
DWORD dwParam )

#include <dinamo.h>

Exporta uma chave ZPK (Zone PIN Key) ou ZMK (Zone Master Key). A exportação é feita por partes, com os seus respectivos valores de verificação como descrito no VISA Payment Technology Standards Manual, october 2007.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szKeyIdNome da chave que será importada no HSM.
[out]pnKeyAlgAlgoritmo da chave a exportada.
[out]pnKeySizeTamanho da chave exportada.
[out]pstKeyPartsPonteiro para uma estrutura EFT_VISA_KEY_PARTS que conterá as partes da chave a exportada e seus KCVs (Key Check Value).
[in]dwParamAs seguintes opções são aceitas.
Valor Significado
0 Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de 3 bytes.
DN_EXP_ZPK_FLAG_FULL_CKS Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de 8 bytes.
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Pode ser utilizada para exportação de chaves que sigam o padrão de exportação por partes descrito no documento VISA Payment Technology Standards Manual, october 2007 Chapter 7 e Appendix C. Pode ser utilizado para chaves ZPK (Zone PIN Key), ZMK (Zone Master Key)/ZCMK (Zone Control Master Key), por exemplo.

◆ DEFTGetKcv()

int AAP_API DEFTGetKcv ( HSESSIONCTX hSession,
BYTE bType,
const char * szKeyId,
BYTE * pbKcv,
DWORD * pdwKcvLen,
DWORD dwReserved )

#include <dinamo.h>

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeTipo de chave a ser utilizada para gerar o KCV.
Valor Significado
DN_EFT_GET_KCV_TYPE_X9_24 Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de 3 bytes.
DN_EFT_GET_KCV_TYPE_CMAC Gera o KCV (Key Check Value) da chave como definido no PCI PIN Security Requirements com tamanho de 3 bytes.
[in]szKeyIdNome da chave que será utilizada para gerar o KCV.
[out]pbKcvPonteiro para um buffer que conterá o KCV gerado. Pode ser NULL para obter o tamanho do KCV em pdwKcvLen.
[in,out]pdwKcvLenTamanho do buffer pbKcv. Ao final da chamada conterá o tamanho do KCV gerado.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DEFTGenKCVOffline()

int AAP_API DEFTGenKCVOffline ( DWORD dwType,
int nAlgId,
const BYTE * pbKey,
DWORD dwKeyLen,
BYTE * pbKCV,
DWORD * pdwKCVLen,
DWORD reserved )

#include <dinamo.h>

Gera um KCV (Key Check Value) de uma chave offline.

Parâmetros
[in]dwTypeTipo do KCV.
Valor Significado
DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24 Gera o KCV (Key Check Value) da chave como definido na ANSI X.9.24 com tamanho de DN_EFT_KCV_TYPE_X9_24_LEN.
DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC Gera o KCV (Key Check Value) da chave como definido no PCI PIN Security Requirements com tamanho de DN_EFT_KCV_TYPE_CMAC_LEN.
[in]nAlgIdAlgoritmo da chave. Atualmente aceita apenas DES, 3DES e AES.
[in]pbKeyPonteiro para o buffer que contém a chave.
[in]dwKeyLenTamanho da chave.
[out]pbKCVPonteiro para o buffer que conterá o KCV gerado.
[in,out]pdwKCVLenTamanho do buffer pbKCV. Ao final da chamada conterá o tamanho do KCV gerado.
[in]reservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DEFTExportTR31()

int AAP_API DEFTExportTR31 ( HSESSIONCTX hSession,
const char * szKBPK,
const char * szKey,
void * pvReserved,
WORD wUsage,
BYTE bMode,
BYTE bExport,
BYTE * pbOutBlock,
DWORD * pdwOutBlockLen,
DWORD dwParam )

#include <dinamo.h>

Exporta uma chave no formato TR-31 de acordo com o padrão ASC X9 TR 31-2018.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szKBPKNome da chave KBPK (Key Block Protection Key) utilizada para derivar as chaves de encriptação e autenticação.
[in]szKeyNome da chave que será exportada do HSM.
[in]pvReservedReservado para uso futuro (deve ser NULL).
[in]wUsageIdentificador de uso de chave, como descrito no ASC X9 TR 31-2018 Seção A.5.1 tabela 6. As seguintes opções são aceitas.
Valor Significado
EFT_ME_TR31_EXP_USAGE_AUTO Define o identificador automaticamente. Os seguintes valores são utilizados: EFT_ME_TR31_EXP_USAGE_D0 para chave simétrica e EFT_ME_TR31_EXP_USAGE_D1 para chave assimétrica.
EFT_ME_TR31_EXP_USAGE_B0 BDK Base Derivation Key
EFT_ME_TR31_EXP_USAGE_B1 Initial DUKPT Key
EFT_ME_TR31_EXP_USAGE_B2 Base Key Variant Key
EFT_ME_TR31_EXP_USAGE_C0 CVK Card Verification Key
EFT_ME_TR31_EXP_USAGE_D0 Symmetric Key for Data Encryption
EFT_ME_TR31_EXP_USAGE_D1 Asymmetric Key for Data Encryption
EFT_ME_TR31_EXP_USAGE_D2 Data Encryption Key for Decimalization Table
EFT_ME_TR31_EXP_USAGE_E0 EMV/chip Issuer Master Key: Application cryptograms
EFT_ME_TR31_EXP_USAGE_E1 EMV/chip Issuer Master Key: Secure Messaging for Confidentiality
EFT_ME_TR31_EXP_USAGE_E2 EMV/chip Issuer Master Key: Secure Messaging for Integrity
EFT_ME_TR31_EXP_USAGE_E3 EMV/chip Issuer Master Key: Data Authentication Code
EFT_ME_TR31_EXP_USAGE_E4 EMV/chip Issuer Master Key: Dynamic Numbers
EFT_ME_TR31_EXP_USAGE_E5 EMV/chip Issuer Master Key: Card Personalization
EFT_ME_TR31_EXP_USAGE_E6 EMV/chip Issuer Master Key: Other
EFT_ME_TR31_EXP_USAGE_I0 Initialization Vector (IV)
EFT_ME_TR31_EXP_USAGE_K0 Key Encryption or wrapping
EFT_ME_TR31_EXP_USAGE_K1 TR-31 Key Block Protection Key
EFT_ME_TR31_EXP_USAGE_K2 TR-34 Asymmetric key
EFT_ME_TR31_EXP_USAGE_K3 Asymmetric key for key agreement/key wrapping
EFT_ME_TR31_EXP_USAGE_M0 ISO 16609 MAC algorithm 1 (using TDEA)
EFT_ME_TR31_EXP_USAGE_M1 ISO 9797-1 MAC Algorithm 1
EFT_ME_TR31_EXP_USAGE_M2 ISO 9797-1 MAC Algorithm 2
EFT_ME_TR31_EXP_USAGE_M3 ISO 9797-1 MAC Algorithm 3
EFT_ME_TR31_EXP_USAGE_M4 ISO 9797-1 MAC Algorithm 4
EFT_ME_TR31_EXP_USAGE_M5 ISO 9797-1:1999 MAC Algorithm 5
EFT_ME_TR31_EXP_USAGE_M6 ISO 9797-1:2011 MAC Algorithm 5/CMAC
EFT_ME_TR31_EXP_USAGE_M7 HMAC
EFT_ME_TR31_EXP_USAGE_M8 ISO 9797-1:2011 MAC Algorithm 6
EFT_ME_TR31_EXP_USAGE_P0 PIN Encryption
EFT_ME_TR31_EXP_USAGE_S0 Asymmetric key pair for digital signature
EFT_ME_TR31_EXP_USAGE_S1 Asymmetric key pair, CA key
EFT_ME_TR31_EXP_USAGE_S2 Asymmetric key pair, nonX9.24 key
EFT_ME_TR31_EXP_USAGE_V0 PIN verification, KPV, other algorithm
EFT_ME_TR31_EXP_USAGE_V1 PIN verification, IBM 3624
EFT_ME_TR31_EXP_USAGE_V2 PIN Verification, VISA PVV
EFT_ME_TR31_EXP_USAGE_V3 PIN Verification, X9.132 algorithm 1
EFT_ME_TR31_EXP_USAGE_V4 PIN Verification, X9.132 algorithm 2
[in]bModeIdentificador do modo de uso da chave, como descrito no ASC X9 TR 31-2018 Seção A.5.3 tabela 8. As seguintes opções são aceitas.
Valor Significado
EFT_ME_TR31_EXP_MODE_AUTO Define o identificador de modo de uso automaticamente. O seguinte valor é utilizado EFT_ME_TR31_EXP_MODE_N.
EFT_ME_TR31_EXP_MODE_B Ambos Encriptação & Decriptação / Wrap & Unwrap
EFT_ME_TR31_EXP_MODE_C Ambos Geração & Verificação
EFT_ME_TR31_EXP_MODE_D Decriptação / Unwrap Apenas
EFT_ME_TR31_EXP_MODE_E Encriptação / Wrap Apenas
EFT_ME_TR31_EXP_MODE_G Geração Apenas
EFT_ME_TR31_EXP_MODE_N Sem restrições especiais (exceto as restrições definidas pelo identificador de uso da chave)
EFT_ME_TR31_EXP_MODE_S Assinatura Apenas
EFT_ME_TR31_EXP_MODE_T Ambos Assinatura & Decriptação
EFT_ME_TR31_EXP_MODE_V Verificação Apenas
EFT_ME_TR31_EXP_MODE_X Chave usada para derivar outra(s) chave(s)
EFT_ME_TR31_EXP_MODE_Y Chave usada para criar variantes de chaves
[in]bExportIdentificador de exportabilidade da chave, como descrito no ASC X9 TR 31-2018 Seção A.5.5 tabela 10. As seguintes opções são aceitas.
Valor Significado
EFT_ME_TR31_EXP_AUTO Define o identificador de exportabilidade automaticamente. O seguinte valor é utilizado EFT_ME_TR31_EXP_X9_24.
EFT_ME_TR31_EXP_X9_24 Exportável sob uma KEK (Key Encryption Key) em um formato de encontro com o definido nos requisitos do X9.24 Partes 1 ou 2.
EFT_ME_TR31_EXP_NON_EXPORTABLE Não exportável pelo recebedor do Key Block, ou local de armazenamento. Não impede a exportação de chaves derivadas de uma chave não exportável.
EFT_ME_TR31_EXP_KEK_EXPORTABLE Sensível, Exportável sob uma KEK (Key Encryption Key) em um formato não necessariamente de acordo com os requisitos do X9.24 Partes 1 ou 2.
[out]pbOutBlockBuffer que conterá o key block.
[in,out]pdwOutBlockLenPonteiro para o tamanho do buffer passado pbOutBlock. Após o retorno da API conterá o tamanho real do key block armazenado em pbOutBlock. Caso o tamanho não seja o suficiente, essa variável conterá o tamanho necessário de pbOutBlock.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Essa API exporta uma chave usando os métodos de geração de key_block abaixo.
Algoritmo da KBPK Método de exportação
3DES 5.3.2.1 Key Derivation Binding Method - TDEA
AES 5.3.2.3 Key Block Binding Method – AES
Exemplos
export_import_tr31.c.

◆ DEFTImportTR31()

int AAP_API DEFTImportTR31 ( HSESSIONCTX hSession,
const char * szKBPK,
const char * szKey,
DWORD dwKeyAttributes,
BYTE * pbKeyBlock,
DWORD dwKeyBlockLen,
DWORD dwParam )

#include <dinamo.h>

Importa uma chave no formato TR-31 de acordo com o padrão ASC X9 TR 31-2018.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]szKBPKNome da chave KBPK (Key Block Protection Key) utilizada para derivar as chaves de encriptação e autenticação.
[in]szKeyNome da chave que será importada no HSM.
[in]dwKeyAttributesParâmetros adicionais da chave. Veja as opções na função DGenerateKey().
[in]pbKeyBlockBuffer contendo o key block.
[in]dwKeyBlockLenTamanho do buffer passado pbKeyBlock.
[in]dwParamReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Essa API importa chaves protegidas pelos métodos de geração do key_block.
Algoritmo da KBPK Método
3DES 5.3.2.1 Key Derivation Binding Method - TDEA
AES 5.3.2.3 Key Block Binding Method – AES
Exemplos
export_import_tr31.c.