OK, I added the test. Here's the new diff:

Index: src/unittests/com/uwyn/rife/tools/TestStringEncryptor.java
===================================================================
--- src/unittests/com/uwyn/rife/tools/TestStringEncryptor.java (revision 3717) +++ src/unittests/com/uwyn/rife/tools/TestStringEncryptor.java (working copy)
@@ -20,6 +20,7 @@
        public void testAdaptiveEncrypt()
        {
String encrypted_value_sha = "SHA:Hw/ gszrpwzs0GnKTaKbwetEqBb0="; + String encrypted_value_md5hex = "MD5HEX: 259dd8fa3d8b604bd39ad6116352a1b3"; String encrypted_value_md5 = "MD5:JZ3Y +j2LYEvTmtYRY1Khsw=="; String encrypted_value_obf = "OBF: 1w261wtu1ugo1vo41vmy1uh21wuk1w1c"; String encrypted_value_wrp = "WRP:XRadzcqykoN26sWuGe0j85TRoOaErinQr0+QKWsy1hlTMJdtRMkLUo+A4S/Wr3xcj +Va6jc0XLGfcWusuNMrcg==";
@@ -29,6 +30,7 @@
                try
                {
assertEquals(encrypted_value_sha, StringEncryptor.adaptiveEncrypt(value, "SHA:123")); + assertEquals(encrypted_value_md5hex, StringEncryptor.adaptiveEncrypt(value, "MD5HEX:123")); assertEquals(encrypted_value_md5, StringEncryptor.adaptiveEncrypt(value, "MD5:123")); assertEquals(encrypted_value_obf, StringEncryptor.adaptiveEncrypt(value, "OBF:123")); assertEquals(encrypted_value_wrp, StringEncryptor.adaptiveEncrypt(value, "WRP:123"));
@@ -100,6 +102,26 @@
                }
        }
+       public void testEncryptMD5HEX()
+       {
+               String value = "MD5HEX:somevalue";
+               String value2 = "somevalue";
+               String value3 = "somevalue2";
+               String value4 = "SHA:somevalue";
+
+    try
+               {
+ String encrypted = StringEncryptor.autoEncrypt (value); + assertTrue(StringEncryptor.matches(value2, encrypted)); + assertTrue(!StringEncryptor.matches(value3, encrypted)); + assertTrue(!StringEncryptor.matches(value4, encrypted));
+               }
+               catch (NoSuchAlgorithmException e)
+               {
+                       fail();
+               }
+       }
+
        public void testEncryptMD5()
        {
                String value = "MD5:somevalue";
Index: src/framework/com/uwyn/rife/tools/StringEncryptor.java
===================================================================
--- src/framework/com/uwyn/rife/tools/StringEncryptor.java (revision 3717) +++ src/framework/com/uwyn/rife/tools/StringEncryptor.java (working copy)
@@ -16,17 +16,20 @@
public class StringEncryptor extends EnumClass<String>
{
        public static final     String  IDENTIFIER_OBF = "OBF";
+       public static final String      IDENTIFIER_MD5HEX = "MD5HEX";
        public static final     String  IDENTIFIER_MD5 = "MD5";
        public static final     String  IDENTIFIER_SHA = "SHA";
        public static final     String  IDENTIFIER_WHIRLPOOL = "WRP";
        private static final    String  PREFIX_SUFFIX = ":";
private static final String PREFIX_OBF = IDENTIFIER_OBF +PREFIX_SUFFIX; + private static final String PREFIX_MD5HEX = IDENTIFIER_MD5HEX+PREFIX_SUFFIX; private static final String PREFIX_MD5 = IDENTIFIER_MD5 +PREFIX_SUFFIX; private static final String PREFIX_SHA = IDENTIFIER_SHA +PREFIX_SUFFIX; private static final String PREFIX_WHIRLPOOL = IDENTIFIER_WHIRLPOOL+PREFIX_SUFFIX; public static final StringEncryptor OBF = new StringEncryptor(PREFIX_OBF); + public static final StringEncryptor MD5HEX = new StringEncryptor(PREFIX_MD5HEX); public static final StringEncryptor MD5 = new StringEncryptor(PREFIX_MD5); public static final StringEncryptor SHA = new StringEncryptor(PREFIX_SHA); public static final StringEncryptor WHIRLPOOL = new StringEncryptor(PREFIX_WHIRLPOOL);
@@ -69,6 +72,18 @@
                        whirlpool.NESSIEfinalize(digest);
return PREFIX_WHIRLPOOL+Base64.encodeToString (digest, false);
                }
+               else if (value.startsWith(PREFIX_MD5HEX))
+               {
+ MessageDigest digest = MessageDigest.getInstance("MD5"); + digest.update(value.substring (PREFIX_MD5HEX.length()).getBytes());
+                       byte[] bytes = digest.digest();
+                       StringBuffer sb = new StringBuffer();
+                       for (int i = 0; i < bytes.length; ++i)
+                       {
+ sb.append(Integer.toHexString((bytes[i] & 0xFF) | 0x100).substring(1, 3));
+                       }
+                       return PREFIX_MD5HEX+sb.toString();
+               }
                else if (value.startsWith(PREFIX_MD5))
                {
MessageDigest digest = MessageDigest.getInstance("MD5");
@@ -108,6 +123,10 @@
                {
                        clearValue = PREFIX_WHIRLPOOL+clearValue;
                }
+               else if (encryptedValue.startsWith(PREFIX_MD5HEX))
+               {
+                       clearValue = PREFIX_MD5HEX+clearValue;
+               }
                else if (encryptedValue.startsWith(PREFIX_MD5))
                {
                        clearValue = PREFIX_MD5+clearValue;

On Apr 17, 2007, at 12:17 AM, Geert Bevin wrote:

Thanks for this Jeremy,

actually for any code to be committed, I need a test that asserts the behavior. Could you add what's needed to src/unittests/com/uwyn/ rife/tools/TestStringEncryptor.java and make sure the new assertions succeed.

_______________________________________________
Rife-users mailing list
Rife-users@uwyn.com
http://lists.uwyn.com/mailman/listinfo/rife-users

Reply via email to