--- trunk/OpenPGPminidriver/PublicDataOperations.c 2010/03/15 09:47:30 9 +++ trunk/OpenPGPminidriver/PublicDataOperations.c 2010/03/15 18:23:17 10 @@ -34,6 +34,7 @@ #define OPENPGP_FILE_OPTIONAL 1 #define OPENPGP_FILE_WRITE_ONLY 2 #define OPENPGP_FILE_NULL_LENGHT_EQUALS_MISSING 4 +#define OPENPGP_FILE_CONF_IS_AUTH 8 typedef struct _OPENPGP_FILE { @@ -70,7 +71,8 @@ {NULL, szCARD_APPLICATION_FILE, Virtual, 0, 0, EveryoneReadAdminWriteAc}, {NULL, szCACHE_FILE, Virtual, 0, 0, EveryoneReadUserWriteAc}, {szBASE_CSP_DIR, szCONTAINER_MAP_FILE, Virtual, 0, 0, EveryoneReadUserWriteAc}, - {szBASE_CSP_DIR, "ksc1", StoredOnSmartCard, 0x7F21, 0, EveryoneReadAdminWriteAc, OPENPGP_FILE_NULL_LENGHT_EQUALS_MISSING}, + {szBASE_CSP_DIR, "ksc1", StoredOnSmartCard, 0x7F21, 0, EveryoneReadAdminWriteAc, OPENPGP_FILE_NULL_LENGHT_EQUALS_MISSING | OPENPGP_FILE_CONF_IS_AUTH}, + {szBASE_CSP_DIR, "ksc2", StoredOnSmartCard, 0x7F21, 0, EveryoneReadAdminWriteAc, OPENPGP_FILE_NULL_LENGHT_EQUALS_MISSING}, }; @@ -237,7 +239,7 @@ __in_opt PSTR szDirectory, __in PBYTE* pbResponse, __in PDWORD pdwResponseSize) { - DWORD dwReturn = 0, dwReadFileReturn; + DWORD dwReturn = 0, dwTempReturn; DWORD dwI, dwSize; BOOL fDirectoryFound = FALSE; BOOL fAddToOuput; @@ -296,8 +298,8 @@ DWORD dwSize; fAddToOuput = FALSE; // check if the file exists and be read - dwReadFileReturn = OCardReadFile(pCardData, szDirectory, Files[dwI].szFile, &pbData, &dwSize); - if (!dwReadFileReturn) + dwTempReturn = OCardReadFile(pCardData, szDirectory, Files[dwI].szFile, &pbData, &dwSize); + if (!dwTempReturn) { pCardData->pfnCspFree(pbData); if (dwSize > 0) @@ -306,6 +308,14 @@ } } } + if (fAddToOuput && (Files[dwI].dwFlag & OPENPGP_FILE_CONF_IS_AUTH)) + { + dwTempReturn = OCardIsConfidentialityKeyTheSameThanAuthentication(pCardData); + if (dwReturn) + { + fAddToOuput = FALSE; + } + } if (fAddToOuput) { dwSize = (DWORD) strlen( Files[dwI].szFile) + 1;