Загрузите закрытый ключ RSA в PEM в Crypto ++

Часто пользователь имеет закрытые ключи RSA в кодировке PEM. Crypto ++ требует, чтобы эти ключи были загружены в формате DER. Я просил людей вручную конвертировать свои файлы PEM в DER, используя openssl, например:

openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der

Это прекрасно работает, но некоторые люди не понимают, как это сделать, и не хотят. Поэтому я хотел бы автоматически конвертировать PEM-файлы в файлы DER.

Это так же просто, как убрать «----- BEGIN CERTIFICATE -----» и «----- END CERTIFICATE -----» из PEM, или требуется какое-то другое преобразование? Мне сказали, что между этими маркерами это просто кодированный с помощью b64 DER. Вот некоторый код, который демонстрирует проблему:

// load the private key
CryptoPP::RSA::PrivateKey PK;
CryptoPP::ByteQueue bytes;

try
{
    CryptoPP::FileSource File( rsa.c_str(), true, new CryptoPP::Base64Decoder() );
    File.TransferTo( bytes );
    bytes.MessageEnd();

    // This line Causes BERDecodeError when a PEM encoded file is used
    PK.Load( bytes );
}

catch ( CryptoPP::BERDecodeErr )
{
    // Convert PEM to DER and try to load the key again
}

Я хотел бы избегать системных вызовов openssl и выполнять преобразование полностью в Crypto ++, чтобы пользователи могли предоставлять любой формат, и все «просто работает». Спасибо за любой совет.

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

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