--- trunk/OpenPGPminidriver/PublicDataOperations.c 2010/03/04 21:17:51 6 +++ trunk/OpenPGPminidriver/PublicDataOperations.c 2010/03/11 20:32:26 8 @@ -60,6 +60,7 @@ {szOpenPGPDir, szOpenPGPAlgoAttributesSignature, StoredOnSmartCard, 0x6E, 0xC1, UnknownAc}, {szOpenPGPDir, szOpenPGPAlgoAttributesDecryption, StoredOnSmartCard, 0x6E, 0xC2,UnknownAc}, {szOpenPGPDir, szOpenPGPAlgoAttributesAuthentication, StoredOnSmartCard, 0x6E, 0xC3, UnknownAc }, + {szOpenPGPDir, szOpenPGPPUK, StoredOnSmartCard, 0xD3, 0, UnknownAc }, {NULL, szCARD_IDENTIFIER_FILE, StoredOnSmartCard, 0x4F, 0, EveryoneReadAdminWriteAc}, {NULL, szCARD_APPLICATION_FILE, Virtual, 0, 0, EveryoneReadAdminWriteAc}, {NULL, szCACHE_FILE, Virtual, 0, 0, EveryoneReadUserWriteAc}, @@ -70,7 +71,7 @@ DWORD dwFileCount = ARRAYSIZE(Files); -DWORD SCardDirectoryList(__in PCARD_DATA pCardData, +DWORD OCardDirectoryList(__in PCARD_DATA pCardData, __in PBYTE* pbResponse, __in_opt PDWORD pdwResponseSize) { // hardcoded @@ -84,8 +85,9 @@ return 0; } + // read file -DWORD SCardReadFile(__in PCARD_DATA pCardData, +DWORD OCardReadFile(__in PCARD_DATA pCardData, __in_opt PSTR szDirectory, __in PSTR szFile, __in PBYTE* ppbResponse, __in PDWORD pdwResponseSize) { @@ -109,12 +111,12 @@ } else { - if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; + if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; } if (fMatch) { fDirectoryFound = TRUE; - if (strcmp(szFile, Files[dwI].szFile) == 0) + if (_stricmp(szFile, Files[dwI].szFile) == 0) { fFileFound = TRUE; break; @@ -139,7 +141,7 @@ { pbCmd[2] = (BYTE) (Files[dwI].dwTag / 0x100); pbCmd[3] = (BYTE) (Files[dwI].dwTag % 0x100); - dwReturn = SCardGetData(pCardData, pbCmd, dwCmdSize, &pbData, pdwResponseSize); + dwReturn = OCardGetData(pCardData, pbCmd, dwCmdSize, &pbData, pdwResponseSize); if (dwReturn) { __leave; @@ -175,11 +177,11 @@ { if (szDirectory == NULL) { - if (strcmp(szFile, szCARD_APPLICATION_FILE) == 0) + if (_stricmp(szFile, szCARD_APPLICATION_FILE) == 0) { - dwReturn = SCardDirectoryList(pCardData, ppbResponse, pdwResponseSize); + dwReturn = OCardDirectoryList(pCardData, ppbResponse, pdwResponseSize); } - else if (strcmp(szFile, szCACHE_FILE) == 0) + else if (_stricmp(szFile, szCACHE_FILE) == 0) { *pdwResponseSize = sizeof(CARD_CACHE_FILE_FORMAT); *ppbResponse = pCardData->pfnCspAlloc(*pdwResponseSize); @@ -191,45 +193,11 @@ Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_FILE_NOT_FOUND %S",szFile); } } - else if (strcmp(szDirectory,szBASE_CSP_DIR) == 0) + else if (_stricmp(szDirectory,szBASE_CSP_DIR) == 0) { - if (strcmp(szFile, szCONTAINER_MAP_FILE) == 0) + if (_stricmp(szFile, szCONTAINER_MAP_FILE) == 0) { - PCONTAINER_MAP_RECORD pContainer = NULL; - *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; + dwReturn = OCardReadContainerMapFile(pCardData, ppbResponse, pdwResponseSize); } else { @@ -260,7 +228,7 @@ return dwReturn; } -DWORD SCardEnumFile(__in PCARD_DATA pCardData, +DWORD OCardEnumFile(__in PCARD_DATA pCardData, __in_opt PSTR szDirectory, __in PBYTE* pbResponse, __in PDWORD pdwResponseSize) { @@ -281,7 +249,7 @@ } else { - if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; + if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; } if (fMatch) { @@ -292,7 +260,7 @@ PBYTE pbData = NULL; DWORD dwSize; // check if the file exists and be read - dwNotExists = SCardReadFile(pCardData, szDirectory, Files[dwI].szFile, &pbData, &dwSize); + dwNotExists = OCardReadFile(pCardData, szDirectory, Files[dwI].szFile, &pbData, &dwSize); if (!dwNotExists) { pCardData->pfnCspFree(pbData); @@ -337,7 +305,7 @@ } // read file -DWORD SCardGetFileInfo(__in PCARD_DATA pCardData, +DWORD OCardGetFileInfo(__in PCARD_DATA pCardData, __in_opt PSTR szDirectory, __in PSTR szFile, __inout PCARD_FILE_INFO pCardFileInfo) { @@ -346,7 +314,7 @@ DWORD dwSize, dwI; __try { - dwReturn = SCardReadFile(pCardData, szDirectory, szFile, &pbData, &dwSize); + dwReturn = OCardReadFile(pCardData, szDirectory, szFile, &pbData, &dwSize); if (dwReturn) { __leave; @@ -356,10 +324,18 @@ pCardFileInfo->AccessCondition = InvalidAc; for(dwI = 0; dwI < dwFileCount; dwI++) { - if ((strcmp(szDirectory, Files[dwI].szDirectory) == 0) - || (!szDirectory && !Files[dwI].szDirectory) ) + BOOL fMatch = FALSE; + if (szDirectory == NULL) + { + if (!Files[dwI].szDirectory) fMatch = TRUE; + } + else + { + if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; + } + if (fMatch) { - if (strcmp(szFile, Files[dwI].szFile) == 0) + if (_stricmp(szFile, Files[dwI].szFile) == 0) { pCardFileInfo->AccessCondition = Files[dwI].dwAccess; break; @@ -375,7 +351,7 @@ return dwReturn; } -DWORD SCardWriteFile(__in PCARD_DATA pCardData, +DWORD OCardWriteFile(__in PCARD_DATA pCardData, __in_opt PSTR szDirectory, __in PSTR szFile, __in PBYTE pbData, __in DWORD dwSize) { @@ -404,12 +380,12 @@ } else { - if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; + if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; } if (fMatch) { fDirectoryFound = TRUE; - if (strcmp(szFile, Files[dwI].szFile) == 0) + if (_stricmp(szFile, Files[dwI].szFile) == 0) { fFileFound = TRUE; break; @@ -448,7 +424,7 @@ memcpy(pbCmd + 5, pbData, dwSize); } dwCmdSize = dwSize + 5; - dwReturn = SCardSendCommand(pCardData, pbCmd, dwCmdSize); + dwReturn = OCardSendCommand(pCardData, pbCmd, dwCmdSize); if (dwReturn) { __leave; @@ -470,14 +446,14 @@ return dwReturn; } -DWORD SCardDeleteFile(__in PCARD_DATA pCardData, +DWORD OCardDeleteFile(__in PCARD_DATA pCardData, __in_opt PSTR szDirectory, __in PSTR szFile) { - return SCardWriteFile(pCardData, szDirectory, szFile, NULL, 0); + return OCardWriteFile(pCardData, szDirectory, szFile, NULL, 0); } // just change the flag in Files -DWORD SCardCreateFile(__in PCARD_DATA pCardData, +DWORD OCardCreateFile(__in PCARD_DATA pCardData, __in_opt PSTR szDirectory, __in PSTR szFile) { DWORD dwI; @@ -495,12 +471,12 @@ } else { - if (Files[dwI].szDirectory && strcmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; + if (Files[dwI].szDirectory && _stricmp(szDirectory, Files[dwI].szDirectory) == 0) fMatch = TRUE; } if (fMatch) { fDirectoryFound = TRUE; - if (strcmp(szFile, Files[dwI].szFile) == 0) + if (_stricmp(szFile, Files[dwI].szFile) == 0) { fFileFound = TRUE; break;