package org.bouncycastle.cms.bc; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.cms.CMSException; import org.bouncycastle.cms.KEKRecipient; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.operator.OperatorException; import org.bouncycastle.operator.SymmetricKeyUnwrapper; import org.bouncycastle.operator.bc.BcSymmetricKeyUnwrapper; public abstract class BcKEKRecipient implements KEKRecipient { private SymmetricKeyUnwrapper unwrapper; public BcKEKRecipient(BcSymmetricKeyUnwrapper unwrapper) { this.unwrapper = unwrapper; } protected CipherParameters extractSecretKey(AlgorithmIdentifier keyEncryptionAlgorithm, AlgorithmIdentifier contentEncryptionAlgorithm, byte[] encryptedContentEncryptionKey) throws CMSException { try { return CMSUtils.getBcKey(unwrapper.generateUnwrappedKey(contentEncryptionAlgorithm, encryptedContentEncryptionKey)); } catch (OperatorException e) { throw new CMSException("exception unwrapping key: " + e.getMessage(), e); } } }