Implement PBKDF2-based key derivation, random key generation,
and AES-CBC encryption/decryption using CryptoAPI.

Contributed by Ryan Sleevi <[email protected]>.

Original review URL: http://codereview.chromium.org/1558018

R=wtc,albertb
BUG=none
TEST=SymmetricKeyTest.* and EncryptorTest.*
Review URL: http://codereview.chromium.org/1528021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44106 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/base/crypto/rsa_private_key.h b/base/crypto/rsa_private_key.h
index ae410e0..9c8bfd44 100644
--- a/base/crypto/rsa_private_key.h
+++ b/base/crypto/rsa_private_key.h
@@ -13,9 +13,6 @@
 struct SECKEYPublicKeyStr;
 #elif defined(OS_MACOSX)
 #include <Security/cssm.h>
-#elif defined(OS_WIN)
-#include <windows.h>
-#include <wincrypt.h>
 #endif
 
 #include <list>
@@ -23,6 +20,10 @@
 
 #include "base/basictypes.h"
 
+#if defined(OS_WIN)
+#include "base/crypto/scoped_capi_types.h"
+#endif
+
 namespace base {
 
 // Used internally by RSAPrivateKey for serializing and deserializing
@@ -194,8 +195,8 @@
 #elif defined(OS_WIN)
   bool InitProvider();
 
-  HCRYPTPROV provider_;
-  HCRYPTKEY key_;
+  ScopedHCRYPTPROV provider_;
+  ScopedHCRYPTKEY key_;
 #elif defined(OS_MACOSX)
   CSSM_KEY key_;
 #endif