100 lines
2.8 KiB
C
100 lines
2.8 KiB
C
//
|
||
// 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);}
|
||
}
|
||
}
|
||
|
||
}
|
||
//
|
||
|