com.fitbur.bouncycastle.operator.bc.BcAsymmetricKeyUnwrapper Maven / Gradle / Ivy
package com.fitbur.bouncycastle.operator.bc;
import com.fitbur.bouncycastle.asn1.ASN1ObjectIdentifier;
import com.fitbur.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import com.fitbur.bouncycastle.asn1.x509.AlgorithmIdentifier;
import com.fitbur.bouncycastle.crypto.AsymmetricBlockCipher;
import com.fitbur.bouncycastle.crypto.InvalidCipherTextException;
import com.fitbur.bouncycastle.crypto.params.AsymmetricKeyParameter;
import com.fitbur.bouncycastle.operator.AsymmetricKeyUnwrapper;
import com.fitbur.bouncycastle.operator.GenericKey;
import com.fitbur.bouncycastle.operator.OperatorException;
public abstract class BcAsymmetricKeyUnwrapper
extends AsymmetricKeyUnwrapper
{
private AsymmetricKeyParameter privateKey;
public BcAsymmetricKeyUnwrapper(AlgorithmIdentifier encAlgId, AsymmetricKeyParameter privateKey)
{
super(encAlgId);
this.privateKey = privateKey;
}
public GenericKey generateUnwrappedKey(AlgorithmIdentifier encryptedKeyAlgorithm, byte[] encryptedKey)
throws OperatorException
{
AsymmetricBlockCipher keyCipher = createAsymmetricUnwrapper(this.getAlgorithmIdentifier().getAlgorithm());
keyCipher.init(false, privateKey);
try
{
byte[] key = keyCipher.processBlock(encryptedKey, 0, encryptedKey.length);
if (encryptedKeyAlgorithm.getAlgorithm().equals(PKCSObjectIdentifiers.com.fitburs_EDE3_CBC))
{
return new GenericKey(encryptedKeyAlgorithm, key);
}
else
{
return new GenericKey(encryptedKeyAlgorithm, key);
}
}
catch (InvalidCipherTextException e)
{
throw new OperatorException("unable to recover secret key: " + e.getMessage(), e);
}
}
protected abstract AsymmetricBlockCipher createAsymmetricUnwrapper(ASN1ObjectIdentifier algorithm);
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy