diff --git a/scm-core/src/main/java/sonia/scm/security/HashBuilder.java b/scm-core/src/main/java/sonia/scm/security/HashBuilder.java new file mode 100644 index 0000000000..e9cb544cb7 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/HashBuilder.java @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + * @since 1.13 + */ +public interface HashBuilder +{ + + /** + * Method description + * + * + * @return + */ + public HashBuilder createSalt(); + + /** + * Method description + * + * + * @param length + * + * @return + */ + public HashBuilder createSalt(int length); + + /** + * Method description + * + * + * @return + */ + public byte[] toByteArray(); + + /** + * Method description + * + * + * @return + */ + public String toHexString(); + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public String getHexSalt(); + + /** + * Method description + * + * + * @return + */ + public byte[] getSalt(); + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param iterations + * + * @return + */ + public HashBuilder setIterations(int iterations); + + /** + * Method description + * + * + * @param salt + * + * @return + */ + public HashBuilder setSalt(byte[] salt); + + /** + * Method description + * + * + * @param value + * + * @return + */ + public HashBuilder setValue(String value); +} diff --git a/scm-core/src/main/java/sonia/scm/security/MD5HashBuilder.java b/scm-core/src/main/java/sonia/scm/security/MD5HashBuilder.java new file mode 100644 index 0000000000..21676e47ed --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/MD5HashBuilder.java @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + */ +public class MD5HashBuilder extends MessageDigestHashBuilder +{ + + /** Field description */ + public static final String DIGEST = "MD5"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public MD5HashBuilder() + { + super(DIGEST, null, null, 0); + } + + /** + * Constructs ... + * + * + * @param value + */ + public MD5HashBuilder(String value) + { + super(DIGEST, value, null, 0); + } + + /** + * Constructs ... + * + * + * @param value + * @param salt + */ + public MD5HashBuilder(String value, byte[] salt) + { + super(DIGEST, value, salt, 0); + } + + /** + * Constructs ... + * + * + * @param value + * @param salt + * @param iterations + */ + public MD5HashBuilder(String value, byte[] salt, int iterations) + { + super(DIGEST, value, salt, iterations); + } +} diff --git a/scm-core/src/main/java/sonia/scm/security/MessageDigestHashBuilder.java b/scm-core/src/main/java/sonia/scm/security/MessageDigestHashBuilder.java new file mode 100644 index 0000000000..ac1023021a --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/MessageDigestHashBuilder.java @@ -0,0 +1,276 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.util.Util; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.UnsupportedEncodingException; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +/** + * + * @author Sebastian Sdorra + * @since 1.13 + */ +public class MessageDigestHashBuilder implements HashBuilder +{ + + /** Field description */ + public static final int DEFAULT_SALT_LENGTH = 8; + + /** Field description */ + public static final String ENCODING = "UTF-8"; + + /** Field description */ + public static final String RANDOM_INSTANCE = "SHA1PRNG"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + * + * @param digest + * @param value + * @param salt + * @param iterations + */ + public MessageDigestHashBuilder(String digest, String value, byte[] salt, + int iterations) + { + this.digest = digest; + this.value = value; + this.salt = salt; + this.iterations = iterations; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public HashBuilder createSalt() + { + return createSalt(DEFAULT_SALT_LENGTH); + } + + /** + * Method description + * + * + * @param length + * + * @return + */ + @Override + public HashBuilder createSalt(int length) + { + try + { + SecureRandom random = SecureRandom.getInstance(RANDOM_INSTANCE); + + this.salt = new byte[length]; + random.nextBytes(salt); + } + catch (NoSuchAlgorithmException ex) + { + throw new SecurityException("could not find secure random instance"); + } + + return this; + } + + /** + * Method description + * + * + * @return + */ + @Override + public byte[] toByteArray() + { + byte[] input = null; + + try + { + MessageDigest md = MessageDigest.getInstance(digest); + + md.reset(); + + if (salt != null) + { + md.update(salt); + } + + input = md.digest(value.getBytes(ENCODING)); + + if (iterations > 0) + { + for (int i = 0; i < iterations; i++) + { + md.reset(); + input = md.digest(input); + } + } + } + catch (UnsupportedEncodingException ex) + { + throw new SecurityException("unknown encoding", ex); + } + catch (NoSuchAlgorithmException ex) + { + throw new SecurityException("unknown digest", ex); + } + + return input; + } + + /** + * Method description + * + * + * @return + */ + @Override + public String toHexString() + { + return Util.toString(toByteArray()); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public String getHexSalt() + { + String hexSalt = null; + + if (salt != null) + { + hexSalt = Util.toString(salt); + } + + return hexSalt; + } + + /** + * Method description + * + * + * @return + */ + @Override + public byte[] getSalt() + { + return salt; + } + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param iterations + * + * @return + */ + @Override + public HashBuilder setIterations(int iterations) + { + this.iterations = iterations; + + return this; + } + + /** + * Method description + * + * + * @param salt + * + * @return + */ + @Override + public HashBuilder setSalt(byte[] salt) + { + this.salt = salt; + + return this; + } + + /** + * Method description + * + * + * @param value + * + * @return + */ + @Override + public HashBuilder setValue(String value) + { + this.value = value; + + return this; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private String digest; + + /** Field description */ + private int iterations; + + /** Field description */ + private byte[] salt; + + /** Field description */ + private String value; +} diff --git a/scm-core/src/main/java/sonia/scm/security/SHA1HashBuilder.java b/scm-core/src/main/java/sonia/scm/security/SHA1HashBuilder.java new file mode 100644 index 0000000000..3f58e35232 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/SHA1HashBuilder.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + * @since 1.13 + */ +public class SHA1HashBuilder extends MessageDigestHashBuilder +{ + + /** Field description */ + public static final String DIGEST = "SHA-1"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public SHA1HashBuilder() + { + super(DIGEST, null, null, 0); + } + + /** + * Constructs ... + * + * + * @param value + */ + public SHA1HashBuilder(String value) + { + super(DIGEST, value, null, 0); + } + + /** + * Constructs ... + * + * + * @param value + * @param salt + */ + public SHA1HashBuilder(String value, byte[] salt) + { + super(DIGEST, value, salt, 0); + } + + /** + * Constructs ... + * + * + * @param value + * @param salt + * @param iterations + */ + public SHA1HashBuilder(String value, byte[] salt, int iterations) + { + super(DIGEST, value, salt, iterations); + } +} diff --git a/scm-core/src/main/java/sonia/scm/security/SHA512HashBuilder.java b/scm-core/src/main/java/sonia/scm/security/SHA512HashBuilder.java new file mode 100644 index 0000000000..eb933db122 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/SHA512HashBuilder.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + * @since 1.13 + */ +public class SHA512HashBuilder extends MessageDigestHashBuilder +{ + + /** Field description */ + public static final String DIGEST = "SHA-512"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public SHA512HashBuilder() + { + super(DIGEST, null, null, 0); + } + + /** + * Constructs ... + * + * + * @param value + */ + public SHA512HashBuilder(String value) + { + super(DIGEST, value, null, 0); + } + + /** + * Constructs ... + * + * + * @param value + * @param salt + */ + public SHA512HashBuilder(String value, byte[] salt) + { + super(DIGEST, value, salt, 0); + } + + /** + * Constructs ... + * + * + * @param value + * @param salt + * @param iterations + */ + public SHA512HashBuilder(String value, byte[] salt, int iterations) + { + super(DIGEST, value, salt, iterations); + } +} diff --git a/scm-core/src/test/java/sonia/scm/security/HashBuilderTestBase.java b/scm-core/src/test/java/sonia/scm/security/HashBuilderTestBase.java new file mode 100644 index 0000000000..035f5aa6cf --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/security/HashBuilderTestBase.java @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.junit.Test; + +import static org.hamcrest.Matchers.*; + +import static org.junit.Assert.*; + +/** + * + * @author Sebastian Sdorra + */ +public abstract class HashBuilderTestBase +{ + + /** + * Method description + * + * + * @return + */ + public abstract HashBuilder createHashBuilder(); + + /** + * Method description + * + */ + @Test + public void testCreateIteratedSaltedHash() + { + HashBuilder hashBuilder = createHashBuilder(); + String hash = hashBuilder.setIterations(1000).createSalt().setValue( + "hitcheker").toHexString(); + byte[] salt = hashBuilder.getSalt(); + + hashBuilder = createHashBuilder(); + + String otherHash = hashBuilder.setIterations(1000).setSalt(salt).setValue( + "hitcheker").toHexString(); + + checkHash("hitcheker", hash, otherHash); + } + + /** + * Method description + * + */ + @Test + public void testCreateSalt() + { + HashBuilder hashBuilder = createHashBuilder(); + + assertNotNull(hashBuilder); + + byte[] salt = hashBuilder.createSalt().getSalt(); + + assertNotNull(salt); + + byte[] otherSalt = hashBuilder.createSalt().getSalt(); + + assertNotNull(otherSalt); + assertEquals(salt.length, otherSalt.length); + assertThat(salt, not(equalTo(otherSalt))); + salt = hashBuilder.createSalt(4).getSalt(); + assertEquals(4, salt.length); + } + + /** + * Method description + * + */ + @Test + public void testCreateSaltedHash() + { + HashBuilder hashBuilder = createHashBuilder(); + String hash = hashBuilder.createSalt().setValue("hitcheker").toHexString(); + byte[] salt = hashBuilder.getSalt(); + + hashBuilder = createHashBuilder(); + + String otherHash = + hashBuilder.setSalt(salt).setValue("hitcheker").toHexString(); + + checkHash("hitcheker", hash, otherHash); + } + + /** + * Method description + * + */ + @Test + public void testCreateSimpleHash() + { + HashBuilder hashBuilder = createHashBuilder(); + String hash = hashBuilder.setValue("hitcheker").toHexString(); + + hashBuilder = createHashBuilder(); + + String otherHash = hashBuilder.setValue("hitcheker").toHexString(); + + checkHash("hitcheker", hash, otherHash); + } + + /** + * Method description + * + * + * @param plain + * @param hash + * @param otherHash + */ + private void checkHash(String plain, String hash, String otherHash) + { + assertNotNull(hash); + assertThat(hash, not(equalTo("hitcheker"))); + assertNotNull(otherHash); + assertThat(otherHash, not(equalTo("hitcheker"))); + assertEquals(hash, otherHash); + } +} diff --git a/scm-core/src/test/java/sonia/scm/security/MD5HashBuilderTest.java b/scm-core/src/test/java/sonia/scm/security/MD5HashBuilderTest.java new file mode 100644 index 0000000000..45a0aa40a2 --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/security/MD5HashBuilderTest.java @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + */ +public class MD5HashBuilderTest extends HashBuilderTestBase +{ + + /** + * Method description + * + * + * @return + */ + @Override + public HashBuilder createHashBuilder() + { + return new MD5HashBuilder(); + } +} diff --git a/scm-core/src/test/java/sonia/scm/security/SHA1HashBuilderTest.java b/scm-core/src/test/java/sonia/scm/security/SHA1HashBuilderTest.java new file mode 100644 index 0000000000..cf969d6a4a --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/security/SHA1HashBuilderTest.java @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + */ +public class SHA1HashBuilderTest extends HashBuilderTestBase +{ + + /** + * Method description + * + * + * @return + */ + @Override + public HashBuilder createHashBuilder() + { + return new SHA1HashBuilder(); + } +} diff --git a/scm-core/src/test/java/sonia/scm/security/SHA512HashBuilderTest.java b/scm-core/src/test/java/sonia/scm/security/SHA512HashBuilderTest.java new file mode 100644 index 0000000000..b8e3fab895 --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/security/SHA512HashBuilderTest.java @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.security; + +/** + * + * @author Sebastian Sdorra + */ +public class SHA512HashBuilderTest extends HashBuilderTestBase +{ + + /** + * Method description + * + * + * @return + */ + @Override + public HashBuilder createHashBuilder() + { + return new SHA512HashBuilder(); + } +}