58 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
59 |
__leave; |
__leave; |
60 |
} |
} |
61 |
if (pInfo->dwVersion < CARD_RSA_KEY_DECRYPT_INFO_CURRENT_VERSION |
if (pInfo->dwVersion != CARD_RSA_KEY_DECRYPT_INFO_VERSION_ONE |
62 |
&& pCardData->dwVersion == CARD_DATA_CURRENT_VERSION) |
&& pInfo->dwVersion != CARD_RSA_KEY_DECRYPT_INFO_VERSION_TWO) |
63 |
{ |
{ |
64 |
Trace(WINEVENT_LEVEL_ERROR, L"ERROR_REVISION_MISMATCH"); |
Trace(WINEVENT_LEVEL_ERROR, L"ERROR_REVISION_MISMATCH"); |
65 |
dwReturn = ERROR_REVISION_MISMATCH; |
dwReturn = ERROR_REVISION_MISMATCH; |
68 |
if (pInfo->dwKeySpec != AT_KEYEXCHANGE) |
if (pInfo->dwKeySpec != AT_KEYEXCHANGE) |
69 |
{ |
{ |
70 |
Trace(WINEVENT_LEVEL_ERROR, L"AT_KEYEXCHANGE %d", pInfo->dwKeySpec); |
Trace(WINEVENT_LEVEL_ERROR, L"AT_KEYEXCHANGE %d", pInfo->dwKeySpec); |
71 |
dwReturn = SCARD_E_NO_KEY_CONTAINER ; |
dwReturn = SCARD_E_INVALID_PARAMETER ; |
72 |
__leave; |
__leave; |
73 |
} |
} |
74 |
if (pInfo->bContainerIndex != Confidentiality) |
if (pInfo->bContainerIndex != Confidentiality) |
82 |
{ |
{ |
83 |
__leave; |
__leave; |
84 |
} |
} |
85 |
dwReturn = SCardDecrypt(pCardData, pInfo); |
dwReturn = OCardDecrypt(pCardData, pInfo); |
86 |
|
if (dwReturn == SCARD_W_WRONG_CHV) |
87 |
|
{ |
88 |
|
dwReturn = SCARD_W_SECURITY_VIOLATION; |
89 |
|
} |
90 |
} |
} |
91 |
__finally |
__finally |
92 |
{ |
{ |
123 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
124 |
__leave; |
__leave; |
125 |
} |
} |
126 |
|
if ( ( pInfo->dwVersion != CARD_SIGNING_INFO_BASIC_VERSION ) && |
127 |
|
( pInfo->dwVersion != CARD_SIGNING_INFO_CURRENT_VERSION ) ) |
128 |
|
{ |
129 |
|
Trace(WINEVENT_LEVEL_ERROR, L"dwVersion == %d", pInfo->dwVersion); |
130 |
|
dwReturn = ERROR_REVISION_MISMATCH; |
131 |
|
__leave; |
132 |
|
} |
133 |
if ( pInfo->pbData == NULL ) |
if ( pInfo->pbData == NULL ) |
134 |
{ |
{ |
135 |
Trace(WINEVENT_LEVEL_ERROR, L"pInfo->pbData == NULL"); |
Trace(WINEVENT_LEVEL_ERROR, L"pInfo->pbData == NULL"); |
136 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
137 |
__leave; |
__leave; |
138 |
} |
} |
139 |
|
if (pInfo->dwKeySpec == AT_KEYEXCHANGE) |
140 |
|
{ |
141 |
|
Trace(WINEVENT_LEVEL_ERROR, L"AT_KEYEXCHANGE %d", pInfo->dwKeySpec); |
142 |
|
dwReturn = SCARD_E_NO_KEY_CONTAINER ; |
143 |
|
__leave; |
144 |
|
} |
145 |
|
if (pInfo->dwKeySpec != AT_SIGNATURE) |
146 |
|
{ |
147 |
|
Trace(WINEVENT_LEVEL_ERROR, L"AT_SIGNATURE %d", pInfo->dwKeySpec); |
148 |
|
dwReturn = SCARD_E_INVALID_PARAMETER ; |
149 |
|
__leave; |
150 |
|
} |
151 |
dwReturn = CheckContext(pCardData); |
dwReturn = CheckContext(pCardData); |
152 |
if ( dwReturn) |
if ( dwReturn) |
153 |
{ |
{ |
156 |
switch(pInfo->bContainerIndex) |
switch(pInfo->bContainerIndex) |
157 |
{ |
{ |
158 |
case Authentication: |
case Authentication: |
159 |
dwReturn = SCardAuthenticate(pCardData, pInfo); |
dwReturn = OCardAuthenticate(pCardData, pInfo); |
160 |
break; |
break; |
161 |
case Signature: |
case Signature: |
162 |
dwReturn = SCardSign(pCardData, pInfo); |
dwReturn = OCardSign(pCardData, pInfo); |
163 |
break; |
break; |
164 |
default: |
default: |
165 |
dwReturn = SCARD_E_NO_KEY_CONTAINER; |
dwReturn = SCARD_E_NO_KEY_CONTAINER; |
166 |
Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_NO_KEY_CONTAINER %d", pInfo->bContainerIndex); |
Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_NO_KEY_CONTAINER %d", pInfo->bContainerIndex); |
167 |
__leave; |
__leave; |
168 |
} |
} |
169 |
|
if (dwReturn == SCARD_W_WRONG_CHV) |
170 |
|
{ |
171 |
|
dwReturn = SCARD_W_SECURITY_VIOLATION; |
172 |
|
} |
173 |
} |
} |
174 |
__finally |
__finally |
175 |
{ |
{ |
216 |
dwReturn = ERROR_REVISION_MISMATCH; |
dwReturn = ERROR_REVISION_MISMATCH; |
217 |
__leave; |
__leave; |
218 |
} |
} |
219 |
|
dwReturn = CheckContext(pCardData); |
220 |
|
if ( dwReturn) |
221 |
|
{ |
222 |
|
__leave; |
223 |
|
} |
224 |
switch(dwKeySpec) |
switch(dwKeySpec) |
225 |
{ |
{ |
226 |
case AT_ECDHE_P256 : |
case AT_ECDHE_P256 : |