52 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
53 |
__leave; |
__leave; |
54 |
} |
} |
55 |
dwReturn = CreateContext(pCardData); |
dwReturn = CreateContext(pCardData, dwFlags); |
|
if (dwReturn) |
|
|
{ |
|
|
__leave; |
|
|
} |
|
|
if (!(dwFlags & CARD_SECURE_KEY_INJECTION_NO_CARD_MODE)) |
|
|
{ |
|
|
if (pCardData->hSCardCtx == 0) |
|
|
{ |
|
|
Trace(WINEVENT_LEVEL_ERROR, L"pCardData->hSCardCtx == NULL"); |
|
|
dwReturn = SCARD_E_INVALID_PARAMETER; |
|
|
__leave; |
|
|
} |
|
|
if (pCardData->hScard == 0) |
|
|
{ |
|
|
Trace(WINEVENT_LEVEL_ERROR, L"pCardData->hScard == NULL"); |
|
|
dwReturn = SCARD_E_INVALID_PARAMETER; |
|
|
__leave; |
|
|
} |
|
|
} |
|
|
|
|
|
dwReturn = CheckContext(pCardData); |
|
|
if (dwReturn) |
|
|
{ |
|
|
__leave; |
|
|
} |
|
|
// select the application on the card |
|
|
dwReturn = SelectOpenPGPApplication(pCardData); |
|
56 |
if (dwReturn) |
if (dwReturn) |
57 |
{ |
{ |
58 |
__leave; |
__leave; |
59 |
} |
} |
60 |
|
|
|
/* CardInitializationAndDeconstruct.c */ |
|
61 |
pCardData->pfnCardDeleteContext = CardDeleteContext; |
pCardData->pfnCardDeleteContext = CardDeleteContext; |
|
|
|
|
/* CardPinOperation.c */ |
|
62 |
pCardData->pfnCardAuthenticatePin = CardAuthenticatePin; |
pCardData->pfnCardAuthenticatePin = CardAuthenticatePin; |
63 |
pCardData->pfnCardGetChallenge = CardGetChallenge; |
pCardData->pfnCardGetChallenge = CardGetChallenge; |
64 |
pCardData->pfnCardAuthenticateChallenge = CardAuthenticateChallenge; |
pCardData->pfnCardAuthenticateChallenge = CardAuthenticateChallenge; |
65 |
// CardDeauthenticate not implemented |
pCardData->pfnCardDeauthenticate = NULL; //CardDeauthenticate; |
|
pCardData->pfnCardDeauthenticate = CardDeauthenticate; |
|
|
pCardData->pfnCardAuthenticateEx = CardAuthenticateEx; |
|
|
pCardData->pfnCardGetChallengeEx = CardGetChallengeEx; |
|
|
pCardData->pfnCardDeauthenticateEx = CardDeauthenticateEx; |
|
|
pCardData->pfnCardChangeAuthenticatorEx = CardChangeAuthenticatorEx; |
|
66 |
pCardData->pfnCardUnblockPin = CardUnblockPin; |
pCardData->pfnCardUnblockPin = CardUnblockPin; |
67 |
pCardData->pfnCardChangeAuthenticator = CardChangeAuthenticator; |
pCardData->pfnCardChangeAuthenticator = CardChangeAuthenticator; |
|
|
|
|
/* CardPublicDataOperation.c */ |
|
68 |
pCardData->pfnCardCreateDirectory = CardCreateDirectory; |
pCardData->pfnCardCreateDirectory = CardCreateDirectory; |
69 |
pCardData->pfnCardDeleteDirectory = CardDeleteDirectory; |
pCardData->pfnCardDeleteDirectory = CardDeleteDirectory; |
70 |
pCardData->pfnCardReadFile = CardReadFile; |
pCardData->pfnCardReadFile = CardReadFile; |
74 |
pCardData->pfnCardDeleteFile = CardDeleteFile; |
pCardData->pfnCardDeleteFile = CardDeleteFile; |
75 |
pCardData->pfnCardEnumFiles = CardEnumFiles; |
pCardData->pfnCardEnumFiles = CardEnumFiles; |
76 |
pCardData->pfnCardQueryFreeSpace = CardQueryFreeSpace; |
pCardData->pfnCardQueryFreeSpace = CardQueryFreeSpace; |
|
|
|
|
/* CardCapabilities.c */ |
|
77 |
pCardData->pfnCardQueryCapabilities = CardQueryCapabilities; |
pCardData->pfnCardQueryCapabilities = CardQueryCapabilities; |
|
|
|
|
/* CardAndContainerProperties.c */ |
|
|
pCardData->pfnCardGetContainerProperty = CardGetContainerProperty; |
|
|
pCardData->pfnCardSetContainerProperty = CardSetContainerProperty; |
|
|
pCardData->pfnCardGetProperty = CardGetProperty; |
|
|
pCardData->pfnCardSetProperty = CardSetProperty; |
|
|
|
|
|
/* CardKeyContainer.c */ |
|
78 |
pCardData->pfnCardCreateContainer = CardCreateContainer; |
pCardData->pfnCardCreateContainer = CardCreateContainer; |
|
pCardData->pfnCardCreateContainerEx = CardCreateContainerEx; |
|
79 |
pCardData->pfnCardDeleteContainer = CardDeleteContainer; |
pCardData->pfnCardDeleteContainer = CardDeleteContainer; |
80 |
pCardData->pfnCardGetContainerInfo = CardGetContainerInfo; |
pCardData->pfnCardGetContainerInfo = CardGetContainerInfo; |
|
|
|
|
/* CardCryptographicOperations.c */ |
|
81 |
pCardData->pfnCardRSADecrypt = CardRSADecrypt; |
pCardData->pfnCardRSADecrypt = CardRSADecrypt; |
82 |
pCardData->pfnCardSignData = CardSignData; |
pCardData->pfnCardSignData = CardSignData; |
|
|
|
|
// should be null for RSA only card |
|
|
pCardData->pfnCardConstructDHAgreement = NULL; //CardConstructDHAgreement; |
|
|
pCardData->pfnCardDeriveKey = NULL; //CardDeriveKey; |
|
|
pCardData->pfnCardDestroyDHAgreement = NULL; //CardDestroyDHAgreement; |
|
|
|
|
83 |
pCardData->pfnCardSignData = CardSignData; |
pCardData->pfnCardSignData = CardSignData; |
84 |
pCardData->pfnCardQueryKeySizes = CardQueryKeySizes; |
pCardData->pfnCardQueryKeySizes = CardQueryKeySizes; |
85 |
|
|
86 |
/* Not found : |
// should be null for RSA only card |
87 |
The pfnCardDeriveKey, pfnCardDestroyDHAgreement, and pfnCspGetDHAgreement |
pCardData->pfnCardConstructDHAgreement = NULL; //CardConstructDHAgreement; |
88 |
members of the CARD_DATA structure are described in later sections. |
|
89 |
Starting with Version 5 of this specification, the necessary modifications |
if (pCardData->dwVersion >= CARD_DATA_VERSION_FIVE) |
90 |
to the pfnCardConstructDHAgreement function are handled through versioning |
{ |
91 |
the structure that is associated with that function. |
pCardData->pfnCardDeriveKey = NULL; //CardDeriveKey; |
92 |
=> what's the prototype for this function ? |
pCardData->pfnCardDestroyDHAgreement = NULL; //CardDestroyDHAgreement; |
93 |
*/ |
} |
94 |
|
if (pCardData->dwVersion >= CARD_DATA_VERSION_SIX) |
95 |
pCardData->pfnCspGetDHAgreement = NULL; |
{ |
96 |
|
pCardData->pfnCardGetChallengeEx = CardGetChallengeEx; |
97 |
|
pCardData->pfnCardAuthenticateEx = CardAuthenticateEx; |
98 |
|
pCardData->pfnCardChangeAuthenticatorEx = CardChangeAuthenticatorEx; |
99 |
|
pCardData->pfnCardDeauthenticateEx = CardDeauthenticateEx; |
100 |
|
pCardData->pfnCardGetContainerProperty = CardGetContainerProperty; |
101 |
|
pCardData->pfnCardSetContainerProperty = CardSetContainerProperty; |
102 |
|
pCardData->pfnCardGetProperty = CardGetProperty; |
103 |
|
pCardData->pfnCardSetProperty = CardSetProperty; |
104 |
|
} |
105 |
|
if (pCardData->dwVersion >= CARD_DATA_VERSION_SEVEN) |
106 |
|
{ |
107 |
|
pCardData->pfnMDImportSessionKey = MDImportSessionKey; |
108 |
|
pCardData->pfnMDEncryptData = MDEncryptData; |
109 |
|
pCardData->pfnCardImportSessionKey = CardImportSessionKey; |
110 |
|
pCardData->pfnCardGetSharedKeyHandle = CardGetSharedKeyHandle; |
111 |
|
pCardData->pfnCardGetAlgorithmProperty = CardGetAlgorithmProperty; |
112 |
|
pCardData->pfnCardGetKeyProperty = CardGetKeyProperty; |
113 |
|
pCardData->pfnCardSetKeyProperty = CardSetKeyProperty; |
114 |
|
pCardData->pfnCardProcessEncryptedData = CardProcessEncryptedData; |
115 |
|
pCardData->pfnCardDestroyKey = CardDestroyKey; |
116 |
|
pCardData->pfnCardCreateContainerEx = CardCreateContainerEx; |
117 |
|
} |
118 |
} |
} |
119 |
__finally |
__finally |
120 |
{ |
{ |
136 |
__inout PCARD_DATA pCardData |
__inout PCARD_DATA pCardData |
137 |
) |
) |
138 |
{ |
{ |
139 |
|
DWORD dwReturn; |
140 |
Trace(WINEVENT_LEVEL_VERBOSE, L"Enter"); |
Trace(WINEVENT_LEVEL_VERBOSE, L"Enter"); |
141 |
CleanContext(pCardData); |
dwReturn = CleanContext(pCardData); |
142 |
return 0; |
Trace(WINEVENT_LEVEL_VERBOSE, L"dwReturn = 0x%08X",dwReturn); |
143 |
|
return dwReturn; |
144 |
} |
} |