차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
ko:bs2_setcustomcardconfig [2023/08/31 21:18]
kkshin [샘플코드(C#)]
ko:bs2_setcustomcardconfig [2023/08/31 21:38] (현재)
kkshin [샘플코드(C++)]
줄 32: 줄 32:
 <file cpp sample_setcustomcardconfig.cpp>​ <file cpp sample_setcustomcardconfig.cpp>​
  ConfigControl cc(context);​  ConfigControl cc(context);​
 + DeviceControl dc(context);​
 + BS2DeviceCapabilities capabilies = { 0, };
  BS2CustomCardConfig config = { 0, };  BS2CustomCardConfig config = { 0, };
  
  BS2_DEVICE_ID id = Utility::​getSelectedDeviceID(device);​  BS2_DEVICE_ID id = Utility::​getSelectedDeviceID(device);​
- int sdkResult = cc.getCustomCardConfig(id,​ config);+ 
 + int sdkResult = dc.getDeviceCapabilities(id,​ capabilies);​ 
 + if (BS_SDK_SUCCESS != sdkResult) 
 + return sdkResult;​ 
 + 
 + if (!capabilies.customSmartCardSupported) 
 +
 + TRACE("​Not supported function."​);​ 
 + return BS_SDK_ERROR_NOT_SUPPORTED;​ 
 +
 + 
 + sdkResult = cc.getCustomCardConfig(id,​ config);
  if (BS_SDK_SUCCESS != sdkResult)  if (BS_SDK_SUCCESS != sdkResult)
  return sdkResult;  return sdkResult;
줄 71: 줄 84:
  if (Utility::​isYes("​Do you want to change desfire custom card settings?"​))  if (Utility::​isYes("​Do you want to change desfire custom card settings?"​))
  {  {
- memset(&​config.desfire.primaryKey0x0, sizeof(config.desfire.primaryKey)); + msg = "​Please enter a operation mode for desfire ​card(0: Legacy1: Advanced(AppLevelKey))"
- oss << "​Please enter the hexadecimal " << sizeof(config.desfire.primaryKey<< "​-bytes primary key for desfire card." << endl; + config.desfire.operationMode = (uint8_t)Utility::getInput<uint32_t>(msg);
- oss << " [Like 12 34 56 ... EF]" << endl; +
- Utility::getLineHexaString<uint8_t>(oss.str(), config.desfire.primaryKey,​ sizeof(config.desfire.primaryKey));+
  
- if (config.useSecondaryKey)+ if (DESFIRECARD_OPERATION_MODE_LEGACY == config.desfire.operationMode)
  {  {
- memset(&​config.desfire.secondaryKey, 0x0, sizeof(config.desfire.secondaryKey));+ memset(&​config.desfire.primaryKey, 0x0, sizeof(config.desfire.primaryKey));
  oss.str(""​);​  oss.str(""​);​
- oss << "​Please enter the hexadecimal " << sizeof(config.desfire.secondaryKey) << "​-bytes ​secondary ​key for desfire card." << endl;+ oss << "​Please enter the hexadecimal " << sizeof(config.desfire.primaryKey) << "​-bytes ​primary ​key for desfire card." << endl;
  oss << " [Like 12 34 56 ... EF]" << endl;  oss << " [Like 12 34 56 ... EF]" << endl;
- Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.secondaryKey, sizeof(config.desfire.secondaryKey)); + Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.primaryKey, sizeof(config.desfire.primaryKey));
- }+
  
- oss.str(""​);​ + if (config.useSecondaryKey) 
- oss << "​Please enter the hexadecimal " << sizeof(config.desfire.appID) << "​-bytes ​appID for desfire card." << endl; +
- oss << " [Like 12 34 EF]" << endl; + memset(&​config.desfire.secondaryKey,​ 0x0, sizeof(config.desfire.secondaryKey));​ 
- Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.appID, sizeof(config.desfire.appID)); + oss.str(""​);​ 
- + oss << "​Please enter the hexadecimal " << sizeof(config.desfire.secondaryKey) << "​-bytes ​secondary key for desfire card." << endl; 
- msg = "​Please enter the fileID for desfire card.";​ + oss << " [Like 12 34 56 ... EF]" << endl; 
- config.desfire.fileID = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​ + Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.secondaryKey, sizeof(config.desfire.secondaryKey)); 
- msg = "​Please enter a encryption type for desfire card. (0: DES/3DES, 1: AES)";​ + } 
- config.desfire.encryptionType = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​ + } 
- msg = "​Please enter a operation mode for desfire card. (0: Legacy, 1: Advanced(AppLevelKey))";​ + else // DESFIRECARD_OPERATION_MODE_APPLEVELKEY
- config.desfire.operationMode = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​ +
- msg = "​Please enter the card data size of desfire card.";​ +
- config.desfire.dataSize = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​ +
- msg = "​Please enter the skip bytes of desfire card.";​ +
- config.desfire.skipBytes = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​ +
- +
- if (config.desfire.operationMode == DESFIRECARD_OPERATION_MODE_APPLEVELKEY)+
  {  {
  memset(&​config.desfire.desfireAppKey.appMasterKey,​ 0x0, sizeof(config.desfire.desfireAppKey.appMasterKey));​  memset(&​config.desfire.desfireAppKey.appMasterKey,​ 0x0, sizeof(config.desfire.desfireAppKey.appMasterKey));​
줄 116: 줄 119:
  oss << " [Like 12 34 56 ... EF]" << endl;  oss << " [Like 12 34 56 ... EF]" << endl;
  Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.desfireAppKey.fileReadKey,​ sizeof(config.desfire.desfireAppKey.fileReadKey));​  Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.desfireAppKey.fileReadKey,​ sizeof(config.desfire.desfireAppKey.fileReadKey));​
- 
- oss.str(""​);​ 
- oss << "​Please enter the hexadecimal " << sizeof(config.desfire.desfireAppKey.fileWriteKey) << "​-bytes fileWriteKey for desfire card." << endl; 
- oss << " [Like 12 34 56 ... EF]" << endl; 
- Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.desfireAppKey.fileWriteKey,​ sizeof(config.desfire.desfireAppKey.fileWriteKey));​ 
  
  msg = "​Please enter the fileReadKeyNumber of desfire card.";​  msg = "​Please enter the fileReadKeyNumber of desfire card.";​
  config.desfire.desfireAppKey.fileReadKeyNumber = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​  config.desfire.desfireAppKey.fileReadKeyNumber = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​
- msg = "​Please enter the fileWriteKeyNumber of desfire card.";​ 
- config.desfire.desfireAppKey.fileWriteKeyNumber = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​ 
  }  }
 +
 + oss.str(""​);​
 + oss << "​Please enter the hexadecimal " << sizeof(config.desfire.appID) << "​-bytes appID for desfire card." << endl;
 + oss << " [Like 12 34 EF]" << endl;
 + Utility::​getLineHexaString<​uint8_t>​(oss.str(),​ config.desfire.appID,​ sizeof(config.desfire.appID));​
 +
 + msg = "​Please enter the fileID for desfire card.";​
 + config.desfire.fileID = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​
 + msg = "​Please enter a encryption type for desfire card. (0: DES/3DES, 1: AES)";
 + config.desfire.encryptionType = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​
 + msg = "​Please enter the card data size of desfire card.";​
 + config.desfire.dataSize = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​
 + msg = "​Please enter the skip bytes of desfire card.";​
 + config.desfire.skipBytes = (uint8_t)Utility::​getInput<​uint32_t>​(msg);​
  }  }
  
줄 134: 줄 144:
  config.formatID = (BS2_UID)Utility::​getInput<​uint32_t>​(msg);​  config.formatID = (BS2_UID)Utility::​getInput<​uint32_t>​(msg);​
  
- return ​cc.setCustomCardConfig(id,​ config);+ sdkResult = cc.setCustomCardConfig(id,​ config)
 + if (BS_SDK_SUCCESS != sdkResult) 
 + return sdkResult;​ 
 + 
 + oss.str(""​);​ 
 + oss << "To use the custom smart card function, you must turn off the Suprema smart card function."​ << endl; 
 + oss << "Do you want to change the card operation mode?";​ 
 + if (Utility::​isYes(oss.str())) 
 +
 + BS2SystemConfig sysConfig = { 0, }; 
 + sdkResult = cc.getSystemConfig(id,​ sysConfig);​ 
 + if (BS_SDK_SUCCESS != sdkResult) 
 + return sdkResult;​ 
 + 
 + uint32_t preMask = sysConfig.useCardOperationMask;​ 
 + 
 + // Turn off Suprema smart card 
 + sysConfig.useCardOperationMask &= ~(uint32_t)CARD_OPERATION_MASK_CLASSIC_PLUS;​ 
 + sysConfig.useCardOperationMask &= ~(uint32_t)CARD_OPERATION_MASK_DESFIRE_EV1;​ 
 + sysConfig.useCardOperationMask &= ~(uint32_t)CARD_OPERATION_MASK_SR_SE;​ 
 + sysConfig.useCardOperationMask &= ~(uint32_t)CARD_OPERATION_MASK_SEOS;​ 
 + 
 + // Turn on Custom smart card 
 + sysConfig.useCardOperationMask |= (uint32_t)CARD_OPERATION_MASK_CUSTOM_CLASSIC_PLUS;​ 
 + sysConfig.useCardOperationMask |= (uint32_t)CARD_OPERATION_MASK_CUSTOM_DESFIRE_EV1;​ 
 + 
 + // Apply 
 + sysConfig.useCardOperationMask |= (uint32_t)CARD_OPERATION_USE;​ 
 + 
 + sdkResult = cc.setSystemConfig(id,​ sysConfig);​ 
 + if (BS_SDK_SUCCESS == sdkResult) 
 + TRACE("​Card operation mode was changed 0x08d => 0x08d",​ preMask, sysConfig.useCardOperationMask);​ 
 +
 + 
 + return sdkResult;
 </​file>​ </​file>​