/[openpgpmdrv]/trunk/OpenPGPminidriver/PinOperations.c
ViewVC logotype

Diff of /trunk/OpenPGPminidriver/PinOperations.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10 by vletoux, Mon Mar 15 18:23:17 2010 UTC revision 11 by vletoux, Thu Mar 18 16:03:39 2010 UTC
# Line 38  DWORD CheckPinLength(__in PCARD_DATA  pC Line 38  DWORD CheckPinLength(__in PCARD_DATA  pC
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                  }                  }
# Line 66  DWORD CheckPinLength(__in PCARD_DATA  pC Line 68  DWORD CheckPinLength(__in PCARD_DATA  pC
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:
# Line 107  DWORD GetRemainingPin(__in PCARD_DATA  p Line 108  DWORD GetRemainingPin(__in PCARD_DATA  p
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:
# Line 150  DWORD VerifyPIN(__in PCARD_DATA  pCardDa Line 150  DWORD VerifyPIN(__in PCARD_DATA  pCardDa
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:
# Line 163  DWORD VerifyPIN(__in PCARD_DATA  pCardDa Line 162  DWORD VerifyPIN(__in PCARD_DATA  pCardDa
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);
# Line 217  DWORD ChangePIN(__in PCARD_DATA  pCardDa Line 222  DWORD ChangePIN(__in PCARD_DATA  pCardDa
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:
# Line 230  DWORD ChangePIN(__in PCARD_DATA  pCardDa Line 234  DWORD ChangePIN(__in PCARD_DATA  pCardDa
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);
# Line 267  DWORD ResetUserPIN(__in PCARD_DATA  pCar Line 277  DWORD ResetUserPIN(__in PCARD_DATA  pCar
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:
# Line 381  DWORD GetPinInfo(DWORD __in dwPinIndex, Line 397  DWORD GetPinInfo(DWORD __in dwPinIndex,
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;
# Line 393  DWORD GetPinInfo(DWORD __in dwPinIndex, Line 408  DWORD GetPinInfo(DWORD __in dwPinIndex,
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;

Legend:
Removed from v.10  
changed lines
  Added in v.11

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26