예제 #1
0
        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()));
            }
        }
예제 #2
0
        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();
                }
            }
        }