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

Descripción detallada

Operaciones de transferencia electrónica de fondos.

EFT

Las API del módulo EFT(Electronic Funds Transfer) están destinadas a las operaciones de autenticación de usuarios y verificación de identidad en las transacciones de Visa y Mastercard.

Por lo general, la identidad del usuario de la tarjeta puede verificarse de dos maneras:

  1. firma manuscrita, en comparación con una tarjeta de firma en poder del emisor de la tarjeta;
  2. mediante un PIN (número de identificación personal) introducido por el usuario; la verificación del PIN puede hacerse en línea, con validación del emisor de la tarjeta, o fuera de línea, utilizando una tarjeta con chip.

Las normas adoptadas se ajustan al Manual de Normas de Tecnología de Pagos de Visa (octubre de 2007).

En términos generales, el proceso de transferencia de fondos con tarjeta sigue el flujo de la figura siguiente. En el proceso intervienen varios actores. El titular de la tarjeta la presenta al minorista (minorista/comerciante), la autenticidad del titular de la tarjeta puede verificarse mediante un PIN, que el titular introduce en la estación del minorista (por ejemplo, un terminal de punto de venta). A partir de ahí, el PIN se encripta (se genera un Bloque PIN) y los datos de la transacción se envían a un proveedor de servicios de pago electrónico contratado por el comerciante (Adquirente), que a su vez envía los datos a la correspondiente red de tarjetas, según la marca de tarjeta utilizada por el titular, y de ahí se envían al emisor de la tarjeta, que dispone de los datos de identificación, crédito y otros sobre el titular y mantiene un contrato con el titular para el uso del servicio. Tras analizar los datos de la transacción, en términos de registro, crédito y autenticación, entre otros, el emisor puede autorizar o rechazar la transacción, y este mensaje de respuesta viaja en sentido contrario.

--- título: Proceso genérico de transferencia electrónica de fondos --- diagrama secuencial autonúmero participante Transportista participante Tienda participante Red participante Bandera participante Banco Titular ->> Tienda: Tarjeta/PIN/CVV activar Tienda Tienda ->> Red: Datos
Transacción desactivar Tienda activar Red Red ->> Bandera: Datos
Transacción desactivar Red activar Bandera Flag ->> Banco: Datos
Transacción desactivar Flag activar Banco Banco ->> Bandera: $ desactivar Banco activar Bandera Bandera ->> Red: $ desactivar Bandera activar Red Red ->> Tienda: $ desactivar Red activar Tienda Tienda ->> Transportista: Mercancías/
Servicios desactivar Tienda Banco -->> Portador: Débito Titular -->> Banco: $

Desde el punto de vista de las claves de cifrado utilizadas en el proceso, éste se muestra en la figura siguiente. Cada actor conserva sus propias claves, y cada vez que un mensaje cifrado debe pasar de un actor a otro, hay que traducir el cifrado, es decir, utilizar la clave correspondiente del actor que debe descifrar el mensaje.

--- título: Claves criptográficas en la transferencia de fondos --- secuenciaDiagrama participante Portador participante Almacén participante Red participante Bandera participante Banco destruir Titular de la tarjeta Titular ->> Tienda: Tarjeta/PIN/CVV destruir Tienda Tienda ->> Red: Bloqueo PIN Nota sobre la red: HSM:
PIN Translation Nota sobre la red: ZCMK
AWK
... destruir Red Red ->> Bandera: PIN Block Nota sobre el indicador: HSM:
PIN Translation Nota sobre el indicador: ZCMK
AWK
IWK
... destruir Flag Bandera ->> Banco: Bloqueo PIN activar Banco Nota sobre banco: HSM:
PIN Block Verification
CVV Verification Nota sobre Banco: ZCMK
IWK
CVK
PVK
... desactivar Banco

Pueden utilizarse variaciones o simplificaciones del esquema anterior, por ejemplo, cuando una misma entidad desempeña más de una función, o existe una comunicación directa del adquirente con el emisor, como puede ocurrir en determinadas operaciones de débito.

Observación
  1. Cada clave criptográfica debe dedicarse a una sola aplicación, según determine el manual de Visa.
  2. Los tamaños introducidos para los parámetros se refieren a los datos; la aplicación debe asegurarse de que el búfer pasado tiene espacio suficiente para los datos más el carácter terminador.
  3. El módulo EFT funciona con tamaños de PIN de 4 (MIN_EFT_PIN_LEN) a 12 (MAX_EFT_PIN_LEN) dígitos.

Acerca de la compatibilidad con los algoritmos del protocolo 3-D Secure:

Dinamo HSM implementa los algoritmos criptográficos que soportan el protocolo 3-D Secure, desarrollado por Visa. Los servicios Verified by Visa de Visa y Secure Code de Mastercard son ofrecidos por las marcas basadas en este protocolo. El HSM implementa los algoritmos criptográficos de verificación de tarjetas que soportan el protocolo y los servicios, permitiendo al usuario del HSM generar y verificar los códigos, CVC2 (Card Verification Code 2) y HMAC SHA1 en el caso de Mastercard (Secure Payment Application Algorithm) y CAVV (Cardholder Authentication Verification Value, CVV2 con método ATN) en el caso de Visa.

El HSM es compatible con los mecanismos de autenticación CAP (Visa) y DPA (Mastercard).

El HSM ofrece soporte para la carga/transporte remoto de claves ATM mediante funcionalidades criptográficas basadas en funciones RSA y X.509.

La aplicación del HSM cumple las normas definidas en la documentación que se indica a continuación:

EMVCo

Visa

Mastercard

Enlace

JCB

Otros

Mecanismos de la CVV

Existen tres formas de generar y verificar el CVV(valor de verificación de la tarjeta) en el HSM:

  1. Valor de verificación de la tarjeta (CVV), para transacciones con tarjetas de banda magnética;
  2. Card Verification Value 2 (CVV 2); para transacciones sin presencia física de la tarjeta (por teléfono, correo o Internet, por ejemplo);
  3. Alternate Card Verification Value (iCVV), para transacciones con tarjeta chip; El mecanismo de cálculo es el mismo en las tres formas, y la diferencia radica en la forma en que la aplicación introduce los datos.

La clave utilizada para la generación del CVV y los cálculos de verificación se denomina CVK(Card Verification Key). Esta clave es interna al HSM, la aplicación sólo tiene que introducir su nombre de clave (id). Físicamente, es una clave 3DES de 112 bits, que corresponde a dos claves DES de 56 bits.

La figura siguiente ilustra los diagramas de generación y comprobación de CVV, iCVV y CVV2.

--- title: Geração de CVV / iCVV / CVV2 --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TB PAN[PAN] Service[Código de serviço / 99/ 000] Data[Data de expiração] CVKid[CVK id] H[\"HSM: CVK (3DES 112)"/] cvv((CVV)) icvv((iCVV)) cvv2((CVV 2)) PAN --> H Service --> H Data --> H CVKid --> H H --> cvv H --> icvv H --> cvv2

Mecanismos PIN

El HSM funciona generando PINs (Números de Identificación Personal) mediante un mecanismo de derivación, basado en una clave interna llamada PGK(Clave de Generación de PIN). Esta forma de generación presenta varias ventajas, especialmente en comparación con el método de generación de PINs con valores aleatorios, ya que no requiere el uso de una base de datos para su validación (con la probable exposición de datos sensibles) y además mantiene tanto el proceso de generación como el de validación más seguros, al realizarse internamente al HSM.

El estándar utilizado para generar el PIN por el HSM es el IBM 3624, que utiliza compensaciones para que el PIN pueda ser modificado por el usuario o el emisor de la tarjeta. Para mitigar los ataques de decimalización y verificación, el HSM utiliza una tabla de conversión interna que no se expone a la aplicación. Como factor de seguridad adicional, se utiliza una clave 3DES de 168 bits en lugar de una clave 3DES de 112 bits; no hay interferencias en el funcionamiento del algoritmo, ya que las claves DES y 3DES utilizan bloques de entrada y salida del mismo tamaño.

--- title: Geração de PIN por derivação --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TB PAN[PAN] InPIN[InPIN] Offset[offset] PGKid[PGK id] H[\"HSM: CVK (3DES 112)"/] r((PIN)) PAN --> H InPIN --> H Offset --> H PGKid --> H H --> r

Se definen tres modos de generación de PIN por derivación:

  1. a partir del PAN(Personal Account Number), el PIN de entrada (inPIN) y el PGK;
  2. a partir de un PIN de entrada y el PGK, el uso de un offset permite al usuario cambiar el PIN;
  3. del PAN, el PGK y un PIN de entrada, con el uso de un offset permite el cambio automático del PIN;

No hay gestión de reglas de negocio para PINs generados dentro del HSM; esta función debe ser llevada a cabo por la aplicación llamante.

Los algoritmos de generación mediante el estándar IBM 3624 se muestran en los siguientes diagramas.

--- title: Algoritmo de Geração de PIN IBM 3624 --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TD Dado{{Dado de Validação}} PGK{{PGK}} Op3DES[\Operação 3DES/] Troca[Troca de dígito] Ajuste[Ajuste de tamanho] Pin((PIN)) Dado --> Op3DES PGK --> Op3DES Op3DES -- Tabela de decimalização interna --> Troca Troca -- PIN Intermediário --> Ajuste Ajuste --> Pin

Para que el usuario(titular de la tarjeta) pueda seleccionar su propio PIN, en el método IBM 3624 se utiliza un desplazamiento del PIN, de modo que se requieren dos nuevas entradas, el PIN establecido por el usuario y una comprobación de 4 bits de longitud. La operación de desplazamiento se realiza después de los pasos del algoritmo IBM 3624 mostrados anteriormente. Esto permite que el proceso interno del HSM valide el PIN, aunque el usuario defina un PIN diferente al generado inicialmente por el HSM.

--- title: Algoritmo de Geração de PIN IBM 3624 com offset --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TD Dado{{Dado de Validação}} PGK{{PGK}} Op3DES[\Operação 3DES/] Troca[Troca de dígito] Ajuste[Ajuste de tamanho] Sub[\"Subtração em módulo 10
(InPin -PIN)"/] OpOff[\Operação de offset no PIN/] Pin((PIN)) InPin{{"InPin
(PIN gerado pelo usuário)"}} Of{{"dado de offset
(4-bit)"}} Dado --> Op3DES PGK --> Op3DES Op3DES -- Tabela de decimalização interna --> Troca Troca -- PIN Intermediário --> Ajuste Ajuste --> Sub Sub --> OpOff OpOff --> Pin InPin --> Sub Of --> OpOff

Las operaciones PIN BlockTranslate funcionan con dos claves, una de origen y otra de destino; existe una fase intermedia para compatibilizar, si es posible, el formato de entrada con el de salida. Hay determinados formatos de bloque que no son interoperables, ya sea porque no hay datos para la conversión o por una restricción de la norma.

El modo de traducción por defecto del HSM consiste en traducir el bloque de entrada al formato ISO PIN Block Format 0. En el modo de traducción automática, la conversión se realiza de forma opaca, convirtiendo del bloque con la clave de origen al bloque con la clave de destino, sin analizar el formato ni el contenido del bloque.

--- title: Operação de PIN Translate --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TD blockin{{Bloco de entrada}} keyin{{Chave de entrada}} OpDES1[\DES/] Prep[Preparação] OpDES2[\DES/] keyout{{Chave de destino}} blockout{{Bloco da saída}} blockin --> OpDES1 keyin --> OpDES1 OpDES1 --> Prep Prep --> OpDES2 keyout --> OpDES2 OpDES2 --> blockout

Cuando se verifica un Bloque PIN, tienen lugar dos operaciones clave: primero se descifra el Bloque PIN con la PTK(Clave de Transporte PIN), se extrae el PIN del Bloque PIN descifrado, y luego se verifica el PIN utilizando la PGK(Clave de Generación PIN, la misma clave utilizada para generar el PIN original). Esta verificación puede realizarse con o sin el uso de un desplazamiento; este desplazamiento del PIN no forma parte del Bloque PIN y no está cifrado por la PTK. El formato de bloque PIN esperado es el formato ISO PIN Block Format 0 (equivalente a ANSI PIN Block Format 0 y VISA PIN Block Format 1).

--- title: Operação de Verificação de PIN Block --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TD pinblock{{PIN Block}} ptk{{PTK}} OpDES1[\DES/] Prep[PIN, PAN, ...] pin[PIN] pgk{{PGK}} off{{offset}} OpDES2[\3DES/] r((Result)) ptk --> OpDES1 pinblock --> OpDES1 OpDES1 --> Prep Prep --> pin pin --> OpDES2 pgk --> OpDES2 off --> OpDES2 OpDES2 --> r

Mecanismos de DUKPT

DUKPT(Derived Unique Key Per Transaction) es una forma de utilizar claves únicas por transacción, derivadas de una clave fija, y este proceso se define en ANSI X9.24 parte 1.

El KSN(Key Serial Number) es el identificador de una clave de transacción y se divide en partes como: KSI(Key Set ID), TRSM(Tamper Resistant Security Module), POS(Point of Sale) identificador también conocido como DID(Device ID) y el CTR(Transaction Counter).

--- título: DUKPT key generation --- secuenciaDiagrama participante hsm como HSM participant pos como dispositivo PoS/ATM
Nota sobre hsm: BDK activar hsm hsm ->> hsm: IPEK (Id de dispositivo) desactivar hsm hsm ->> pos: IPEK Nota sobre pos: IPEK

HSM utiliza las partes de KSN separadas en KSI y DID + CTR, cada una de las cuales contiene 5 bytes.

Los pasos del proceso de utilización de DUKPT son, en cada extremo de la comunicación:

En el punto de venta:

  1. Inicializado previamente con un IPEK derivado de un BDK.
  2. Genera (o recupera de una tabla de claves futuras) la clave futura utilizando el DID y el CTR.
  3. Cifra el bloque requerido (por ejemplo, el bloque PIN).
  4. Envía KSN + bloque cifrado. KSN se compone de TRMS (o DID), KSI y CTR.
  5. Aumenta el CTR interno.

En HSM:

  1. Recibe KSN + bloque cifrado.
  2. Selecciona la BDK adecuada en función del KSN recibido. El KSN se compone de TRMS (o DID), KSI y CTR.
  3. Genera el IPEK basándose en el BDK y el KSN seleccionados.
  4. Utiliza el IPEK, el DID y el CTR contenidos en el KSN para generar la clave de sesión.
  5. Descifra el bloque y realiza el procesamiento necesario.
  6. El TPV tiene una IPEK(Clave Inicial de Cifrado de Clavijas) derivada de una BDK(Clave Base de Derivación). Esta BDK se almacena dentro del HSM y se utiliza en la regeneración de la IPEK del TPV correspondiente y, a continuación, esta IPEK se utiliza en la derivación de las claves de transacción únicas de este TPV.

--- título: DUKPT comunicación entre TPV/ATM y HSM --- diagrama secuencial participante pos como dispositivo POS/ATM
participante hsm como HSM Nota sobre pos: IPEK activar pos pos ->> pos: KSI,CTR pos ->> pos: Clave de sesión pos ->> pos: Texto sin formato > bloque cifrado desactivar pos pos ->> hsm: cipher block
TRSM (Device Id)
KSI
CTR activar hsm pos sobre hsm: BDK hsm ->> hsm: IPEK (Id de dispositivo) hsm ->> hsm: KSI,CTR hsm ->> hsm: Clave de sesión hsm ->> hsm: bloque de cifrado > texto en claro desactivar hsm

Envoltura de llaves TR-31

Se trata de un proceso de envoltura/_desenvoltura_ con protección de la confidencialidad y la integridad de las claves y los datos asociados, definido en el documento ASC X9 TR 31-2018.

KBPK(Key Block Protection Key) es la clave de derivación utilizada para derivar las claves de cifrado y autenticación. Esta clave sólo se utiliza para la derivación. También se conoce como KWK (Key Wrapping Key). Se almacena en el HSM.

KBEK(Key Block Encryption Key) es la clave derivada de KBPK y utilizada únicamente para el cifrado de bloque de claves. Se genera con cada operación de envoltura/desenvoltura y no se almacena de forma persistente en el HSM.

KBAK(Key Block Authentication Key) es la clave derivada de KBPK y utilizada únicamente para calcular la MAC de la clave klock. Se genera con cada operación de envoltura/desenvoltura y no se almacena de forma persistente en el HSM.

KDID(Key Derivation Input Data) son los datos utilizados para derivar las claves KBEK y KBAK. Contiene datos como: contador, indicador de uso de clave, indicador de algoritmo y tamaño. Varía en función del método de derivación utilizado, la clave que debe derivarse y otros parámetros.

La derivación de las claves KBEK y KBAK utiliza CMAC con los datos de entrada de derivación de claves (específicos de cada clave derivada) y la clave KBPK como entrada.

--- title: Processo de derivação KBEK e KBAK --- %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% flowchart TD kbekin("Key derivation
input data
KBEK") kbakin("Key derivation
input data
KBAK") cmac1([CMAC]) kbpk(KBPK) cmac2([CMAC]) kbek("Key Block
Encryption Key") kbak("Key Block
Authentication Key") kbekin --> cmac1 kbakin --> cmac2 cmac1 --> kbek cmac2 --> kbpk cmac2 --> kbak cmac1 --> kbpk

El bloque Clave contiene los datos de la clave exportada. Este bloque se divide en 3 partes:

  1. KBH(Key Block Header) contiene información sobre la clave y el bloque de claves.
  1. Los datos confidenciales que se enviarán/guardarán. Se encriptan con la clave KBEK. Los datos de entrada para el cifrado son: el tamaño de la clave, la clave y el relleno.
  1. La MAC que conecta el KBH y el bloque de claves cifrado. Se genera utilizando la clave KBAK. Los datos de entrada para la operación MAC son: el KBH, y los datos de entrada para el cifrado.

%%{init: { 'theme': 'dark' } }%% timeline title Processo de Geração do Key Block section KBH section Bloco Cifrado Inputs#58; : tamanho da chave : chave KBEK : padding section MAC Inputs#58; : KBH : tamanho da chave : chave KBAK : padding

Definiciones

Operaciones de transferencia electrónica de fondos. Más...

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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]szKeyIdNombre de la clave a exportar.
[fuera]pvKeyPartsPuntero a una estructura EFT_AES_KEY_PARTS que contendrá los datos para reconstruir la clave.
[en]dwReservadoReservado 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 hSesión,
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 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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szSrcPEKIdentificador de la clave de descifrado dentro del HSM.
[en]szDstPEKIdentificador de la clave de cifrado dentro del HSM.
[en]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.
[en]szPANPAN (Número de cuenta principal).
[en]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) .
[fuera]pbOutPinBlockBúfer que contendrá el PIN Block saliente. El búfer debe tener el tamaño de un PIN Block, DES_BLOCK (8 bytes).
[en]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 hSesión,
char * szKeyId,
char * szPAN,
char * szFechaExpiración,
char * szCódigoServicio,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]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 más pequeño debe completarse por la izquierda con ceros, y cuando es más grande sólo deben utilizarse los 16 dígitos del extremo derecho.
[en]szFechaExpiraciónFecha 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 equivalente decimal BCD. 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.
[en]szCódigoServicioCó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.
[fuera]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.
[en]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 hSesión,
char * szKeyId,
char * szPAN,
char * szFechaExpiración,
char * szCódigoServicio,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]szPANPAN (Número de cuenta principal). Longitud de 12 a 19 caracteres.
Consulte más detalles sobre este campo en la API DGenerateCVV().
[en]szFechaExpiraciónFecha 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().
[en]szCódigoServicioCó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.
[en]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.
[en]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 hSesión,
char * szPGK,
char * szPAN,
DWORD dwOperación,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szPGKIdentificador de clave dentro del HSM.
[en]szPANPAN (Número de cuenta principal).
[en]dwOperaciónTipo 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.
[en]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.
[en]szInPinPIN de entrada. El búfer debe estar entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[fuera]szOffsetBúfer que contiene la cadena de desplazamiento. El búfer debe tener un tamaño comprendido entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[fuera]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.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szPTKIdentificador de la clave de descifrado del "Bloque PIN" dentro del HSM. Es la clave de transporte del PIN.
[en]szPGKIdentificador de la clave que se utilizará para la verificación del PIN en el HSM. Es la clave de generación del PIN.
[en]szPANPAN (Número de cuenta principal).
[en]szOffsetDesplazamiento del PIN. El búfer debe estar entre MIN_EFT_PIN_LEN + 1 y MAX_EFT_PIN_LEN + 1.
[en]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).
[en]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 * pstPiezasClave,
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
[en]nKeyAlgIdAlgoritmo de la clave a verificar.
[en]pstPiezasClavePuntero 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.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]pbKSIBuffer de tamaño MIN_KSI_LEN que contiene el KSI (primeros 05 bytes del KSN).
[en]pbDID_CTRBuffer de tamaño MIN_CTR_LEN que contiene el DID y el CTR (últimos 05 bytes del KSN).
[fuera]szDUKPTBuffer de tamaño MAX_OBJ_ID que contendrá el nombre de la clave DKUPT generada a partir de los parámetros introducidos.
[en]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 del BDK a partir de un KSI (Key Serial Identification).

Parámetros
[en]pbKSIBuffer de tamaño MIN_KSI_LEN que contiene el KSI.
[fuera]szBDKNameBuffer de tamaño MAX_OBJ_ID que contendrá el nombre de la clave BDK generada a partir del KSI introducido en pbKSI.
[en]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
[en]pbKSIBuffer de tamaño MIN_KSI_LEN que contiene el KSI (Key Serial Identification).
[en]pbDID_CTRBuffer de tamaño MIN_CTR_LEN que contiene el CTR (ID de dispositivo y contador de transacciones).
[fuera]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.
[en]dwParamReservado para uso futuro (debe ser 0).
Devolución
No devuelve ningún valor.

DGenerarPVV()

int AAP_API DGeneratePVV ( HSESSIONCTX hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szPGKIdentificador de clave dentro del HSM.
[en]bPVKIIdentificador de clave que va de EFT_MIN_PVKI a EFT_MAX_PVKI.
[en]szPANPAN (Número de cuenta principal).
[en]szPINPIN (Número de Identificación Personal).
[fuera]szPVVBuffer que contiene la cadena PVV generada. Debe tener un tamaño mínimo de EFT_PVV_LEN + 1 (terminador cero).
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szIMKDACIdentificador de clave dentro del HSM.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[fuera]pbDACMemoria intermedia de tamaño EFT_EMV_SDA_DAC_LEN que contiene el DAC (código de autenticación de datos) que debe verificarse.
[en]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 hSesión,
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 el IMKDAC (Issuer Master Key) utilizados en el DAC.

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szIMKDACIdentificador de clave dentro del HSM.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[en]pbDACMemoria intermedia de tamaño EFT_EMV_SDA_DAC_LEN que contiene el DAC (código de autenticación de datos) que debe verificarse.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szIKNombre de la clave privada dentro del HSM que se utilizará para firmar el DUA.
[en]pbDACMemoria intermedia de tamaño EFT_EMV_SDA_DAC_LEN que contiene el DAC (código de autenticación de datos) que debe verificarse.
[en]dwSDA_DATALenTamaño del búfer indicado por pbSDA_DATA .
[en]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.
[fuera]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.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]bOPTipo de operación que debe aplicarse según la tabla siguiente.
Valor Significado
EFT_EMV_DDA_OP_RSA_SIGN1 RSA + SHA1
[en]szIKNombre de la clave privada del HSM que se utilizará para firmar el certificado.
[en]szPANPAN (Número de cuenta principal).
[en]dwDDA_DATALenTamaño del búfer indicado por pbDDA_DATA.
[en]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 buffer pbSig.
[fuera]pbSigBuffer que recibirá el certificado firmado. Se puede pasar NULL para recuperar el tamaño requerido de pbSigque se devolverá en pdwSigLen.
[en]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 hSesión,
BYTE bOP,
char * szIK,
char * szKeK,
char * szPAN,
BYTE * pbSEQ,
DWORD * pdwEnvelopeLen,
BYTE * pbSobre,
DWORD dwParam )

#include <dinamo.h>

Genera claves maestras ICC (Integrated Circuit Card).

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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
[en]szIKNombre de la clave dentro del HSM que se utilizará para generar la clave maestra.
[en]szKeKNombre de la clave de transporte utilizada para cifrar la clave generada.
[en]szPANPAN (Número de cuenta principal).
[en]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.
[fuera]pbSobreBuffer que recibirá el sobre con la clave generada. Se puede pasar NULL para recuperar el tamaño requerido de pbSigque se devolverá en pdwEnvelopeLen.
[en]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 hSesión,
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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]szIKNombre de la clave dentro del HSM que se utilizará para generar la MAC.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN). Debe estar en formato ASCII.
[en]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
[en]dwDataLenTamaño del búfer indicado por pbData.
[en]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.
[fuera]pbMACBúfer de tamaño DES_BLOCK que contiene la MAC generada.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szIKNombre de la clave dentro del HSM que se utilizará para verificar el IDN.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[en]pbATCBuffer de tamaño EFT_EMV_IDN_ATC_LEN que contiene el ATC (contador de transacciones de aplicación).
[en]pbUNBuffer de tamaño EFT_EMV_IDN_UN_LEN que contiene el UN (Número Impredecible).
[en]pbIDNMemoria intermedia de tamaño EFT_EMV_IDN_LEN que contiene el IDN (número dinámico ICC).
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]szEncIKNombre de la clave dentro del HSM que se utilizará para cifrar los datos.
[en]pbEncNONCEBuffer que contiene el material diversificador utilizado para cifrar los datos, debe tener un tamaño DES_BLOCK.
[en]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.
[en]szMacIKNombre de la clave dentro del HSM que se utilizará para generar la MAC.
[en]pbMacNONCEBuffer que contiene el material diversificador utilizado para generar el MAC, debe tener tamaño DES_BLOCK.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[en]dwDataLenTamaño del búfer indicado por pbData.
[en]pbDataBuffer de un 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.
[fuera]pbEncDataBuffer que contendrá los datos encriptados. Se puede pasar NULL para recuperar el tamaño requerido de pdwEncDataLenque se devolverá en pdwEncDataLen.
[fuera]pbMACTamaño del búfer DES_BLOQUE que contendrá la MAC generada. Puede ser NULL si szMacIK e pbMacNONCE son NULL.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]szIKNombre de la clave dentro del HSM que se utilizará para generar la CSR (clave de emisor).
[en]pbTrackNumMemoria intermedia de tamaño EFT_EMV_CSR_VISA_TRACK_NUM_LEN que contiene el número de pista.
[en]pbServiceIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_SERVICE_ID_LEN que contiene el ID de servicio.
[en]pbIssuerIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_ISSUER_ID_LEN que contiene el ID de emisor.
[en]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.
[fuera]pbCSRBuffer que contendrá la CSR. Se puede pasar NULL para recuperar el tamaño requerido de pbCSRque se devolverá en pdwCSRLen.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]szIKNombre de la clave dentro del HSM que se utilizará para generar la CSR (clave de emisor).
[en]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.
[en]pbServiceIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_SERVICE_ID_LEN que contiene el ID de servicio.
[en]pbIssuerIDMemoria intermedia de tamaño EFT_EMV_CSR_VISA_ISSUER_ID_LEN que contiene el ID de emisor.
[en]pbExpDateBuffer de tamaño EFT_EXP_DATE_LEN que contiene la fecha de caducidad en formato MMYY. Debe estar en formato ASCII.
[fuera]pdbCSRPuntero a un DBLOB que contendrá el CSR y su tamaño. El miembro pvData debe liberarse con DFree() después de su uso.
[fuera]pbHashBuffer que contendrá el HASH. Consulte la tabla en bOP para conocer los valores esperados para este parámetro.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]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.
[en]szTransportKeyIdentificador de la clave de transporte dentro del HSM. Esta clave debe ser del tipo DES o 3DES.
[en]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.
[en]szISSUER_SMC_MKIdentificador de la clave "Issuer SMC MK" dentro del HSM. Esta clave debe ser del tipo 3DES 112 bits.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN). Debe estar en formato ASCII.
[en]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.
[en]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.
[fuera]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.
[en]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 hSesión,
char * szSrcKey,
PALABRA wBufferLen,
BYTE * pbBuffer,
BYTE bOP,
DWORD dwAttrib,
char * szDstKey,
HKEYCTX * phKey,
DWORD dwParam )

#include <dinamo.h>

DCalcularARPC()

int AAP_API DCalculateARPC ( HSESSIONCTX hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szIssuerMKNombre de la clave del remitente dentro del HSM que se utilizará para generar la MAC.
[en]szPANPAN (Número de cuenta principal).
[en]pbSEQMemoria intermedia de tamaño EFT_EMV_SDA_SEQ_LEN que contiene el SEQ (número de secuencia PAN).
[en]pbARQCBúfer de tamaño DES_BLOCK que contiene el ARQC (criptograma de solicitud de autorización).
[en]pbARCBuffer de tamaño 2 (dos bytes) que contiene el ARC (Authorisation Response Code).
[fuera]pbARPCBuffer de tamaño DES_BLOCK que contendrá el ARPC generado.
[en]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 hSesión,
DWORD dwOp,
vacío * pvInData,
BYTE * pbARPC,
DWORD dwParam )

#include <dinamo.h>

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

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]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.
[en]pvInDataDatos de entrada para calcular el ARPC, como se describe en el parámetro dwOP.
[fuera]pbARPCBuffer de tamaño DES_BLOCK que contendrá el ARPC generado.
[en]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
[en]dwTypeTipo de operación a realizar, según la tabla siguiente.
[en]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.
[en]dwAlgTipo de clave utilizada para generar la MAC.
[en]pbMsgBuffer que pasará por el proceso MAC.
[en]dwMsgLenTamaño del búfer pbMsg.
[fuera]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 hSesión,
char * szKeyId,
int nKeyAlgId,
vacío * pstPiezasClave,
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
    [en]hSesiónContexto adquirido a través de la función DOpenSession().
    [en]szKeyIdNombre de la clave que se importará en el HSM.
    [en]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.
    [en]pstPiezasClavePuntero a una estructura que contiene los datos para reconstruir la clave como se describe en nKeyAlgId.
    [en]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 hSesión,
BYTE bKcvType,
const char * szKeyId,
vacío * pvKeyParts,
DWORD dwReservado )

#include <dinamo.h>

DEFTExportKey()

int AAP_API DEFTExportKey ( HSESSIONCTX hSesión,
BYTE bModoExportación,
char * szKEKId,
char * szKeyId,
BYTE * pbEncryptedBlock,
DWORD * pdwEncryptedBlockLen,
BYTE * pbKeyCheckValue,
DWORD dwParam )

#include <dinamo.h>

DEFTKeKImport()

int AAP_API DEFTKeKImport ( HSESSIONCTX hSesión,
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 hSesión,
char * szKeyId,
int * pnKeyAlg,
int * pnTamañoDeLlave,
EFT_VISA_KEY_PARTS * pstPiezasClave,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szKeyIdNombre de la clave que se importará en el HSM.
[fuera]pnKeyAlgAlgoritmo de la clave a exportada.
[fuera]pnTamañoDeLlaveTamaño de la clave exportada.
[fuera]pstPiezasClavePuntero a una estructura EFT_VISA_KEY_PARTS que contendrá las partes de la clave exportada y sus KCV (Key Check Value).
[en]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 hSesión,
BYTE bTipo,
const char * szKeyId,
BYTE * pbKcv,
DWORD * pdwKcvLen,
DWORD dwReservado )

#include <dinamo.h>

Parámetros
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]bTipoTipo 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.
[en]szKeyIdNombre de la clave que se utilizará para generar el KCV.
[fuera]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.
[en]dwReservadoReservado 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 reservado )

#include <dinamo.h>

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

Parámetros
[en]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.
[en]nAlgIdAlgoritmo de clave. Actualmente sólo se aceptan DES, 3DES y AES.
[en]pbKeyPuntero al búfer que contiene la clave.
[en]dwKeyLenTamaño de la llave.
[fuera]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.
[en]reservadoReservado 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 hSesión,
const char * szKBPK,
const char * szKey,
vacío * pvReservado,
PALABRA wUso,
BYTE bMode,
BYTE bExportar,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szKBPKNombre de la clave KBPK (Key Block Protection Key) utilizada para derivar las claves de cifrado y autenticación.
[en]szKeyNombre de la clave que se exportará del HSM.
[en]pvReservadoReservado para uso futuro (debe ser NULL).
[en]wUsoIdentificador 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 del 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
[en]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
[en]bExportarIdentificador 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 o 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.
[fuera]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.
[en]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 hSesión,
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
[en]hSesiónContexto adquirido a través de la función DOpenSession().
[en]szKBPKNombre de la clave KBPK (Key Block Protection Key) utilizada para derivar las claves de cifrado y autenticación.
[en]szKeyNombre de la clave que se importará en el HSM.
[en]dwKeyAttributesParámetros adicionales de la clave. Consulte las opciones de la función DGenerateKey().
[en]pbKeyBlockBuffer que contiene el bloque de claves.
[en]dwKeyBlockLenTamaño del búfer anterior pbKeyBlock.
[en]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.