001/****************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one   *
003 * or more contributor license agreements.  See the NOTICE file *
004 * distributed with this work for additional information        *
005 * regarding copyright ownership.  The ASF licenses this file   *
006 * to you under the Apache License, Version 2.0 (the            *
007 * "License"); you may not use this file except in compliance   *
008 * with the License.  You may obtain a copy of the License at   *
009 *                                                              *
010 *   http://www.apache.org/licenses/LICENSE-2.0                 *
011 *                                                              *
012 * Unless required by applicable law or agreed to in writing,   *
013 * software distributed under the License is distributed on an  *
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
015 * KIND, either express or implied.  See the License for the    *
016 * specific language governing permissions and limitations      *
017 * under the License.                                           *
018 ****************************************************************/
019package org.apache.james.mailbox.jpa.mail.model.openjpa;
020
021import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
022
023/**
024 * Helper class for encrypt and de-crypt data
025 * 
026 *
027 */
028public class EncryptDecryptHelper {    
029
030    // Use one static instance as it is thread safe
031    private static StandardPBEByteEncryptor encryptor = new StandardPBEByteEncryptor();
032    
033    
034    /**
035     * Set the password for encrypt / de-crypt. This MUST be done before
036     * the usage of {@link #getDecrypted(byte[])} and {@link #getEncrypted(byte[])}.
037     * 
038     * So to be safe its the best to call this in a constructor
039     * 
040     * @param pass
041     */
042    public static void init(String pass) {
043        encryptor.setPassword(pass);
044    }
045
046    /**
047     * Encrypt the given array and return the encrypted one
048     * 
049     * @param array
050     * @return enc-array
051     */
052    public static byte[] getEncrypted(byte[] array) {
053        return encryptor.encrypt(array);
054    }
055
056    /**
057     * Decrypt the given array and return the de-crypted one
058     * 
059     * @param array
060     * @return dec-array
061     */
062    public static byte[] getDecrypted(byte[] array) {
063        return encryptor.decrypt(array);
064    }
065
066}