38 |
{ |
{ |
39 |
case ROLE_SIGNATURE: |
case ROLE_SIGNATURE: |
40 |
case ROLE_AUTHENTICATION: |
case ROLE_AUTHENTICATION: |
|
case ROLE_CONFIDENTIALITY: |
|
41 |
dwMinPinSize = 6; |
dwMinPinSize = 6; |
42 |
|
break; |
43 |
case ROLE_PUK: |
case ROLE_PUK: |
44 |
dwMinPinSize = 1; |
// undocumented |
45 |
|
dwMinPinSize = 8; |
46 |
break; |
break; |
47 |
case ROLE_ADMIN: |
case ROLE_ADMIN: |
48 |
dwMinPinSize = 8; |
dwMinPinSize = 8; |
49 |
break; |
break; |
50 |
default: |
default: |
51 |
|
Trace(WINEVENT_LEVEL_ERROR, L"SCARD_E_INVALID_PARAMETER PinId = %d",PinId); |
52 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
53 |
__leave; |
__leave; |
54 |
} |
} |
68 |
{ |
{ |
69 |
case ROLE_SIGNATURE: |
case ROLE_SIGNATURE: |
70 |
case ROLE_AUTHENTICATION: |
case ROLE_AUTHENTICATION: |
|
case ROLE_CONFIDENTIALITY: |
|
71 |
dwMaxPinSize = pbResponse[1]; |
dwMaxPinSize = pbResponse[1]; |
72 |
break; |
break; |
73 |
case ROLE_PUK: |
case ROLE_PUK: |
108 |
{ |
{ |
109 |
case ROLE_SIGNATURE: |
case ROLE_SIGNATURE: |
110 |
case ROLE_AUTHENTICATION: |
case ROLE_AUTHENTICATION: |
|
case ROLE_CONFIDENTIALITY: |
|
111 |
*pdwCounter = pbResponse[4]; |
*pdwCounter = pbResponse[4]; |
112 |
break; |
break; |
113 |
case ROLE_PUK: |
case ROLE_PUK: |
150 |
pbCmd[3] = 0x81; |
pbCmd[3] = 0x81; |
151 |
break; |
break; |
152 |
case ROLE_AUTHENTICATION: |
case ROLE_AUTHENTICATION: |
|
case ROLE_CONFIDENTIALITY: |
|
153 |
pbCmd[3] = 0x82; |
pbCmd[3] = 0x82; |
154 |
break; |
break; |
155 |
case ROLE_ADMIN: |
case ROLE_ADMIN: |
162 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
163 |
__leave; |
__leave; |
164 |
} |
} |
165 |
|
if (cbPin > 256) |
166 |
|
{ |
167 |
|
Trace(WINEVENT_LEVEL_ERROR, L"Error failure PinId=%d cbPin = %d",PinId, cbPin); |
168 |
|
dwReturn = SCARD_E_INVALID_PARAMETER; |
169 |
|
__leave; |
170 |
|
} |
171 |
pbCmd[4] = (BYTE) cbPin; |
pbCmd[4] = (BYTE) cbPin; |
172 |
memcpy(pbCmd + 5, pbPin, cbPin); |
memcpy(pbCmd + 5, pbPin, cbPin); |
173 |
dwReturn = OCardSendCommand(pCardData, pbCmd, 5 + cbPin); |
dwReturn = OCardSendCommand(pCardData, pbCmd, 5 + cbPin); |
222 |
{ |
{ |
223 |
case ROLE_SIGNATURE: |
case ROLE_SIGNATURE: |
224 |
case ROLE_AUTHENTICATION: |
case ROLE_AUTHENTICATION: |
|
case ROLE_CONFIDENTIALITY: |
|
225 |
pbCmd[3] = 0x81; |
pbCmd[3] = 0x81; |
226 |
break; |
break; |
227 |
case ROLE_ADMIN: |
case ROLE_ADMIN: |
234 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
235 |
__leave; |
__leave; |
236 |
} |
} |
237 |
|
if (cbOldPin + cbNewPin > 256) |
238 |
|
{ |
239 |
|
Trace(WINEVENT_LEVEL_ERROR, L"Error failure PinId=%d cbOldPin = %d cbNewPin = %d",PinId, cbOldPin, cbNewPin); |
240 |
|
dwReturn = SCARD_E_INVALID_PARAMETER; |
241 |
|
__leave; |
242 |
|
} |
243 |
pbCmd[4] = (BYTE) (cbOldPin + cbNewPin); |
pbCmd[4] = (BYTE) (cbOldPin + cbNewPin); |
244 |
memcpy(pbCmd + 5, pbOldPin, cbOldPin); |
memcpy(pbCmd + 5, pbOldPin, cbOldPin); |
245 |
memcpy(pbCmd + 5 + cbOldPin, pbNewPin, cbNewPin); |
memcpy(pbCmd + 5 + cbOldPin, pbNewPin, cbNewPin); |
277 |
dwReturn = SCARD_E_INVALID_PARAMETER; |
dwReturn = SCARD_E_INVALID_PARAMETER; |
278 |
__leave; |
__leave; |
279 |
} |
} |
280 |
|
if (cbNewPin + cbAuthenticator> 256) |
281 |
|
{ |
282 |
|
Trace(WINEVENT_LEVEL_ERROR, L"Error failure PinId=%d cbNewPin = %d cbAuthenticator = %d",PinId, cbNewPin, cbAuthenticator); |
283 |
|
dwReturn = SCARD_E_INVALID_PARAMETER; |
284 |
|
__leave; |
285 |
|
} |
286 |
switch(PinId) |
switch(PinId) |
287 |
{ |
{ |
288 |
case ROLE_ADMIN: |
case ROLE_ADMIN: |
397 |
pPinInfo->PinPurpose = DigitalSignaturePin; |
pPinInfo->PinPurpose = DigitalSignaturePin; |
398 |
pPinInfo->dwChangePermission = CREATE_PIN_SET(ROLE_SIGNATURE); |
pPinInfo->dwChangePermission = CREATE_PIN_SET(ROLE_SIGNATURE); |
399 |
SET_PIN(pPinInfo->dwChangePermission, ROLE_AUTHENTICATION); |
SET_PIN(pPinInfo->dwChangePermission, ROLE_AUTHENTICATION); |
|
SET_PIN(pPinInfo->dwChangePermission, ROLE_CONFIDENTIALITY); |
|
400 |
pPinInfo->dwUnblockPermission = CREATE_PIN_SET(ROLE_ADMIN); |
pPinInfo->dwUnblockPermission = CREATE_PIN_SET(ROLE_ADMIN); |
401 |
SET_PIN(pPinInfo->dwUnblockPermission, ROLE_PUK); |
SET_PIN(pPinInfo->dwUnblockPermission, ROLE_PUK); |
402 |
pPinInfo->PinCachePolicy.dwVersion = PIN_CACHE_POLICY_CURRENT_VERSION; |
pPinInfo->PinCachePolicy.dwVersion = PIN_CACHE_POLICY_CURRENT_VERSION; |
408 |
pPinInfo->PinPurpose = AuthenticationPin; |
pPinInfo->PinPurpose = AuthenticationPin; |
409 |
pPinInfo->dwChangePermission = CREATE_PIN_SET(ROLE_SIGNATURE); |
pPinInfo->dwChangePermission = CREATE_PIN_SET(ROLE_SIGNATURE); |
410 |
SET_PIN(pPinInfo->dwChangePermission, ROLE_AUTHENTICATION); |
SET_PIN(pPinInfo->dwChangePermission, ROLE_AUTHENTICATION); |
|
SET_PIN(pPinInfo->dwChangePermission, ROLE_CONFIDENTIALITY); |
|
|
pPinInfo->dwUnblockPermission = CREATE_PIN_SET(ROLE_ADMIN); |
|
|
SET_PIN(pPinInfo->dwUnblockPermission, ROLE_PUK); |
|
|
pPinInfo->PinCachePolicy.dwVersion = PIN_CACHE_POLICY_CURRENT_VERSION; |
|
|
pPinInfo->PinCachePolicy.PinCachePolicyType = PinCacheNormal; |
|
|
pPinInfo->dwFlags = 0; |
|
|
break; |
|
|
case ROLE_CONFIDENTIALITY: |
|
|
pPinInfo->PinType = AlphaNumericPinType; |
|
|
pPinInfo->PinPurpose = EncryptionPin; |
|
|
pPinInfo->dwChangePermission = CREATE_PIN_SET(ROLE_SIGNATURE); |
|
|
SET_PIN(pPinInfo->dwChangePermission, ROLE_AUTHENTICATION); |
|
|
SET_PIN(pPinInfo->dwChangePermission, ROLE_CONFIDENTIALITY); |
|
411 |
pPinInfo->dwUnblockPermission = CREATE_PIN_SET(ROLE_ADMIN); |
pPinInfo->dwUnblockPermission = CREATE_PIN_SET(ROLE_ADMIN); |
412 |
SET_PIN(pPinInfo->dwUnblockPermission, ROLE_PUK); |
SET_PIN(pPinInfo->dwUnblockPermission, ROLE_PUK); |
413 |
pPinInfo->PinCachePolicy.dwVersion = PIN_CACHE_POLICY_CURRENT_VERSION; |
pPinInfo->PinCachePolicy.dwVersion = PIN_CACHE_POLICY_CURRENT_VERSION; |