void LogOutput(){ while(1){ Radio(); if (eraseLogs == true){ if(VerifyWriteReady() == true){ eraseLogs = false; while(VerifyWriteReady() == false){ Radio(); } FlashEraseChip(); while(VerifyWriteReady() == false){ Radio(); } SendEraseComplete(); } } if (dumpLogs == true){ flashOutputPacketNumber.val = 0; LogDump(); SendDumpComplete(); dumpLogs = false; } /*if (logRequested == true){ logRequested = false; RequestedLogDump(requestedNumber); }*/ } }
void MSLogDumpCB(int type,const char* logMessage,const int size) { char strTime[128] = "\0"; char strLog[4096] = "\0"; memset(strTime,0,sizeof(strTime)); memset(strLog,0,sizeof(strLog)); getLocalTime(strTime); sprintf(strLog,"%s: %s\n",strTime,logMessage); switch((MS_LOG_TYPE)type) { case MS_LOG_NONE: break; case MS_LOG_SCREEN: { printf("%s",strLog); } break; case MS_LOG_FILE: { //here check the current log file's size,if big than 5M,change to next one if (checkLogFileSize() != 0) return; fwrite(strLog,1,strlen(strLog),g_MSLog.logfd); fflush(g_MSLog.logfd); } break; case MS_LOG_NET: { int ret = sendto(g_sock, strLog, strlen(strLog), 0, (struct sockaddr *)&lServerAddr, sizeof(lServerAddr)); } #if 0 case MS_LOG_MEMORY: { LogDump(g_MSLog.logfd,g_MSLog.pMemBuffer,strLog,strlen(strLog)); } break; #endif default: { //here check the current log file's size,if big than 5M,change to next one if (checkLogFileSize() != 0) return; fwrite(strLog,1,strlen(strLog),g_MSLog.logfd); fflush(g_MSLog.logfd); } break; } }
int wmain(int argc, wchar_t* argv[]) { wchar_t* OutputPath = NULL; SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE); ConnectLogBuffer(STRACE_LOG_BUFFER_SIZE); if (argc < 2) LogDump(); else if(argc == 2) { OutputPath = _wcsdup(argv[1]); wprintf(L"output file is %s\n", OutputPath); LogToFile(OutputPath); } else { wprintf(L"no arguments will dump logs to screen.\n"); wprintf(L"supply a file path to dump to a file.\n"); return -1; } return 0; }
DWORD WINAPI CardSignData ( __in PCARD_DATA pCardData, __in PCARD_SIGNING_INFO pInfo ) { DWORD dwReturn = 0; BCRYPT_PKCS1_PADDING_INFO PkcsPadInfo; LogTrace(LOGTYPE_INFO, WHERE, "Enter API..."); /********************/ /* Check Parameters */ /********************/ if ( pCardData == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pCardData]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( pInfo == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( ( pInfo->dwVersion != CARD_SIGNING_INFO_BASIC_VERSION ) && ( pInfo->dwVersion != CARD_SIGNING_INFO_CURRENT_VERSION ) ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->dwVersion][0x%X]", pInfo->dwVersion); CLEANUP(ERROR_REVISION_MISMATCH); } if ( pInfo->pbData == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->pbData]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } LogTrace(LOGTYPE_ERROR, WHERE, "[pInfo->bContainerIndex][0x%X]", pInfo->bContainerIndex); if ( ( pInfo->bContainerIndex != 0 ) && ( pInfo->bContainerIndex != 1 ) ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->bContainerIndex]"); CLEANUP(SCARD_E_NO_KEY_CONTAINER); } LogTrace(LOGTYPE_ERROR, WHERE, "[pInfo->dwKeySpec][0x%X]", pInfo->dwKeySpec); if ( pInfo->dwKeySpec != AT_SIGNATURE ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->dwKeySpec]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } LogTrace(LOGTYPE_ERROR, WHERE, "[pInfo->dwSigningFlags][0x%X]", pInfo->dwSigningFlags); if ( pInfo->dwSigningFlags == 0xFFFFFFFF ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->dwSigningFlags]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( ( pInfo->dwSigningFlags & CARD_BUFFER_SIZE_ONLY ) == CARD_BUFFER_SIZE_ONLY) { LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwSigningFlags: CARD_BUFFER_SIZE_ONLY"); pInfo->cbSignedData = 128; CLEANUP(SCARD_S_SUCCESS); } if ( ( pInfo->dwSigningFlags & CARD_PADDING_INFO_PRESENT ) == CARD_PADDING_INFO_PRESENT) { LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwSigningFlags: CARD_PADDING_INFO_PRESENT"); switch(pInfo->dwPaddingType) { case CARD_PADDING_PKCS1: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: CARD_PADDING_PKCS1"); memcpy (&PkcsPadInfo, pInfo->pPaddingInfo, sizeof(PkcsPadInfo)); break; case CARD_PADDING_PSS: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: CARD_PADDING_PSS"); break; case CARD_PADDING_NONE: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: CARD_PADDING_NONE"); break; default: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: UNSUPPORTED"); break; } } LogTrace(LOGTYPE_ERROR, WHERE, "[pInfo->aiHashAlg][0x%X]"); if ( pInfo->aiHashAlg == 0xFFFFFFFF ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->aiHashAlg][0x%X]",pInfo->aiHashAlg); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( ( pInfo->aiHashAlg != CALG_MD2 ) && ( pInfo->aiHashAlg != CALG_MD4 ) && ( pInfo->aiHashAlg != CALG_MD5 ) && ( pInfo->aiHashAlg != CALG_SHA1 ) && ( pInfo->aiHashAlg != CALG_SHA_256 ) && ( pInfo->aiHashAlg != CALG_SHA_384 ) && ( pInfo->aiHashAlg != CALG_SHA_512 ) ) { LogTrace(LOGTYPE_ERROR, WHERE, "UNSUPPORTED parameter [pInfo->aiHashAlg][0x%X]",pInfo->aiHashAlg); CLEANUP(SCARD_E_UNSUPPORTED_FEATURE); } if ( gbLoggedOn == 0 ) { LogTrace(LOGTYPE_ERROR, WHERE, "Not logged on..."); CLEANUP( SCARD_W_SECURITY_VIOLATION); } #ifdef _DEBUG LogTrace(LOGTYPE_INFO, WHERE, "Data to be Signed...[%d]", pInfo->cbData); LogDump (pInfo->cbData, (char *)pInfo->pbData); #endif dwReturn = BeidSignData(pCardData, pInfo->aiHashAlg, pInfo->cbData, pInfo->pbData, &(pInfo->cbSignedData), &(pInfo->pbSignedData)); if ( dwReturn != 0 ) { LogTrace(LOGTYPE_ERROR, WHERE, "BeidSignData() returned [0x%X]", dwReturn); CLEANUP(dwReturn); } #ifdef _DEBUG LogTrace(LOGTYPE_INFO, WHERE, "Signature Data...[%d]", pInfo->cbSignedData); LogDump (pInfo->cbSignedData, (char *)pInfo->pbSignedData); #endif cleanup: LogTrace(LOGTYPE_INFO, WHERE, "Exit API..."); return(dwReturn); }
DWORD WINAPI CardSignData ( __in PCARD_DATA pCardData, __in PCARD_SIGNING_INFO pInfo ) { DWORD dwReturn = 0; BCRYPT_PKCS1_PADDING_INFO *PkcsPadInfo = NULL; //BCRYPT_PSS_PADDING_INFO *PssPadInfo = NULL; unsigned int uiHashAlgo = HASH_ALGO_NONE; BYTE bKeyNr = BELPIC_KEY_NON_REP; BYTE bAlgoRef = BELPIC_SIGN_ALGO_RSASSA_PKCS1; LogTrace(LOGTYPE_INFO, WHERE, "Enter API..."); /********************/ /* Check Parameters */ /********************/ if ( pCardData == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pCardData]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( pInfo == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( ( pInfo->dwVersion != CARD_SIGNING_INFO_BASIC_VERSION ) && ( pInfo->dwVersion != CARD_SIGNING_INFO_CURRENT_VERSION ) ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->dwVersion][0x%X]", pInfo->dwVersion); CLEANUP(ERROR_REVISION_MISMATCH); } if ( pInfo->pbData == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->pbData]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( pInfo->bContainerIndex == 0 ) { bKeyNr = BELPIC_KEY_AUTH; //see CardGetContainerProperty } else if (pInfo->bContainerIndex == 1 ) { bKeyNr = BELPIC_KEY_NON_REP; //see CardGetContainerProperty } else { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->bContainerIndex]"); CLEANUP(SCARD_E_NO_KEY_CONTAINER); } if ( pInfo->dwKeySpec != AT_SIGNATURE ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->dwKeySpec]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( pInfo->dwSigningFlags == 0xFFFFFFFF ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->dwSigningFlags]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } if ( ( pInfo->dwSigningFlags & CARD_BUFFER_SIZE_ONLY ) == CARD_BUFFER_SIZE_ONLY) { LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwSigningFlags: CARD_BUFFER_SIZE_ONLY"); pInfo->cbSignedData = 128; CLEANUP(SCARD_S_SUCCESS); } if ( pInfo->aiHashAlg == 0xFFFFFFFF ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->aiHashAlg][0x%X]",pInfo->aiHashAlg); CLEANUP(SCARD_E_INVALID_PARAMETER); } //First check if padding info is provided if ( ( pInfo->dwSigningFlags & CARD_PADDING_INFO_PRESENT ) == CARD_PADDING_INFO_PRESENT) { LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwSigningFlags: CARD_PADDING_INFO_PRESENT"); if ( pInfo->pPaddingInfo == NULL ) { LogTrace(LOGTYPE_ERROR, WHERE, "Invalid parameter [pInfo->pPaddingInfo]"); CLEANUP(SCARD_E_INVALID_PARAMETER); } switch(pInfo->dwPaddingType) { case CARD_PADDING_PKCS1: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: CARD_PADDING_PKCS1"); PkcsPadInfo = (BCRYPT_PKCS1_PADDING_INFO *) pInfo->pPaddingInfo; if ( PkcsPadInfo->pszAlgId == NULL ) { LogTrace(LOGTYPE_INFO, WHERE, "PkcsPadInfo->pszAlgId = NULL: CMD PKCS#1 Sign..."); uiHashAlgo = HASH_ALGO_NONE; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"MD2") == 0 ) { uiHashAlgo = HASH_ALGO_MD2; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"MD4") == 0 ) { uiHashAlgo = HASH_ALGO_MD4; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"MD5") == 0 ) { uiHashAlgo = HASH_ALGO_MD5; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"SHA1") == 0 ) { uiHashAlgo = HASH_ALGO_SHA1; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"SHA256") == 0 ) { uiHashAlgo = HASH_ALGO_SHA_256; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"SHA384") == 0 ) { uiHashAlgo = HASH_ALGO_SHA_384; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"SHA512") == 0 ) { uiHashAlgo = HASH_ALGO_SHA_512; } else { LogTrace(LOGTYPE_ERROR, WHERE, "[PkcsPadInfo->pszAlgId] unsupported..."); CLEANUP(SCARD_E_UNSUPPORTED_FEATURE); } break; case CARD_PADDING_PSS: //check card belpic applet version : if its < 1.7 -> not supported //first need to create workaround for incompatible card and minidriver architecture //(beidcard does not allow setting algo between pinpvalidation and signature, //and base csp doesn't show the padding algo before pin validation ) /*PssPadInfo = (BCRYPT_PSS_PADDING_INFO *) pInfo->pPaddingInfo; if ( wcscmp(PkcsPadInfo->pszAlgId, L"SHA1") == 0 ) { uiHashAlgo = HASH_ALGO_NONE; bAlgoRef = BELPIC_SIGN_ALGO_RSASSA_PSS_SHA1; } else if ( wcscmp(PkcsPadInfo->pszAlgId, L"SHA256") == 0 ) { uiHashAlgo = HASH_ALGO_NONE; bAlgoRef = BELPIC_SIGN_ALGO_RSASSA_PSS_SHA256; } else {*/ LogTrace(LOGTYPE_ERROR, WHERE, "CARD_PADDING_PSS unsupported..."); CLEANUP(SCARD_E_UNSUPPORTED_FEATURE); //} //LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: CARD_PADDING_PSS"); ////memcpy (&PssPadInfo, pInfo->pPaddingInfo, sizeof(PssPadInfo)); break; case CARD_PADDING_NONE: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: CARD_PADDING_NONE"); uiHashAlgo = HASH_ALGO_NONE; break; default: LogTrace(LOGTYPE_INFO, WHERE, "pInfo->dwPaddingType: UNSUPPORTED"); break; } } else { //no padding info is provided, defaulting to PKCS1 LogTrace(LOGTYPE_ERROR, WHERE, "[pInfo->pPaddingInfo] unsupported..."); switch(pInfo->aiHashAlg) { case CALG_MD2: uiHashAlgo = HASH_ALGO_MD2; break; case CALG_MD4: uiHashAlgo = HASH_ALGO_MD4; break; case CALG_MD5: uiHashAlgo = HASH_ALGO_MD5; break; case CALG_SHA1: //CALG_SHA: same value uiHashAlgo = HASH_ALGO_SHA1; break; case CALG_SHA_256: uiHashAlgo = HASH_ALGO_SHA_256; break; case CALG_SHA_384: uiHashAlgo = HASH_ALGO_SHA_384; break; case CALG_SHA_512: uiHashAlgo = HASH_ALGO_SHA_512; break; case CALG_SSL3_SHAMD5: uiHashAlgo = HASH_ALGO_NONE; break; case CALG_TLS1PRF: case CALG_MAC: case CALG_HASH_REPLACE_OWF: case CALG_HUGHES_MD5: case CALG_HMAC: CLEANUP(SCARD_E_UNSUPPORTED_FEATURE); break; default: LogTrace(LOGTYPE_ERROR, WHERE, "[pInfo->aiHashAlg] is zero"); CLEANUP(SCARD_E_INVALID_PARAMETER); /*uiHashAlgo = HASH_ALGO_NONE;*/ break; } } #ifdef _DEBUG LogTrace(LOGTYPE_INFO, WHERE, "BeidMSE [key=0x%.2x, algo=0x%.2x]", bKeyNr,bAlgoRef); #endif //dwReturn = BeidMSE(pCardData,bKeyNr,bAlgoRef); //if ( dwReturn != 0 ) //{ // LogTrace(LOGTYPE_ERROR, WHERE, "BeidMSE() returned [0x%X]", dwReturn); // CLEANUP(dwReturn); //} #ifdef _DEBUG LogTrace(LOGTYPE_INFO, WHERE, "Data to be Signed...[%d]", pInfo->cbData); LogDump (pInfo->cbData, (char *)pInfo->pbData); #endif dwReturn = BeidSignData(pCardData, uiHashAlgo, pInfo->cbData, pInfo->pbData, &(pInfo->cbSignedData), &(pInfo->pbSignedData)); if ( dwReturn != 0 ) { LogTrace(LOGTYPE_ERROR, WHERE, "BeidSignData() returned [0x%X]", dwReturn); CLEANUP(dwReturn); } #ifdef _DEBUG LogTrace(LOGTYPE_INFO, WHERE, "Signature Data...[%d]", pInfo->cbSignedData); LogDump (pInfo->cbSignedData, (char *)pInfo->pbSignedData); #endif cleanup: LogTrace(LOGTYPE_INFO, WHERE, "Exit API..."); return(dwReturn); }