// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.pkcs;

import org.bouncycastle.asn1.ASN1Set;
import org.bouncycastle.asn1.pkcs.Attribute;
import org.bouncycastle.asn1.DERSet;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;

public class DeltaCertificateRequestAttributeValueBuilder
{
    private final SubjectPublicKeyInfo subjectPublicKey;
    private AlgorithmIdentifier signatureAlgorithm;
    private X500Name subject;
    
    public DeltaCertificateRequestAttributeValueBuilder(final SubjectPublicKeyInfo subjectPublicKey) {
        this.subjectPublicKey = subjectPublicKey;
    }
    
    public DeltaCertificateRequestAttributeValueBuilder setSignatureAlgorithm(final AlgorithmIdentifier signatureAlgorithm) {
        this.signatureAlgorithm = signatureAlgorithm;
        return this;
    }
    
    public DeltaCertificateRequestAttributeValueBuilder setSubject(final X500Name subject) {
        this.subject = subject;
        return this;
    }
    
    public DeltaCertificateRequestAttributeValue build() {
        final ASN1EncodableVector asn1EncodableVector = new ASN1EncodableVector();
        if (this.subject != null) {
            asn1EncodableVector.add(new DERTaggedObject(true, 0, this.subject));
        }
        asn1EncodableVector.add(this.subjectPublicKey);
        if (this.signatureAlgorithm != null) {
            asn1EncodableVector.add(new DERTaggedObject(true, 2, this.signatureAlgorithm));
        }
        return new DeltaCertificateRequestAttributeValue(new Attribute(new ASN1ObjectIdentifier("2.16.840.1.114027.80.6.2"), new DERSet(new DERSequence(asn1EncodableVector))));
    }
}
