package org.bouncycastle.cms; import java.io.InputStream; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.operator.InputDecryptor; import org.bouncycastle.operator.MacCalculator; import org.bouncycastle.util.io.TeeInputStream; public class RecipientOperator { private final AlgorithmIdentifier algorithmIdentifier; private final Object operator; public RecipientOperator(InputDecryptor decryptor) { this.algorithmIdentifier = decryptor.getAlgorithmIdentifier(); this.operator = decryptor; } public RecipientOperator(MacCalculator macCalculator) { this.algorithmIdentifier = macCalculator.getAlgorithmIdentifier(); this.operator = macCalculator; } public InputStream getInputStream(InputStream dataIn) { if (operator instanceof InputDecryptor) { return ((InputDecryptor)operator).getInputStream(dataIn); } else { return new TeeInputStream(dataIn, ((MacCalculator)operator).getOutputStream()); } } public boolean isMacBased() { return operator instanceof MacCalculator; } public byte[] getMac() { return ((MacCalculator)operator).getMac(); } }