diff options
Diffstat (limited to 'pkix/src/main/java/org/spongycastle/cms/bc/BcKEKRecipient.java')
-rw-r--r-- | pkix/src/main/java/org/spongycastle/cms/bc/BcKEKRecipient.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/pkix/src/main/java/org/spongycastle/cms/bc/BcKEKRecipient.java b/pkix/src/main/java/org/spongycastle/cms/bc/BcKEKRecipient.java new file mode 100644 index 00000000..066deaa6 --- /dev/null +++ b/pkix/src/main/java/org/spongycastle/cms/bc/BcKEKRecipient.java @@ -0,0 +1,33 @@ +package org.spongycastle.cms.bc; + +import org.spongycastle.asn1.x509.AlgorithmIdentifier; +import org.spongycastle.cms.CMSException; +import org.spongycastle.cms.KEKRecipient; +import org.spongycastle.crypto.CipherParameters; +import org.spongycastle.operator.OperatorException; +import org.spongycastle.operator.SymmetricKeyUnwrapper; +import org.spongycastle.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); + } + } +} |