Пишу программу, моделирующую генерацию общего ключа с использованием изогений эллиптических кривых. Изогении полностью реализованы в библиотеке Microsoft, программа только вызывает готовые функции этой библиотеки. При выполнении программы возникает исключение "нарушение прав доступа при исполнении по адресу 0x00000000" в выделенной строке. В чем может быть ошибка?
Текст программы:
struct KeysStruct {
unsigned char *PrivateKey;
unsigned char *PublicKey;
} KeysA, KeysB;
int main()
{
/*Инициализация эллиптической кривой*/
PCurveIsogenyStruct CurveIsogeny = { 0 };
extern CurveIsogenyStaticData CurveIsogeny_SIDHp751;
CurveIsogenyStaticData *PCurveData;
PCurveData = &CurveIsogeny_SIDHp751;
CurveIsogeny = SIDH_curve_allocate(PCurveData);
CRYPTO_STATUS Status = CRYPTO_SUCCESS;
if (CurveIsogeny == NULL)
{
printf("not work");
sleep(SEC);
return 0;
}
Status = SIDH_curve_initialize(CurveIsogeny, CurveIsogeny->RandomBytesFunction, PCurveData);
if (Status != CRYPTO_SUCCESS)
{
printf("not work");
sleep(SEC);
return 0;
}
/*Генерация ключа Алисы*/
unsigned int i, pbytes = (PCurveData->pwordbits + 7) / 8;
unsigned int obytes = (PCurveData->owordbits + 7) / 8;
Status = CRYPTO_SUCCESS;
bool ok = true;
srand(time(NULL));
KeysA.PrivateKey = (unsigned char*)calloc(1, obytes);
KeysA.PublicKey = (unsigned char*)calloc(1, 4 * 2 * pbytes);
Status = EphemeralKeyGeneration_A(KeysA.PrivateKey, KeysA.PublicKey, CurveIsogeny);
if (Status != CRYPTO_SUCCESS)
ok = false;
printf("work");
sleep(SEC);
return 0;
}