如何测试 CNG 密钥是否可交换?

How can I test a CNG key for exchangeable?

我考了证:

X509Certificate2 x509 = store.Certificates.Find(X509FindType.FindBySubjectName, "CNGTestCert", false)[0];

现在我想获取 providertype 参数。但是我做不到x509.PrivateKey。 结果我使用了 var key = x509.GetRSAPrivateKey();。我怎样才能摆脱这个 key ProviderType 来决定 KeyNumber(看起来像这里:referencesource.microsoft.com)。或者有没有更简单的方法来测试私钥的密钥功能(密钥是为签名或交换而创建的)?

我找到了一种检查 CNG 证书是否可交换的方法。如果我通过 var privateKey = (cngCert.GetRSAPrivateKey() as RSACng).Key; 读取证书的私钥,我是否得到了 KeyUsage. “KeyAgreement”标志标记用于秘密协议生成和密钥交换的证书。

var privateKey = (cngCert.GetRSAPrivateKey() as RSACng).Key;
        
        if(privateKey.KeyUsage.HasFlag(CngKeyUsages.KeyAgreement))
        {
            //is for KeyExchange 
        }