Cleanup (formatting; K.O. comments; code duplication)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Tue, 10 Feb 2015 19:57:53 +0000 (20:57 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Tue, 10 Feb 2015 19:57:53 +0000 (20:57 +0100)
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/windows/WindowsCryptUtils.java

index 262f177ac561dd5f0fd31ca412f9052ed9b59726..348a8f28cade065077c4c5e7847fa3a56caeaca5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,18 +37,12 @@ public class WindowsCryptUtils {
   /**
    * Unicode options for the libraries
    */
-  static final Map<String, Object> UNICODE_OPTIONS = new HashMap<String, Object>();
+  static final Map<String, Object> UNICODE_OPTIONS = new HashMap<String, Object>() {{
+    put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
+    put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
+  }};
 
-  static {
-    UNICODE_OPTIONS.put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
-    UNICODE_OPTIONS.put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
-  }
-
-  /**
-   * The private constructor
-   */
-  private WindowsCryptUtils() {
-  }
+  private WindowsCryptUtils() { }
 
   /**
    * Protect the specified byte range
@@ -70,16 +64,7 @@ public class WindowsCryptUtils {
     Crypt32 crypt = Crypt32.INSTANCE;
     Kernel32 kernel = Kernel32.INSTANCE;
     boolean rc = crypt.CryptProtectData(in, "Master Key", Pointer.NULL, Pointer.NULL, Pointer.NULL, new W32API.DWORD(0), out);
-    if (!rc) {
-      W32API.DWORD drc = kernel.GetLastError();
-      throw new MasterPasswordUnavailableException("CryptProtectData failed: " + drc.intValue());
-    }
-    else {
-      byte[] output = new byte[out.cbData.intValue()];
-      out.pbData.read(0, output, 0, output.length);
-      kernel.LocalFree(out.pbData);
-      return output;
-    }
+    return getBytes(out, kernel, rc);
   }
 
   /**
@@ -102,6 +87,10 @@ public class WindowsCryptUtils {
     Crypt32 crypt = Crypt32.INSTANCE;
     Kernel32 kernel = Kernel32.INSTANCE;
     boolean rc = crypt.CryptUnprotectData(in, Pointer.NULL, Pointer.NULL, Pointer.NULL, Pointer.NULL, new W32API.DWORD(0), out);
+    return getBytes(out, kernel, rc);
+  }
+
+  private static byte[] getBytes(Crypt32.DATA_BLOB out, Kernel32 kernel, boolean rc) throws MasterPasswordUnavailableException {
     if (!rc) {
       W32API.DWORD drc = kernel.GetLastError();
       throw new MasterPasswordUnavailableException("CryptProtectData failed: " + drc.intValue());
@@ -114,25 +103,9 @@ public class WindowsCryptUtils {
     }
   }
 
-  /**
-   * Windows cryptography functions
-   */
   public interface Crypt32 extends StdCallLibrary {
     Crypt32 INSTANCE = (Crypt32)Native.loadLibrary("Crypt32", Crypt32.class, UNICODE_OPTIONS);
 
-    /*
-  BOOL WINAPI CryptProtectData(
-    __in      DATA_BLOB *pDataIn,
-    __in      LPCWSTR szDataDescr,
-    __in      DATA_BLOB *pOptionalEntropy,
-    __in      PVOID pvReserved,
-    __in_opt  CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
-    __in      DWORD dwFlags,
-    __out     DATA_BLOB *pDataOut
-  );
-     */
-
-
     boolean CryptProtectData(DATA_BLOB pDataIn,
                              String szDataDescr,
                              Pointer pOptionalEntropy,
@@ -141,20 +114,6 @@ public class WindowsCryptUtils {
                              W32API.DWORD dwFlags,
                              DATA_BLOB pDataOut);
 
-
-    /*
-  BOOL WINAPI CryptUnprotectData(
-    __in       DATA_BLOB *pDataIn,
-    __out_opt  LPWSTR *ppszDataDescr,
-    __in_opt   DATA_BLOB *pOptionalEntropy,
-    __in       PVOID pvReserved,
-    __in_opt   CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
-    __in       DWORD dwFlags,
-    __out      DATA_BLOB *pDataOut
-  );
-
-     */
-
     boolean CryptUnprotectData(DATA_BLOB pDataIn,
                                Pointer ppszDataDescr,
                                Pointer pOptionalEntropy,
@@ -163,36 +122,16 @@ public class WindowsCryptUtils {
                                W32API.DWORD dwFlags,
                                DATA_BLOB pDataOut);
 
-
-    /**
-     * Data holder
-     */
     class DATA_BLOB extends Structure implements Structure.ByReference {
       public W32API.DWORD cbData;
       public Pointer pbData;
     }
-
   }
 
-  /**
-   * Wrapper for windows kernel functions
-   */
   public interface Kernel32 extends StdCallLibrary {
-    /**
-     * The loaded library instance
-     */
     Kernel32 INSTANCE = (Kernel32)Native.loadLibrary("Kernel32", Kernel32.class, UNICODE_OPTIONS);
 
-    /*
-    HLOCAL WINAPI LocalFree(
-      HLOCAL hMem
-    );*/
-
     Pointer LocalFree(Pointer hMem);
-    /*
-
-  DWORD WINAPI GetLastError(void);*/
-
     W32API.DWORD GetLastError();
   }
 }