/*++ Copyright (C) Microsoft Corporation, 1999 - 1999 Module Name: Conversion Abstract: This header file describes the format conversion services. Author: Doug Barlow (dbarlow) 6/21/1999 Remarks: Notes: --*/ #ifndef _CONVERSION_H_ #define _CONVERSION_H_ #include #include #define APDU_EXTENDED_LENGTH 0x01 // Force an extended value for Lc and/or Le #define APDU_MAXIMUM_LE 0x02 // Request the maximum Le value #define APDU_REQNAD_VALID 0x04 // The Request NaD is valid. #define APDU_RSPNAD_VALID 0x08 // The Response NaD is valid. #define APDU_NO_GET_RESPONSE 0x10 // Don't do automatic Get Responses #define APDU_ALTCLA_VALID 0x20 // The Alternate CLA is valid. extern void ConstructRequest( IN BYTE bCla, IN BYTE bIns, IN BYTE bP1, IN BYTE bP2, IN CBuffer &bfData, IN WORD wLe, IN DWORD dwFlags, OUT CBuffer &bfApdu); extern void ParseRequest( IN LPCBYTE pbApdu, IN DWORD cbApdu, OUT LPBYTE pbCla, OUT LPBYTE pbIns, OUT LPBYTE pbP1, OUT LPBYTE pbP2, OUT LPCBYTE *pbfData, OUT LPWORD pwLc, OUT LPWORD pwLe, OUT LPDWORD pdwFlags); extern void ParseReply( IN CBuffer &bfApdu, OUT LPBYTE pbSW1, OUT LPBYTE pbSW2); extern void MultiStringToSafeArray( IN LPCTSTR msz, IN OUT SAFEARRAY **pprgsz); extern void GuidArrayToSafeArray( IN LPCGUID pGuids, IN DWORD cguids, IN OUT SAFEARRAY **pprgguids); extern void SafeArrayToGuidArray( IN LPSAFEARRAY prgGuids, OUT CBuffer &bfGuids, OUT LPDWORD pcGuids); extern void SafeArrayToGuidArray( IN LPSAFEARRAY prgGuids, OUT CBuffer &bfGuids, OUT LPDWORD pcGuids); extern void SafeArrayToMultiString( IN LPSAFEARRAY prgsz, IN OUT CTextMultistring &msz); extern void ApduToTpdu_T0( IN SCARDHANDLE hCard, IN const SCARD_IO_REQUEST *pPciRqst, IN LPCBYTE pbApdu, IN DWORD cbApdu, IN DWORD dwFlags, OUT CBuffer bfPciRsp, OUT CBuffer &bfReply, IN LPCBYTE pbAltCla); extern void ApduToTpdu_T1( IN SCARDHANDLE hCard, IN const SCARD_IO_REQUEST *pPciRqst, IN LPCBYTE pbApdu, IN DWORD cbApdu, IN DWORD dwFlags, OUT CBuffer bfPciRsp, OUT CBuffer &bfReply); extern LONG ByteBufferToBuffer( IN LPBYTEBUFFER pby, OUT CBuffer &bf); extern LONG BufferToByteBuffer( IN CBuffer &bf, OUT LPBYTEBUFFER *ppby); // // NOTE // // The following inline routines assume a little endian architecture, // and must be changed for other platforms. // inline WORD NetToLocal( IN LPCBYTE pb) { return (pb[0] << 8) + pb[1]; } inline void LocalToNet( OUT LPBYTE pb, IN WORD w) { pb[0] = (BYTE)((w >> 8) & 0xff); pb[1] = (BYTE)(w & 0xff); } inline BYTE LeastSignificantByte( IN WORD w) { return (BYTE)(w & 0xff); } #endif // _CONVERSION_H_