Exemplo n.º 1
0
        public void TestRoundTripWithCSPAndCertStoreProvider()
        {
            const string providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider";
            string       providerType = "24";

            string certificateName = string.Format(@"AETest - {0}", providerName);

            CertificateUtilityWin.CreateCertificate(certificateName, StoreLocation.CurrentUser.ToString(), providerName, providerType);

            X509Certificate2 cert            = CertificateUtilityWin.GetCertificate(certificateName, StoreLocation.CurrentUser);
            string           cspPath         = CertificateUtilityWin.GetCspPathFromCertificate(cert);
            string           certificatePath = String.Concat(@"CurrentUser/my/", cert.Thumbprint);

            SqlColumnEncryptionCertificateStoreProvider certProvider = new SqlColumnEncryptionCertificateStoreProvider();
            SqlColumnEncryptionCspProvider cspProvider = new SqlColumnEncryptionCspProvider();

            byte[] columnEncryptionKey = CertificateUtilityWin.GenerateRandomBytes(32);

            byte[] encryptedColumnEncryptionKeyUsingCert = certProvider.EncryptColumnEncryptionKey(certificatePath, @"RSA_OAEP", columnEncryptionKey);
            byte[] columnEncryptionKeyReturnedCert2CSP   = cspProvider.DecryptColumnEncryptionKey(cspPath, @"RSA_OAEP", encryptedColumnEncryptionKeyUsingCert);
            Assert.True(columnEncryptionKey.SequenceEqual(columnEncryptionKeyReturnedCert2CSP));

            byte[] encryptedColumnEncryptionKeyUsingCSP = cspProvider.EncryptColumnEncryptionKey(cspPath, @"RSA_OAEP", columnEncryptionKey);
            byte[] columnEncryptionKeyReturnedCSP2Cert  = certProvider.DecryptColumnEncryptionKey(certificatePath, @"RSA_OAEP", encryptedColumnEncryptionKeyUsingCSP);
            Assert.True(columnEncryptionKey.SequenceEqual(columnEncryptionKeyReturnedCSP2Cert));

            CertificateUtilityWin.RemoveCertificate(certificateName, StoreLocation.CurrentUser);
        }