package org.bouncycastle.cms;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.cms.KEKIdentifier;
import org.bouncycastle.asn1.cms.KEKRecipientInfo;
import org.bouncycastle.asn1.cms.RecipientInfo;
import org.bouncycastle.operator.GenericKey;
import org.bouncycastle.operator.OperatorException;
import org.bouncycastle.operator.SymmetricKeyWrapper;
public abstract class KEKRecipientInfoGenerator
implements RecipientInfoGenerator
{
private final KEKIdentifier kekIdentifier;
protected final SymmetricKeyWrapper wrapper;
protected KEKRecipientInfoGenerator(KEKIdentifier kekIdentifier, SymmetricKeyWrapper wrapper)
{
this.kekIdentifier = kekIdentifier;
this.wrapper = wrapper;
}
public final RecipientInfo generate(GenericKey contentEncryptionKey)
throws CMSException
{
try
{
ASN1OctetString encryptedKey = new DEROctetString(wrapper.generateWrappedKey(contentEncryptionKey));
return new RecipientInfo(new KEKRecipientInfo(kekIdentifier, wrapper.getAlgorithmIdentifier(), encryptedKey));
}
catch (OperatorException e)
{
throw new CMSException("exception wrapping content key: " + e.getMessage(), e);
}
}
}