/// <summary> /// Searches for Stone encryption DUKPT:TDES key, on pinpad index 16. /// </summary> /// <returns>GDU response.</returns> private GduResponse GetGdu() { // Creates GDU request: GduRequest request = new GduRequest(); // Sets GDU to search for Stone encryption index (16): request.GDU_IDX.Value = (int)StoneIndexCode.EncryptionKey; // Sets GDU to search for a DUKPT:TDES key: request.GDU_METHOD.Value = new CryptographyMethod(KeyManagementMode.DerivedUniqueKeyPerTransaction, CryptographyMode.TripleDataEncryptionStandard); // Sends the request to pinpad, gets and returns it's response: return(this.communication.SendRequestAndReceiveResponse <GduResponse>(request)); }
// Public Methods /// <summary> /// Obtains the current KSN (Key Serial Number) of an index in the table. /// </summary> /// <param name="indexToSearch">KSN index.</param> /// <param name="cryptographyMode">Cryptography method.</param> /// <returns>The obtained KSN, or null if the KSN was not found.</returns> public string GetDukptSerialNumber(int indexToSearch, CryptographyMode cryptographyMode) { // Setup request: GduRequest request = new GduRequest(); request.GDU_IDX.Value = indexToSearch; request.GDU_METHOD.Value = new CryptographyMethod(KeyManagementMode.DerivedUniqueKeyPerTransaction, cryptographyMode); // Send request to the pinpad: GduResponse response = this.communication .SendRequestAndReceiveResponse <GduResponse>(request); // Verify if the command was successful: if (response != null && response.RSP_STAT.Value == AbecsResponseStatus.ST_OK) { // Return KSN (if any): return(response.GDU_KSN.Value); } // Failure: return(null); }