org.bouncycastle.cms.KeyTransRecipientInfoGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcmail-jdk16 Show documentation
Show all versions of bcmail-jdk16 Show documentation
The Bouncy Castle Java CMS and S/MIME APIs for handling the CMS and S/MIME protocols. This jar contains CMS and S/MIME APIs for JDK 1.6. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs. If the S/MIME API is used, the JavaMail API and the Java activation framework will also be needed.
The newest version!
package org.bouncycastle.cms;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.cms.IssuerAndSerialNumber;
import org.bouncycastle.asn1.cms.KeyTransRecipientInfo;
import org.bouncycastle.asn1.cms.RecipientIdentifier;
import org.bouncycastle.asn1.cms.RecipientInfo;
import org.bouncycastle.operator.AsymmetricKeyWrapper;
import org.bouncycastle.operator.GenericKey;
import org.bouncycastle.operator.OperatorException;
public abstract class KeyTransRecipientInfoGenerator
implements RecipientInfoGenerator
{
protected final AsymmetricKeyWrapper wrapper;
private IssuerAndSerialNumber issuerAndSerial;
private byte[] subjectKeyIdentifier;
protected KeyTransRecipientInfoGenerator(IssuerAndSerialNumber issuerAndSerial, AsymmetricKeyWrapper wrapper)
{
this.issuerAndSerial = issuerAndSerial;
this.wrapper = wrapper;
}
protected KeyTransRecipientInfoGenerator(byte[] subjectKeyIdentifier, AsymmetricKeyWrapper wrapper)
{
this.subjectKeyIdentifier = subjectKeyIdentifier;
this.wrapper = wrapper;
}
public final RecipientInfo generate(GenericKey contentEncryptionKey)
throws CMSException
{
byte[] encryptedKeyBytes;
try
{
encryptedKeyBytes = wrapper.generateWrappedKey(contentEncryptionKey);
}
catch (OperatorException e)
{
throw new CMSException("exception wrapping content key: " + e.getMessage(), e);
}
RecipientIdentifier recipId;
if (issuerAndSerial != null)
{
recipId = new RecipientIdentifier(issuerAndSerial);
}
else
{
recipId = new RecipientIdentifier(new DEROctetString(subjectKeyIdentifier));
}
return new RecipientInfo(new KeyTransRecipientInfo(recipId, wrapper.getAlgorithmIdentifier(),
new DEROctetString(encryptedKeyBytes)));
}
}