/// <summary> /// /// </summary> /// <returns></returns> public CommandAPDU CreateExternalAuthCommand() { MemoryStream memStream = new MemoryStream(); memStream.Write(mInitUpdateResponse, 12, 8); memStream.Write(mHostChallenge, 0, mHostChallenge.Length); byte[] hostCryptogram = CryptoUtil.FullTripleDESMAC(mSessionKeys.RetrieveKey(Key.KEY_TYPE_ENC), CryptoUtil.BINARY_ZEROS_8_BYTE_BLOCK, CryptoUtil.DESPad(memStream.ToArray())); int P1 = mSecurityLevel; CommandAPDU externalAuth = new CommandAPDU(CLA_SECURE_GP, INS_EXT_AUTH, P1, 0x00, hostCryptogram); mSecureChannel = new SecureChannel(mSessionKeys, SecurityLevel.C_MAC, mSCPIdentifier, mSCPImplementationOption, CryptoUtil.BINARY_ZEROS_8_BYTE_BLOCK, CryptoUtil.BINARY_ZEROS_8_BYTE_BLOCK); externalAuth = mSecureChannel.wrap(externalAuth); return(externalAuth); }
/// <summary> /// /// </summary> /// <returns></returns> public CommandAPDU CreateExternalAuthCommand() { MemoryStream memStream = new MemoryStream(); memStream.Write(mInitUpdateResponse, 12, 8); memStream.Write(mHostChallenge, 0, mHostChallenge.Length); byte[] hostCryptogram = CryptoUtil.FullTripleDESMAC(mSessionKeys.RetrieveKey(Key.KEY_TYPE_ENC), CryptoUtil.BINARY_ZEROS_8_BYTE_BLOCK, CryptoUtil.DESPad(memStream.ToArray())); int P1 = mSecurityLevel; CommandAPDU externalAuth = new CommandAPDU(CLA_SECURE_GP, INS_EXT_AUTH, P1, 0x00, hostCryptogram); mSecureChannel = new SecureChannel(mSessionKeys, SecurityLevel.C_MAC, mSCPIdentifier, mSCPImplementationOption, CryptoUtil.BINARY_ZEROS_8_BYTE_BLOCK, CryptoUtil.BINARY_ZEROS_8_BYTE_BLOCK); externalAuth = mSecureChannel.wrap(externalAuth); return externalAuth; }