From 7fc458b7be71111b4c4a6e91f7b3ed6642b104a1 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Tue, 16 Jul 2013 14:12:20 +0000
Subject: [PATCH] CR-2005 Fix OPENDJ-1036 Cleanup passwords in memory?

---
 opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java |   29 ++++++++++++++++++++++++++---
 1 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java b/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
index b51327d..385da73 100644
--- a/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
+++ b/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
@@ -23,7 +23,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2010 ForgeRock AS.
+ *      Portions Copyright 2010-2013 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -192,6 +192,10 @@
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
+      finally
+      {
+        Arrays.fill(plainPlusSalt, (byte) 0);
+      }
     }
 
     // Append the salt to the hashed value and base64-the whole thing.
@@ -250,6 +254,10 @@
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
+      finally
+      {
+        Arrays.fill(plainPlusSalt, (byte) 0);
+      }
     }
 
     // Append the salt to the hashed value and base64-the whole thing.
@@ -334,6 +342,10 @@
 
         return false;
       }
+      finally
+      {
+        Arrays.fill(plainPlusSalt, (byte) 0);
+      }
     }
 
     return Arrays.equals(digestBytes, userDigestBytes);
@@ -403,6 +415,10 @@
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
+      finally
+      {
+        Arrays.fill(plainPlusSalt, (byte) 0);
+      }
     }
 
 
@@ -452,8 +468,15 @@
 
     synchronized (digestLock)
     {
-      return Arrays.equals(digestBytes,
-                                messageDigest.digest(plainPlusSaltBytes));
+      try
+      {
+        return Arrays.equals(digestBytes,
+                                  messageDigest.digest(plainPlusSaltBytes));
+      }
+      finally
+      {
+        Arrays.fill(plainPlusSaltBytes, (byte) 0);
+      }
     }
   }
 

--
Gitblit v1.10.0