| 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); |
| } |
| } |
| } |