Я создал пары ключей для подписей DSA с эллиптической кривой, используя BouncyCastle, и мне удалось импортировать открытый ключ в ECDsaCng, используя XMLString в соответствии с RFC4050. Теперь я хочу также переместить закрытый ключ и не нашел решения. Самое близкое, что у меня есть, - это CngKey.Import.
CngKey.Import поддерживает формат PKCS # 8, поэтому, если вы можете получить ключи в действующий pkcs8, он должен работать. К сожалению, следующий код не совсем работает.
var privatekey = (ECPrivateKeyParameters) keyPair.Private;
var pkinfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privatekey);
byte[] pkcs8Blob = pkinfo.GetDerEncoded();
var importedKey = CngKey.Import(pkcs8Blob, CngKeyBlobFormat.Pkcs8PrivateBlob);
Это вызывает исключение:
System.Security.Cryptography.CryptographicException: обнаружено недопустимое значение тега ASN1.
GetDerEncoded должен вернуть действительный BLOB-объект Pkcs8, насколько я могу судить.
Как я могу использовать закрытый ключ, созданный с помощью BouncyCastle, в объекте ECDsaCng?