using System.Security.Cryptography;
public static void Main()
Console.WriteLine(System.Runtime.InteropServices.RuntimeInformation.OSDescription + "\n");
byte[] keyMaterial = Convert.FromHexString("d25a4ea14eb6ad223393fd84ab59a62e");
ECDsa key = CreateKeyViaHKDF(keyMaterial, ECCurve.NamedCurves.nistP384, 48);
ECParameters privateKey = key.ExportParameters(true);
ECParameters publicKey = key.ExportParameters(false);
Console.WriteLine("Private key (raw, Base64): " + Convert.ToBase64String(privateKey.D));
Console.WriteLine("Public key, X (raw, Base64): " + Convert.ToBase64String(publicKey.Q.X));
Console.WriteLine("Public key, Y (raw, Base64): " + Convert.ToBase64String(publicKey.Q.Y));
Console.WriteLine("\nPrivate key (PKCS#8): " + key.ExportPkcs8PrivateKeyPem());
Console.WriteLine("\nPublic key (SPKI): " + key.ExportSubjectPublicKeyInfoPem());
private static ECDsa CreateKeyViaHKDF(byte[] keyMaterial, ECCurve ecCurve, int size)
ECParameters ecp = new ECParameters();
ecp.D = HKDF.DeriveKey(HashAlgorithmName.SHA512, keyMaterial, size, null, null);
return ECDsa.Create(ecp);