001    /*
002     * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org
003     * Copyright (C) 2011 NightLabs Consulting GmbH
004     *
005     * This program is free software: you can redistribute it and/or modify
006     * it under the terms of the GNU Affero General Public License as
007     * published by the Free Software Foundation, either version 3 of the
008     * License, or (at your option) any later version.
009     *
010     * This program is distributed in the hope that it will be useful,
011     * but WITHOUT ANY WARRANTY; without even the implied warranty of
012     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013     * GNU Affero General Public License for more details.
014     *
015     * You should have received a copy of the GNU Affero General Public License
016     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
017     */
018    package org.cumulus4j.store.crypto.keymanager;
019    
020    import java.util.Date;
021    
022    import org.cumulus4j.crypto.Cipher;
023    
024    /**
025     * {@link CryptoCache}-entry wrapping a {@link Cipher} used for secret-key-decryption.
026     * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
027     */
028    public class CryptoCacheKeyDecrypterEntry
029    {
030            private CryptoCacheKeyEncryptionKeyEntry keyEncryptionKey;
031    
032            private String keyEncryptionTransformation;
033    
034            private Cipher keyDecryptor;
035    
036            private volatile Date lastUsageTimestamp = new Date();
037    
038            /**
039             * Create a new instance.
040             * @param keyEncryptionKey corresponding key-pair-entry.
041             * @param keyEncryptionTransformation the (public-private-key-pair-)transformation used to encrypt the secret keys used for symmetric encryption/decryption of the actual data.
042             * @param keyDecryptor the cipher.
043             */
044            protected CryptoCacheKeyDecrypterEntry(CryptoCacheKeyEncryptionKeyEntry keyEncryptionKey, String keyEncryptionTransformation, Cipher keyDecryptor)
045            {
046                    if (keyEncryptionKey == null)
047                            throw new IllegalArgumentException("keyEncryptionKey == null");
048    
049                    if (keyEncryptionTransformation == null)
050                            throw new IllegalArgumentException("keyEncryptionTransformation == null");
051    
052                    if (keyDecryptor == null)
053                            throw new IllegalArgumentException("keyDecryptor == null");
054    
055                    this.keyEncryptionKey = keyEncryptionKey;
056                    this.keyEncryptionTransformation = keyEncryptionTransformation;
057                    this.keyDecryptor = keyDecryptor;
058            }
059    
060            public CryptoCacheKeyEncryptionKeyEntry getKeyEncryptionKey() {
061                    return keyEncryptionKey;
062            }
063    
064            /**
065             * Get the (public-private-key-pair-)transformation used to encrypt the secret keys used for symmetric en-/decryption
066             * of the actual data.
067             * @return the (public-private-key-pair-)transformation used to encrypt the secret keys used for symmetric en-/decryption
068             * of the actual data.
069             */
070            public String getKeyEncryptionTransformation() {
071                    return keyEncryptionTransformation;
072            }
073    
074            /**
075             * Get the cipher.
076             * @return the cipher.
077             */
078            public Cipher getKeyDecryptor() {
079                    return keyDecryptor;
080            }
081    
082            /**
083             * Get the timestamp when the cipher was used the last time.
084             * @return the timestamp when the cipher was used the last time.
085             */
086            public Date getLastUsageTimestamp() {
087                    return lastUsageTimestamp;
088            }
089    
090            /**
091             * Update the {@link #getLastUsageTimestamp() lastUsageTimestamp} (set it to NOW).
092             */
093            public void updateLastUsageTimestamp() {
094                    this.lastUsageTimestamp = new Date();
095            }
096    }