C#.BouncyCastle. Возможно ли вытащить сертификат и ключ из ГОСТового p12 созданного BouncyCastle?

Да, возможно извлечь сертификат и ключ из ГОСТового p12, созданного с использованием BouncyCastle в C#.

BouncyCastle предоставляет удобный API для работы с криптографией, включая поддержку ГОСТовых алгоритмов. Вам потребуются следующие зависимости:

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

Прежде всего, вам понадобится загрузить p12-файл, содержащий сертификат и приватный ключ:

string p12FilePath = "path/to/file.p12";
string p12Password = "password";

Pkcs12Store store = new Pkcs12StoreBuilder().Build();
using (FileStream fs = File.Open(p12FilePath, FileMode.Open))
{
    store.Load(fs, p12Password.ToCharArray());
}

Затем вы можете получить сертификат из хранилища:

string alias = store.Aliases.Cast<string>().FirstOrDefault();
X509CertificateEntry certificateEntry = store.GetCertificate(alias);
X509Certificate2 certificate = new X509Certificate2(certificateEntry.Certificate.GetEncoded());

Также вы можете получить приватный ключ:

AsymmetricKeyEntry privateKeyEntry = store.GetKey(alias);
RsaPrivateCrtKeyParameters rsaPrivateParams = (RsaPrivateCrtKeyParameters)privateKeyEntry.Key;
RSA rsaPrivateKey = DotNetUtilities.ToRSA(rsaPrivateParams);

Теперь у вас есть сертификат certificate и приватный ключ rsaPrivateKey, которые вы можете использовать в своей программе C# для выполнения различных криптографических операций.

Не забывайте обрабатывать возможные исключения, такие как неправильный пароль для p12-файла или отсутствие ключа/сертификата с заданным alias.

Однако, учтите, что использование ГОСТовых алгоритмов может потребовать установки соответствующего провайдера криптографии, такого как CryptoPro CSP или CRYPT32. Если у вас возникнут проблемы с ГОСТовыми алгоритмами, убедитесь, что вы правильно настроили окружение для их поддержки.