blob: f8df3b6170e7af91438a7c80459561f3b1b88795 [file] [log] [blame]
package org.bouncycastle.operator.bc;
import java.security.SecureRandom;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.crypto.InvalidCipherTextException;
import org.bouncycastle.crypto.Wrapper;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.operator.GenericKey;
import org.bouncycastle.operator.OperatorException;
import org.bouncycastle.operator.SymmetricKeyUnwrapper;
public class BcSymmetricKeyUnwrapper
extends SymmetricKeyUnwrapper
{
private SecureRandom random;
private Wrapper wrapper;
private KeyParameter wrappingKey;
public BcSymmetricKeyUnwrapper(AlgorithmIdentifier wrappingAlgorithm, Wrapper wrapper, KeyParameter wrappingKey)
{
super(wrappingAlgorithm);
this.wrapper = wrapper;
this.wrappingKey = wrappingKey;
}
public BcSymmetricKeyUnwrapper setSecureRandom(SecureRandom random)
{
this.random = random;
return this;
}
public GenericKey generateUnwrappedKey(AlgorithmIdentifier encryptedKeyAlgorithm, byte[] encryptedKey)
throws OperatorException
{
wrapper.init(false, wrappingKey);
try
{
return new GenericKey(encryptedKeyAlgorithm, wrapper.unwrap(encryptedKey, 0, encryptedKey.length));
}
catch (InvalidCipherTextException e)
{
throw new OperatorException("unable to unwrap key: " + e.getMessage(), e);
}
}
}