Создание закрытого ключа ECDSA с учетом кривой и частного показателя?

Я новичок в cryptopp и некоторое время боролся с созданием закрытых ключей для подписи ECDSA.

У меня есть шестнадцатеричный закодированный частный показательE4A6CFB431471CFCAE491FD566D19C87082CF9FA7722D7FA24B2B3F5669DBEFB, Это хранится в виде строки.

Я хочу использовать это, чтобы подписать текстовый блок с помощью ECDSA. Мой код выглядит примерно так

string Sig::genSignature(const string& privKeyIn, const string& messageIn)
{
   AutoSeededRandomPool prng;
   ECDSA<ECP, SHA256>::PrivateKey privateKey;
   privateKey.AccessGroupParameters().Initialize(ASN1::secp256r1());
   privateKey.Load(StringSource(privKeyIn, true, NULL).Ref());
   ECDSA<ECP, SHA256>::Signer signer(privateKey);

   // Determine maximum size, allocate a string with that size
   size_t siglen = signer.MaxSignatureLength();
   string signature(siglen, 0x00);

   // Sign, and trim signature to actual size
   siglen = signer.SignMessage(prng, (const byte *) messageIn.data(), (size_t) messageIn.length(),       (byte*)signature.data());
   signature.resize(siglen);
   cout << signature.data() << endl;
   return signature;
}

Этот код генерирует следующую ошибку в Visual Studio, когда я пытаюсь сделать privateKey.load (...)

First-chance exception at 0x7693C42D in DLLTest.exe: Microsoft C++ exception: CryptoPP::BERDecodeErr at memory location 0x0033EEA8.
Unhandled exception at 0x7693C42D in DLLTest.exe: Microsoft C++ exception: CryptoPP::BERDecodeErr at memory location 0x0033EEA8.

Я предполагаю, что я делаю что-то немного глупо ... любая помощь будет здорово ???

PS У меня была похожая проблема с использованием ECDH для генерации GMAC, но я решил эту проблему, сохранив ключ как SECByteBlock, но этот «трюк», похоже, не работает в этом случае.

Ответы на вопрос(2)

Ваш ответ на вопрос