AtCmdSignaturePduSpecific/Src/EraGlonassUveos_PackageSign...

100 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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);}
}
}
}
//