示例#1
0
        public static void AddSigner_ECDSA_EphemeralKey()
        {
            using (ECDsa ecdsa = ECDsa.Create())
                using (X509Certificate2 publicCertificate = Certificates.ECDsaP256Win.GetCertificate())
                    using (X509Certificate2 certificateWithKey = Certificates.ECDsaP256Win.TryGetCertificateWithPrivateKey(exportable: true))
                    {
                        if (certificateWithKey == null)
                        {
                            return;
                        }

                        using (ECDsa privateKey = certificateWithKey.GetECDsaPrivateKey())
                            using (ECDsa exportableKey = privateKey.MakeExportable())
                            {
                                ecdsa.ImportParameters(exportableKey.ExportParameters(true));
                            }
                        using (X509Certificate2 certWithEphemeralKey = publicCertificate.CopyWithPrivateKey(ecdsa))
                        {
                            ContentInfo content = new ContentInfo(new byte[] { 1, 2, 3 });
                            SignedCms   cms     = new SignedCms(content, false);
                            CmsSigner   signer  = new CmsSigner(certWithEphemeralKey);
                            cms.ComputeSignature(signer);
                        }
                    }
        }