// // Created by zemon on 07.02.23. // #include "SignaturePduSpecific.h" #include "SystemDelayInterface.h" #include "stdbool.h" #define LOGGER &env->slog->logger #define LOG_SIGN "ПОДПИСЬ ТСК" bool vEraReadyModeSignOnePacket( tSignPack *env, uint8_t apduChanel, uint8_t *packet, uint16_t length, uint8_t *macResult, uint8_t *keyResult ) { uint16_t left = length; uint16_t offset = 0; uint8_t lengthData = 0; volatile AtCommandResult result; while(left){ lengthData = left<255?left:255; result = AtCmdSignaturePdu_UpdateData(env->atCmd, apduChanel, lengthData, packet+offset); if(result==AT_OK){ LoggerInfoStatic(LOGGER, LOG_SIGN, "Подпись добавлена") }else{ LoggerInfoStatic(LOGGER, LOG_SIGN, "UpdateData error") return false; } offset+=lengthData; left-=lengthData; } SystemDelayMs(1000); result = AtCmdSignaturePdu_SignData(env->atCmd,apduChanel, macResult,keyResult); if(result==AT_OK){ LoggerInfoStatic(LOGGER, LOG_SIGN, "Пакет подписан") return true; }else{ LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка подписи") return false; } } //void EraGlonassUveos_GetOnePackSignature(tSignPack *env) //{ // uint16_t packetLength = 0; // uint8_t packet[320] = {0}; // uint8_t macSign[33]; // uint8_t keyId; // vEraReadyModeSignOnePacket( // env, // env->pduChanal, // packet, // packetLength, // macSign, // &keyId // ); //} void EraTSK_GetPackSignature(tSignPack *env, uint8_t *packetg, uint16_t packLenght) { uint8_t chanNum; volatile AtCommandResult res; LoggerInfoStatic(LOGGER, LOG_SIGN, "Попытка получить канал подписи из апплета") res = AtCmdSignaturePdu_GetChannalNum(env->atCmd,&chanNum); if (res == AT_OK) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Канал подписи на апплете получен и открыт, открытие апплета") res = AtCmdSignaturePdu_SelectApplet(env->atCmd, chanNum); if (res == AT_OK) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Апплет открыт") env->pduChanal = chanNum; uint8_t macSign[33]; uint8_t keyId; volatile bool res = vEraReadyModeSignOnePacket( env, env->pduChanal, packetg, packLenght, macSign, &keyId ); LoggerInfoStatic(LOGGER, LOG_SIGN, "-") LoggerInfo(LOGGER, LOG_SIGN, (char*)macSign, sizeof(macSign)) // while (1){ SystemDelayMs(10);} } } } //