16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x500;
26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Sequence;
96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERSequence;
106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompublic class AttributeTypeAndValue
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{
146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private ASN1ObjectIdentifier type;
156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private ASN1Encodable       value;
166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private AttributeTypeAndValue(ASN1Sequence seq)
186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        type = (ASN1ObjectIdentifier)seq.getObjectAt(0);
206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        value = (ASN1Encodable)seq.getObjectAt(1);
216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static AttributeTypeAndValue getInstance(Object o)
246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (o instanceof AttributeTypeAndValue)
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return (AttributeTypeAndValue)o;
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        else if (o != null)
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return new AttributeTypeAndValue(ASN1Sequence.getInstance(o));
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        throw new IllegalArgumentException("null value in getInstance()");
356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public AttributeTypeAndValue(
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1ObjectIdentifier type,
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1Encodable value)
406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.type = type;
426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.value = value;
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public ASN1ObjectIdentifier getType()
466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return type;
486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public ASN1Encodable getValue()
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return value;
536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    /**
566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * <pre>
576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * AttributeTypeAndValue ::= SEQUENCE {
586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *           type         OBJECT IDENTIFIER,
596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *           value        ANY DEFINED BY type }
606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * </pre>
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @return a basic ASN.1 object representation.
626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     */
634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1EncodableVector v = new ASN1EncodableVector();
666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        v.add(type);
686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        v.add(value);
696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return new DERSequence(v);
716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom}
73