From ef94584be6111fc14d812c630fa733adcef0e1e5 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 3 Sep 2011 16:47:37 +0200 Subject: [PATCH] added cipher api --- .../sonia/scm/security/CipherException.java | 86 +++++++++++++++++ .../sonia/scm/security/CipherHandler.java | 66 +++++++++++++ .../sonia/scm/security/CipherSingleton.java | 94 +++++++++++++++++++ .../java/sonia/scm/security/KeyGenerator.java | 51 ++++++++++ .../sonia/scm/xml/XmlCipherStringAdapter.java | 83 ++++++++++++++++ 5 files changed, 380 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/security/CipherException.java create mode 100644 scm-core/src/main/java/sonia/scm/security/CipherHandler.java create mode 100644 scm-core/src/main/java/sonia/scm/security/CipherSingleton.java create mode 100644 scm-core/src/main/java/sonia/scm/security/KeyGenerator.java create mode 100644 scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java diff --git a/scm-core/src/main/java/sonia/scm/security/CipherException.java b/scm-core/src/main/java/sonia/scm/security/CipherException.java new file mode 100644 index 0000000000..21a5d62799 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/CipherException.java @@ -0,0 +1,86 @@ +/** + * 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.7 + */ +public class CipherException extends RuntimeException +{ + + /** + * Constructs ... + * + */ + public CipherException() + { + super(); + } + + /** + * Constructs ... + * + * + * @param message + */ + public CipherException(String message) + { + super(message); + } + + /** + * Constructs ... + * + * + * @param cause + */ + public CipherException(Throwable cause) + { + super(cause); + } + + /** + * Constructs ... + * + * + * @param message + * @param cause + */ + public CipherException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/scm-core/src/main/java/sonia/scm/security/CipherHandler.java b/scm-core/src/main/java/sonia/scm/security/CipherHandler.java new file mode 100644 index 0000000000..3703dc3336 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/CipherHandler.java @@ -0,0 +1,66 @@ +/** + * 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; + +import com.google.inject.Singleton; + +/** + * + * @author Sebastian Sdorra + * @since 1.7 + */ +@Singleton +public interface CipherHandler +{ + + /** + * Method description + * + * + * @param value + * + * @return + */ + public String decode(String value); + + /** + * Method description + * + * + * @param value + * + * @return + */ + public String encode(String value); +} diff --git a/scm-core/src/main/java/sonia/scm/security/CipherSingleton.java b/scm-core/src/main/java/sonia/scm/security/CipherSingleton.java new file mode 100644 index 0000000000..3fde6cf6c9 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/CipherSingleton.java @@ -0,0 +1,94 @@ +/** + * 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 CipherSingleton +{ + + /** Field description */ + private static CipherHandler cipherHandler; + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param value + * + * @return + */ + public static String decode(String value) + { + if (cipherHandler == null) + { + throw new CipherException("CipherSingleton is not initialized"); + } + + return cipherHandler.decode(value); + } + + /** + * Method description + * + * + * @param value + * + * @return + */ + public static String encode(String value) + { + if (cipherHandler == null) + { + throw new CipherException("CipherSingleton is not initialized"); + } + + return cipherHandler.encode(value); + } + + /** + * Method description + * + * + * @param handler + */ + public static void init(CipherHandler handler) + { + cipherHandler = handler; + } +} diff --git a/scm-core/src/main/java/sonia/scm/security/KeyGenerator.java b/scm-core/src/main/java/sonia/scm/security/KeyGenerator.java new file mode 100644 index 0000000000..e7fd82075b --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/security/KeyGenerator.java @@ -0,0 +1,51 @@ +/** + * 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.7 + */ +public interface KeyGenerator +{ + + /** + * Method description + * + * + * @return + */ + public String createKey(); +} diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java new file mode 100644 index 0000000000..77bac02189 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java @@ -0,0 +1,83 @@ +/** + * 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.xml; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.security.CipherSingleton; + +//~--- JDK imports ------------------------------------------------------------ + +import javax.xml.bind.annotation.adapters.XmlAdapter; + +/** + * + * @author Sebastian Sdorra + * @since 1.7 + */ +public class XmlCipherStringAdapter extends XmlAdapter +{ + + /** + * Method description + * + * + * @param v + * + * @return + * + * @throws Exception + */ + @Override + public String marshal(String v) throws Exception + { + return CipherSingleton.encode(v); + } + + /** + * Method description + * + * + * @param v + * + * @return + * + * @throws Exception + */ + @Override + public String unmarshal(String v) throws Exception + { + return CipherSingleton.decode(v); + } +}