1
package org.bouncycastle.cms.jcajce;
3
import java.security.Key;
4
import java.security.Provider;
6
import javax.crypto.SecretKey;
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;
17
public abstract class JceKEKRecipient
18
implements KEKRecipient
20
private SecretKey recipientKey;
22
protected EnvelopedDataHelper helper = new EnvelopedDataHelper(new DefaultJcaJceHelper());
23
protected EnvelopedDataHelper contentHelper = helper;
25
public JceKEKRecipient(SecretKey recipientKey)
27
this.recipientKey = recipientKey;
31
* Set the provider to use for key recovery and content processing.
33
* @param provider provider to use.
34
* @return this recipient.
36
public JceKEKRecipient setProvider(Provider provider)
38
this.helper = new EnvelopedDataHelper(new ProviderJcaJceHelper(provider));
39
this.contentHelper = helper;
45
* Set the provider to use for key recovery and content processing.
47
* @param providerName the name of the provider to use.
48
* @return this recipient.
50
public JceKEKRecipient setProvider(String providerName)
52
this.helper = new EnvelopedDataHelper(new NamedJcaJceHelper(providerName));
53
this.contentHelper = helper;
59
* Set the provider to use for content processing.
61
* @param provider the provider to use.
62
* @return this recipient.
64
public JceKEKRecipient setContentProvider(Provider provider)
66
this.contentHelper = new EnvelopedDataHelper(new ProviderJcaJceHelper(provider));
72
* Set the provider to use for content processing.
74
* @param providerName the name of the provider to use.
75
* @return this recipient.
77
public JceKEKRecipient setContentProvider(String providerName)
79
this.contentHelper = new EnvelopedDataHelper(new NamedJcaJceHelper(providerName));
84
protected Key extractSecretKey(AlgorithmIdentifier keyEncryptionAlgorithm, AlgorithmIdentifier contentEncryptionAlgorithm, byte[] encryptedContentEncryptionKey)
87
SymmetricKeyUnwrapper unwrapper = helper.createSymmetricUnwrapper(keyEncryptionAlgorithm, recipientKey);
91
return CMSUtils.getJceKey(unwrapper.generateUnwrappedKey(contentEncryptionAlgorithm, encryptedContentEncryptionKey));
93
catch (OperatorException e)
95
throw new CMSException("exception unwrapping key: " + e.getMessage(), e);