package org.bouncycastle.asn1.pkcs;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.DERObject;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
public class RSAESOAEPparams
extends ASN1Encodable
{
private AlgorithmIdentifier hashAlgorithm;
private AlgorithmIdentifier maskGenAlgorithm;
private AlgorithmIdentifier pSourceAlgorithm;
public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0]));
public static RSAESOAEPparams getInstance(
Object obj)
{
if (obj instanceof RSAESOAEPparams)
{
return (RSAESOAEPparams)obj;
}
else if (obj instanceof ASN1Sequence)
{
return new RSAESOAEPparams((ASN1Sequence)obj);
}
throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
}
public RSAESOAEPparams()
{
hashAlgorithm = DEFAULT_HASH_ALGORITHM;
maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION;
pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM;
}
public RSAESOAEPparams(
AlgorithmIdentifier hashAlgorithm,
AlgorithmIdentifier maskGenAlgorithm,
AlgorithmIdentifier pSourceAlgorithm)
{
this.hashAlgorithm = hashAlgorithm;
this.maskGenAlgorithm = maskGenAlgorithm;
this.pSourceAlgorithm = pSourceAlgorithm;
}
public RSAESOAEPparams(
ASN1Sequence seq)
{
hashAlgorithm = DEFAULT_HASH_ALGORITHM;
maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION;
pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM;
for (int i = 0; i != seq.size(); i++)
{
ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i);
switch (o.getTagNo())
{
case 0:
hashAlgorithm = AlgorithmIdentifier.getInstance(o, true);
break;
case 1:
maskGenAlgorithm = AlgorithmIdentifier.getInstance(o, true);
break;
case 2:
pSourceAlgorithm = AlgorithmIdentifier.getInstance(o, true);
break;
default:
throw new IllegalArgumentException("unknown tag");
}
}
}
public AlgorithmIdentifier getHashAlgorithm()
{
return hashAlgorithm;
}
public AlgorithmIdentifier getMaskGenAlgorithm()
{
return maskGenAlgorithm;
}
public AlgorithmIdentifier getPSourceAlgorithm()
{
return pSourceAlgorithm;
}
public DERObject toASN1Object()
{
ASN1EncodableVector v = new ASN1EncodableVector();
if (!hashAlgorithm.equals(DEFAULT_HASH_ALGORITHM))
{
v.add(new DERTaggedObject(true, 0, hashAlgorithm));
}
if (!maskGenAlgorithm.equals(DEFAULT_MASK_GEN_FUNCTION))
{
v.add(new DERTaggedObject(true, 1, maskGenAlgorithm));
}
if (!pSourceAlgorithm.equals(DEFAULT_P_SOURCE_ALGORITHM))
{
v.add(new DERTaggedObject(true, 2, pSourceAlgorithm));
}
return new DERSequence(v);
}
}