/[openpgpmdrv]/trunk/OpenPGPminidriver/PublicDataOperations.c
ViewVC logotype

Diff of /trunk/OpenPGPminidriver/PublicDataOperations.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 6 by vletoux, Thu Mar 4 21:17:51 2010 UTC revision 8 by vletoux, Thu Mar 11 20:32:26 2010 UTC
# Line 60  OPENPGP_FILE Files[] = Line 60  OPENPGP_FILE Files[] =
60          {szOpenPGPDir, szOpenPGPAlgoAttributesSignature, StoredOnSmartCard, 0x6E, 0xC1, UnknownAc},          {szOpenPGPDir, szOpenPGPAlgoAttributesSignature, StoredOnSmartCard, 0x6E, 0xC1, UnknownAc},
61          {szOpenPGPDir, szOpenPGPAlgoAttributesDecryption, StoredOnSmartCard, 0x6E, 0xC2,UnknownAc},          {szOpenPGPDir, szOpenPGPAlgoAttributesDecryption, StoredOnSmartCard, 0x6E, 0xC2,UnknownAc},
62          {szOpenPGPDir, szOpenPGPAlgoAttributesAuthentication, StoredOnSmartCard, 0x6E, 0xC3, UnknownAc },          {szOpenPGPDir, szOpenPGPAlgoAttributesAuthentication, StoredOnSmartCard, 0x6E, 0xC3, UnknownAc },
63            {szOpenPGPDir, szOpenPGPPUK, StoredOnSmartCard, 0xD3, 0, UnknownAc },
64          {NULL, szCARD_IDENTIFIER_FILE, StoredOnSmartCard, 0x4F, 0, EveryoneReadAdminWriteAc},          {NULL, szCARD_IDENTIFIER_FILE, StoredOnSmartCard, 0x4F, 0, EveryoneReadAdminWriteAc},
65          {NULL, szCARD_APPLICATION_FILE, Virtual, 0, 0, EveryoneReadAdminWriteAc},          {NULL, szCARD_APPLICATION_FILE, Virtual, 0, 0, EveryoneReadAdminWriteAc},
66          {NULL, szCACHE_FILE, Virtual, 0, 0, EveryoneReadUserWriteAc},          {NULL, szCACHE_FILE, Virtual, 0, 0, EveryoneReadUserWriteAc},
# Line 70  OPENPGP_FILE Files[] = Line 71  OPENPGP_FILE Files[] =
71    
72  DWORD dwFileCount = ARRAYSIZE(Files);  DWORD dwFileCount = ARRAYSIZE(Files);
73    
74  DWORD SCardDirectoryList(__in PCARD_DATA  pCardData,  DWORD OCardDirectoryList(__in PCARD_DATA  pCardData,
75                                          __in PBYTE* pbResponse, __in_opt PDWORD pdwResponseSize)                                          __in PBYTE* pbResponse, __in_opt PDWORD pdwResponseSize)
76  {  {
77          // hardcoded          // hardcoded
# Line 84  DWORD SCardDirectoryList(__in PCARD_DATA Line 85  DWORD SCardDirectoryList(__in PCARD_DATA
85          return 0;          return 0;
86  }  }
87    
88    
89  // read file  // read file
90  DWORD SCardReadFile(__in PCARD_DATA  pCardData,  DWORD OCardReadFile(__in PCARD_DATA  pCardData,
91                                          __in_opt PSTR szDirectory, __in PSTR szFile,                                          __in_opt PSTR szDirectory, __in PSTR szFile,
92                                          __in PBYTE* ppbResponse, __in PDWORD pdwResponseSize)                                          __in PBYTE* ppbResponse, __in PDWORD pdwResponseSize)
93  {  {
# Line 109  DWORD SCardReadFile(__in PCARD_DATA  pCa Line 111  DWORD SCardReadFile(__in PCARD_DATA  pCa
111                          }                          }
112                          else                          else
113                          {                          {
114                                  if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;                                  if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;
115                          }                          }
116                          if (fMatch)                          if (fMatch)
117                          {                          {
118                                  fDirectoryFound = TRUE;                                  fDirectoryFound = TRUE;
119                                  if (strcmp(szFile, Files[dwI].szFile) == 0)                                  if (_stricmp(szFile, Files[dwI].szFile) == 0)
120                                  {                                  {
121                                          fFileFound = TRUE;                                          fFileFound = TRUE;
122                                          break;                                          break;
# Line 139  DWORD SCardReadFile(__in PCARD_DATA  pCa Line 141  DWORD SCardReadFile(__in PCARD_DATA  pCa
141                  {                  {
142                          pbCmd[2] = (BYTE) (Files[dwI].dwTag / 0x100);                          pbCmd[2] = (BYTE) (Files[dwI].dwTag / 0x100);
143                          pbCmd[3] = (BYTE) (Files[dwI].dwTag % 0x100);                          pbCmd[3] = (BYTE) (Files[dwI].dwTag % 0x100);
144                          dwReturn = SCardGetData(pCardData, pbCmd, dwCmdSize, &pbData, pdwResponseSize);                          dwReturn = OCardGetData(pCardData, pbCmd, dwCmdSize, &pbData, pdwResponseSize);
145                          if (dwReturn)                          if (dwReturn)
146                          {                          {
147                                  __leave;                                  __leave;
# Line 175  DWORD SCardReadFile(__in PCARD_DATA  pCa Line 177  DWORD SCardReadFile(__in PCARD_DATA  pCa
177                  {                  {
178                          if (szDirectory == NULL)                          if (szDirectory == NULL)
179                          {                          {
180                                  if (strcmp(szFile, szCARD_APPLICATION_FILE) == 0)                                  if (_stricmp(szFile, szCARD_APPLICATION_FILE) == 0)
181                                  {                                  {
182                                          dwReturn = SCardDirectoryList(pCardData, ppbResponse, pdwResponseSize);                                          dwReturn = OCardDirectoryList(pCardData, ppbResponse, pdwResponseSize);
183                                  }                                  }
184                                  else if (strcmp(szFile, szCACHE_FILE) == 0)                                  else if (_stricmp(szFile, szCACHE_FILE) == 0)
185                                  {                                  {
186                                          *pdwResponseSize = sizeof(CARD_CACHE_FILE_FORMAT);                                          *pdwResponseSize = sizeof(CARD_CACHE_FILE_FORMAT);
187                                          *ppbResponse = pCardData->pfnCspAlloc(*pdwResponseSize);                                          *ppbResponse = pCardData->pfnCspAlloc(*pdwResponseSize);
# Line 191  DWORD SCardReadFile(__in PCARD_DATA  pCa Line 193  DWORD SCardReadFile(__in PCARD_DATA  pCa
193                                          Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_FILE_NOT_FOUND %S",szFile);                                          Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_FILE_NOT_FOUND %S",szFile);
194                                  }                                  }
195                          }                          }
196                          else if (strcmp(szDirectory,szBASE_CSP_DIR) == 0)                          else if (_stricmp(szDirectory,szBASE_CSP_DIR) == 0)
197                          {                          {
198                                  if (strcmp(szFile, szCONTAINER_MAP_FILE) == 0)                                  if (_stricmp(szFile, szCONTAINER_MAP_FILE) == 0)
199                                  {                                  {
200                                          PCONTAINER_MAP_RECORD pContainer = NULL;                                          dwReturn = OCardReadContainerMapFile(pCardData, ppbResponse, pdwResponseSize);
                                         *pdwResponseSize = sizeof(CONTAINER_MAP_RECORD) * MaxContainer;  
                                         *ppbResponse = pCardData->pfnCspAlloc(*pdwResponseSize);  
                                         if (! *ppbResponse )  
                                         {  
                                                 dwReturn = SCARD_E_NO_MEMORY;  
                                                 Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_NO_MEMORY");  
                                                 __leave;  
                                         }  
                                         pContainer = (PCONTAINER_MAP_RECORD) *ppbResponse;  
                                         memset(pContainer,0,sizeof(CONTAINER_MAP_RECORD) * 3);  
                                         swprintf_s(pContainer[Signature].wszGuid,MAX_CONTAINER_NAME_LEN + 1,  
                                                 L"OPENPGP_%02X%02X_%02X%02X_%02X%02X%02X%02X_Signature",  
                                                 pContext->Aid.AidVersion[0],pContext->Aid.AidVersion[1],  
                                                 pContext->Aid.AidManufacturer[0],pContext->Aid.AidManufacturer[1],  
                                                 pContext->Aid.AidSerialNumber[0],pContext->Aid.AidSerialNumber[1],  
                                                 pContext->Aid.AidSerialNumber[2],pContext->Aid.AidSerialNumber[3]);  
                                         pContainer[Signature].bFlags = CONTAINER_MAP_VALID_CONTAINER;  
                                         pContainer[Signature].wSigKeySizeBits = 1024;  
                                         swprintf_s(pContainer[Authentication].wszGuid,MAX_CONTAINER_NAME_LEN + 1,  
                                                 L"OPENPGP_%02X%02X_%02X%02X_%02X%02X%02X%02X_Authenticate",  
                                                 pContext->Aid.AidVersion[0],pContext->Aid.AidVersion[1],  
                                                 pContext->Aid.AidManufacturer[0],pContext->Aid.AidManufacturer[1],  
                                                 pContext->Aid.AidSerialNumber[0],pContext->Aid.AidSerialNumber[1],  
                                                 pContext->Aid.AidSerialNumber[2],pContext->Aid.AidSerialNumber[3]);  
                                         pContainer[Authentication].bFlags = CONTAINER_MAP_VALID_CONTAINER | CONTAINER_MAP_DEFAULT_CONTAINER;  
                                         pContainer[Authentication].wSigKeySizeBits = 1024;  
                                         swprintf_s(pContainer[Confidentiality].wszGuid,MAX_CONTAINER_NAME_LEN + 1,  
                                                 L"OPENPGP_%02X%02X_%02X%02X_%02X%02X%02X%02X_Confidential",  
                                                 pContext->Aid.AidVersion[0],pContext->Aid.AidVersion[1],  
                                                 pContext->Aid.AidManufacturer[0],pContext->Aid.AidManufacturer[1],  
                                                 pContext->Aid.AidSerialNumber[0],pContext->Aid.AidSerialNumber[1],  
                                                 pContext->Aid.AidSerialNumber[2],pContext->Aid.AidSerialNumber[3]);  
                                         pContainer[Confidentiality].bFlags = CONTAINER_MAP_VALID_CONTAINER;  
                                         pContainer[Confidentiality].wKeyExchangeKeySizeBits = 1024;  
201                                  }                                  }
202                                  else                                  else
203                                  {                                  {
# Line 260  DWORD SCardReadFile(__in PCARD_DATA  pCa Line 228  DWORD SCardReadFile(__in PCARD_DATA  pCa
228          return dwReturn;          return dwReturn;
229  }  }
230    
231  DWORD SCardEnumFile(__in PCARD_DATA  pCardData,  DWORD OCardEnumFile(__in PCARD_DATA  pCardData,
232                                          __in_opt PSTR szDirectory,                                          __in_opt PSTR szDirectory,
233                                          __in PBYTE* pbResponse, __in PDWORD pdwResponseSize)                                          __in PBYTE* pbResponse, __in PDWORD pdwResponseSize)
234  {  {
# Line 281  DWORD SCardEnumFile(__in PCARD_DATA  pCa Line 249  DWORD SCardEnumFile(__in PCARD_DATA  pCa
249                          }                          }
250                          else                          else
251                          {                          {
252                                  if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;                                  if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;
253                          }                          }
254                          if (fMatch)                          if (fMatch)
255                          {                          {
# Line 292  DWORD SCardEnumFile(__in PCARD_DATA  pCa Line 260  DWORD SCardEnumFile(__in PCARD_DATA  pCa
260                                          PBYTE pbData = NULL;                                          PBYTE pbData = NULL;
261                                          DWORD dwSize;                                          DWORD dwSize;
262                                          // check if the file exists and be read                                          // check if the file exists and be read
263                                          dwNotExists = SCardReadFile(pCardData, szDirectory, Files[dwI].szFile, &pbData, &dwSize);                                          dwNotExists = OCardReadFile(pCardData, szDirectory, Files[dwI].szFile, &pbData, &dwSize);
264                                          if (!dwNotExists)                                          if (!dwNotExists)
265                                          {                                          {
266                                                  pCardData->pfnCspFree(pbData);                                                  pCardData->pfnCspFree(pbData);
# Line 337  DWORD SCardEnumFile(__in PCARD_DATA  pCa Line 305  DWORD SCardEnumFile(__in PCARD_DATA  pCa
305  }  }
306    
307  // read file  // read file
308  DWORD SCardGetFileInfo(__in PCARD_DATA  pCardData,  DWORD OCardGetFileInfo(__in PCARD_DATA  pCardData,
309                                          __in_opt PSTR szDirectory, __in PSTR szFile,                                          __in_opt PSTR szDirectory, __in PSTR szFile,
310                                           __inout PCARD_FILE_INFO  pCardFileInfo)                                           __inout PCARD_FILE_INFO  pCardFileInfo)
311  {  {
# Line 346  DWORD SCardGetFileInfo(__in PCARD_DATA Line 314  DWORD SCardGetFileInfo(__in PCARD_DATA
314          DWORD dwSize, dwI;          DWORD dwSize, dwI;
315          __try          __try
316          {          {
317                  dwReturn = SCardReadFile(pCardData, szDirectory, szFile, &pbData, &dwSize);                  dwReturn = OCardReadFile(pCardData, szDirectory, szFile, &pbData, &dwSize);
318                  if (dwReturn)                  if (dwReturn)
319                  {                  {
320                          __leave;                          __leave;
# Line 356  DWORD SCardGetFileInfo(__in PCARD_DATA Line 324  DWORD SCardGetFileInfo(__in PCARD_DATA
324                  pCardFileInfo->AccessCondition = InvalidAc;                  pCardFileInfo->AccessCondition = InvalidAc;
325                  for(dwI = 0; dwI < dwFileCount; dwI++)                  for(dwI = 0; dwI < dwFileCount; dwI++)
326                  {                  {
327                          if ((strcmp(szDirectory, Files[dwI].szDirectory) == 0)                          BOOL fMatch = FALSE;
328                                  || (!szDirectory && !Files[dwI].szDirectory) )                          if (szDirectory == NULL)
329                            {
330                                    if (!Files[dwI].szDirectory) fMatch = TRUE;
331                            }
332                            else
333                            {
334                                    if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;
335                            }
336                            if (fMatch)
337                          {                          {
338                                  if (strcmp(szFile, Files[dwI].szFile) == 0)                                  if (_stricmp(szFile, Files[dwI].szFile) == 0)
339                                  {                                  {
340                                          pCardFileInfo->AccessCondition = Files[dwI].dwAccess;                                          pCardFileInfo->AccessCondition = Files[dwI].dwAccess;
341                                          break;                                          break;
# Line 375  DWORD SCardGetFileInfo(__in PCARD_DATA Line 351  DWORD SCardGetFileInfo(__in PCARD_DATA
351          return dwReturn;                  return dwReturn;        
352  }  }
353    
354  DWORD SCardWriteFile(__in PCARD_DATA  pCardData,  DWORD OCardWriteFile(__in PCARD_DATA  pCardData,
355                                          __in_opt PSTR szDirectory, __in PSTR szFile,                                          __in_opt PSTR szDirectory, __in PSTR szFile,
356                                          __in PBYTE pbData, __in DWORD dwSize)                                          __in PBYTE pbData, __in DWORD dwSize)
357  {  {
# Line 404  DWORD SCardWriteFile(__in PCARD_DATA  pC Line 380  DWORD SCardWriteFile(__in PCARD_DATA  pC
380                          }                          }
381                          else                          else
382                          {                          {
383                                  if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;                                  if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;
384                          }                          }
385                          if (fMatch)                          if (fMatch)
386                          {                          {
387                                  fDirectoryFound = TRUE;                                  fDirectoryFound = TRUE;
388                                  if (strcmp(szFile, Files[dwI].szFile) == 0)                                  if (_stricmp(szFile, Files[dwI].szFile) == 0)
389                                  {                                  {
390                                          fFileFound = TRUE;                                          fFileFound = TRUE;
391                                          break;                                          break;
# Line 448  DWORD SCardWriteFile(__in PCARD_DATA  pC Line 424  DWORD SCardWriteFile(__in PCARD_DATA  pC
424                                  memcpy(pbCmd + 5, pbData, dwSize);                                  memcpy(pbCmd + 5, pbData, dwSize);
425                          }                          }
426                          dwCmdSize = dwSize + 5;                          dwCmdSize = dwSize + 5;
427                          dwReturn = SCardSendCommand(pCardData, pbCmd, dwCmdSize);                          dwReturn = OCardSendCommand(pCardData, pbCmd, dwCmdSize);
428                          if (dwReturn)                          if (dwReturn)
429                          {                          {
430                                  __leave;                                  __leave;
# Line 470  DWORD SCardWriteFile(__in PCARD_DATA  pC Line 446  DWORD SCardWriteFile(__in PCARD_DATA  pC
446          return dwReturn;          return dwReturn;
447  }  }
448    
449  DWORD SCardDeleteFile(__in PCARD_DATA  pCardData,  DWORD OCardDeleteFile(__in PCARD_DATA  pCardData,
450                                          __in_opt PSTR szDirectory, __in PSTR szFile)                                          __in_opt PSTR szDirectory, __in PSTR szFile)
451  {  {
452          return SCardWriteFile(pCardData, szDirectory, szFile, NULL, 0);          return OCardWriteFile(pCardData, szDirectory, szFile, NULL, 0);
453  }  }
454    
455  // just change the flag in Files  // just change the flag in Files
456  DWORD SCardCreateFile(__in PCARD_DATA  pCardData,  DWORD OCardCreateFile(__in PCARD_DATA  pCardData,
457                                          __in_opt PSTR szDirectory, __in PSTR szFile)                                          __in_opt PSTR szDirectory, __in PSTR szFile)
458  {  {
459          DWORD dwI;          DWORD dwI;
# Line 495  DWORD SCardCreateFile(__in PCARD_DATA  p Line 471  DWORD SCardCreateFile(__in PCARD_DATA  p
471                          }                          }
472                          else                          else
473                          {                          {
474                                  if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;                                  if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE;
475                          }                          }
476                          if (fMatch)                          if (fMatch)
477                          {                          {
478                                  fDirectoryFound = TRUE;                                  fDirectoryFound = TRUE;
479                                  if (strcmp(szFile, Files[dwI].szFile) == 0)                                  if (_stricmp(szFile, Files[dwI].szFile) == 0)
480                                  {                                  {
481                                          fFileFound = TRUE;                                          fFileFound = TRUE;
482                                          break;                                          break;

Legend:
Removed from v.6  
changed lines
  Added in v.8

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26