Pinpad interface.h

From wizarPOS
Revision as of 09:14, 8 April 2018 by Mahong (talk | contribs) (Created page with " #ifndef PINPAD_INTERFACE_H_ #define PINPAD_INTERFACE_H_ #define KEY_TYPE_DUKPT 0 #define KEY_TYPE_TDUKPT 1 #define KEY_TYPE_MASTER 2 #define KEY_TYPE_PUBLIC...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
 #ifndef PINPAD_INTERFACE_H_
 #define PINPAD_INTERFACE_H_
 
 #define KEY_TYPE_DUKPT		0
 #define KEY_TYPE_TDUKPT		1
 #define KEY_TYPE_MASTER		2
 #define KEY_TYPE_PUBLIC		3
 #define KEY_TYPE_FIX		5
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*
  * open the device
  * return value : 0 : success
  * 				  < 0 : error code
  */
 typedef int (*pinpad_open)();
 /*
  * close the device
  * return value : 0 : success
  * 				  < 0 : error code
  */
 typedef int (*pinpad_close)();
 /*
  * show text in the first line
  * param[in] : int nLineIndex : line index, from top to down
  * param[in] : char* strText : encoded string
  * param[in] : int nLength : length of string
  * param[in] : int nFlagSound : 0 : no voice prompt, 1 : voice prompt
  * return value : < 0 : error code, maybe, your display string is too long!
  * 				  >= 0 : success
  *
  */
 typedef int (*pinpad_show_text)(int nLineIndex, char* strText, int nLength,
 		int nFlagSound);
 /*
  * select master key and user key
  * @param[in] : int nKeyType : 0 : dukpt, 1: Tdukpt, 2 : master key, 3 : public key, 4 : fix key
  * @param[in] : int nMasterKeyID : master key ID , [0x00, ..., 0x09], make sense only when nKeyType is master-session pair,
  * @param[in] : int nUserkeyID : user key ID, [0x00, 0x01], 		  make sense only when nKeyType is master-session pair,
  * @param[in] : int nAlgorith : 1 : 3DES
  * 							   0 : DES
  * return value : < 0 : error code
  * 				  >= 0 : success
  */
 typedef int (*pinpad_select_key)(int nKeyType, int nMasterKeyID, int nUserKeyID,
 		int nAlgorith);
 
 /*
  * encrypt string using user key
  * @param[in] : unsigned char* pPlainText : plain text
  * @param[in] : int nTextLength : length of plain text
  * @param[out] : unsigned char* pCipherTextBuffer : buffer for saving cipher text
  * @param[in] : int CipherTextBufferLength : length of cipher text buffer
  * return value : < 0 : error code
  * 				  >= 0 : success, length of cipher text length
  */
 typedef int (*pinpad_encrypt_string)(unsigned char* pPlainText, int nTextLength,
 		unsigned char* pCipherTextBuffer, int nCipherTextBufferLength);
 
 /*
  * calculate pin block
  * @param[in] : unsigned char* pASCIICardNumber : card number in ASCII format
  * @param[in] : int nCardNumberLength : length of card number
  * @param[out] : unsigned char* pPinBlockBuffer : buffer for saving pin block
  * @param[in] : int nPinBlockBufferLength : buffer length of pin block
  * @param[in] : int nTimeout_MS : timeout waiting for user input in milliseconds, if it is less than zero, then wait forever
  * param[in]   : int nFlagSound : 0 : no voice prompt, 1 : voice prompt
  * return value : < 0 : error code
  * 			      >= 0 : success, length of pin block
  */
 typedef int (*pinpad_calculate_pin_block)(unsigned char* pASCIICardNumber,
 		int nCardNumberLength, unsigned char* pPinBlockBuffer,
 		int nPinBlockBufferLength, int nTimeout_MS, int nFlagSound);
 
 /*
  * calculate the MAC using current user key
  * @param[in] : unsigned char* pData : data
  * @param[in] : int nDataLength : data length
  * @param[in] : int nMACFlag : 0: X99, 1 : ECB
  * @param[out] : unsigned char* pMACOut : MAC data buffer
  * @param[in] : int nMACOutBufferLength : length of MAC data buffer
  * return value : < 0 : error code
  * 				  >= 0 : success
  *
  */
 typedef int (*pinpad_calculate_mac)(unsigned char* pData, int nDataLength,
 		int nMACFlag, unsigned char* pMACOutBuffer, int nMACOutBufferLength);
 
 /*
  * update the user key
  * @param[in] : int nMasterKeyID : master key id
  * @param[in] : int nUserKeyID : user key id
  * @param[in] : unsigned char* pCipherNewUserkey : new user key in cipher text
  * @param[in] : int nCipherNewUserKeyLength : length of new user key in cipher text
  * return value : < 0 : error code
  * 				  >= 0 : success
  */
 typedef int (*pinpad_update_user_key)(int nMasterKeyID, int nUserKeyID,
 		unsigned char* pCipherNewUserKey, int nCipherNewUserKeyLength);
 
 /*
  * update the user key
  * @param[in] : int nMasterKeyID : master key id
  * @param[in] : int nUserKeyID : user key id
  * @param[in] : unsigned char* pCipherNewUserkey : new user key in cipher text
  * @param[in] : int nCipherNewUserKeyLength : length of new user key in cipher text
  * @param[in] : SESSION_KEY_USAGE : nKeyUsage
  * @param[in] : unsigned char* pCheckValue : check value of user key
  * @param[in] : int nCheckValueLen : length of check value, 4 bytes in general
  * return value : < 0 : error code
  *                   >= 0 : success
  */
 //typedef int (*pinpad_update_user_key_with_check)(int nMasterKeyID,
 //		int nUserKeyID, unsigned char *pCipherNewUserKey,
 //		int nCipherNewUserKeyLength, SESSION_KEY_USAGE nKeyUsge,
 //		unsigned char *pCheckValue, int nCheckValueLen);
 typedef int (*pinpad_update_user_key_with_check)(int nMasterKeyID,
 		int nUserKeyID, unsigned char *pCipherUserKey,
 		int nCipherNewUserKeyLenght, int nKeyUsge, unsigned char *pCheckValue,
 		int nCheckValueLen);
 
 /*
  * update the master key
  * @param[in] : int nMasterKeyID : master key ID
  * @param[in] : unsigned char* pOldKey, old key
  * @param[in] : int nOldKeyLength : length of old key, 8 or 16
  * @param[in] : unsigned char* pNewLey : new key
  * @param[in] : int nNewLeyLength : length of new key, 8 or 16
  * return value : < 0 : error code
  * 				  >= 0 : success
  */
 typedef int (*pinpad_update_master_key)(int nMasterKeyID,
 		unsigned char* pOldKey, int nOldKeyLength, unsigned char* pNewKey,
 		int nNewKeyLength);
 
 /*
  * set the max length of pin
  * @param[in] : int nLength : length >= 0 && length <= 0x0D
  * @param[in] : int nFlag : 1, max length
  * 							0, min length
  * return value : < 0 : error code
  * 				  >= 0 : success
  */
 typedef int (*pinpad_set_pin_length)(int nLength, int nFlag);
 
 /*
  * get serial number
  * @param[out] : unsigned char* pData : serial number buffer
  * @param[in]  : unsigned int nBufferLength : length of serial number buffer
  * return value : < 0 : error code
  * 				  >= 0 : success, length of serial number
  */
 typedef int (*pinpad_get_serial_number)(unsigned char* pData,
 		unsigned int nBufferLength);
 
 // char count call back
 typedef void (*KEYEVENT_NOTIFIER)(int nCount, int nExtra);
 
 typedef int (*pinpad_set_pinblock_callback)(KEYEVENT_NOTIFIER);
 
 typedef int (*pinpad_update_cipher_master_key)(int nMasterKeyID,
 		unsigned char* pCipherMasterKey, int nCipherMasterKeyLen,
 		unsigned char *pCheckValue, int nCheckValueLen);
 
 typedef int (*pinpad_update_user_key_with_check_E)(int nMasterKeyID, int nUserKeyID,
 		unsigned char *pCipherNewUserKey, int nCipherNewUserKeyLength,
 		int nKeyUsge, unsigned char *pCheckValue, int nCheckValueLen,
 		int algoCheckValue);
 typedef int (*pinpad_update_cipher_master_key_E)(int nMasterKeyID,
 		unsigned char *pCipherMasterKey, int nCipherMasterKeyLen,
 		unsigned char *pCheckValue, int nCheckValueLen,
 		int algoCheckValue);
 /**
  * nFlag : 1 : yes
    nFlag : 0 : no
  */
 typedef int (*pinpad_set_flag_allow_bypass_pin)(unsigned int nFlag);
 
 /*
  * encrypt string using user key
  * @param[in] : unsigned char* pPlainText : plain text
  * @param[in] : int nTextLength : length of plain text
  * @param[out] : unsigned char* pCipherTextBuffer : buffer for saving cipher text
  * @param[in] : int CipherTextBufferLength : length of cipher text buffer
  * @param[in] : unsigned int nMode :
  *                    PINPAD_ENCRYPT_STRING_MODE_EBC  0
  *                    PINPAD_ENCRYPT_STRING_MODE_CBC    1
  *                    PINPAD_ENCRYPT_STRING_MODE_CFB    2
  *                    PINPAD_ENCRYPT_STRING_MODE_OFB    3
  * @param[in] : unsigned char* PIV : initial vector, only for CBC, CFB, OFB mode
  * @param[in] : unsigned int nIVLen : length of IV, must be equal to block length according to the algorithm
  * return value : < 0 : error code
  *                   >= 0 : success, length of cipher text length
  */
 typedef int (*pinpad_encrypt_string_with_mode)(unsigned char* pPlainText, int nTextLength, unsigned char* pCipherTextBuffer, int nCipherTextBufferLength,
 unsigned int nMode, unsigned char* pIV, unsigned int nIVLen);
 
 typedef int (*pinpad_get_hwserialno)(unsigned char* pData, unsigned int nBufferLength);
 
 typedef int (*pinpad_get_mac_for_snk)(unsigned char* pData, unsigned int nBufferLength, unsigned char* pRandomData, unsigned int nRandomDataLength, unsigned char* pMAB, unsigned int nMABLength);
 
 #ifdef __cplusplus
 }
 #endif