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 import org.cumulus4j.crypto.CryptoRegistry; 024 025 /** 026 * {@link CryptoCache}-entry wrapping a {@link Cipher} used for symmetric data-en-/decryption. 027 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de 028 */ 029 public class CryptoCacheCipherEntry 030 { 031 private CryptoCacheKeyEntry keyEntry; 032 private String cipherTransformation; 033 private Cipher cipher; 034 035 private Date lastUsageTimestamp = new Date(); 036 037 /** 038 * Create a new instance. 039 * @param keyEntry the corresponding key-entry. Must not be <code>null</code>. 040 * @param cipherTransformation the transformation (as passed to {@link CryptoRegistry#createCipher(String)}). Must not be <code>null</code>. 041 * @param cipher the cipher. Must not be <code>null</code>. 042 */ 043 protected CryptoCacheCipherEntry(CryptoCacheKeyEntry keyEntry, String cipherTransformation, Cipher cipher) 044 { 045 if (keyEntry == null) 046 throw new IllegalArgumentException("keyEntry == null"); 047 048 if (cipherTransformation == null) 049 throw new IllegalArgumentException("cipherTransformation == null"); 050 051 if (cipher == null) 052 throw new IllegalArgumentException("cipher == null"); 053 054 this.keyEntry = keyEntry; 055 this.cipherTransformation = cipherTransformation; 056 this.cipher = cipher; 057 } 058 059 /** 060 * Create a new instance copying an old one. Used to refresh an existing entry (as it assigns a new 061 * {@link #getLastUsageTimestamp() lastUsageTimestamp}) while keeping this class immutable. 062 * @param keyEntry the key-entry. 063 * @param original the original from which to copy. 064 */ 065 protected CryptoCacheCipherEntry(CryptoCacheKeyEntry keyEntry, CryptoCacheCipherEntry original) 066 { 067 this(keyEntry, original.getCipherTransformation(), original.getCipher()); 068 } 069 070 /** 071 * Get the corresponding key-entry. 072 * @return the corresponding key-entry; never <code>null</code>. 073 */ 074 public CryptoCacheKeyEntry getKeyEntry() { 075 return keyEntry; 076 } 077 078 /** 079 * Get the transformation (as passed to {@link CryptoRegistry#createCipher(String)}). 080 * @return the transformation (as passed to {@link CryptoRegistry#createCipher(String)}); never <code>null</code>. 081 */ 082 public String getCipherTransformation() { 083 return cipherTransformation; 084 } 085 086 /** 087 * Get the cipher. 088 * @return the cipher; never <code>null</code>. 089 */ 090 public Cipher getCipher() { 091 return cipher; 092 } 093 094 /** 095 * Get the timestamp when the cipher was used the last time. 096 * @return the timestamp when the cipher was used the last time. 097 */ 098 public Date getLastUsageTimestamp() { 099 return lastUsageTimestamp; 100 } 101 }