Я пытаюсь перенести настройку обмена ключами на ядро dotnet (превью 3.0) с поддержкой Linux. Для поддержки Linux кажется, что мне нужно использовать класс ECDiffieHellmanOpenSsl
, доступный в System.Security.Cryptography.OpenSsl
в Nuget. Я не могу понять, как сериализовать и десериализовать открытый ключ для связи между сервером и клиентом.
Используя эквивалентный класс CNG (ECDiffieHellmanCng), вы просто позвоните
ecdh.PublicKey.ToByteArray()
для сериализации ключа в байтовый массив, а затем, после того как ключ был отправлен другой стороне, эта сторона импортирует его, используя
EncKeyBlob = ecdh.DeriveKeyMaterial(CngKey.Import(otherpublickey, CngKeyBlobFormat.EccPublicBlob));
Однако, вызов ecdh.PublicKey.ToByteArray()
для ECDiffieHellmanOpenSsl выдает Unhandled Exception: System.PlatformNotSupportedException: Operation is not supported on this platform.
в Ubuntu 18.04.
Кроме того, я не вижу CngKey.Import()
эквивалента для OpenSSL-версии класса.
Что мне здесь не хватает?