1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.crypto;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.SecureRandom;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/**
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * The base class for symmetric, or secret, cipher key generators.
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class CipherKeyGenerator
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected SecureRandom  random;
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    protected int           strength;
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * initialise the key generator.
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param param the parameters to be used for key generation
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public void init(
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        KeyGenerationParameters param)
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.random = param.getRandom();
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this.strength = (param.getStrength() + 7) / 8;
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * generate a secret key.
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @return a byte array containing the key value.
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public byte[] generateKey()
31b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        byte[]  key = new byte[strength];
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        random.nextBytes(key);
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return key;
37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
39