public ECDsa GetECDsaPrivateKey() { if (_privateKey == null || _privateKey.IsInvalid) { return(null); } using (SafeEcKeyHandle ecKeyHandle = Interop.libcrypto.EVP_PKEY_get1_EC_KEY(_privateKey)) { return(new ECDsaOpenSsl(ecKeyHandle.DangerousGetHandle())); } }
internal static int EcKeyGetCurveName(SafeEcKeyHandle ecKey) { bool mustRelease = false; try { ecKey.DangerousAddRef(ref mustRelease); IntPtr ecGroup = EC_KEY_get0_group(ecKey.DangerousGetHandle()); int nid = EC_GROUP_get_curve_name(ecGroup); return(nid); } finally { if (mustRelease) { ecKey.DangerousRelease(); } } }