API C/C++
HSM Dinamo
Cargando...
Buscando...
No se han encontrado entradas
EFT

Descripción detallada

Operaciones de transferencia electrónica de fondos.

Consulte la documentación técnica del HSM.

Definiciones y 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)
 

Funciones

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)
 

Definiciones y 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 de tipo CMAC. De conformidad con los "Requisitos de seguridad del PIN" de la PCI.

DN_EFT_GET_KCV_TYPE_X9_24

#define DN_EFT_GET_KCV_TYPE_X9_24   (1)

#include <dinamo.h>

Exporta una clave AES por partes en formato ANSI X9.24.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bKcvTypeTipo de KCV que se utilizará para la exportación.
Valor Significado
DN_EFT_GET_KCV_TYPE_X9_24 Genera el KCV (Key Check Value) de la clave según se define en ANSI X.9.24 con un tamaño de 3 bytes.
DN_EFT_GET_KCV_TYPE_CMAC Genera el KCV (Key Check Value) de la clave tal y como se define en los requisitos de seguridad del PIN PCI con un tamaño de 3 bytes.
[in]szKeyIdNombre de la clave a exportar.
[out]pvKeyPartsPuntero a una estructura EFT_AES_KEY_PARTS que contendrá los datos para reconstruir la clave.
[in]dwReservedReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores. Genera el KCV (Key Check Value) de la clave tal como se define en ANSI X.9.24 con un tamaño de 3 bytes.

DN_EFT_GET_KCV_TYPE_CMAC

#define DN_EFT_GET_KCV_TYPE_CMAC   (2)

#include <dinamo.h>

Genera el KCV (Key Check Value) de la clave tal y como se define en los requisitos de seguridad del PIN PCI con un tamaño 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>

Tamaño máximo del KCV (Key Check Value) generado.

DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24

#define DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24   (1)

#include <dinamo.h>

Genera el KCV (Key Check Value) de la clave según se define en ANSI X.9.24 con un tamaño de 3 bytes.

DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC

#define DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC   (2)

#include <dinamo.h>

Genera el KCV (Key Check Value) de la clave tal y como se define en los requisitos de seguridad del PIN PCI con un tamaño de 3 bytes.

DN_EFT_KCV_TYPE_X9_24_LEN

#define DN_EFT_KCV_TYPE_X9_24_LEN   (3)

#include <dinamo.h>

Tamaño del KCV (Key Check Value) generado.

DN_EFT_KCV_TYPE_CMAC_LEN

#define DN_EFT_KCV_TYPE_CMAC_LEN   (3)

#include <dinamo.h>

Tamaño del KCV (Key Check Value) generado.

Funciones

DPINBlockTranslate()

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

#include <dinamo.h>

Traduce un bloque PIN, descifrando el bloque con una clave y cifrándolo con otra. El formato del bloque entrante se identifica automáticamente, y el formato del bloque saliente puede ser definido por el llamante, siempre que el cambio de formato no sea de un PAN Unbound a un PAN Bound. Los formatos PAN Bound son aquellos que utilizan información PAN en su composición. Por lo tanto, es posible realizar tanto la traducción de claves como la traducción de formatos. El llamante puede realizar una validación forzada del formato indicando para el formato saliente, el mismo que está utilizando en el Bloque PIN entrante.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szSrcPEKIdentificador de la clave de descifrado dentro del HSM.
[in]szDstPEKIdentificador de la clave de cifrado dentro del HSM.
[in]bTransBlockTypeIdentificador del formato del bloque de salida. Según la tabla siguiente.
Valor Significado
TP_TRANSLATE_TYPE_AUTO Realiza una conversión opaca, traduciendo del bloque con la clave de origen al bloque con la clave de destino, sin analizar el formato ni el contenido del bloque.
PAN Bound: no se aplica.
TP_TRANSLATE_TYPE_ISO_0 Utiliza ISO PIN Block Format 0 (equivalente a ANSI PIN Block Format 0 y VISA PIN Block Format 1).
PAN Bound: sí.
TP_TRANSLATE_TYPE_ISO_1 Utiliza el formato ISO PIN Block 1.
PAN Bound: no.
TP_TRANSLATE_TYPE_ISO_3 Utiliza el formato ISO PIN Block Format 3.
PAN Bound: sí.
TP_TRANSLATE_TYPE_IBM_3624 Tipo de bloque IBM 3624 utilizado.
No implementado.
[in]szPANPAN (Número de cuenta principal).
[in]pbInPinBlockBúfer que contiene el PIN Block de entrada. El búfer debe tener el tamaño de un PIN Block, DES_BLOCK (8 bytes) .
[out]pbOutPinBlockBúfer que contendrá el PIN Block saliente. El búfer debe tener el tamaño de un PIN Block, DES_BLOCK (8 bytes).
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
En el caso de una conversión no opaca, es decir, una traducción de formato, si no se puede reconocer el formato PIN Block de entrada, se devolverá un error D_ERR_OPERATION_FAILED.
El método ISO PIN Block Format 2 no está implementado en el HSM, ya que este formato está destinado a utilizarse para la protección del PIN cuando se envía desde el lector de tarjetas chip.
Ejemplos
pin_block_translate.c.

DGenerarCVV()

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

#include <dinamo.h>

Genera un CVV (Card Verification Value), CVV2 o iCVV utilizando una clave dentro del HSM.

Esta API también puede utilizarse para generar códigos de verificación de tarjetas compatibles con el protocolo 3-D Secure. En el caso de Visa, el servicio que implementa el protocolo es Verified by Visa, y el HSM soporta el estándar CAVV (Cardholder Authentication Verification Value, que es CVV2 con método ATN). En el caso de Mastercard, el protocolo 3-D Secure se implementa en el servicio SecureCode, y el HSM soporta los estándares CVC2 (Card Verification Code 2) y HMAC SHA1.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szKeyIdIdentificador de la clave dentro del HSM. Este identificador no debe contener espacios ni caracteres especiales. Los caracteres en mayúsculas y minúsculas distinguen entre mayúsculas y minúsculas.
Esta clave es la CVK (Card Verification Key), una clave 3DES de 112 bits, y debe ser la misma que la utilizada para la verificación del CVV. Esta clave puede generarse internamente en el HSM o importarse manualmente.
Normalmente esta clave también se utiliza en Visa, enviada cifrada por ZCMK (Zone Contro Master Key).
Como se indica en el manual de Visa, la clave 3DES 112 utilizada como CVK debe ser diferente de la clave utilizada para la generación y verificación del PIN y no debe utilizarse para otras aplicaciones del emisor, a excepción de CVV2 e iCVV.
[in]szPANPAN (Número de cuenta principal). Tamaño de 12 a 19 caracteres.
Para el cálculo de CVV, CVV2 e iCVV, según el estándar de Visa en el Payment Technology Standards Manual 2007, el tamaño del PAN es independiente. Para el cálculo del CVC2, según el documento de Mastercard SPA Algorithm for the MasterCard Implementation of 3-D Secure - v1.04, el tamaño del PAN debe ser exactamente de 16 dígitos; cuando es menor, debe completarse por la izquierda con ceros, y cuando es mayor, sólo deben utilizarse los 16 dígitos del extremo derecho.
[in]szExpirationDateFecha de caducidad. Longitud de 4 dígitos.
Al generar CVV e iCVV, el formato debe ser AAMM.
Para la generación de CVV2, el formato debe ser MMYY.
Al calcular el CVC2, este campo debe ser una cadena terminada en cero con los 4 dígitos menos significativos del número de secuencia de la transacción, contenido en el AVV (Accountholder Authentication Value) convertido al BCD decimal equivalente. Cualquier valor inferior a 4 dígitos debe completarse a la izquierda con ceros hasta llegar a 4 dígitos. Para más detalles, consulte el documento de Mastercard SPA Algorithm for the MasterCard Implementation of 3-D Secure - v1.04.
Al calcular CAVV (CVV2 con el método ATN), este campo debe ser una cadena terminada en cero con los 4 dígitos menos significativos del ATN (Authentication Tracking Number). Para obtener más información, consulte el documento de Visa 3-D Secure Requisitos funcionales Servidor de control de acceso v. 1.0.2.
[in]szServiceCodeCódigo de servicio. Longitud de 3 dígitos.
Para la generación iCVV (Alternate Card Verification Value), el Código de Servicio debe ser 999.
Para la generación de CVV 2, el Código de Servicio debe ser 000.
Para la generación de CVV tradicional, el Código de Servicio suele ser 101.
[out]szCVVBúfer de salida que contiene la cadena CVV generada. Longitud de 3 dígitos.
El valor generado también puede ser un CVV2 o un iCVV, dependiendo de los valores del Código de Servicio introducidos.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
La API también es compatible con la norma American Express.
Ejemplos
eft_validate_cvv.c.

DVerificarCVV()

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

#include <dinamo.h>

Verifica un CVV (Card Verification Value), CVV2 o iCVV utilizando una clave dentro del HSM. La API también puede utilizarse para verificar códigos de verificación de tarjeta compatibles con el protocolo 3-D Secure. Consulte más detalles en la API DGenerateCVV().

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szKeyIdIdentificador de la clave dentro del HSM. Este identificador no debe contener espacios ni caracteres especiales. Los caracteres en mayúsculas y minúsculas distinguen entre mayúsculas y minúsculas.
Esta clave es la CVK (Card Verification Key), una clave 3DES de 112 bits, y debe ser la misma que la utilizada para generar el CVV.
[in]szPANPAN (Número de cuenta principal). Longitud de 12 a 19 caracteres.
Consulte más detalles sobre este campo en la API DGenerateCVV().
[in]szExpirationDateFecha de caducidad. Longitud de 4 dígitos.
Para la verificación CVV e iCVV, el formato debe ser AAMM.
Para la verificación CVV 2, el formato debe ser MMYY.
Para obtener información sobre la compatibilidad con los algoritmos del protocolo 3-D Secure, consulte más detalles sobre este campo en la API DGenerateCVV().
[in]szServiceCodeCódigo de servicio. Longitud de 3 dígitos.
Para la verificación iCVV (Alternate Card Verification Value), el Código de servicio debe ser 999.
Para la verificación CVV 2, el código de servicio debe ser 000.
[in]szCVVCVV a validar. Longitud de 3 dígitos.
El valor introducido también puede ser un CVV2 o iCVV, en función de los valores del Código de Servicio introducidos.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Ejemplos
eft_validate_cvv.c.

DGenerarPIN()

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>

Realiza operaciones de generación de PIN basadas en los datos PAN (Personal Account Number) y PGK (Key Name) introducidos, con o sin el uso de offset.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szPGKIdentificador de clave dentro del HSM.
[in]szPANPAN (Número de cuenta principal).
[in]dwOperationTipo de generación de PIN. Según la tabla siguiente.
Valor Significado
GP_DEFAULT_PIN Genera el PIN por defecto basado en PAN y PGK. El parámetro szInPin debe ser NULL.
GP_USER_DEF_PIN Genera un offset referido al PIN definido por el llamante. El parámetro szInPin debe contener una cadena que contenga el PIN.
GP_RANDOM_PIN Genera aleatoriamente un PIN y un offset basados en PAN y PGK. szInPin debe ser NULL.
[in]nPinLenTamaño del PIN que se utilizará/generará en la operación. Debe estar comprendido entre MIN_EFT_PIN_LEN y MAX_EFT_PIN_LEN.
[in]szInPinPIN de entrada. El búfer debe estar comprendido entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[out]szOffsetBúfer que contiene la cadena de desplazamiento. El búfer debe estar entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[out]szOutPinBúfer que contiene la cadena de PIN saliente. El búfer debe estar entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DVerifyPINBlock()

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

#include <dinamo.h>

Comprueba la validez de un PIN en un Bloque PIN. Primero se extrae el PIN del Bloque PIN con la clave PTK, y luego se verifica con la clave PGK, la misma que se utilizó para generar el PIN, con la función DGeneratePIN().

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szPTKIdentificador de la clave de descifrado del "Bloque PIN" dentro del HSM. Es la clave de transporte del PIN.
[in]szPGKIdentificador de la clave que se utilizará para la verificación del PIN en el HSM. Es la clave de generación del PIN.
[in]szPANPAN (Número de cuenta principal).
[in]szOffsetDesplazamiento del PIN. El búfer debe estar entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[in]pbInPinBlockMemoria intermedia que contiene el bloque de PIN de entrada que debe verificarse. El formato de PIN Block esperado es ISO PIN Block Format 0 (equivalente a ANSI PIN Block Format 0 y VISA PIN Block Format 1). El búfer debe tener el tamaño de un PIN Block, DES_BLOCK (8 bytes).
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Ejemplos
verify_pin_block.c.

DEFTCheckKeyParts()

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

#include <dinamo.h>

Comprueba la validez de las partes de una clave VISA con sus respectivos valores de comprobación, en el formato descrito en el VISA Payment Technology Standards Manual, octubre de 2007.

Parámetros
[in]nKeyAlgIdAlgoritmo de la clave a verificar.
[in]pstKeyPartsPuntero a una estructura EFT_VISA_KEY_PARTS que contiene las partes de la clave que deben verificarse y sus valores de verificación por partes.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
Sólo se comprueban las piezas con sus respectivos valores de comprobación, el interruptor completo y montado no se comprueba en esta prueba.

DGenerarDUKPT()

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

#include <dinamo.h>

Genera una clave DUKPT dentro del HSM utilizando un KSI (Key Serial Identification), un DID (Device ID) y un CTR (Transaction Counter) del mismo KSN (Key Serial Number).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]pbKSIBuffer de tamaño MIN_KSI_LEN que contiene el KSI (primeros 05 bytes del KSN).
[in]pbDID_CTRBuffer de tamaño MIN_CTR_LEN que contiene el DID y el CTR (últimos 05 bytes del KSN).
[out]szDUKPTBuffer de tamaño MAX_OBJ_ID que contendrá el nombre de la clave DKUPT generada a partir de los parámetros introducidos.
[in]dwParamBanderas de funcionamiento según la tabla siguiente.
Valor Significado
NEW_DUKPT_MODE_DUK Genera una DUK (Clave Única Derivada) estándar de acuerdo con el manual ISO X9.24-1-2004.
NEW_DUKPT_MODE_PEK Genera una clave PEK (PIN Encryption Key) según el manual ISO X9.24-1-2004 A aplicando el XOR de la máscara 0000 0000 0000 FF00 a las partes de la clave.
NEW_DUKPT_MODE_MEK Genera una clave MEK (MAC Encryption Key) según el manual ISO X9.24-1-2004 A aplicando el XOR de la máscara 0000 0000 0000 00FF a las partes de la clave.
NEW_DUKPT_MODE Diversifica la clave generada en formato de Cifrado de Datos. Aplica un XOR de la máscara 0000 0000 00FF 0000 0000 00FF 0000 a la clave DUKPT generada, encripta la clave izquierda del DUKPT utilizando el DUKPT generado y repite la encriptación con la clave derecha. Tras esta operación, une las partes izquierda y derecha cifradas para formar la clave de cifrado de datos. Como se describe en el MANUAL DE USUARIO IDTECH SecureMag Encrypted MagStripe Reader (80096504-001 RevL 06/19/14).
Debe utilizarse en combinación (mediante la operación OR) con uno de los indicadores: NEW_DUKPT_MODE_DUK, NEW_DUKPT_MODE_PEK o NEW_DUKPT_MODE_MEK.
NEW_DUKPT_MODE_EXP Genera una clave DUKPT exportable. Se trata de un indicador de atributo y debe utilizarse en combinación con otros indicadores. Utilícela sólo si se requiere específicamente.
NEW_DUKPT_MODE_TMP Genera una clave DUKPT temporal. Se trata de un indicador de atributo y debe utilizarse en combinación con otros indicadores.
NEW_DUKPT_MODE_IPEK Genera una clave IPEK (Initially Loaded PIN Entry Device Key) de acuerdo con el manual ISO X9.24-1-2004 A-6.
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Ejemplos
gen_dukpt.c.

DGenerateBDKName()

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

#include <dinamo.h>

Genera el nombre BDK a partir de un KSI (Key Serial Identification).

Parámetros
[in]pbKSIBuffer de tamaño MIN_KSI_LEN que contiene el KSI.
[out]szBDKNameBuffer de tamaño MAX_OBJ_ID que contendrá el nombre de la clave BDK generada a partir del KSI introducido en pbKSI.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
No devuelve ningún valor.
Ejemplos
gen_dukpt.c.

DGenerateDUKPTName()

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

#include <dinamo.h>

Genera el nombre del DUKPT a partir del KSI y el CTR introducidos.

Parámetros
[in]pbKSIBuffer de tamaño MIN_KSI_LEN que contiene el KSI (Key Serial Identification).
[in]pbDID_CTRBuffer de tamaño MIN_CTR_LEN que contiene el CTR (ID de dispositivo y contador de transacciones).
[out]szDUKPTNameMemoria intermedia de tamaño MAX_OBJ_ID que contendrá el nombre de la clave DKUPT generada a partir del KSI y el CTR introducidos en pbKSI y pbCTR.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
No devuelve ningún valor.

DGenerarPVV()

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

#include <dinamo.h>

Genera un PVV (Pin Verification Value) a partir de un PAN (Primary Account Number), un PIN (Personal Identification Number) y un PGK.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szPGKIdentificador de clave dentro del HSM.
[in]bPVKIIdentificador de clave que va de EFT_MIN_PVKI a EFT_MAX_PVKI.
[in]szPANPAN (Número de cuenta principal).
[in]szPINPIN (Número de Identificación Personal).
[out]szPVVBuffer que contiene la cadena PVV generada. Debe tener un tamaño mínimo de EFT_PVV_LEN + 1 (terminador cero).
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DGenerarDAC()

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

#include <dinamo.h>

Genera un DAC (Data Authentication Code) recibiendo como parámetros el PAN (Primary Account Number), el SEQ (PAN Sequence Number) y la IMKDAC (Issuer Master Key) utilizada en el DAC.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szIMKDACIdentificador de clave dentro del HSM.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[out]pbDACMemoria intermedia de tamaño EFT_EMV_SDA_DAC_LEN que contiene el DAC (código de autenticación de datos) que debe verificarse.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DVerificarDAC()

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

#include <dinamo.h>

Verifica un DAC (Data Authentication Code) recibiendo como parámetros el PAN (Primary Account Number), el SEQ (PAN Sequence Number) y la clave IMKDAC (Issuer Master Key) utilizada en el DAC.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szIMKDACIdentificador de clave dentro del HSM.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[in]pbDACMemoria intermedia de tamaño EFT_EMV_SDA_DAC_LEN que contiene el DAC (código de autenticación de datos) que debe verificarse.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros 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>

Firma un SAD (Static Application Data) en tarjetas SDA (Static Data Authentication), generando un SSDA (Signed Static Application Data).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szIKNombre de la clave privada dentro del HSM que se utilizará para firmar el DUA.
[in]pbDACMemoria intermedia de tamaño EFT_EMV_SDA_DAC_LEN que contiene el DAC (código de autenticación de datos) que debe verificarse.
[in]dwSDA_DATALenTamaño del búfer indicado por pbSDA_DATA .
[in]pbSDA_DATABuffer que contiene los SDA (Static Application Data) a firmar de un tamaño especificado en dwSDA_DATALen.
[in,out]pdwSigLenPuntero a un DWORD que contiene el tamaño del búfer apuntado por pbSig.
[out]pbSigTamaño del búfer apuntado por pdwSigLen que recibirá los SSDA (Signed Static Application Data). Se puede pasar NULL para recuperar el tamaño requerido de pbSigque se devolverá en pdwSigLen.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DGenerarDDA_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>

Genera el certificado ICC (Integrated Circuit Card) utilizado en la autenticación DDA (Dynamic Data Authentication).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EFT_EMV_DDA_OP_RSA_SIGN1 RSA + SHA1
[in]szIKNombre de la clave privada del HSM que se utilizará para firmar el certificado.
[in]szPANPAN (Número de cuenta principal).
[in]dwDDA_DATALenTamaño del búfer indicado por pbDDA_DATA.
[in]pbDDA_DATABuffer que contiene los datos del certificado a firmar. Pasa la estructura descrita en las Tablas 10 a 14 del Libro 2 de EMV, sin incluir los campos Recovered Data Header y Trailer.
[in,out]pdwSigLenPuntero a un DWORD que contiene el tamaño del búfer pbSig.
[out]pbSigBuffer que recibirá el certificado firmado. Se puede pasar NULL para recuperar el tamaño requerido de pbSigque se devolverá en pdwSigLen.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DGenerarICCMK()

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>

Genera claves maestras ICC (Integrated Circuit Card).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EFT_EMV_GEN_ICC_MK_OP_CBC_EXP Funcionamiento en modo CBC
EFT_EMV_GEN_ICC_MK_OP_ECB_EXP Funcionamiento en modo BCE
[in]szIKNombre de la clave dentro del HSM que se utilizará para generar la clave maestra.
[in]szKeKNombre de la clave de transporte utilizada para cifrar la clave generada.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[in,out]pdwEnvelopeLenPuntero a un DWORD que contiene el tamaño del búfer apuntado por pbSobre.
[out]pbEnvelopeBuffer que recibirá el sobre con la clave generada. Se puede pasar NULL para recuperar el tamaño requerido de pbSigque se devolverá en pdwEnvelopeLen.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DGenerarEMV_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
La API DGenerateEMV_MAC () es funcional y sintácticamente equivalente a la API DGenerateEMV_HMAC. La referencia a DGenerateEMV_HMAC permanece activa en la biblioteca (internamente se redirige a DGenerateEMV_MAC() ). Las aplicaciones que llaman a DGenerateEMV_HMAC no necesitan ser modificadas.

DGenerarEMV_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>

Genera un criptograma estándar EMV o MAC (Message Authentication Code), utilizado en los comandos EMV.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bOPTipo de operación (relleno, derivación de clave, etc.) que se aplicará en la construcción del criptograma (MAC) según la tabla siguiente.
Valor Significado
EMV_OP_ISO_9797_1_M2_COMMON Norma ISO 9797-1 Método de acolchado 2 COMÚN.
EMV_OP_ISO_9797_1_M2_MCHIP Norma ISO 9797-1 Método de relleno 2 MCHIP.
EMV_OP_ISO_9797_1_M2_VISA ISO 9797-1 Método de relleno 2 Norma VISA.
EMV_OP_ISO_9797_1_M2_VISA_CRYPTOGRAM ISO 9797-1 Método de relleno 2 VISA_CRYPTOGRAM.
EMV_OP_ISO_9797_1_M2_RAW ISO 9797-1 Padding Method 2 Algorithm 3.NULL debe pasarse en los parámetros szPAN, pbSEQ y pbNONCE.
EMV_OP_ISO_9797_1_M1_VISA_CRYPTOGRAM_PADD_V10 ISO 9797-1 Método de relleno 1 Norma VISA.
EMV_OP_ISO_9797_1_M2_ELO Norma ISO 9797-1 Método de acolchado 2 COMÚN.
EMV_OP_ISO_9797_1_M2_JCB ISO 9797-1 Padding Method 2. Tal como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB ISO 9797-1 Método de relleno 1. Como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB_CRYPTOGRAM ISO 9797-1 Método de relleno 1. Como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szIKNombre de la clave dentro del HSM que se utilizará para generar la MAC.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN). Debe estar en formato ASCII.
[in]pbNONCEBuffer que contiene el material diversificador utilizado para generar el MAC, debe tener un tamaño de DES_BLOQUE.
Tipo de operación según el parámetro bOP NONCE
EMV_OP_ISO_9797_1_M2_COMMON ATC (2 bytes)||00|00|00|00|00|00|00
EMV_OP_ISO_9797_1_M2_MCHIP CVN10 y CVN11:
ATC (2 bytes)||00||UC(Número imprevisible)

CVN14 y CVN15:
ATC (2 bytes)|||00|00|00|||00||00
EMV_OP_ISO_9797_1_M2_VISA 00||00||00||||ATC (2 bytes)
EMV_OP_ISO_9797_1_M2_VISA_CRYPTOGRAM 00||00||00||00||00||00||00||00
o
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
o
NULL
EMV_OP_ISO_9797_1_M2_ELO ATC (2 bytes)||00|00|00|00|00|00|00
EMV_OP_ISO_9797_1_M2_JCB 00||00||00||||ATC (2 bytes)
EMV_OP_ISO_9797_1_M1_JCB 00||00||00||||ATC (2 bytes)
EMV_OP_ISO_9797_1_M1_JCB_CRYPTOGRAM 00||00||00||||ATC (2 bytes)

El CVN (Cryptogram Version Number) determina la versión del criptograma utilizado y depende de las definiciones empresariales. La aplicación debe utilizar el NONCE siguiente a la versión CVN, cuando proceda.
Para más información sobre el CVN que debe utilizarse, consulte al proveedor de su red de tarjetas.

Parámetros
[in]dwDataLenTamaño del búfer indicado por pbData.
[in]pbDataTamaño del búfer especificado por dwDataLen que contiene los datos que se utilizarán para generar la MAC. Tenga en cuenta que el relleno lo realizará el HSM, según el parámetro bOPPor lo tanto, la aplicación de llamada no debe rellenar los datos en pbData.
[out]pbMACBúfer de tamaño DES_BLOCK que contiene la MAC generada.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros 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>

Compruebe el IDN (número dinámico ICC).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szIKNombre de la clave dentro del HSM que se utilizará para verificar el IDN.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[in]pbATCBuffer de tamaño EFT_EMV_IDN_ATC_LEN que contiene el ATC (contador de transacciones de aplicación).
[in]pbUNBuffer de tamaño EFT_EMV_IDN_UN_LEN que contiene el UN (Número Impredecible).
[in]pbIDNMemoria intermedia de tamaño EFT_EMV_IDN_LEN que contiene el IDN (número dinámico ICC).
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DEncriptarEMV()

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>

Cifra los datos en SMC (Mensaje Seguro con Confidencialidad) y genera MACs (Message Authenticatino Code) en SMC/SMI (Mensajería Segura con Confidencialidad/Integridad).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bEncOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EMV_OP_ISO_9797_1_M2_COMMON Norma ISO 9797-1 Método 2 COMÚN.
EMV_OP_ISO_9797_1_M2_MCHIP Norma ISO 9797-1 Método 2 MCHIP.
EMV_OP_ISO_9797_1_M2_VISA Norma ISO 9797-1 Método 2 VISA.
EMV_OP_ISO_9797_1_M2_ELO Norma ISO 9797-1 Método de acolchado 2 COMÚN.
EMV_OP_ISO_9797_1_M2_JCB ISO 9797-1 Padding Method 2. Tal como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szEncIKNombre de la clave dentro del HSM que se utilizará para cifrar los datos.
[in]pbEncNONCEBuffer que contiene el material diversificador utilizado para cifrar los datos, debe tener un tamaño DES_BLOCK.
[in]bMacOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EMV_OP_ISO_9797_1_M2_COMMON Norma ISO 9797-1 Método 2 COMÚN.
EMV_OP_ISO_9797_1_M2_MCHIP Norma ISO 9797-1 Método 2 MCHIP.
EMV_OP_ISO_9797_1_M2_VISA Norma ISO 9797-1 Método 2 VISA.
EMV_OP_ISO_9797_1_M2_ELO Norma ISO 9797-1 Método de acolchado 2 COMÚN.
EMV_OP_ISO_9797_1_M2_JCB ISO 9797-1 Padding Method 2. Tal como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB ISO 9797-1 Método de relleno 1. Como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
EMV_OP_ISO_9797_1_M1_JCB_CRYPTOGRAM ISO 9797-1 Método de relleno 1. Como se describe en JCB IC Card Specification, Version 2.0 - October, 2012.
[in]szMacIKNombre de la clave dentro del HSM que se utilizará para generar la MAC.
[in]pbMacNONCEBuffer que contiene el material diversificador utilizado para generar el MAC, debe tener tamaño DES_BLOCK.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[in]dwDataLenTamaño del búfer indicado por pbData.
[in]pbDataBuffer del tamaño especificado por dwDataLen que contiene los datos que se utilizarán en el cifrado/generación de la MAC.
[in,out]pdwEncDataLenPuntero a un DWORD que contiene el tamaño del búfer apuntado por pbEncData.
[out]pbEncDataBuffer que contendrá los datos encriptados. Se puede pasar NULL para recuperar el tamaño requerido de pdwEncDataLenque se devolverá en pdwEncDataLen.
[out]pbMACTamaño del búfer DES_BLOQUE que contendrá la MAC generada. Puede ser NULL si szMacIK e pbMacNONCE son NULL.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DGenerarEMV_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>

Genera la CSR (solicitud de firma de certificado) del emisor.

Obsoleto
Utilice la API DGenerateEMV_CSREx().
Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EFT_EMV_OP_CSR_VISA Estándar de proceso VISA. El búfer pbCSR contendrá CSR + HASH. HASH de tamaño EFT_EMV_CSR_VISA_HASH_SIZE.
EFT_EMV_OP_CSR_MASTER Estándar de proceso MASTERCARD. El búfer pbCSR contendrá CSR + HASH. HASH de tamaño EFT_EMV_CSR_MASTER_HASH_SIZE.
EFT_EMV_OP_CSR_ELO Estándar de proceso ELO. El búfer pbCSR contendrá el CSR.
[in]szIKNombre de la clave dentro del HSM que se utilizará para generar la CSR (clave de emisor).
[in]pbTrackNumMemoria intermedia de tamaño EFT_EMV_CSR_VISA_TRACK_NUM_LEN que contiene el número de pista.
[in]pbServiceIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_SERVICE_ID_LEN que contiene el ID de servicio.
[in]pbIssuerIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_ISSUER_ID_LEN que contiene el ID de emisor.
[in]pbExpDateBuffer de tamaño EFT_EXP_DATE_LEN que contiene la fecha de caducidad en formato MMYY. Debe estar en formato ASCII.
[in,out]pdwCSRLenPuntero a un DWORD que contiene el tamaño del búfer apuntado por pbCSR.
[out]pbCSRBúfer que contendrá la CSR. Se puede pasar NULL para recuperar el tamaño requerido de pbCSRque se devolverá en pdwCSRLen.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DGenerarEMV_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>

Genera la CSR (solicitud de firma de certificado) del emisor;

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EFT_EMV_OP_CSR_VISA Norma de proceso VISA. El búfer pdbCSR contendrá el CSR y pbHash HASH. pbHash se le debe asignar primero un tamaño EFT_EMV_CSR_VISA_HASH_SIZE.
EFT_EMV_OP_CSR_MASTER estándar del proceso MASTERCARD. El búfer pdbCSR contendrá el CSR y pbHash HASH. pbHash debe asignarse por adelantado con EFT_EMV_CSR_MASTER_HASH_SIZE.
EFT_EMV_OP_CSR_ELO Norma de proceso ELO. El búfer pdbCSR contendrá el CSR. pbHash debe ser NULL y no se devolverá ningún HASH.
EFT_EMV_OP_CSR_JCB Norma de proceso JCB. El tampón pdbCSR contendrá el CSR. pbHash debe ser NULL y no se devolverá ningún HASH. Sigue el estándar JCB CA Interface Guide, 04/01/2014 en la disposición de archivos descrita en la sección 5.1.2.2.
[in]szIKNombre de la clave dentro del HSM que se utilizará para generar la CSR (clave de emisor).
[in]pbTrackNumMemoria intermedia de tamaño EFT_EMV_CSR_VISA_TRACK_NUM_LEN que contiene el número de pista. Si EFT_EMV_OP_CSR_JCB está definido en bOP, este campo debe contener el número de serie de tamaño EFT_EMV_CSR_VISA_TRACK_NUM_LEN.
[in]pbServiceIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_SERVICE_ID_LEN que contiene el ID de servicio.
[in]pbIssuerIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_ISSUER_ID_LEN que contiene el ID de emisor.
[in]pbExpDateBuffer de tamaño EFT_EXP_DATE_LEN que contiene la fecha de caducidad en formato MMYY. Debe estar en formato ASCII.
[out]pdbCSRPuntero a un DBLOB que contendrá el CSR y su tamaño. El miembro pvData debe liberarse con DFree() después de su uso.
[out]pbHashBuffer que contendrá el HASH. Consulte la tabla en bOP para conocer los valores esperados para este parámetro.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros 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>

Genera un segmento de datos para un comando de cambio de PIN (Número de Identificación Personal) desde Bloques PIN. Este comando suele ser una APDU (unidad de datos de protocolo de aplicación) para una tarjeta ISO-7816.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]bOPIdentificador del tipo de derivación de las claves de operación para generar el bloque de salida. Según la tabla siguiente.
Valor Significado
PBC_EMV_PIN_BLOCK_OP_MCHIP Las claves operativas y el bloque de salida se generarán de acuerdo con la "Guía del Emisor M/Chip 4 Versión 1.1, capítulo 6", "Especificaciones de la Aplicación de Tarjeta M/Chip Lite 2.1 para Débito y Crédito, sección: 2.7 Mensajería Segura" y "M/Chip 4 Versión 1.1, Sección 7.2.8".
PBC_EMV_PIN_BLOCK_OP_VISA Las claves operativas y el bloque de salida se generarán de conformidad con "EMV book 2 v4.2, A1.4.1 option A and A1.4.2 option B", "VISA ICC specification 1.4.0 appendix B.4/EMV Book 2 v4.2 A1.3" - para las claves de tarjeta y de sesión respectivamente. "VISA ICC spec 1.4.0, B.3.3 Data Encipherment Calculation, C.11.1 PIN Data Generated Using the Current PIN and C.11.2 PIN Data Generated Without Using the Current PIN", para el bloque.
PBC_EMV_PIN_BLOCK_OP_VISA_CRYPTOGRAM Las claves operativas y el bloque de salida se generarán de conformidad con "EMV book 2 v4.2, A1.4.1 opción A y A1.4.2 opción B" - para las claves de tarjeta y de sesión (la clave de sesión es la misma que la clave ICC). "VISA ICC spec 1.4.0, B.3.3 Data Encipherment Calculation, C.11.1 PIN Data Generated Using the Current PIN and C.11.2 PIN Data Generated Without Using the Current PIN", para el bloque.
PBC_EMV_PIN_BLOCK_OP_ELO Las claves operativas y los bloques de salida se generarán de acuerdo con el Manual de la Tarjeta Chip ELO, Algoritmos Criptográficos CCD, A5, sección Algoritmo de Uso de Claves TDES (Encriptación de Datos de Comandos de Procesamiento de Script en Change PIN script cmd), Algoritmo nº 4.
PBC_EMV_PIN_BLOCK_OP_JCB Las claves operativas y los bloques de salida se generarán de acuerdo con el Manual de Especificación de Tarjetas IC JCB, Versión 2.0 - Octubre, 2012.
[in]pbNONCETampón que contiene el material diversificador, debe tener un tamaño de DES_BLOQUE.
Identificador utilizado en el parámetro bOP NONCE
PBC_EMV_PIN_BLOCK_OP_MCHIP Codificar como se especifica en el manual MCHIP:
ATC (2 bytes) ||00|00|00|00|00|00.
PBC_EMV_PIN_BLOCK_OP_VISA 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|00
PBC_EMV_PIN_BLOCK_OP_JCB 00||00||00||00||||ATC (2 bytes). JCB IC Card Specification, Versión 2.0 - Octubre de 2012.
[in]szTransportKeyIdentificador de la clave de transporte dentro del HSM. Esta clave debe ser del tipo DES o 3DES.
[in]szISSUER_MKIdentificador de la clave "Issuer MK" dentro del HSM. Esta clave debe ser del tipo 3DES 112 bits. Esta clave puede ser la misma que la clave "SMC MK del emisor" en determinados casos.
[in]szISSUER_SMC_MKIdentificador de la clave "Issuer SMC MK" dentro del HSM. Esta clave debe ser del tipo 3DES 112 bits.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN). Debe estar en formato ASCII.
[in]pbOLD_PBBúfer que contiene el bloque PIN con el PIN actual. El búfer debe tener el tamaño DES_BLOCK (8 bytes). Se debe pasar NULL si no se necesita el Bloque PIN con la contraseña actual. Se admiten bloques en formato ISO 0/1/2/3.
[in]pbNEW_PBBúfer que contiene el PIN Block con el nuevo PIN. El búfer debe tener el tamaño de un DES_BLOCK (8 bytes). Se admiten bloques en formato ISO 0/1/2/3.
[out]pbOutBlockBuffer que contendrá el segmento de datos de salida. Se puede utilizar un tamaño máximo de búfer de PBC_EMV_PIN_BLOCK_MAX_OUTPUT, que será suficiente para todos los casos.
[in,out]pdwOutBlockLenPuntero a un DWORD que contiene el tamaño del búfer puesto a disposición en pbOutPinblock. Contendrá el tamaño de los datos escritos en pbOutPinblock en caso de éxito. En caso de fallo, contendrá el tamaño requerido de pbOutPinblock.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
Si se devuelve el error D_ERR_OPERATION_FAILED, puede indicar que:
  1. La clave de transporte está mal;
  2. Los bloques PIN de entrada son desconocidos o no válidos;
  3. Se ha producido un fallo en la derivación de las claves ICC o de sesión;
  4. El tipo de operación no es 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>

DCalcularARPC()

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

#include <dinamo.h>

Calcula un ARPC (Criptograma de Respuesta de Autorización) siguiendo el estándar EMV Book 2 (v4.2, 2008), Sección 8.2.1, Método ARPC 1.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szIssuerMKNombre de la clave del remitente dentro del HSM que se utilizará para generar la MAC.
[in]szPANPAN (Número de cuenta principal).
[in]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[in]pbARQCBúfer de tamaño DES_BLOCK que contiene el ARQC (criptograma de solicitud de autorización).
[in]pbARCBuffer de tamaño 2 (dos bytes) que contiene el ARC (Authorisation Response Code).
[out]pbARPCBuffer de tamaño DES_BLOCK que contendrá el ARPC generado.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
El cálculo del método 2 de ARPC EMV Book 2 (v4.2, 2008), sección 8.2.1, ARPC Method 2 puede realizarse utilizando la función DGenerateEMV_MAC().

DCalcularARPC_Ex()

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

#include <dinamo.h>

Calcula un ARPC (Criptograma de Respuesta de Autorización).

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]dwOpTipo de operación ARPC a ejecutar.
Valor Significado
DN_CALC_ARPC_EMV_4_2_M1_ICC Calcula un ARPC en el estándar EMV Book 2 (v4.2, 2008), Sección 8.2.1, Método ARPC 1 utilizando la clave de emisor dentro del HSM. Utiliza la estructura DN_CALC_ARPC_EMV_METHOD_1 como parámetro de pvInData.
DN_CALC_ARPC_EMV_4_2_M1_SK Calcula un ARPC en el estándar EMV Book 2 (v4.2, 2008), Sección 8.2.1, Método ARPC 1 utilizando la clave de sesión derivada de la clave del emisor dentro del HSM. Utiliza la estructura DN_CALC_ARPC_EMV_METHOD_1 como parámetro de pvInData.
DN_CALC_ARPC_EMV_4_2_M2 Calcula un ARPC en el estándar EMV Book 2 (v4.2, 2008), Sección 8.2.1, Método ARPC 2 utilizando la clave de sesión derivada de la clave del emisor dentro del HSM. Utiliza la estructura DN_CALC_ARPC_EMV_METHOD_2 como parámetro de pvInData.
[in]pvInDataDatos de entrada para calcular el ARPC, como se describe en el parámetro dwOP.
[out]pbARPCBuffer de tamaño DES_BLOCK que contendrá el ARPC generado.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
El cálculo del método 2 del ARPC EMV Book 2 (v4.2, 2008), sección 8.2.1, ARPC Method 2 también puede realizarse utilizando la función 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>

Genera un MAC (Message Authentication Code) según la norma ISO/IEC 9797-1 Método 2. Esta operación se realiza offline en la biblioteca, fuera del HSM.

Parámetros
[in]dwTypeTipo de operación a realizar, según la tabla siguiente.
[in]pbKeyEl búfer que contiene la clave utilizada para generar la MAC debe tener el mismo tamaño que el tipo de clave introducido en dwAlg.
[in]dwAlgTipo de clave utilizada para generar la MAC.
[in]pbMsgBuffer que pasará por el proceso MAC.
[in]dwMsgLenTamaño del búfer pbMsg.
[out]pbMACEl búfer que contiene la MAC generada debe tener un tamaño DES_BLOCK.
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DEFTImportKey()

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

#include <dinamo.h>

Importar una llave por partes en formatos EFT.

Permite importar llaves por partes:

  • DES y 3DES: ZMK (Zone Master Key), también conocida como ZCMK (Zone Control Master Key) en formato VISA;
  • AES: en formato ANSI X9.24.
    Parámetros
    [in]hSessionContexto adquirido a través de la función DOpenSession().
    [in]szKeyIdNombre de la clave que se importará en el HSM.
    [in]nKeyAlgIdAdmite los siguientes algoritmos.
    Valor Significado
    ALG_DES, ALG_3DES_112 o ALG_3DES_168 Importe una clave DES en el formato descrito en VISA Payment Technology Standards Manual, octubre de 2007 Capítulo 7 y Apéndice C. Utilice la estructura EFT_VISA_KEY_PARTS como parámetro pstPiezasClave.
    ALG_AES_128, ALG_AES_192 o ALG_AES_256 Importar una clave AES con el formato ANSI X9.24 (2004), método XOR (KCV descrito en el anexo C). Utilice la estructura EFT_AES_KEY_PARTS_DATA como parámetro pstPiezasClave.
    [in]pstKeyPartsPuntero a una estructura que contiene los datos para reconstruir la clave como se describe en nKeyAlgId.
    [in]dwParamPasa 0. O cualquiera de los valores de abajo.
    Valor Significado
    DN_EFT_AES_KCV_TYPE_CMAC Se utiliza para importar claves AES en formato ANSI X9.24, con KCV de tipo CMAC. De conformidad con los "Requisitos de seguridad de claves" de la PCI.
    Devolución
    0 (CERO) si la función tiene éxito.
    Consulte la sección Códigos de retorno para conocer otros 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 una clave ZPK (Clave PIN de Zona) o ZMK (Clave Maestra de Zona). La exportación se realiza por partes, con sus respectivos valores de verificación, tal y como se describe en el VISA Payment Technology Standards Manual, octubre de 2007.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szKeyIdNombre de la clave que se importará en el HSM.
[out]pnKeyAlgAlgoritmo de la clave a exportada.
[out]pnKeySizeTamaño de la clave exportada.
[out]pstKeyPartsPuntero a una estructura EFT_VISA_KEY_PARTS que contendrá las partes de la clave exportada y sus KCV (Key Check Value).
[in]dwParamSe aceptan las siguientes opciones.
Valor Significado
0 Genera el KCV (Key Check Value) de la clave según se define en ANSI X.9.24 con un tamaño de 3 bytes.
DN_EXP_ZPK_FLAG_FULL_CKS Genera el KCV (Key Check Value) de la clave según se define en ANSI X.9.24 con un tamaño de 8 bytes.
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
Puede utilizarse para exportar claves que sigan la norma de exportación por partes descrita en el Manual de Normas de Tecnología de Pago VISA, octubre de 2007, Capítulo 7 y Apéndice C. Puede utilizarse para claves ZPK (Clave PIN de Zona), ZMK (Clave Maestra de Zona)/ZCMK (Clave Maestra de Control de Zona), por ejemplo.

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 a través de la función DOpenSession().
[in]bTypeTipo de clave que se utilizará para generar el KCV.
Valor Significado
DN_EFT_GET_KCV_TYPE_X9_24 Genera el KCV (Key Check Value) de la clave según se define en ANSI X.9.24 con un tamaño de 3 bytes.
DN_EFT_GET_KCV_TYPE_CMAC Genera el KCV (Key Check Value) de la clave tal y como se define en los requisitos de seguridad del PIN PCI con un tamaño de 3 bytes.
[in]szKeyIdNombre de la clave que se utilizará para generar el KCV.
[out]pbKcvPuntero a un búfer que contendrá el KCV generado. Puede ser NULL para obtener el tamaño del KCV en pdwKcvLen.
[in,out]pdwKcvLenTamaño del búfer pbKcv. Al final de la llamada contendrá el tamaño del KCV generado.
[in]dwReservedReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.

DEFTGenKCVOffline()

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

#include <dinamo.h>

Genera un KCV (Key Check Value) de una clave offline.

Parámetros
[in]dwTypeTipo KCV.
Valor Significado
DN_EFT_GEN_OFFLINE_KCV_TYPE_X9_24 Genera el KCV (Key Check Value) de la clave según se define en ANSI X.9.24 con un tamaño de DN_EFT_KCV_TYPE_X9_24_LEN.
DN_EFT_GEN_OFFLINE_KCV_TYPE_CMAC Genera el KCV (Key Check Value) de la clave tal como se define en los requisitos de seguridad del PIN PCI con un tamaño de DN_EFT_KCV_TYPE_CMAC_LEN.
[in]nAlgIdAlgoritmo de clave. Actualmente sólo se aceptan DES, 3DES y AES.
[in]pbKeyPuntero al búfer que contiene la clave.
[in]dwKeyLenTamaño de la llave.
[out]pbKCVPuntero al búfer que contendrá el KCV generado.
[in,out]pdwKCVLenTamaño del búfer pbKCV. Al final de la llamada contendrá el tamaño del KCV generado.
[in]reservedReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros 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 una clave en formato TR-31 según la norma ASC X9 TR 31-2018.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szKBPKNombre de la clave KBPK (Key Block Protection Key) utilizada para derivar las claves de cifrado y autenticación.
[in]szKeyNombre de la clave que se exportará del HSM.
[in]pvReservedReservado para uso futuro (debe ser NULL).
[in]wUsageIdentificador de uso de clave, como se describe en ASC X9 TR 31-2018 Sección A.5.1 tabla 6. Se aceptan las siguientes opciones.
Valor Significado
EFT_ME_TR31_EXP_USAGE_AUTO Establece el identificador automáticamente. Se utilizan los siguientes valores: EFT_ME_TR31_EXP_USAGE_D0 para clave simétrica y EFT_ME_TR31_EXP_USAGE_D1 para clave asimétrica.
EFT_ME_TR31_EXP_USAGE_B0 BDK Clave de derivación base
EFT_ME_TR31_EXP_USAGE_B1 Clave inicial DUKPT
EFT_ME_TR31_EXP_USAGE_B2 Clave base Clave variante
EFT_ME_TR31_EXP_USAGE_C0 CVK Clave de verificación de la tarjeta
EFT_ME_TR31_EXP_USAGE_D0 Clave simétrica para el cifrado de datos
EFT_ME_TR31_EXP_USAGE_D1 Clave asimétrica para el cifrado de datos
EFT_ME_TR31_EXP_USAGE_D2 Clave de encriptación de datos para la tabla de decimalización
EFT_ME_TR31_EXP_USAGE_E0 EMV/chip Issuer Master Key: Criptogramas de aplicación
EFT_ME_TR31_EXP_USAGE_E1 Clave maestra de emisor EMV/chip: mensajería segura para la confidencialidad
EFT_ME_TR31_EXP_USAGE_E2 Clave maestra del emisor EMV/chip: mensajería segura para la integridad
EFT_ME_TR31_EXP_USAGE_E3 EMV/chip Clave maestra del emisor: Código de autenticación de datos
EFT_ME_TR31_EXP_USAGE_E4 EMV/chip Clave maestra del emisor: Números dinámicos
EFT_ME_TR31_EXP_USAGE_E5 EMV/chip Emisor Llave maestra: Personalización de tarjetas
EFT_ME_TR31_EXP_USAGE_E6 EMV/chip Llave maestra del emisor: Otro
EFT_ME_TR31_EXP_USAGE_I0 Vector de inicialización (IV)
EFT_ME_TR31_EXP_USAGE_K0 Cifrado o envoltura de claves
EFT_ME_TR31_EXP_USAGE_K1 TR-31 Llave de protección del bloque de llaves
EFT_ME_TR31_EXP_USAGE_K2 TR-34 Clave asimétrica
EFT_ME_TR31_EXP_USAGE_K3 Clave asimétrica para acuerdo de claves/envuelta de claves
EFT_ME_TR31_EXP_USAGE_M0 ISO 16609 MAC algoritmo 1 (utilizando TDEA)
EFT_ME_TR31_EXP_USAGE_M1 ISO 9797-1 Algoritmo MAC 1
EFT_ME_TR31_EXP_USAGE_M2 ISO 9797-1 Algoritmo MAC 2
EFT_ME_TR31_EXP_USAGE_M3 ISO 9797-1 Algoritmo MAC 3
EFT_ME_TR31_EXP_USAGE_M4 ISO 9797-1 Algoritmo MAC 4
EFT_ME_TR31_EXP_USAGE_M5 ISO 9797-1:1999 Algoritmo MAC 5
EFT_ME_TR31_EXP_USAGE_M6 ISO 9797-1:2011 Algoritmo MAC 5/CMAC
EFT_ME_TR31_EXP_USAGE_M7 HMAC
EFT_ME_TR31_EXP_USAGE_M8 ISO 9797-1:2011 Algoritmo MAC 6
EFT_ME_TR31_EXP_USAGE_P0 Cifrado de PIN
EFT_ME_TR31_EXP_USAGE_S0 Par de claves asimétricas para la firma digital
EFT_ME_TR31_EXP_USAGE_S1 Par de claves asimétricas, clave CA
EFT_ME_TR31_EXP_USAGE_S2 Par de claves asimétricas, clave no X9.24
EFT_ME_TR31_EXP_USAGE_V0 Verificación PIN, KPV, otro algoritmo
EFT_ME_TR31_EXP_USAGE_V1 Verificación del PIN, IBM 3624
EFT_ME_TR31_EXP_USAGE_V2 Verificación del PIN, VISA PVV
EFT_ME_TR31_EXP_USAGE_V3 Verificación del PIN, X9.132 algoritmo 1
EFT_ME_TR31_EXP_USAGE_V4 Verificación del PIN, X9.132 algoritmo 2
[in]bModeIdentificador del modo de uso de la clave, como se describe en ASC X9 TR 31-2018 Sección A.5.3 tabla 8. Se aceptan las siguientes opciones.
Valor Significado
EFT_ME_TR31_EXP_MODE_AUTO Establece automáticamente el identificador del modo de uso. Se utiliza el siguiente valor EFT_ME_TR31_EXP_MODE_N.
EFT_ME_TR31_EXP_MODE_B Cifrado y descifrado / Envolver y desenvolver
EFT_ME_TR31_EXP_MODE_C Generación y verificación
EFT_ME_TR31_EXP_MODE_D Sólo desencriptación / desenvoltura
EFT_ME_TR31_EXP_MODE_E Cifrado / Sólo envoltura
EFT_ME_TR31_EXP_MODE_G Sólo generación
EFT_ME_TR31_EXP_MODE_N Sin restricciones especiales (excepto las definidas por el identificador de uso de la clave)
EFT_ME_TR31_EXP_MODE_S Sólo firma
EFT_ME_TR31_EXP_MODE_T Firma y descifrado
EFT_ME_TR31_EXP_MODE_V Sólo verificación
EFT_ME_TR31_EXP_MODE_X Clave utilizada para derivar otra(s) clave(s)
EFT_ME_TR31_EXP_MODE_Y Clave utilizada para crear variantes de clave
[in]bExportIdentificador clave de exportabilidad, como se describe en ASC X9 TR 31-2018 Sección A.5.5 tabla 10. Se aceptan las siguientes opciones.
Valor Significado
EFT_ME_TR31_EXP_AUTO Define automáticamente el identificador de exportabilidad. Se utiliza el siguiente valor EFT_ME_TR31_EXP_X9_24.
EFT_ME_TR31_EXP_X9_24 Exportable con una KEK (clave de cifrado) en un formato que cumpla lo definido en los requisitos de X9.24 Partes 1 ó 2.
EFT_ME_TR31_EXP_NON_EXPORTABLE No exportable por el destinatario del bloque de claves ni por el lugar de almacenamiento. No impide la exportación de claves derivadas de una clave no exportable.
EFT_ME_TR31_EXP_KEK_EXPORTABLE Sensible, Exportable bajo una KEK (Clave de Cifrado) en un formato no necesariamente conforme con los requisitos de X9.24 Partes 1 ó 2.
[out]pbOutBlockBuffer que contendrá el bloque de claves.
[in,out]pdwOutBlockLenPuntero al tamaño del búfer pasado pbOutBlock. Tras la devolución de la API contendrá el tamaño real del bloque de teclas almacenado en pbOutBlock. Si el tamaño no es suficiente, esta variable contendrá el tamaño requerido de pbOutBlock.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
Esta API exporta una clave utilizando los métodos para generar bloque_clave abajo.
Algoritmo KBPK Método de exportación
3DES 5.3.2.1 Método vinculante de derivación de claves - TDEA
AES 5.3.2.3 Método de vinculación de bloques de claves - AES
Ejemplos
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>

Importe una clave en formato TR-31 según la norma ASC X9 TR 31-2018.

Parámetros
[in]hSessionContexto adquirido a través de la función DOpenSession().
[in]szKBPKNombre de la clave KBPK (Key Block Protection Key) utilizada para derivar las claves de cifrado y autenticación.
[in]szKeyNombre de la clave que se importará en el HSM.
[in]dwKeyAttributesParámetros adicionales de la clave. Consulte las opciones de la función DGenerateKey().
[in]pbKeyBlockBuffer que contiene el bloque de claves.
[in]dwKeyBlockLenTamaño del búfer anterior pbKeyBlock.
[in]dwParamReservado para uso futuro (debe ser 0).
Devolución
0 (CERO) si la función tiene éxito.
Consulte la sección Códigos de retorno para conocer otros valores.
Notas
Esta API importa claves protegidas por los métodos de generación de la aplicación bloque_clave.
Algoritmo KBPK Método
3DES 5.3.2.1 Método vinculante de derivación de claves - TDEA
AES 5.3.2.3 Método de vinculación de bloques de claves - AES
Ejemplos
export_import_tr31.c.