~brian-thomason/+junk/bouncycastle

« back to all changes in this revision

Viewing changes to src/org/bouncycastle/cms/jcajce/JceKEKRecipient.java

  • Committer: Brian Thomason
  • Date: 2011-12-20 17:20:32 UTC
  • Revision ID: brian.thomason@canonical.com-20111220172032-rdtm13jgdxtksacr
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.bouncycastle.cms.jcajce;
 
2
 
 
3
import java.security.Key;
 
4
import java.security.Provider;
 
5
 
 
6
import javax.crypto.SecretKey;
 
7
 
 
8
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
 
9
import org.bouncycastle.cms.CMSException;
 
10
import org.bouncycastle.cms.KEKRecipient;
 
11
import org.bouncycastle.jcajce.DefaultJcaJceHelper;
 
12
import org.bouncycastle.jcajce.NamedJcaJceHelper;
 
13
import org.bouncycastle.jcajce.ProviderJcaJceHelper;
 
14
import org.bouncycastle.operator.OperatorException;
 
15
import org.bouncycastle.operator.SymmetricKeyUnwrapper;
 
16
 
 
17
public abstract class JceKEKRecipient
 
18
    implements KEKRecipient
 
19
{
 
20
    private SecretKey recipientKey;
 
21
 
 
22
    protected EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceHelper());
 
23
    protected EnvelopedDataHelper contentHelper = helper;
 
24
 
 
25
    public JceKEKRecipient(SecretKey recipientKey)
 
26
    {
 
27
        this.recipientKey = recipientKey;
 
28
    }
 
29
 
 
30
    /**
 
31
     * Set the provider to use for key recovery and content processing.
 
32
     *
 
33
     * @param provider provider to use.
 
34
     * @return this recipient.
 
35
     */
 
36
    public JceKEKRecipient setProvider(Provider provider)
 
37
    {
 
38
        this.helper = new EnvelopedDataHelper(new ProviderJcaJceHelper(provider));
 
39
        this.contentHelper = helper;
 
40
 
 
41
        return this;
 
42
    }
 
43
 
 
44
    /**
 
45
     * Set the provider to use for key recovery and content processing.
 
46
     *
 
47
     * @param providerName the name of the provider to use.
 
48
     * @return this recipient.
 
49
     */
 
50
    public JceKEKRecipient setProvider(String providerName)
 
51
    {
 
52
        this.helper = new EnvelopedDataHelper(new NamedJcaJceHelper(providerName));
 
53
        this.contentHelper = helper;
 
54
 
 
55
        return this;
 
56
    }
 
57
 
 
58
    /**
 
59
     * Set the provider to use for content processing.
 
60
     *
 
61
     * @param provider the provider to use.
 
62
     * @return this recipient.
 
63
     */
 
64
    public JceKEKRecipient setContentProvider(Provider provider)
 
65
    {
 
66
        this.contentHelper = new EnvelopedDataHelper(new ProviderJcaJceHelper(provider));
 
67
 
 
68
        return this;
 
69
    }
 
70
 
 
71
    /**
 
72
     * Set the provider to use for content processing.
 
73
     *
 
74
     * @param providerName the name of the provider to use.
 
75
     * @return this recipient.
 
76
     */
 
77
    public JceKEKRecipient setContentProvider(String providerName)
 
78
    {
 
79
        this.contentHelper = new EnvelopedDataHelper(new NamedJcaJceHelper(providerName));
 
80
 
 
81
        return this;
 
82
    }
 
83
 
 
84
    protected Key extractSecretKey(AlgorithmIdentifier keyEncryptionAlgorithm, AlgorithmIdentifier contentEncryptionAlgorithm, byte[] encryptedContentEncryptionKey)
 
85
        throws CMSException
 
86
    {
 
87
        SymmetricKeyUnwrapper unwrapper = helper.createSymmetricUnwrapper(keyEncryptionAlgorithm, recipientKey);
 
88
 
 
89
        try
 
90
        {
 
91
            return CMSUtils.getJceKey(unwrapper.generateUnwrappedKey(contentEncryptionAlgorithm, encryptedContentEncryptionKey));
 
92
        }
 
93
        catch (OperatorException e)
 
94
        {
 
95
            throw new CMSException("exception unwrapping key: " + e.getMessage(), e);
 
96
        }
 
97
    }
 
98
}