Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

218 lines
10 KiB

  1. #ifndef _WPSCPROXY_H_DEF_
  2. #define _WPSCPROXY_H_DEF_
  3. #include <winscard.h>
  4. // Basic types
  5. typedef signed char INT8;
  6. typedef signed short INT16;
  7. typedef unsigned char UINT8;
  8. typedef unsigned short UINT16;
  9. // Derived types for API
  10. typedef UINT8 TCOUNT;
  11. typedef UINT16 ADDRESS;
  12. typedef UINT16 TOFFSET;
  13. typedef UINT8 TUID;
  14. typedef UINT8 HACL;
  15. typedef WCHAR *WSTR;
  16. typedef const WCHAR *WCSTR;
  17. #include "wpscoserr.h"
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. /* PC/SC */
  22. typedef LONG (WINAPI *LPFNSCWTRANSMITPROC)(SCARDHANDLE hCard, LPCBYTE lpbIn, DWORD dwIn, LPBYTE lpBOut, LPDWORD pdwOut);
  23. #define NULL_TX ((SCARDHANDLE)(-1)) // To indicate to use scwwinscard.dll vs winscard.dll
  24. #define NULL_TX_NAME ((LPCWSTR)(-1)) // To indicate to use scwwinscard.dll vs winscard.dll
  25. // Different scenarios:
  26. // Non PC/SC apps: call hScwAttachToCard(NULL, NULL, &hCard), hScwSetTransmitCallback & hScwSetEndianness
  27. // PC/SC apps not connecting themselves: call hScwAttachToCard(NULL, mszCardNames, &hCard)
  28. // PC/SC apps connecting themselves: call hScwAttachToCard(hCard, NULL, &hCard)
  29. // For simulator use replace NULL by NULL_TX in the 2 above lines
  30. // PC/SC hScwAttachToCard will call hScwSetTransmitCallback & hScwSetEndianness (the ATR better
  31. // be compliant (endianness in 1st historical bytes) or call hScwSetEndianness with
  32. // appropriate value).
  33. SCODE WINAPI hScwAttachToCard(SCARDHANDLE hCard, LPCWSTR mszCardNames, LPSCARDHANDLE phCard);
  34. SCODE WINAPI hScwAttachToCardEx(SCARDHANDLE hCard, LPCWSTR mszCardNames, BYTE byINS, LPSCARDHANDLE phCard);
  35. SCODE WINAPI hScwSetTransmitCallback(SCARDHANDLE hCard, LPFNSCWTRANSMITPROC lpfnProc);
  36. SCODE WINAPI hScwDetachFromCard(SCARDHANDLE hCard);
  37. SCODE WINAPI hScwSCardBeginTransaction(SCARDHANDLE hCard);
  38. SCODE WINAPI hScwSCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition);
  39. /*
  40. ** Constants
  41. */
  42. // File attribute Flags. Some are used by the system (defined below.)
  43. // The rest are available for application use
  44. #define SCW_FILEATTR_DIRF (UINT16)(0x8000) // The file defined by this entry is a sub directory
  45. #define SCW_FILEATTR_ACLF (UINT16)(0x4000) // The file defined by this entry is an ACL file
  46. #define SCW_FILEATTR_ROMF (UINT16)(0x2000) // The file defined by this entry is in ROM
  47. #define SCW_FILEATTR_RSRV2 (UINT16)(0x1000)
  48. // Bits that cannot be changed by ScwSetFileAttributes
  49. #define SCW_FILEATTR_PBITS (UINT16)(SCW_FILEATTR_DIRF|SCW_FILEATTR_ACLF|SCW_FILEATTR_ROMF|SCW_FILEATTR_RSRV2)
  50. /* File seek */
  51. #define FILE_BEGIN 0
  52. #define FILE_CURRENT 1
  53. #define FILE_END 2
  54. /* Access Control */
  55. #define SCW_ACLTYPE_DISJUNCTIVE 0x00
  56. #define SCW_ACLTYPE_CONJUNCTIVE 0x01
  57. /*
  58. ** Maximum Known principals and Groups
  59. */
  60. #define SCW_MAX_NUM_PRINCIPALS 40
  61. /*
  62. ** Authentication Protocols
  63. */
  64. #define SCW_AUTHPROTOCOL_AOK 0x00 // Always returns SCW_S_OK
  65. #define SCW_AUTHPROTOCOL_PIN 0x01 // Personal Identification Number
  66. #define SCW_AUTHPROTOCOL_DES 0x05 // DES authentication
  67. #define SCW_AUTHPROTOCOL_3DES 0x06 // Triple DES authentication
  68. #define SCW_AUTHPROTOCOL_RTE 0x07 // RTE applet as an auth. protocol
  69. #define SCW_AUTHPROTOCOL_NEV 0xFF // Always returns SCW_E_NOTAUTHENTICATED
  70. /* Well-known UIDs */
  71. #define SCW_PRINCIPALUID_INVALID 0x00 // Invalid UID
  72. #define SCW_PRINCIPALUID_ANONYMOUS 0x01
  73. /* ResoureTypes */
  74. #define SCW_RESOURCETYPE_FILE 0x00
  75. #define SCW_RESOURCETYPE_DIR 0x10
  76. #define SCW_RESOURCETYPE_COMMAND 0x20 // reserved for future use
  77. #define SCW_RESOURCETYPE_CHANNEL 0x30 // reserved for future use
  78. #define SCW_RESOURCETYPE_ANY 0xE0
  79. /* Resource Operation on RESOURCETYPE_FILE */
  80. #define SCW_RESOURCEOPERATION_FILE_READ (SCW_RESOURCETYPE_FILE | 0x01)
  81. #define SCW_RESOURCEOPERATION_FILE_WRITE (SCW_RESOURCETYPE_FILE | 0x02)
  82. #define SCW_RESOURCEOPERATION_FILE_EXECUTE (SCW_RESOURCETYPE_FILE | 0x03)
  83. #define SCW_RESOURCEOPERATION_FILE_EXTEND (SCW_RESOURCETYPE_FILE | 0x04)
  84. #define SCW_RESOURCEOPERATION_FILE_DELETE (SCW_RESOURCETYPE_FILE | 0x05)
  85. #define SCW_RESOURCEOPERATION_FILE_GETATTRIBUTES (SCW_RESOURCETYPE_FILE | 0x06)
  86. #define SCW_RESOURCEOPERATION_FILE_SETATTRIBUTES (SCW_RESOURCETYPE_FILE | 0x07)
  87. #define SCW_RESOURCEOPERATION_FILE_CRYPTO (SCW_RESOURCETYPE_FILE | 0x08)
  88. #define SCW_RESOURCEOPERATION_FILE_INCREASE (SCW_RESOURCETYPE_FILE | 0x09)
  89. #define SCW_RESOURCEOPERATION_FILE_INVALIDATE (SCW_RESOURCETYPE_FILE | 0x0A)
  90. #define SCW_RESOURCEOPERATION_FILE_REHABILITATE (SCW_RESOURCETYPE_FILE | 0x0B)
  91. /* resourceOperation on RESOURCETYPE_DIR */
  92. #define SCW_RESOURCEOPERATION_DIR_ACCESS (SCW_RESOURCETYPE_DIR | 0x01)
  93. #define SCW_RESOURCEOPERATION_DIR_CREATEFILE (SCW_RESOURCETYPE_DIR | 0x02)
  94. #define SCW_RESOURCEOPERATION_DIR_ENUM (SCW_RESOURCETYPE_DIR | 0x03)
  95. #define SCW_RESOURCEOPERATION_DIR_DELETE (SCW_RESOURCETYPE_DIR | 0x04)
  96. #define SCW_RESOURCEOPERATION_DIR_GETATTRIBUTES (SCW_RESOURCETYPE_DIR | 0x05)
  97. #define SCW_RESOURCEOPERATION_DIR_SETATTRIBUTES (SCW_RESOURCETYPE_DIR | 0x06)
  98. /* resourceOperation on any resource */
  99. #define SCW_RESOURCEOPERATION_SETACL ((BYTE)(SCW_RESOURCETYPE_ANY | 0x1D))
  100. #define SCW_RESOURCEOPERATION_GETACL ((BYTE)(SCW_RESOURCETYPE_ANY | 0x1E))
  101. #define SCW_RESOURCEOPERATION_ANY ((BYTE)(SCW_RESOURCETYPE_ANY | 0x1F))
  102. /* Cryptographic Mechanisms */
  103. #define CM_SHA 0x80
  104. #define CM_DES 0x90
  105. #define CM_3DES 0xA0 // triple DES
  106. #define CM_RSA 0xB0
  107. #define CM_RSA_CRT 0xC0
  108. #define CM_CRYPTO_NAME 0xF0 // mask for crypto mechanism names
  109. #define CM_KEY_INFILE 0x01 // if key is passed in a file
  110. #define CM_DATA_INFILE 0x02 // if data is passed in a file
  111. #define CM_PROPERTIES 0x0F // maks for crypto properites
  112. // DES mode, keys and initial feedback buffer in cryptoBuffer
  113. /* DES */
  114. #define MODE_DES_ENCRYPT 0x00
  115. #define MODE_DES_DECRYPT 0x20 //bit 5
  116. #define MODE_DES_CBC 0x40 //bit 6
  117. #define MODE_DES_MAC 0x10 //bit 4
  118. #define MODE_DES_ECB 0x00
  119. /* Triple DES */
  120. #define MODE_TWO_KEYS_3DES 0x01 //bit 1 - if not set 3DES is working with 3 keys
  121. #define MODE_THREE_KEYS_3DES 0x00
  122. /* RSA */
  123. #define MODE_RSA_SIGN 0x00
  124. #define MODE_RSA_AUTH 0x01
  125. #define MODE_RSA_KEYGEN 0x02
  126. /* File System */
  127. SCODE WINAPI hScwCreateFile(SCARDHANDLE hCard, WCSTR wszFileName, WCSTR wszAclFileName, HFILE *phFile);
  128. SCODE WINAPI hScwCreateDirectory(SCARDHANDLE hCard, WCSTR wszDirName, WCSTR wszAclFileName);
  129. SCODE WINAPI hScwDeleteFile(SCARDHANDLE hCard, WCSTR wszFileName);
  130. SCODE WINAPI hScwCloseFile(SCARDHANDLE hCard, HFILE hFile);
  131. SCODE WINAPI hScwReadFile(SCARDHANDLE hCard, HFILE hFile, BYTE *pbBuffer, TCOUNT nRequestedBytes, TCOUNT *pnActualBytes);
  132. SCODE WINAPI hScwWriteFile(SCARDHANDLE hCard, HFILE hFile, BYTE *pbBuffer, TCOUNT nRequestedBytes, TCOUNT *pnActualBytes);
  133. SCODE WINAPI hScwGetFileLength(SCARDHANDLE hCard, HFILE hFile, TOFFSET *pnFileLength);
  134. SCODE WINAPI hScwSetFileLength(SCARDHANDLE hCard, HFILE hFile, TOFFSET nFileLength);
  135. SCODE WINAPI hScwReadFile32(SCARDHANDLE hCard, HFILE hFile, BYTE *pbBuffer, DWORD nRequestedBytes, DWORD *pnActualBytes);
  136. SCODE WINAPI hScwWriteFile32(SCARDHANDLE hCard, HFILE hFile, BYTE *pbBuffer, DWORD nRequestedBytes, DWORD *pnActualBytes);
  137. SCODE WINAPI hScwGetFileAttributes(SCARDHANDLE hCard, WCSTR wszFileName, UINT16 *pnValue);
  138. SCODE WINAPI hScwSetFileAttributes(SCARDHANDLE hCard, WCSTR wszFileName, UINT16 nValue);
  139. SCODE WINAPI hScwSetFilePointer(SCARDHANDLE hCard, HFILE hFile, INT16 iDistance, BYTE bMode);
  140. SCODE WINAPI hScwEnumFile(SCARDHANDLE hCard, WCSTR wszDirectoryName, UINT16 *pnFileCookie, WSTR wszFileName, TCOUNT nBufferSize);
  141. SCODE WINAPI hScwSetFileACL(SCARDHANDLE hCard, WCSTR wszFileName, WCSTR wszAclFileName);
  142. SCODE WINAPI hScwGetFileAclHandle(SCARDHANDLE hCard, WCSTR wszFileName, HFILE *phFile);
  143. /* Access Control */
  144. SCODE WINAPI hScwAuthenticateName(SCARDHANDLE hCard, WCSTR wszPrincipalName, BYTE *pbSupportData, TCOUNT nSupportDataLength);
  145. SCODE WINAPI hScwDeauthenticateName(SCARDHANDLE hCard, WCSTR wszPrincipalName);
  146. SCODE WINAPI hScwIsAuthenticatedName(SCARDHANDLE hCard, WCSTR wszPrincipalName);
  147. SCODE WINAPI hScwIsAuthorized(SCARDHANDLE hCard, WCSTR wszResourceName, BYTE bOperation);
  148. SCODE WINAPI hScwGetPrincipalUID(SCARDHANDLE hCard, WCSTR wszPrincipalName, TUID *pnPrincipalUID);
  149. SCODE WINAPI hScwAuthenticateUID(SCARDHANDLE hCard, TUID nPrincipalUID, BYTE *pbSupportData, TCOUNT nSupportDataLength);
  150. SCODE WINAPI hScwDeauthenticateUID(SCARDHANDLE hCard, TUID nPrincipalUID);
  151. SCODE WINAPI hScwIsAuthenticatedUID(SCARDHANDLE hCard, TUID nPrincipalUID);
  152. /* Runtime Environment (RTE) */
  153. SCODE WINAPI hScwRTEExecute(SCARDHANDLE hCard, WCSTR wszCodeFileName, WCSTR wszDataFileName, UINT8 bRestart);
  154. /* Cryptography */
  155. SCODE WINAPI hScwCryptoInitialize(SCARDHANDLE hCard, BYTE bMechanism, BYTE *pbKeyMaterial);
  156. SCODE WINAPI hScwCryptoAction(SCARDHANDLE hCard, BYTE *pbDataIn, TCOUNT nDataInLength, BYTE *pbDataOut, TCOUNT *pnDataOutLength);
  157. SCODE WINAPI hScwCryptoUpdate(SCARDHANDLE hCard, BYTE *pbDataIn, TCOUNT nDataInLength);
  158. SCODE WINAPI hScwCryptoFinalize(SCARDHANDLE hCard, BYTE *pbDataOut, TCOUNT *pnDataOutLength);
  159. SCODE WINAPI hScwGenerateRandom(SCARDHANDLE hCard, BYTE *pbDataOut, TCOUNT nDataOutLength);
  160. SCODE WINAPI hScwSetDispatchTable(SCARDHANDLE hCard, WCSTR wszFileName);
  161. typedef struct {
  162. BYTE CLA;
  163. BYTE INS;
  164. BYTE P1;
  165. BYTE P2;
  166. } ISO_HEADER;
  167. typedef ISO_HEADER *LPISO_HEADER;
  168. /*
  169. ScwExecute:
  170. I-: lpxHdr (points to 4 bytes (CLA, INS, P1, P2))
  171. I-: InBuf (Incoming data from card's perspective (NULL -> no data in))
  172. I-: InBufLen (length of data pointed by InBuf)
  173. -O: OutBuf (Buffer that will receive the R-APDU (NULL -> no expected data))
  174. IO: pOutBufLen (I -> Size of OutBuf, O -> Number of bytes written in OutBuf)
  175. -O: pwSW (Card Status Word)
  176. */
  177. SCODE WINAPI hScwExecute(SCARDHANDLE hCard, LPISO_HEADER lpxHdr, BYTE *InBuf, TCOUNT InBufLen, BYTE *OutBuf, TCOUNT *pOutBufLen, UINT16 *pwSW);
  178. #ifdef __cplusplus
  179. }
  180. #endif
  181. #endif // ifndef _WPSCPROXY_H_DEF_