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.crypto;
019    
020    import org.bouncycastle.crypto.KeyGenerationParameters;
021    import org.bouncycastle.crypto.params.KeyParameter;
022    
023    /**
024     * Generator for secret keys to be used in <a target="_blank" href="http://en.wikipedia.org/wiki/Symmetric_encryption">symmetric encryption</a>.
025     *
026     * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
027     */
028    public interface SecretKeyGenerator
029    {
030            /**
031             * Initialise this <code>SecretKeyGenerator</code>. Implementations should
032             * be able to initialise with defaults, if no parameters are given (i.e. <code>params</code> being <code>null</code>).
033             * Usually, defaults mean to generate 256 bit keys.
034             * @param params the parameters or <code>null</code>, if defaults should be used.
035             */
036            void init(KeyGenerationParameters params);
037    
038            /**
039             * Generate random a secret key. Throws an {@link IllegalStateException}, if
040             * {@link #init(KeyGenerationParameters)} was not yet called.
041             * @return the newly created secret key; never <code>null</code>.
042             */
043            KeyParameter generateKey();
044    }